« Wiz et OpenWRT » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
m Jpinon a déplacé la page Wizz et OpenWRT vers Wiz et OpenWRT
 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
= Contrôle d'une ampoule WiZ depuis OpenWRT =
= Contrôle d'une ampoule WiZ depuis OpenWRT =


Ce guide explique comment allumer ou éteindre une ampoule WiZ via un routeur OpenWRT en utilisant `socat` pour envoyer des commandes UDP.
Les ampoules Phillips Wiz sont de bonnes candidates à remplacer les couteuses [[PHILLIPS HUE|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 ==
== Prérequis ==
Ligne 20 : Ligne 24 :
== Automatisation avec script ==
== Automatisation avec script ==


Créer un script `/root/wiz_off.sh` pour éteindre toutes les ampoules identifiées par leur nom DHCP :
Créer un script `/root/wiz_off.sh` pour éteindre toutes les ampoules identifiées par leur nom DHCP :<syntaxhighlight lang="bash">
 
#!/bin/sh
#!/bin/sh
  LEASES="/tmp/dhcp.leases"
  LEASES="/tmp/dhcp.leases"
  CMD='{"method":"setPilot","params":{"state":false}}'
  CMD='{"method":"setPilot","params":{"state":false}}'
  IPS=$(awk '$4 ~ /^wiz_/ {print $3}' "$LEASES")
  IPS=$(awk '$4 ~ /^wiz_/ {print $3}' "$LEASES")


for IP in $IPS; do
for IP in $IPS; do
  echo "$CMD" | socat - UDP-DATAGRAM:$IP:38899
  echo "$CMD" | socat - UDP-DATAGRAM:$IP:38899
done
done
</syntaxhighlight>Rendre le script exécutable :<syntaxhighlight lang="bash">
chmod +x /root/wiz_off.sh
</syntaxhighlight>


Rendre le script exécutable :
== Programmation via crontab ==
chmod +x /root/wiz_off.sh
 
== 🕛 Programmation via crontab ==


Éteindre automatiquement les ampoules à minuit :
Éteindre automatiquement les ampoules à minuit :
Ligne 41 : Ligne 44 :
Ajouter :
Ajouter :
  0 0 * * * /root/wiz_off.sh > /dev/null 2>&1
  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<syntaxhighlight lang="bash">
tcpdump -s 65535 -w traces.pcap -i br-lan udp port 38899
</syntaxhighlight>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.

Dernière version du 13 septembre 2025 à 18:32

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.