Raspberry – C’est fiable ?

Bonne question. Vu qu’on est censé être efficace, je pourrais répondre “oui” … mais ce serait peut être un peu juste. Je dirais donc plutôt “oui .. si” :

  • On prend soin de l’alimenter correctement. Il n’est pas fait pour être spécialement autonome (ce n’est pas un reproche, fais pas la tête) donc il ne faut pas hésiter à surclasser un peu son alimentation (il lui faut 2A dans la doc .. met une alimentation 3A). Moi j’ai fini par mettre cela à chacun des RPI3 :
alimentation Rail din
  • paramétrer votre système : si vous avez un LINUX et que vous voulez gagner du temps (enfin prolonger la vie de votre carte SD) je vous suggère de mettre votre partition temp dans la mémoire vive plutôt que sur la carte SD. voir ce tuto https://www.hellojona.com/2017/06/create-a-ram-disk-tmpfs-in-raspberry-pi-3/. J’ai fait également cela pour le /var/log.
  • l’utiliser intelligemment : encore une fois pour prolonger la vie de la carte SD quand vous écrivez des fichiers temporaires faites le dans /dev/shm plutot que dans votre home directory
  • dupliquer : une carte SD c’est facile à dupliquer alors dès que votre système est opérationnel, copier le une fois, deux fois ..

Voila, pour ma part ca fait un moment que je n’ai pas eu de reboot inexpliqué. Quand il reboot c’est que j’ai coupé le courant .. mais même, 50jours pour une machine à 25€ (à l’époque), ca le fait non ?

Une alimentation PC en guise de boitier raspberry

Je sais pas vous, mais moi, j’ai peine à intégrer mes différents raspberry/Arduino/ESP dans des boitiers qui font, à vue de néophyte, fini. Dans mon cas ca fini souvent collé au mur avec tout un tas de cables. Alros c’est décidé, nouvelle résolution, je fais quelque chose de fini. Bon à défaut je vais cacher le tout dans un truc qui donne l’impression que c’est fini !

En faisant la poubelle, j’ai trouvé une alimentation de PC, mais celle ci bien que HS était jolie .. un joli métal brossé… c’est la que j’ai eu l’idée. L’avantage est que c’est donc une jolie boite avec une entrée 220V, un bouton et un ventilateur .. mais c’est génial !

Alors donc première étape, j’ai démonté l’intérieur pour ne garder que les composant de la face arrière. Il reste cela, c’est joli non ?

Ensuite, j’ai trouvé, dans la même poubelle mais un peu plus tôt une carte d’alimentation (de PC toujours) qui fournit du 5V et 12V à partir du 220V .. trop bien .. il ne reste plus qu’à brancher le tout !

Mirroir magique .. dis moi qui est le plus .. non laisse tomber, affiches moi justes les infos !

Comme vous l’aurez compris, je vous présente ici la première partie de la mise en place d’un mirroir magique, magic mirror. Et dans cette première partie, je ne parlerais ni de magie ni de mirroir. En effet, quite à vous décevoir, sachez qu’il y a un truc, en fait derrière le mirroir il y a un écran et un raspberry. ouaaaaaaaaaaaaaa..

Bon l’idée de départ était de pouvoir présenter en une page synthétique toutes les informations utiles pour la maison : les températures bien sur, l’état de fonctionnement de la VMC, de la piscine, de la chaudière etc etc .. Tout ce qu’on a en ligne sur mon intranet de domotique mais en une page, faite exprès pour mon écran. Cela évite en effet d’ouvrir le site depuis un téléphone (ben oui on est de l’ancienne école) mais surtout cela donne toutes les informations en un coup d’oeil .. et puis surtout ca m’amuse (en fait c’est le seul argument).

