interagir avec les ampoules Philips Hue en HTTP (avec curl..)

Bon c’est vrai, Philips Hue c’est cher .. mais pour avoir testé par mal d’autres choses, il y a quand même deux avantages :

  • ca marche .. et ca marche bien. Ca fait simplement ce qu’on demande. L’appairage est facile, on peut appairer une ampoule à plusieurs télécommandes et plusieurs télécommandes à une ampoule .. finis les vas et viens ..
  • c’est documenté et bien documenté ! .. Donc tout ce que je vous dis la en fait vous le trouvez facilement ..

Reste donc plus qu’à traduire en curl pour faire les actions en scripts depuis votre raspberry. Vu que le pont hue va vous parler json, il est de bon ton d’installer jq, un utilitaire pour processer le json. Il faut aussi connaitre l’IP de votre pont hue ..

Avoir la liste des ampoules (et toutes les infos en fait) :

curl http://192.168.1.30/api/votreidavous/lights | jq -r

ou encore

curl http://192.168.1.30/api/votreidavous | jq -r “.lights”

avoir le nom de l’ampoule 8

curl http://192.168.1.30/api/votreidavous/lights/8 | jq -r ".name"

ou encore (celle ci j’ai mis du temps à la trouver)

curl http://192.168.1.30/api/votreidavous | jq -r “.lights.”8″.name”

avoir le statut (ON / OFF) de l’ampoule 8

curl http://192.168.1.30/api/votreidavous/lights/8 | jq -r ".state.on" | sed "{s/true/ON/;s/false/OFF/}

avoir la luminosité de l’ampoule 8

curl http://192.168.1.30/api/votreidavous/lights/8 | jq -r ".state.on"

Pour fixer les valeurs c’est un poil plus compliqué .. je pourrais expliquer si ca intéresse quelqu’un mais ca donne :

Pour éteindre (avec false sinon devinez ce qui se passe quand vous mettez true)

curl -X PUT http://192.168.1.30/api/votreidavous/lights/8/state -H "Content-Type: application/json" -d "{\"on\":false}"

Fixer la luminosité à 1 :

curl -X PUT http://192.168.1.30/api/votreidavous/lights/8/state -H "Content-Type: application/json" -d "{\"dim\":1}"

lire les trames RF avec RFlink depuis LINUX

RFlink est un super code qui décode à la volée les trame RF, les reconnait et les transmets .. à domoticz ..

Domoticz est un produit super … mais j’ai préféré m’en passer.

J’utilise pour ma part un script shell qui parse le fichier (oui sous LINUX l’arduino connecté en USB peut etre vu comme un fichier) et qui transmet les informations lues à mon site sur lequel un webservice REST tourne.

Pour commencer, comment paramétrer la lecture du “fichier” ou plutot du flux : on utilise pour cela la commande stty en lui donnant les bons paramètres

#8 data bits, 1 stop bit, no parity
/bin/stty -F /dev/ttyACM0 57600 sane -parenb cs8 -cstopb cread inlcr

Ensuite, on peut lire ou écrire, pour ma part je commande à désactiver le mode débug

echo "10;rfdebug=off;" >> /dev/ttyACM0

Enfin, on peut s’atteler à la lecture. Pour cela je fais une boucle infinie dans laquelle je vais décoder chaque ligne avec des awk. Cela permet de savoir quel type de trame on a (la variable what) et son la valeur de son id ..

/bin/cat /dev/ttyACM0 | while read line; do
  fullcontent=`/bin/echo ${line:4} | tr -d ' '`
  what=`/bin/echo $fullcontent | /usr/bin/awk -F";" '{print $2}'`
  id=`/bin/echo $fullcontent | /usr/bin/awk -F";" '{print $3}'`
  id=${id#ID=}
done

On suivra le meme principe en changement la commande pour récupérer, selon le type de trame, la température, la valeur du “switch”, de la commande, de la batterie .. Dans un prochain article je détaillerais comment, avec ce système, je récupère la valeur des sondes oregon ..