Wiz et OpenWRT
Contrôle d'une ampoule WiZ depuis OpenWRT
Les ampoules Phillips Wiz sont de bonnes candidates à remplacer les couteuses Phillips Hue. Cependant elles ne possèdent pas tout l'écosystème HUE et ne sont pas compatibles avec. (Contrairement aux dires d'un vendeur chez Leroy Merlin à qui je n'en veut pas car j'ai découvert des ampoules intéressantes).
Leu gros avantage c'est qu'elle se commandent et communiquent par des trames UDP en JSON. (Bon la sécurité est nulle il suffit de connaitre leur adresse IP pour leur balancer des commandes).
Le fait de les commander par un simple routeur OpenWRT style GLInet est assez tentant. C'est moins cher que de passer par l'écosystème HUE et on peut programmer simplement. Bon Phillips Hue est aussi un protocole connu sinon ouvert mais un peu plus complexe et sécurisé.
Prérequis
- Routeur OpenWRT avec accès root
- Paquet `socat` installé :
opkg update opkg install socat
- Adresse IP locale de l’ampoule WiZ (ex. 192.168.8.195)
Commandes de base
Éteindre l’ampoule
echo '{"method":"setPilot","params":{"state":false}}' | socat - UDP-DATAGRAM:192.168.8.195:38899
Allumer l’ampoule
echo '{"method":"setPilot","params":{"state":true}}' | socat - UDP-DATAGRAM:192.168.8.195:38899
Automatisation avec script
Créer un script `/root/wiz_off.sh` pour éteindre toutes les ampoules identifiées par leur nom DHCP :
#!/bin/sh
LEASES="/tmp/dhcp.leases"
CMD='{"method":"setPilot","params":{"state":false}}'
IPS=$(awk '$4 ~ /^wiz_/ {print $3}' "$LEASES")
for IP in $IPS; do
echo "$CMD" | socat - UDP-DATAGRAM:$IP:38899
done
Rendre le script exécutable :
chmod +x /root/wiz_off.sh
Programmation via crontab
Éteindre automatiquement les ampoules à minuit :
crontab -e
Ajouter :
0 0 * * * /root/wiz_off.sh > /dev/null 2>&1
Remarques techniques
- Le protocole utilisé est UDP, sans accusé de réception garanti.
- Les ampoules répondent généralement par un message JSON confirmant l’exécution.
- Il est possible d’écouter les échanges avec `tcpdump` :
tcpdump -i br-lan udp port 38899 -n -vvv -X
Pour avoir la sortie sur la console
tcpdump -s 65535 -w traces.pcap -i br-lan udp port 38899
Pour avoir un fichier traces.pcap lisible avec wireshark.
Ce système permet de "sniffer" les commandes transitant sur le réseau wifi et concernant le port 38899 des lampes. On peut s'en servir pour comprendre ce que fait l'application pour des commandes subtiles et les réutiliser.