Contrôleur bandeau LED WiFi Magic Home Pro et Jeedom

Suite à un achat pour ajouter une lumière décorative à un bureau, j’en ai profité pour commander un contrôleur WiFi de bandeau LED. Celui-ci (chinois…) fonctionne avec l’application MagicHomePro.

Ce type de contrôleur est géré dans Home-Assistant via une librairie python « flux_led ». A priori, cela serait également géré par un plugin jeedom WiFilightV2 (payant). Mais impossible de savoir avant s’il est bien géré car le plugin ne gère que les contrôleurs RGBW/RGBWW. Evidemment, le mien n’est que RGB…

Installation préalable et configuration hors jeedom

  1. Installer le bandeau LED physiquement, faire le collage, les pliages éventuels
  2. Configurer le contrôleur de bandeau LED avec l’application Magic Home PRO. Le mode local est suffisant.
  3. Fixer l’adresse IP du contrôleur de bandeau LED dans votre routeur.

J’ai l’avantage d’avoir un routeur sous openwrt. J’ai donc décider de donner un nommage fixe à mon bandeau led, cela me sera utile plus tard. Mon bandeau led est nommé « bandeau-led-1.lan« . Si ce n’est pas le cas, pensez bien à noter l’adresse IP de votre (vos) bandeaux leds.

Configuration jeedom

Se connecter sur jeedom via ssh (puTTy, mobaxterm) pour installer les modules python3 flux_led et webcolors.

sudo pip3 install flux_led
sudo pip3 install webcolors

On en profite pour tester l’allumage (-1) et l’extinction du bandeau led (-0) via la ligne de commande. C’est une étape indispensable, si cela ne fonctionne pas, impossible de contrôler votre bandeau avec jeedom…

flux_led bandeau-led-1.lan -1
flux_led bandeau-led-1.lan -0

Voir l’aide de flux_led pour les autres paramètres éventuels

Par exemple, on peut une fonction de changement de couleur (en rouge)

flux_led bandeau-led-1.lan -c "#FF0000"

En l’état actuel on peut déjà utiliser le plugin script pour exécuter les commandes On / Off, et changement de couleur.

Pour cela, depuis le plugin script on crée un nouvel équipement, et dans l’onglet commandes on crée 3 commandes distinctes de type script

  • Une commande action « On » avec la requête flux_led bandeau-led-1.lan -1
  • Une commande action « Off avec la requête flux_led bandeau-led-1.lan -0
  • Une commande action « Color » de type action/couleur avec la commande flux_led bandeau-led-1.lan -c « #color# »

C’est pas mal… Mais il nous manque un retour d’état. Et mauvais point de flux_led, il n’y a pas de commande dans flux_led pour renvoyer l’état…

Mais après tout, comme on a commencé à faire un script, il est temps de passer au niveau 2 : on va créer notre propre script python en faisant appel aux classes de flux_led.

Script de retour d’état

Pour créer un script depuis jeedom, rien de plus simple. On crée une nouvelle commande (Etat) depuis l’équipement de type script info / numérique. Oui, numérique, impossible d’utiliser le retour binaire dans Jeedom… Dans la partie requête on clique sur l’icône verte « nouveau ». J’ai nommé mon script valueBandeau.py mais vous pouvez l’appeler comme bon vous semble.

Voilà un exemple de script. Il n’est pas super propre, il faudrait encadrer l’appel à WifiLedBulb avec un try catch et une gestion des erreurs pour renvoyer autre chose… bref… Le script est assez simple, et prend un seul paramètre : l’adresse IP ou nom

!/usr/bin/env python3
 from flux_led import *
 from argparse import ArgumentParser
 def main():
         parser = ArgumentParser(description='Return status of a WiFi LED controler.')
         parser.add_argument('ip',help='IP of WiFi LED controler')
         args = parser.parse_args()
         bulb1 = WifiLedBulb(args.ip)
         bulb1Status = bulb1.isOn()
         if bulb1.isOn():
                 print("1")
         else:
                 print("0")
 if name == 'main':
         main()

Une fois le script sauvegardé, il faut ajouter l’adresse IP ou nom DSLAN en paramètre.

Dans mon cas, cet appel est :

/var/www/html/plugins/script/data/valueBandeau.py bandeau-led-1.lan

Reste ensuite à mettre en place la partie widget. Mais je vous laisse faire ce que vous voulez. Exemple chez moi :

Et voilà, un bandeau LED intégré pour quelques heures de travail.

Xiaomi thermomètre Mija bluetooth LYWSD03 dans jeedom