Au niveau du matériel :

  • un très vieux pc portable que je désosse et dont je récupère l’écran uniquement
  • un raspberry modèle 3 A+ (wifi donc)
  • pour relier les 2, une carte controlleur LVDS (https://fr.aliexpress.com/item/4001139239839.html?spm=a2g0s.9042311.0.0.27426c375xyxT7)
  • quelques bout de bois taillés à 45° pour faire un cadre (y a du travail de finition ici)

Comme on a deux besoins en alimentation différent 12V et 5v et qu’on a pas beaucoup d’espace j’ai opté pour un convertisseur 12V > 5V (https://fr.aliexpress.com/item/1005001382654920.html?spm=a2g0s.9042311.0.0.27426c379NVtSd). Je n’ai donc qu’un adaptateur secteur 12V qui alimente tout.

La partie logicielle n’est pas forcément aisée mais ce n’est que de l’intégration web donc une page web qui se rafraichit toutes les secondes et qui va chercher ses données dans une base locale (SQLite dans mon cas présent) .. surtout pas sur la base de données en ligne sinon on génèrerait trop de trafic réseau.

Il reste plus qu’à démarrer chromium en mode plein écran et automatiquement au démarrage : pour cela il faut ajouter la ligne suivante au fichier /etc/xdg/lxsession/LXDE-pi/autostart :

@chromium-browser –kiosk http://localhost/display.php –force-device-scale-factor=0.8

le deuxième paramètre permet de dezoomer la page dans mon cas à 80% de sa valeur

Quel modèle de raspberry choisir ?

Cela ne vous aura pas échappé, il y a plusieurs versions et modèles de raspberry et donc .. plusieurs prix .. Alors, lequel choisir ? Souvent, on vous répond, ben le dernier, qui peut le plus peut le moins. Oui mais mon compte en banque lui il peut le moins donc j’aimerais être, la encore, EFFICACE ! Qu’est ce que ca veut dire encore ? Mais je vous l’ai déjà dit ca veut dire qu’on met le prix et la qualité qui va bien, pas besoin d’un bazooka pour tuer une mouche.. Oui mais pour commencer il faut définir quel est le besoin, le mien en tout cas. Pour ma part le raspberry c’est pour mesurer des températures, des niveaux, des fronts montants ou descendants, et actionner via un relais. Je l’utilise également pour faire un “magic mirror” et pour gestionnaire de télévision.

Je dirais donc que le raspberry 4 selon moi devient un bazooka. Pour domotiser, je vois mal comment utiliser toute cette puissance si ce n’est pour gérer des flux vidéos par exemple (mais moi je n’ai pas assez de débit à la maison pour m’amuser à cela).

Pour ma part, je distinguerais donc plusieurs groupes :

  • les vieux modèles d’occasion sur thegoodcorner: et oui, les plus ancien, on ne le trouve plus. pour moi, on est au top de l’efficacité. On trouve des raspberry à 20€ qui n’ont certes pas tous les GPIO des derniers modèles mais largement de quoi mais une petite station de mesure.
  • Le raspberry 3 modèle A+ : parfait pour mes utilisations qui sont proches d’une source de WIFI. En effet, ce modèle n’a pas de port éthernet. A la base on le trouvait à 20€ sur amazing mais il semble qu’il y ait eu de l’inflation. Il est parfait typiquement pour faire une station d’affichage (interactive ou pas)
  • Le raspberry 3 modèle B+ : un peu trop pour mon besoin, mais moins pire que le 4. Je m’en sers donc pour une station de mesure un peu plus évoluée et qui fait plus de chose (par exemple des petits traitements d’image vite fait). Il est un peu plus cher mais

Hack ZIGBEE de Philips HUE (partie 1)

Vaste programme ..

J’écrirai dans un autre poste pourquoi je considère la solution Philips HUE efficace : nous partirons donc ici du postulat qu’elle l’est.

Il faut d’abord distinguer deux installations : celles avec pont HUE et celle sans. Et oui ce n’est pas la même chose. Il faut savoir que si vous utilisez le pont pour commander une ampoule alors vous ne pourrez plus utiliser la télécommande comme avant. En effet, quand le pont commande une ampoule celle ci rejoint le réseau du pont. Si vous voulez qu’une télécommande pilote l’ampoule il faut que celle-ci rejoigne le même réseau. La télécommande ne parle alors plus directement à l’ampoule mais au pont HUE, qui parle à l’ampoule. Ca n’a l’air de rien mais il y a un gap d’efficacité : je n’ai jamais rencontré le moindre problème quand il n’y avait pas le pont HUE. A chaque appui sur les télécommandes, l’action était immédiate. Après mise en place du pont, ce n’est plus la même chose. J’ai notamment constaté qu’en cas d’utilisation de la bande passante internet (un téléchargement très long), le pont n’arrive pas à commander les ampoules (ni depuis le téléphone, ni par l’intermédiaire des télécommandes).

Je parlerais ici de l’installation avec pont HUE. En effet, sans lui, vous ne pourrez pas parler aux ampoules/prises depuis votre téléphone ou votre raspberry. Mise à part ce problème qui relève plus de la performance que de la fiabilité (j’entends par la qu’on arrive toujours à allumer ou éteindre, c’est juste le délai qui peut être de plusieurs secondes), je trouve la solution vraiment bonne dans la mesure ou elle est très bien documentée. Il y a toutefois un manque qui est cruel pour moi : on ne peut pas réagir à un événement (ie changement d’état) à la volée (trigger). C’est affreux nan ?

Nan ? Mais si mais si .. rendez-vous compte, pour avoir le statut d’un appareil (lampe ou prise), il faut le demander au pont. AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH !!!! non ? Cela ne vous effraie toujours pas ?! Mais quand même, pour avoir le statut en temps réel (je déteste cette appellation qui a le bon gout d’être toujours fausse) il faut interroger en boucle le pont .. c’est à dire générer du trafic réseau, manger du CPU de raspberry .. nan nan nan cela ne va pas du tout.

C’est la raison pour laquelle j’ai voulu écouter sur le réseau zigbee dans l’espoir d’intercepter à la source le message qui dit “Lampe 1 ON”. Pitié, s’il y avait un autre moyen, ne me le dites pas ! 🙂

Fort de cette volonté j’ai fait quelques recherches et en grand radin que je suis j’ai arrêté mon choix sur un dongle équipé d’une puce texas instrument CC2531 dont voici la datasheet

https://www.ti.com/product/CC2531

On trouve le produit sur amazon à 30€ (https://www.amazon.fr/Zigbee-CC2531-Antenne-Bo%C3%AEtier-Coordinator/dp/B0843SL7WM) environ mais surtout, sur leboncoin à 10€ ..

Coté firmware, vu que je suis passé par leboncoin, je n’ai pas eu le choix > zboss

https://zboss.dsr-wireless.com/projects/zboss/wiki/What_is_ZBOSS

Pour les premiers tests, je suis passé par Windows. En effet, zboss propose un sniffer qui fonctionne sans rien faire dans cet environnement et, cela va nous être utile plus tard, Il faudra juste s’enregistrer. Il vous faudra le célèbre analyseur de paquets Wireshark qui est gratuit (et qui fonctionne sous Windows et raspberry).

Vous voila fin prêts .. mais si vous foncez comme je l’ai fait, vous allez, comme moi perdre du temps pour rien. En effet la première information à récupérer c’est le canal ZIGBEE que votre pont utilise !

Pour cela, il y a plusieurs moyens :

  1. sur l’application philips HUE de votre téléphone en allant dans le menu “Ponts Hue” puis en affichant les informations (petit “i” entouré à droite) puis tout en bas dans “Modification du canal Zigbee” >> sans le modifier bien sur, il est affiché.
  2. via l’utilitaire html qui intérroge l’API REST >> http://IPHUE/debug/clip.html : en mettant l’url /api/votreid/config vous obtiendrez une réponse commencant par : { “name”:”Pont Hue”, “zigbeechannel”:24, …. vous l’avez !
  3. via un curl depuis votre raspberry >> curl -s http://IPHUE/api/votreid/config | jq -r ".zigbeechannel"

Voila, on va pouvoir commencer.. La suite au prochain épisode

Domotiser la piscine – quand faut il laver votre filtre à sable ?

Je vous invite à faire la recherche et à noter la divergence des avis .. toutes les semaines, toutes les 2 semaines ? Certains disent même qu’il faut qu’un filtre soit “un peu sâle” pour bien fonctionner. Ok ok .. mais quand faut il le faire ?

Moi j’aime bien mesurer .. Alors j’ai mesuré : en l’occurence le courant consommé par la pompe. .. ou disons plutôt une proportion de courant car je ne mesure pas des ampères. Par ce que pour les amperes en fait c’est écrit sur la pompe : elle fait 750W et vu qu’elle est sur du 220V, ben on sait qu’elle consomme 3,4A chaque heure. Mais ce qui m’intéresse ce sont les variations .. Grâce à une bobine sur un capteur qui va bien, j’obtiens une valeur entre 0 et 1024. Quand elle est éteinte on a pas vraiment 0 et quand elle fonctionne on a qq chose autour de 570. Je pourrais filtrer un peu les données mais je n’ai même pas besoin.

mesure de courant – filtre propre

Quand on regarde les données après plusieurs jours (et années pour moi), on s’aperçoit d’un phénomène : plus le filtre s’encrasse, plus la pompe consomme. Et oui, c’est comme pour l’aspirateur (merci Benoit pour l’expérience), quand on le bouche il accélère (et consomme plus donc). Et c’est cela qui va nous être utile. La valeur qu’on mesure va en effet augmenter au fil des jours. Il suffit donc de définir une valeur seuil et de faire envoyer un mail quand on la lit (allez pour assurer le coup, on fera une petite moyenne pour éviter les phénomènes dispersés).

Voila ! Maintenant vous nettoyez votre filtre quand il faut. Des fois, il faudra le faire après 2j, des fois après 10. En passant, vous avez fait des économies : votre filtre pas encrassé votre pompe travaille moins, elle consomme moins et durera aussi plus longtemps !

Domotiser la piscine – partie 1 : la pompe

Avant toute chose, je ne saurais que trop vous déconseiller d’avoir une piscine, je vous préviens c’est beaucoup d’ennui. Bon, trop tard, vous avez fait la bétise et maintenant vous voulez vous facilitez un peu la vie et économiser un peu d’argent ? Alors voici le programme : 1 raspberry (pour changer), 1 sonde DS18B20, un relai 5V .. et c’est parti. Ah non j’oubliais il faut un peu vérifier qu’on fait ce qu’il faut donc il faut un capteur de courant (mais c’est pas obligé).

Tout d’abord, il faut commencer par prendre la température de la piscine, c’est la que la sonde entre en jeux. Et oui, la durée de pompage (et donc la facture d’électricité) dépend de la température.

Ensuite, il faut “domotiser” la pompe. On va juste mettre un relais 5V/220V 4A qui permettra au raspberry de piloter la pompe.

Ensuite ce n’est plus que de l’algorithmie de bas étage. L’idée étant de prendre la température, de diviser par deux et cela vous donner la durée de filtration. En passant vous en déduisez donc le cout journaliser de la pompe car vous connaissez sa puissance et le prix de l’électricité. Pour ma part l’algo est donc basique (efficace devrais je dire) : je fixe l’heure d’arrêt de la pompe à 22h. Je relève la température, divise par 2 pour obtenir le temps de filtration en heure et je le retranche à 22. J’obtiens l’heure de début.

Mon script sait donc entre quelle heure et quelle heure il doit fonctionner. Vu qu’il est lancé en cron toutes les minutes, il regarde à chaque fois quelle heure il est, quelles sont les conditions et il dit si, oui ou non, on active la pompe (le relais).

En écrivant cet article je m’appercois que c’est peut etre mieux de faire à l’envers. En effet, quand il y a le plus besoin de filtration, l’été, la température augmente dans la journée. Or mon script calcule la date de début donc il ne pourra pas augmenter la durée de pompage.

Il faut donc mieux définir l’heure de démarrage, disons 7h et calculer au fur et à mesure de la journée la date de fin. Si la température augmente il la repousse, si elle descend il la recule.

La mesure de courant dans la pompe permet de vérifier que la consigne est appliquée et de sévir le cas échéant .. ou en tout cas d’alerter .. Pour ma part, chaque soir je vérifie qu’elle a bien tourné le temps temps prévu (je mesure à 22h) et sinon je m’envoie un petit mail pour éviter que l’eau tourne. Je suis moins embeté depuis !

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}"

Arexx et raspberry

Avant de m’intéresser à RFLINK je me suis équipé de sondes Arexx. POur cela il faut donc des sondes mais aussi le logger. Pendant longtemps le tout tournait, à merveille je dois dire, sous Windows.. oui mais voila j’ai voulu faire marcher la chose sur raspberry ..

Et bien la on se sent un peu seul voyez vous ..

Il faut télécharger un programme qui date de 2003 ..

http://www.arexx.com/downloads/templogger/linux/rf_usb_http_rpi_0_6.zip

Bien sur on l’installe et on lit le readme .. par chance le programme sait faire un appel http .. on va donc utiliser cela .. voici comment paramétrer le fichier rulefile.txt

Vrulefile
A1php push
B1
C0
E213.186.122.44/getdata.php
Zdata==arexx&&name==$i-$q&&value==$v&&type==$q

en première ligne, vous lui dites que vous faite du “push” php .. ensuite en 5 ieme ligne vous donner l’url de base sans préciser http:// mais avec un E devant

Enfin, après un Z, vous spécifiez les noms des variables et la valeur

dans mon cas donc l’url appelée serait

http://213.186.122.44/getdata.php?data=arexx&name=20242-0&value=12.6&type=hum

Ensuite il ne reste plus qu’à appeler le programme. Mais malheureusement ca ne marche pas, et il n’y aucune doc. Qu’a cela ne tienne, on va le gruger. J’appelle le programme et redirige la sortie standard dans un fichier, le tout pendant 30s.

sudo ./rf_usb_http.elf -v rulefile.txt > logfile < <(sleep 30;echo -e "\n")

Une fois la sortie récupérée je vais nettoyer tout ca et récupérer la partie qui m’intéresse et faire le curl moi meme.

cat logfile | grep GET | uniq | awk '{print $2}' >> tmp
while read -r line
do
        url="http://monsiteamoi$line"
        echo "curl sur $url"
        /usr/bin/curl --connect-timeout 1 --max-time 5  $url
done < tmp

Voila, c’est dégoutant mais ca marche …

J’en profite pour souligner que les sondes Arexx sont de super qualité. Je les utilise depuis 10 ans, j’en ai une qui cessé de vivre après être tombée, mais sinon elles sont super, les piles durent super longtemps.

Malheureusement, le protocol utilisé n’est pas décrypté par rflink .. ce serait un travail à faire … peut etre un jour .. cela permettrait de se passer de la passerelle usb.

Toutefois, si vous avez un rflink, cela ne fait pas le poids avec une sonde Oregon qui a le bon gout d’indiquer, dans la trame, le niveau de batterie..

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 ..