Wiz et OpenWRT

De knowledge
(Redirigé depuis Wizz et OpenWRT)
Aller à la navigation Aller à la recherche

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.