Suite à une promotion récente dans dealabs je me suis commandé plusieurs petits thermomètres LYWSD03. (Lot de 4 Thermomètres connectés Xiaomi Mijia Bluetooth 2 hygromètre – Dealabs.com)

en vrai ils sont minuscules 😉

Ces thermomètres bluetooth sont très bien gérés dans home assistant et je pensais naïvement que c’était également le cas dans jeedom, vu qu’ils étaient présents dans la Documentation Jeedom. Et même dans le documentation de compatibilité, aucune précision 🙁 Jeedom compatibility

Alors oui, cela fonctionne mais au bout de quelques heures… plus rien. Et la batterie fond comme neige au soleil. C’est de saison…

Heureusement, certains utilisateurs de jeedom ont résolus le problème 🙂

Ces thermomètres utilisent un système de chiffrement avec une clé définie lors de l’appairage à l’application Xiaomi Home.

La méthode pour rajouter (proprement) les LYWSD03 dans Jeedom et de récupérer la clé d’appairage (bind key) via ce flasher web… Si votre PC a une clé bluetooth évidemment.

Telink Flasher (atc1441.github.io)

Dans cette fenêtre, il faut cliquer sur le bouton connect, puis sélectionner l’équipement bluetooth à relier; Ensuite il faut cliquer sur le bouton « Do activation ». La clé qui nous intéresse sera dans le champ « Mi Bind Key »

Attention, cette clé change à chaque activation. Une fois la clé récupérée, il faut donc « déconnecter » le thermomètre de la page. Le plus simple, faire CTRL+ »F5″ pour recharger la page. Si vous avez plusieurs thermomètres, il faut refaire la manipulation en sélectionnant le bon thermomètre.

Une fois ceci fait, il faut aller modifier dans la partie bluetooth de jeedom sur la machine principale. Il faut se connecter en SSH à la machine hébergeant jeedom (Depuis windows : puTTY, mobaxterm).

sudo pip3 install pycryptodomex
cd /var/www/html/plugins/blea/resources/blead/devices/
sudo mv lywsd03.py lywsd03.py.old
sudo cv lywsd03.py_with_bindkey lywsd03.py
sudo nano lywsd03.py

On modifie alors la variable keys en associant chacune des MACS bluetooth avec sa clé d’appairage. La casse de l’adresse MAC n’est pas importante.

MAIS MAIS ce n’est pas fini. Si on a plusieurs antennes bluetooth, il faut réaliser une opération sur chacune des antennes.

  • Si on a déjà configurer les antennes, il faut se connecter à chacune d’entre elles via SSH et installer MANUELLEMENT le fichier pycryptodomex
sudo pip3 install pycryptodomex
  • Depuis jeedom, il faut démarrer le démon des antennes et vérifier qu’elles récupèrent bien le bon fichier lywsd03.py en regardant le contenu du fichier présent dans le fichier
~/blead/resources/blead/devices/lywsd03.py

Si le fichier n’est pas identique, il faut réinstaller / relancer le démon sur chacune des antennes. On peut également relancer le démon en mode debug et vérifier la présence de logs contenant les infos « LYWSD03——Encrypted »

Récupérer un flux instagram

Récemment, dans le cadre familial nous avons eu un problème de « partage » de vidéos entre instagram et whatsapp.

C’est un peu crétin car il s’agit de deux services de facebook, mais quand on partage une vidéo instagram dans whatsapp, seuls les personnes ayant instagram de validé sur leurs comptes peuvent lire la vidéo… Donc certains utilisateurs pouvaient lire la vidéo, les autres non…

J’ai donc du identifier une méthode pour récupérer des flux instagram (vidéos) et ainsi pouvoir les partager aux utilisateurs n’ayant pas de compte.

Donc oui, il existe une méthode rapide, fiable et linuxienne pour récupérer les vidéos : cela s’appelle instalooter, il faut l’utiliser avec Python :

Le code source sur github:

https://github.com/althonos/InstaLooter

La documentation associée:

https://instalooter.readthedocs.io/

Installation et usage pour un serveur linux

pip3 install --user instalooter --pre 
 ~/.local/bin/instalooter -v -u "monuser" -p "monmodepasse" post

Et voilà, encore une victoire de canard!

Et moi, je retourne au confinement…

Installer OpenWRT sur une borne unifi

Les bornes unifi sont des super produits pour les pros. Mais pour ceux qui en veulent toujours plus et se retrouvent limité par le système (sic…) il est possible d’aller encore plus loin. En effet, ces bornes sont toutes basés sur une version du système d’exploitation OpenWRT. Donc forcément compatible avec le système.

Bon, en vrai, la LED je la désactive

On a la confirmation en se connectant en ssh à la borne.


