Archives par étiquette : h801

H801 : vos LEDs RGB en WiFi avec Google Home

Après la découverte du H801 pour contrôler vos LEDs RGB en WiFi, intéressons-nous à leur activation à distance, via une commande lancée à votre assistant Google Home dans le salon : allume LEDéteint LED, etc.

Il faut avant toute chose préciser que le H801 semble se mettre en veille au bout d’un certain temps d’inactivité. La solution ? Lui envoyer un ping toutes les 2 mn via le Crontab du Raspberry Pi dédié à la domotique, ainsi il ne s’endormira pas :

*/2 * * * * sudo ping -c2 192.168.1.192 &> /dev/null

Ici, nous interrogeons le module placé sur 192.168.1.192 toutes les 2 minutes.
Pour la commande des LEDs, je vous invite à récupérer les commandes décrites dans la découverte du H801, tout s’y trouve.

Sur notre serveur Raspberry domotique, nous allons installer un script php dans /var/www/html, ledon.php par exemple :

<?php
exec('sudo ping -c4 192.168.1.192');
exec('sudo sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebffffff00005c59d6000 -v 192.168.1.192');
exec('sudo ping -c4 192.168.1.192');
exec('sudo sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebffffff00005c59d6000 -v 192.168.1.192');
?>

Ici, nous réveillons encore plus le contrôleur sur 192.168.1.192 avec 4 pings, on lui transmet la trame d’allumage (LEDs blanches ici) et on recommence, histoire de bien insister lourdement. Remplacez bien entendu l’IP par la votre.

Pour l’extinction, créons ledoff.php par exemple :

<?php
exec('ping -c 2 192.168.1.192');
exec('sudo sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb00000000005c59d6000 -v 192.168.1.192');
exec('ping -c 2 192.168.1.192');
exec('sudo sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb00000000005c59d6000 -v 192.168.1.192');
?>

Pareil, toujours des tas de ping pour réveiller la bestiole, et pensez toujours à remplacer l’IP par la bonne IP.

Maintenant, créons un compte sur le site IFTTT et venons créer une Applet :

Ici nous donnons les différentes possibilités d’allumer nos LEDs, via Google Assistant.

Voyons maintenant la requête à envoyer sur notre Raspberry Pi domotique via la fonctionnalité WEB REQUEST :

Vous l’aurez compris, il faudra :

  • disposer d’une IP fixe ou d’un dyndns car IFTTT va appeler une IP publique, hélas, votre Google Home ne pourra appeler une IP locale directement.
  • ouvrir un port public dédié (par ex 8080) et le faire pointer sur le port 80 de votre Raspberry Pi, celui de son serveur Apache2
  • pointer vers http://votre_ip_fixe:port/ledon.php
  • choisir la méthode POST sur IFTTT

Sauvegardez l’applet et testez : Dis Google, allume LED

Si tout fonctionne, vos LEDs s’activent, miracle ! Si cela ne fonctionne pas, depuis votre smartphone en 3G ou 4G testez : http://votre_ip_fixe:port/ledon.php

Si les LEDs ne s’allument pas, le soucis vient du NAT de port, permettant d’accéder au Raspberry Pi depuis l’extérieur, relisez la méthode en fonction de votre box internet (on déconseille un peu les Livebox… désolé…).

Bien entendu, coté sécurité, euh… Si vous avez un .htaccess d’activé, utilisez alors : http://login:password@votre_ip_fixe:port/ledon.php

Faites une nouvelle Applet avec l’extinction, je pense que vous avez compris le principe : éteindre LED dans ce cas, et pointez sur http://votre_ip_fixe:port/ledoff.php

 

CONCLUSION :

Certes, on peut faire largement mieux, sécuriser tout cela, voir utiliser des modules commerciaux pour activer une prise à distance, mais où serait le plaisir dans ce dernier cas ? 🙂 Ici, l’ensemble est à la fois intégré dans un système domotique maison, mais également utilisable avec l’assistant Google. Par la suite, on peut prévoir de venir passer des arguments à une seule page php, par ex : http://mon_ip/domo.php&lampe=salon&etat=on qui pourra alors transmettre l’information à un script python plus sophistiqué encore, permettant d’effectuer des traitements complexes.

 

 

Raspberry Pi + H801 : défilement aléatoire en Python

Un petit script en python pour votre Raspberry Pi, suite au premier billet sur le H801 :

# -*- coding: utf-8 -*-
import time
import os
import random
while True:
  color = "%06x" % random.randint(0, 0xFFFFFF)
  somme = "sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb" + color + "00005c59d6000 -v 192.168.1.127 > /dev/null"
  os.system(somme)
  time.sleep(0.3)

Sauvegardez le sous le nom led.py et exécutez le avec python3 led.py : vos leds font alors s’allumer de façon totalement aléatoire.

Pensez à modifier l’IP 192.168.1.127 par l’ip de VOTRE module et réglez la pause en modifiant time.sleep(xxx) par xxx secondes, selon vos goûts.

Raspberry Pi + H801 : contrôlez vos LEDs RGB

Le petit H801 proposé sur nombre de boutiques asiatiques est un contrôleur de LEDs RGB (Red, Green Blue) qui va soit générer son propre réseau WiFi, soit venir se connecter au WiFi de votre box.

espleds

Pour très peu d’Euros, vous allez ainsi pouvoir briller en société, venir contrôler un ruban à LEDs au moyen de votre smartphone. Intégrant un ESP8266, l’appareil est en outre reprogrammable à volonté, les exemples ne manquent pas sur internet.

Reste maintenant à venir intégrer ce bijou de technologie chinoise à votre domotique, à pouvoir le contrôler de façon un peu plus simple qu’avec l’application de base d’un smartphone Android. En fouillant un peu sur la toile mondiale, je suis tombé sur ce billet qui dégrossit le fonctionnement de la bestiole, mais hélas cela n’a pas fonctionné ici : les codes d’identification de mon module semblaient différents de ceux initialement utilisés.

Ni une, ni deux, direction Wireshark pour venir analyser les trames UDP diffusées par l’application sur ma tablette Android (192.168.1.181 sur mon réseau local) :

wireshark osx

et plus précisément la trame udp émise du port 30978 vers le port 30977 :

wireshark trame

Bon sang, mais c’est bien sur, la trame doit impérativement débuter par fbeb, suivi par 6 codes hexa correspondant à la couleur.

Sur notre Raspberry Pi, installons sendip et tentons d’éteindre les LEDs :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb00000000005c59d6000 -v 192.168.1.127

Ici, 192.168.1.127 est l’IP utilisée par notre H801 sur le réseau local WiFi, vous l’adapterez à votre installation propre bien entendu. Pas besoin d’IP source, la seule réception de la bonne trame UDP suffit visiblement à contenter notre H801.

Partant du principe qu’il faut remplacer les 6 codes hexa, voici comme obtenir une LED totalement blanche :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebffffff00005c59d6000 -v 192.168.1.127

ou rouge :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebFF000000005c59d6000 -v 192.168.1.127

ou verte :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb7AFF0400005c59d6000 -v 192.168.1.127

La recette pour définir la couleur est simple. Partez de ce principe :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebXXXXXX00005c59d6000 -v 192.168.1.127

ou les XXXXXX (6 fois X) représentent le code couleur hexadécimal que vous allez trouver sur ce site

rgb

Exemple de couleur verte, codée 7AFF04

A vous de jouer désormais, vous allez pouvoir vous amuser sur votre Raspi préféré 😉