cat /etc/openwrt_release
DISTRIB_ID='LEDE'
DISTRIB_RELEASE='17.01.6'
DISTRIB_REVISION='r3979-2252731af4'
DISTRIB_CODENAME='reboot'
DISTRIB_TARGET='ar71xx/ubnt'
DISTRIB_ARCH='mips_24kc'
DISTRIB_DESCRIPTION='LEDE Reboot 17.01.6 r3979-2252731af4'
DISTRIB_TAINTS='no-all mklibs busybox'
UnifiAP-AC-LR-BZ.v4.0.80# cat /etc/openwrt_version
r3979-2252731af4

Jusqu’à il y a peu, il était possible d’installer des paquets supplémentaires via opkg… Mais voilà, depuis, ubiquiti l’a interdit 🙁

Mais on peut installer OpenWRT, en perdant par contre la partie « gestion » via le logiciel unifi controller. A vous de voir ce qui vous intéresse.

Dans le cas ou vous souhaitez installer OpenWRT, c’est possible via le tutorial suivant :

https://openwrt.org/toh/ubiquiti/unifiac

ATTENTION pour le package mtd, j’ai du utilisé celui-ci https://downloads.openwrt.org/releases/17.01.6/packages/mips_24kc/base/mtd_23_mips_24kc.ipk

Pour l’installation, j’ai du le décompresser via 7-Zip sur mon poste de travail et j’ai du ensuite recopier l’exécutable dans le dossier /sbin de la borne.

Ensuite : redémarrage, et tout fonctionne du premier coup.

L’inconvénient, c’est que si on a plusieurs routeurs, ou plusieurs bornes, on risque de se retrouver en réseau local avec plusieurs DHCP (bof) et plusieurs DNS (rebof)

Heureusement, on peut facilement configurer les routeurs OpenWRT en mode « Dump AP » (Ce qu’on peut traduire par « point d’accès déversoir »…)

https://openwrt.org/docs/guide-user/network/wifi/dumbap

Zou, je retourne à ma configuration 🙂

Best method ever from Saturday Night

Monitorer XTeVe via monit

XteVe est un « proxy » vers des serveurs IPTV via des listes M3U. Je l’utilise avec mon FAI (Free) pour interfacer les chaînes multipostes avec plex. On peut également l’utiliser pour regrouper des multiples playlist d’IPTV gratuites (par exemple : https://github.com/iptv-org/iptv)

Consulter le site officiel pour plus d’informations : https://xteve.de/

Oui mais voilà, parfois lors de l’enregistrement, XteVe plante (grrr…). Donc, j’ai souhaité rapidement ajouter un monitoring automatique à xteve pour permettre de le relancer sans intervention manuelle.

La première étape consiste à « transformer » xteve en démon. Ensuite, il faut utiliser un logiciel de monitoring type monit pour le surveiller. C’est simple donc 🙂

Création d’un démon de service

Créer le fichier de service :

cd /etc/systemd/system/
sudo vi xteve.service

Copier le contenu suivant

[Unit]
Description=xTeVe Service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/dossier_installation/xteve -config dossier_configuration
ExecReload=/usr/bin/killall xteve
ExecStop=/usr/bin/killall xteve
KillMode=process
Restart=always
RestartSec=15

User=running_user
Group=running_group
[Install]
WantedBy=multi-user.target

Attention à bien remplir les éléments manquants : dossier_installation,dossier_configuration, running_user et running_group.

On sauvegarde le fichier, puis on active le nouveau service :

sudo systemctl enable xteve
sudo systemctl start xteve

Création du fichier de monitoring pour monit

On crée un nouveau fichier pour ce monitoring ;

sudo vi /etc/monit/conf.d/xteve
check process xteve matching "xteve"
    start program = "systemctl start xteve"
    stop program = "systemctl stop xteve"
    if failed host 127.0.0.1 port 33400 with timeout 30 seconds for 3 cycles then restart

Attention à adapter le numéro de port du monitoring.

Ensuite, il ne reste plus qu’à relancer monit :

sudo /etc/init.d/monit restart

Et voilà, xteve fonctionne désormais tout seul.

… Et les mises à jour ?

Ah… oui… le défaut, c’est que xteve se met à jour uniquement au démarrage de l’application.

Donc, il faut également penser à le relancer de temps à autre pour qu’il puisse faire ces mises à jour. Pour cela, le plus simple reste à rajouter une ligne dans le crontab pour le redémarrer par exemple une fois par semaine le mardi vers 4h du matin (peu de chances d’enregistrer quelque chose…)

Ce qui donne dans crontab :

0 4 * * 1 systemctl restart xteve