2021-10-11
md
Domotique sur un Raspberry Pi
Autres services pour la domotique sur un Raspberry Pi (en Anglais)-> <-Configuration d'un Raspberry Pi en tant qu'ordinateur sans tête (septembre 2021)
  Ébauche d'une seconde partie d'un guide projeté sur plusieurs parties  

Ceci fait partie d'une série d'articles sur l'installation d'un système domotique sur un Raspberry Pi. Il couvre l'installation des principaux services de domotique :

Je recommande de regarder la vidéo d'Andreas Spiess, Pi Server based on Docker, with VPN remote access, Dropbox backup, Influx, Grafana, etc. sur YouTube. Bien que l'intention soit assez similaire, l'approche est assez différente en s'appuyant sur Docker qui est encore un autre niveau d'abstraction.

Table des matière

  1. Présentation du système domotique
  2. Installation de Domoticz
    1. Fichier unitaire pour démarrer et arrêter Domoticz
    2. Chien de garde
  3. Installation de mosquitto un serveur MQTT
  4. Installation de NGINX un serveur Web
  5. Installation de HA Bridge un pont entre Domoticz et Alexa
    1. Installation de l'environnement d'exécution Java
    2. Installion du script ha-bridge
  6. Configuration du système domotique
    1. Ajout d'un interrupteur virtuel dans Domoticz
    2. Configuration du micrologiciel Tasmota
    3. Configuration du pont HA Bridge
  7. Suite ...

Présentation du système domotique toc

Il est probablement préférable de commencer avec une description du système domotique qui a été lentement construit au cours des huit dernières années depuis l'emménagement dans notre maison actuelle. Le schéma suivant est une représentation simplifiée du système.

Certains appareils « électrodomostique » tel les robots aspirateurs capables de faire une besogne de façon indépendante tout en s'adaptant aux changements dans leur environnement font parti de la domotique. Cependant, cette indépendance les garde à la marge de ce qui constitue un système domotique à mon avis. La plupart des modules domotiques sont soit des capteurs, soit des actionneurs qu'on peut qualifier de dispositifs plutôt rudimentaires dont on ne peut pleinement bénéficier qu'avec un contrôle dit intelligent. Les capteurs échantillonnent certains aspects de l'environnement tels que la température, le niveau d'humidité, le niveau de lumière ou la présence de quelqu'un, et ainsi de suite. Le plus souvent, ils ne font rien avec les données captées à part de les transmettre. Les actionneurs ne sont pour la plupart que des interrupteurs sur lesquels peuvent être branchés ampoules, téléviseurs, portes de garage ou systèmes d'irrigation ou des variateurs qui peuvent moduler l'intensité des ampoules ou peuvent ajuster des stores ou rideaux. Encore faut-il que ces actionneurs soient eux-mêmes activés. Cela signifie qu'il doit y avoir un échange de messages qui à son tour nécessite un mécanisme de transport de données et un protocole de communication. Comme on peut le voir, notre système domotique est greffé au réseau local sans fil (Wi-Fi) qui était déjà utilisé à d'autres fins.

Pourquoi le Wi-Fi ? Montrer

Après avoir choisi le type de capteurs et d'actionneurs et la technologie sans fil à utiliser, j'ai dû choisir le logiciel domotique et la plate-forme matérielle sur laquelle l'exécuter. J'ai choisi Domoticz sur un Raspberry Pi. Domoticz n'a pas la popularité de Home Assistant, mais c'est une application très puissante tout en étant peu exigeante en termes de ressources informatiques. De plus elle est compatible avec Linux, Windows etmacOS, bien que l'installation sur un Mac puisse nécessiter plus d'efforts. Je l'ai installée sans problème sur de nombreux ordinateurs monocarte tels qu'un Raspberry Pi 1 à un seul cœur, un Orange Pi Zero et un La Frite AML-S805X-AC. Tel que décrit dans ce guide Domoticz roule sur un Raspberry Pi 3 B avec quatre cœurs exécutant la dernière version de Raspberrry Pi OS Lite.

Pourquoi Domoticz ? Montrer

Il me plait de prétendre que mon passe-temps a amélioré certaines choses dans la maison. Avant, pour allumer les lumières extérieures lorsque les invités partaient dans l'obscurité, deux interrupteurs à plusieurs mètres l'un de l'autre devaient être activés. Désormais, lorsque les lumières du balcon sont allumées ou éteintes, les lumières extérieures du garage qui éclairent l'allée sont simultanément éteintes ou allumées. Il est très pratique que la porte du garage se ferme automatiquement au bout de quelques minutes si l'un de nous oublie de le faire en partant. Cependant, il y a eu une certaine résistance en ce qui concerne certains autres appareils. L'interrupteur d'éclairage de la cuisine était beaucoup trop éloigné du plan de travail. Mais personne, y compris moi, ne voulait lancer Domoticz sur une tablette ou un téléphone intelligent, et enfin cliquez sur l'interrupteur virtuel de la cuisine pour contrôler le plafonnier. Il était plus rapide de marcher jusqu'à l'autre bout de la cuisine pour activer l'interrupteur. La commande vocale a changé tout cela. Maintenant, tous sont à l'aise avec les commandes orales données à "celle qui ne doit pas être nommée" pour allumer ou éteindre les lumières, ou pour régler leur intensité. Des scènes Domoticz pour allumer temporairement les lumières alors que nous nous rendons de la salle de télévision au sous-sol à la chambre à l'étage sont activées avec des commandes vocales tous les soirs. On ne peut pas surestimer l'augmentation de l'acceptabilité du système domotique attribuable à l'utilisation des haut-parleurs intelligents.

Pourquoi des haut-parleurs intelligents d'Amazon ? Montrer

Notre système domotique est assujetti a une contrainte auto-imposée. L'idéal est qu'il soit local et indépendant, mais de toute évidence, les haut-parleurs intelligents enfreignent cette règle. Ils introduisent des risques qui ne sont pas négligeables. En plus des dernières mises à jour mentionnées dans l'encadré précédent, notre expérience a montré que les tempêtes hivernales qui coupent l'électricité dans une vaste zone géographique pendant plus d'un jour ou deux s'accompagnent souvent de périodes plus longues sans service Internet. Cela se produit tous les deux ou trois ans, il semble que la fréquence ne puisse qu'augmenter. J'ai adopté des stratagèmes pour atténuer les problèmes. Une ancienne télécommande sans fil X10 à 16 boutons est toujours disponible à cet effet. Une autre télécommande infrarouge a été ajoutée à côté du téléviseur au grand dam de ma conjointe. Le Bouton intelligent, qu'on peut voir dans le schéma du system domotique, pourrait être une meilleure solution. Jusqu'à présent le prototype sur platine d'expérimentation situé près de mon clavier fonctionne très bien. Soit dit en passant, cet appareil repose entièrement sur MQTT pour communiquer avec le système domotique. L'espoir est qu'il devienne quelque chose d'encore plus pratique, lorsque ces boutons remplaceront avantageusement sept Sonoff Basic assurant le contrôle local de huit lampes ainsi que le contrôle à distance d'autres appareils, notamment des scènes et des groupes, mis en place dans Domoticz.

Installation de Domoticz toc

Avant toute chose, j'aimerais de nouveau exprimer toute ma gratitude à l' équipe de développement de Domoticz ainsi qu'à la communauté.

Avant d'installer un programme majeur, c'est toujours une bonne idée de mettre à niveau le système si cela n'a pas été fait récemment.

nostra@damus:~ $ sudo apt update && sudo apt upgrade -y ... 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 141 MB of archives. After this operation, 154 kB of additional disk space will be used. ...

Même si Raspberry Pi OS avait été installé et mis à niveau quelques semaines auparavant, cette opération a pris quelques minutes et pas moins de 20 paquets ont été modifiés. Bien sûr, ce qui sera fait sur un autre Pi dépendra des paquets installés sur la machine et du temps écoulé depuis la dernière mise à niveau.

L'installation de Domoticz est vraiment simple en suivant les instructions de la méthode «facile». Il s'agit d'une commande d'une ligne qui téléchargera un script d'installation et qui le dirigera l'interpréteur de ligne de commande bash.

nostra@damus:~ $ curl -L install.domoticz.com | sudo bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 16257 100 16257 0 0 12007 0 0:00:01 0:00:01 --:--:-- 12015 ::: ::: You are root. ::: Verifying free disk space... ...
Welcome ┌──────────────────┤ Domoticz automated installer ├──────────────────┐ │ │ │ │ │ │ │ This installer will transform your device into a Home Automation │ │ System! │ │ │ │ │ │ Domoticz is free, but powered by your donations at: │ │ http://www.domoticz.com │ │ │ │ │ │ Domoticz is a SERVER so it needs a STATIC IP ADDRESS to function │ │ properly. │ │ │ │ │ │ │ │ <Ok> │ │ │ └────────────────────────────────────────────────────────────────────┘

Il faut répondre à quelques questions au sujet des ports TCP et répertoires à utiliser. On peut accepter les valeurs suggérées ce qui a été fait ici. À la fin le message suivant récapitulant les choix faits est affiché.

Ready... ┌─────────────────────┤ Installation Complete! ├─────────────────────┐ │ │ │ Point your browser to either: │ │ │ │ HTTP: 192.168.1.139:8080 │ │ HTPS: 192.168.1.139:443 │ │ │ │ Wiki: https://www.domoticz.com/wiki │ │ Forum: https://www.domoticz.com/forum │ │ │ │ The install log is in /etc/domoticz. │ │ │ │ │ │ <Ok> │ │ │ └────────────────────────────────────────────────────────────────────┘
... ::: Enabling domoticz.sh service to start on reboot... done. ::: ::: Starting domoticz.sh service... done. ::: done. ::: ::: Installation Complete! Configure your browser to use the Domoticz using: ::: 192.168.1.139:8080 ::: 192.168.1.139:443

Le script d'installation nécessite des privilèges administratifs. C'est le genre de chose qu'on ne devrait pas accorder à n'importe qui. Par prudence, on devrait télécharger le script, l'examiner, puis l'exécuter seulement si une vérification méticuleuse confirme qu'il ne fait rien de néfaste.

nostra@damus:~ $ mkdir -p downloads/domoticz nostra@damus:~ $ cd downloads/domoticz nostra@damus:~/downloads/domoticz $ curl -L install.domoticz.com -o install_domoticz.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 178 100 178 0 0 288 0 --:--:-- --:--:-- --:--:-- 288 100 16582 100 16582 0 0 10880 0 0:00:01 0:00:01 --:--:-- 22168 nostra@damus:~/downloads/domoticz $ less install_domoticz.sh

Première utilisation de less? Montrer

Si l'inspection du script ne révèle rien de dangereux, alors ce dernier peut être exécuté pour procéder à l'installation.

nostra@damus:~/downloads/domoticz $ sudo bash install_domoticz.sh

Le script d'installation vérifiera si de nombreux paquets sont disponibles et si non les installera.

Si en proie à la paranoïa, alors il faut compiler Domoticz depuis le code source qu'on aura soigneusement contrôlé. Il semble que de simples mortels patients et en possession d'assez de temps libre arrivent à en faire autant, mais je n'ai jamais entrepris cette tâche et je ne peux pas commenter sa difficulté.

Peu importe comment il a été installé, le service doit être en cours d'exécution. Cela se vérifie facilement.

nostra@damus:~ $ sudo systemctl status domoticz.service ● domoticz.service - LSB: Home Automation System Loaded: loaded (/etc/init.d/domoticz.sh; generated) Active: active (running) since Thu 2021-09-16 00:50:39 ADT; 1h 8min ago Docs: man:systemd-sysv-generator(8) Process: 518 ExecStart=/etc/init.d/domoticz.sh start (code=exited, status=0/SUCCESS) Tasks: 18 (limit: 2178) CGroup: /system.slice/domoticz.service └─534 /home/nostra/domoticz/domoticz -daemon -www 8080 -sslwww 443 Sep 16 00:50:38 damus systemd[1]: Starting LSB: Home Automation System... Sep 16 00:50:38 damus domoticz.sh[518]: 2021-09-16 00:50:38.851 Status: Domoticz V2021.1 (c)2012-2021 GizMoCuz Sep 16 00:50:38 damus domoticz.sh[518]: 2021-09-16 00:50:38.851 Status: Build Hash: 8547c5b7e, Date: 2021-04-17 12:29:11 Sep 16 00:50:38 damus domoticz.sh[518]: 2021-09-16 00:50:38.851 Status: Startup Path: /home/nostra/domoticz/ Sep 16 00:50:38 damus domoticz.sh[518]: domoticz: Domoticz is starting up.... Sep 16 00:50:38 damus domoticz[532]: Domoticz is starting up.... Sep 16 00:50:38 damus domoticz[534]: Domoticz running... Sep 16 00:50:39 damus systemd[1]: Started LSB: Home Automation System.

Si l'erreur suivante

Oct 10 10:37:45 damus domoticz[2010]: 2019-12-08 18:37:45.907 Status: EventSystem - Python: Failed dynamic library load, install the latest libpython3.x library that is available for your platform.

à propos d'une bibliothèque Python manquante est affichée, alors installez le paquet python3-dev. Ce paquet aurait été installé si un environnement Python virtuel avait été créé tel qu'expliqué dans la première partie de ce guide. Voir Environnements virtuels Python dans Configuration d'un Raspberry Pi en tant qu'ordinateur sans tête (septembre 2021).

Comme vérification finale, lancez un navigateur et accédez à l'adresse indiquée. Le système domotique affichera la page suivante.

Bien sûr, il n'y aura pas d'interrupteurs, de scènes, de capteurs de température, etc. Le moment venu, je copierai la base de données, divers scripts bash, python, etc. du serveur Domoticz qui exécute actuellement mon système domotique, puis restaurerai la base de données sur ce nouveau serveur. Je l'ai fait plusieurs fois dans le passé et cela a fonctionné parfaitement.

Fichier unitaire pour démarrer et arrêter Domoticz toc

En 2019 J'ai choisi d'utiliser un fichier unité de systemd pour démarrer et arrêter domoticz.service au lieu du script domoticz.sh installé dans etc/init.d, car il y avait un problème en absence d'une horloge en temps réel (RTC) (ou dans mon cas, lorsque sa pile est morte). Ce problème ne se produit plus dans la version 2021.1 (build 8547c5b7e datée du 2021-04-17 12:29:11) de Domoticz. Néanmoins, la page sur Linux dans le Wiki de Domoticz recommande d'utiliser un fichier d'unité lorsque le service est exécuté sur des distributions Linux avec systemd comme programme d'initialisation. Si vous ne souhaitiez pas éviter les anciens scripts init pour contrôler les services, passez à la sous-section suivante.

La première étape consiste à créer le fichier unité avec nano ou un éditeur de votre choix. Notez que ce fichier est dans un répertoire qui appartient à root d'où le recours à sudo.

nostra@damus:~$ sudo nano /etc/systemd/system/domoticz.service

Voici un exemple de fichier unité. La condition After=time-sync.target garantit que le service n'est installé qu'une fois l'heure système synchronisée. Le paramètre AmbientCapabilities=CAP_NET_BIND_SERVICE est nécessaire si un port TCP inférieur à 1024 est spécifié, ce qui est le cas ci-dessous où le port 443 sera utilisé pour les connexions HTTP sécurisées. Si une ancienne version de Raspbian est utilisée, ce paramètre doit être modifié, voir le Wiki pour les détails.

[Unit] Description=domoticz_service After=time-sync.target [Service] User=nostra Group=users ExecStart=/home/nostra/domoticz/domoticz -www 8080 -sslwww 443 WorkingDirectory=/home/nostra/domoticz AmbientCapabilities=CAP_NET_BIND_SERVICE Restart=on-failure RestartSec=1m [Install] WantedBy=multi-user.target

Bien entendu, le nom d'utilisateur nostra, qui apparaît trois fois, doit être ajusté.

Maintenant, arrêtez Domoticz s'il est en cours d'exécution et supprimez l'ancien script domoticz.sh en le sauvegardant sous un autre nom en cas de problème. Rechargez tous les fichiers unité des services (démon), démarrez le service Domoticz et vérifiez son statut pour vous assurer que tout est correct.

nostra@damus:~$ sudo /etc/init.d/domoticz.sh stop [ ok ] Stopping domoticz.sh (via systemctl): domoticz.service. nostra@damus:~$ sudo mv /etc/init.d/domoticz.sh domoticz-sh nostra@damus:~$ sudo systemctl daemon-reload nostra@damus:~$ sudo systemctl start domoticz.service nostra@damus:~$ sudo systemctl status domoticz.service ● domoticz.service - domoticz_service Loaded: loaded (/etc/systemd/system/domoticz.service; disabled; vendor preset Active: active (running) since Mon 2019-12-09 15:38:10 AST; 17s ago Main PID: 2235 (domoticz) Tasks: 16 (limit: 1072) Memory: 11.8M CGroup: /system.slice/domoticz.service └─2235 /home/domoticz/domoticz/domoticz -www 8080 -sslwww 443 ...

La commande suivante assure l'activation automatique du service à chaque démarrage du Pi.

nostra@damus:~$ sudo systemctl enable domoticz.service Created symlink /etc/systemd/system/multi-user.target.wants/domoticz.service → /etc/systemd/system/domoticz.service.

On exécute la commande, qui crée un lien symbolique vers le fichier d'unité nouvellement créé, qu'une seule fois.

Si le Pi a été hors tension pendant plus de 10 minutes environ, il ne faut pas s'en faire si le service domoticz ne semble pas fonctionner au démarrage. Il continuera à répéter sa routine de démarrage jusqu'à ce que l'heure soit correctement synchronisée. Cela fonctionne que l'injonction d'attendre la synchronisation de l'heure avec un serveur SMTP soit en place ou non. En d'autres termes, la ligne du fichier unité affichée en rouge, qui était un ajout important en 2019, n'est plus nécessaire.

Chien de garde toc

Étant donné que la domotique est la tâche principale à effectuer par le système, il est logique d'ajouter un chien de garde qui redémarre le système si le logiciel domotique cesse de fonctionner correctement. J'en ai déjà parlé dans un billet intitulé Chien de garde pour le Raspberry Pi et Domoticz où l'on trouver plus de détails.

La première étape consiste à créer un script Lua que Domoticz exécutera chaque minute. Il ne fait que mettre à jour l'horodatage d'un fichier nommé à /tmp/domoticz.alive.

nostra@damus:~ $ nano domoticz/scripts/lua/script_time_domotizAlive.lua

-- Updates the access time of file /tmp/domoticz.alive -- once every minute. The watchdog service will reboot -- the machine if the time stamp of the file does not -- change over 5 minutes. commandArray = {} os.execute('sudo touch /tmp/domoticz.alive') return commandArray

Dès que le fichier Lua est créé et pour autant son nom commence avec script_time et et qu'il se termine avec l'extension .lua, Domoticz se charge de l'exécuter. Vérifiez régulièrement l'heure du fichier pour vous assurer qu'elle est mise à jour toutes les minutes.

nostra@damus:~ $ ls -l /tmp total 4 -rw-r----- 1 root root 0 Sep 21 16:36 domoticz.alive ... nostra@damus:~ $ ls -l /tmp total 4 -rw-r----- 1 root root 0 Sep 21 16:37 domoticz.alive ...

Installez maintenant le paquet watchdog.

nostra@damus:~ $ sudo apt install watchdog ... Need to get 82.5 kB of archives. After this operation, 232 kB of additional disk space will be used. ... Processing triggers for man-db (2.8.5-2) ... Processing triggers for systemd (241-7~deb10u8+rpi1) ...

Le fichier de configuration du chien de garde doit être modifié. Comme d'habitude, l'éditeur nano a été utilisé à cette fin.

nostra@damus:~ $ sudo nano /etc/watchdog.conf

... file = /tmp/domoticz.alive change = 300 ... max-load-1 = 24 ... watchdog-device = /dev/watchdog watchdog-timeout = 15

Autant que je sache, la valeur du délai d'attente doit être de 15 secondes, car la valeur par défaut de 60 secondes ne fonctionne pas.

Démarrez le service de surveillance, puis attendez plus de cinq minutes (300 secondes) pour vous assurer que le système n'est pas redémarré par le chien de garde. Arrêtez ensuite le service domoticz et le chien de garde devrait redémarrer le Raspberry Pi dans environ cinq minutes.

nostra@damus:~ $ sudo systemctl start watchdog.service nostra@damus:~ $ sudo systemctl status watchdog.service ● watchdog.service - watchdog daemon Loaded: loaded (/lib/systemd/system/watchdog.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2019-10-27 01:27:08 ADT; 19s ago Process: 28652 ExecStartPre=/bin/sh -c [ -z "${watchdog_module}" ] || [ "${watchdog_module}" = "none" ] || /sbin/modprobe $watchdog_module (code=exited, status=0/ Process: 28653 ExecStart=/bin/sh -c [ $run_watchdog != 1 ] || exec /usr/sbin/watchdog $watchdog_options (code=exited, status=0/SUCCESS) Main PID: 28655 (watchdog) Tasks: 1 (limit: 2319) Memory: 548.0K CGroup: /system.slice/watchdog.service └─28655 /usr/sbin/watchdog Oct 27 01:27:08 damus watchdog[28655]: interface: no interface to check Oct 27 01:27:08 damus watchdog[28655]: temperature: no sensors to check Oct 27 01:27:08 damus watchdog[28655]: no test binary files Oct 27 01:27:08 damus watchdog[28655]: no repair binary files Oct 27 01:27:08 damus watchdog[28655]: error retry time-out = 60 seconds Oct 27 01:27:08 damus watchdog[28655]: repair attempts = 1 Oct 27 01:27:08 damus watchdog[28655]: alive=/dev/watchdog heartbeat=[none] to=root no_act=no force=no Oct 27 01:27:08 damus watchdog[28655]: watchdog now set to 15 seconds Oct 27 01:27:08 damus systemd[1]: Started watchdog daemon. Oct 27 01:27:08 damus watchdog[28655]: hardware watchdog identity: Broadcom BCM2835 Watchdog timer ... wait 10 minutes - nothing should happen ... nostra@damus:~ $ sudo systemctl stop domoticz.service ... wait at most 6 minutes, the system should reboot

Comme le montre cet exemple, il sera nécessaire d'arrêter le chien de garde (sudo systemctl stop watchdog.service) si Domoticz est suspendu pendant un certain temps, sinon le Raspberry Pi redémarrera.

Installation de mosquitto un serveur MQTT toc

Un serveur MQTT est une partie nécessaire de mon système domotique. Il agit comme le relais entre le service domoticz et les appareils IdO. La plupart de ces derniers sont des appareils ESP828x dont le micrologiciel est Tasmota de Theo Arends. Le paquet mosquitto est disponible dans le référentiel Rasperry Pi OS , comme on peut le voir ici.

nostra@damus:~ $ apt-cache policy mosquitto mosquitto: Installed: (none) Candidate: 1.5.7-1+deb10u1 Version table: 1.5.7-1+deb10u1 500 500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages

La dernière version de Eclipse Mosquitto est 2.0.12, mais la version 1.5.7 est assez récente et il est beaucoup plus facile d'installer mosquitto à partir du référentiel que d'essayer de l'installer à partir de la source ou d'un autre référentiel. De plus, [version 2.0]... est un grand changement avec des ruptures de comportement du serveur, donc s'il est installé, préparez-vous à modifier la configuration pour le faire fonctionner avec Domoticz (voir Mosquitto MQTT broker v2.0.0 dans le forum Domoticz forum). Une installation de l'ancien serveur et des utilitaires optionnels (pour obtenir mosquitto_sub et mosquitto_pub) peut être effectuée sans problème.

nostra@damus: $ sudo apt-get install mosquitto mosquitto-clients -y ... Need to get 485 kB of archives. After this operation, 1,055 kB of additional disk space will be used. ...

On peut constater que le courtier fonctionne automatiquement après l'installation.

nostra@damus:~ $ sudo systemctl status mosquitto.service ● mosquitto.service - Mosquitto MQTT v3.1/v3.1.1 Broker Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-09-22 21:02:18 ADT; 36s ago Docs: man:mosquitto.conf(5) man:mosquitto(8) Main PID: 744 (mosquitto) Tasks: 1 (limit: 2178) CGroup: /system.slice/mosquitto.service └─744 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf Sep 22 21:02:18 damus systemd[1]: Starting Mosquitto MQTT v3.1/v3.1.1 Broker... Sep 22 21:02:18 damus systemd[1]: Started Mosquitto MQTT v3.1/v3.1.1 Broker.

Pour m'assurer que tout était bien installé, je me suis abonné à tous les sujets dans un terminal sur le Raspberry Pi.

nostra@damus:~ $ mosquitto_sub -h 127.0.0.1 -v -t "#"

Ensuite, j'ai envoyé un message au courtier depuis un terminal sur mon ordinateur de bureau.

michel@hp:~$ mosquitto_pub -h damus.local -t "home" -m "hello" or michel@hp:~$ mosquitto_pub -h 192.168.1.139 -t "home" -m "hello"

Si mosquitto n'est pas installé sur l'ordinateur de bureau, le message pourrait être publié à partir d'un deuxième terminal sur le Raspberry Pi.

michel@hp:~$ ssh nostra@damus.local ... nostra@damus:~$ mosquitto_pub -h damus.local -t "home" -m "hello"

Dans les deux cas, le message devrait apparaître dans le premier terminal sur le Raspberry Pi.

nostra@damus:~ $ mosquitto_sub -h 127.0.0.1 -v -t "#" home hello

Au lieu de surveiller les échanges avec les utilitaires mosquitto, un client de type chat qui peut publier ainsi que s'abonner à plusieurs messages pourrait être utilisé. Alors que, sans vergogne, j'allais faire l'éloge mon propre lazmqttc quf fonctionne sous Linux, Windows 10 et peut-être macOS avec un peu d'effort, je suis tombé sur MQTT X qui semble être bon. Je vais devoir essayer ce programme.

Installation de NGINX un serveur Web toc

Le serveur Web autonome sur le Raspberry Pi n'est pas très occupé, car les deux services les plus utilisés, Domoticz et HA Bridge, exécutent leur propre serveur Web. La seule tâche du serveur Web autonome est le téléversement de mise à jour du micrologiciel que j'ai écrit pour trois dispositifs IdO. Pour ce qui est autres appareils, ils fonctionnent avec Tasmota et je préfère télécharger les mises à niveau de ce micrologiciel depuis mon ordinateur de bureau.

Alors qu'Apache est supposément le serveur Web « le plus populaire », j'ai plus d'expérience avec les serveurs libre LIGHTTPD et NGINX Open Source sur de petits ordinateurs monocartes. Ils sont réputés être plus légers et plus que suffisants compte tenu des exigences minimales. Dans cette section, je vais montrer comment installer et configurer nginx, mais il ne fait aucun doute que quelque chose de similaire pourrait être fait avec LIGHTTPD (voir ici) et Apache.

L'installation de la version la plus légère de NGINX dans le référentiel Raspberry Pi OS est très simple. Mais avant de faire cela, je recommande une nouvelle fois de mettre à niveau le système si cela n'a pas été fait récemment.

Étant donné que le port HTTP par défaut du serveur Web intégré démarré par HA Bridge est 80 et que nginx utilise le même port par défaut, il est préférable d'installer le serveur Web avant d'installer HA Bridge. Si le pont HA est déjà installé, suspendez-le jusqu'à ce que le port HTTP par défaut utilisé par nginx soit modifié.

nostra@damus:~ $ sudo apt install nginx-light -y ... The following NEW packages will be installed: libnginx-mod-HTTP-echo nginx-common nginx-light 0 upgraded, 3 newly installed, 0 to remove and 18 not upgraded. Need to get 645 kB of archives. Need to get 644 kB of archives. After this operation, 1,467 kB of additional disk space will be used. ... nostra@damus:~ $ sudo systemctl status nginx ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-09-23 10:27:19 ADT; 43s ago Docs: man:nginx(8) Main PID: 5598 (nginx) Tasks: 5 (limit: 2178) CGroup: /system.slice/nginx.service ├─5598 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ├─5599 nginx: worker process ├─5600 nginx: worker process ├─5601 nginx: worker process └─5602 nginx: worker process Sep 23 10:27:19 damus systemd[1]: Starting A high performance web server and a reverse proxy server... Sep 23 10:27:19 damus systemd[1]: Started A high performance web server and a reverse proxy server.

L'ouverture de la page dans un navigateur Web a permis de vérifier que le serveur fonctionne.

Bien sûr, il peut être nécessaire d'utiliser l'adresse IP du Raspberry Pi sous certains systèmes d'exploitation.

Quel que soit le serveur Web installé, il sera très utile de changer le propriétaire du répertoire Web.

nostra@damus:~ $ cd /var/www nostra@damus:/var/www $ sudo chown -R nostra: html

De cette façon, l'utilisateur par défaut (nostra dans ce cas) pourra ajouter, supprimer et éditer n'importe quel fichier du répertoire /var/www ou des sous-répertoires qui y seront créés.

nostra@damus:~ $ ls -l total 4 drwxr-xr-x 2 nostra nostra 4096 Sep 23 10:32:15 html

Certains peuvent se demander pourquoi nostra n'est pas membre du groupe www-data. Citant jojopi, il semble y avoir une fausse idée commune selon laquelle tout ce qui concerne le Web devrait appartenir à www-data. En fait, c'est tout le contraire. Lisez la réponse complète et convaincante dans le forum Raspberry : Re: /var/www/html permissions.

J'ai ensuite créé un répertoire contenant le micrologiciel Tasmota à télécharger sur divers dispositifs IdO utilisant le ESP8266 lorsque nécessaire.

nostra@damus:/var/www $ mkdir html/tasmota

Bien que cela ne soit pas du tout nécessaire, j'ai décidé de créer une page d'erreur 404 personnalisée. Cette page s'affichera lorsqu'une URL renvoie vers un fichier inexistant.

nostra@damus:/var/www $ nano html/404.html

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>404</title> </head> <body> <p style="font-size: 8em; text-align: center">404</p> </body> </html>

Difficile de faire plus simple et de plus cette page n'exige aucune traduction.

Ensuite, j'ai créé une page d'erreur 403 similaire. Elle sera affichée lorsqu'une URL pointe non pas vers un fichier, mais plutôt vers un sous-répertoire dans /var/www/html ne contenant pas de fichier index.htmlindex.html ou l'équivalent. Sans cette précaution, le contenu du sous-répertoire pourrait être répertorié comme une page Web. Encore une fois, ce n'est pas du tout nécessaire dans ce contexte, mais je suggérerais de le faire avec n'importe quel site Web accessible de l'extérieur.

Deux entrées doivent être ajoutées au fichier de configuration du serveur Web pour afficher ces pages si nécessaire. Voici les détails.

nostra@damus:~ $ sudo nano /etc/nginx/nginx.conf

Ajoutez les entrées vers la fin du block HTTP.

HTTP { ... ## # Basic Settings ## ## # Custom error messages ## error_page 403 /403.html; error_page 404 /404.html; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }

Bien que HA Bridge, qui est le prochain serveur à installer, roule très bien une fois configuré, il peut être difficile de le faire fonctionner au début. Pour cette raison, je préfère de loin ne pas changer le port TCP par défaut de son interface Web. Par conséquent, NGINX doit écouter un port TCP autre que 80. Comme d'habitude, cela implique une petite modification d'un fichier de configuration.

nostra@damus:~ $ sudo nano /etc/nginx/sites-available/default

Changer le port 80 au début du fichier.

# Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; # SSL configuration ...

J'ai choisi 8888 (rappelez-vous que Domoticz utilise 8080 par défaut).

# Default server configuration # server { listen 8888 default_server; listen [::]:8888 default_server; # SSL configuration ...

Redémarrez le serveur pour que cela prenne effet.

nostra@damus:~ $ sudo systemctl restart nginx

Installation de HA Bridge un pont entre Domoticz et Alexa toc

Comme indiqué ci-dessus, HA Bridge est un pont qui présente de nombreux dispositifs, scènes et groupes virtuels dans Domoticz en tant qu'appareils matériels que les haut-parleurs intelligents Amazon Dot peuvent contrôler localement. Auparavant, ce pont entre Alexa et Domoticz était géré par un autre ordinateur monocarte, mais le Raspberry Pi 3 est tout à fait capable de le gérer avec tous les autres services mentionnés dans cette série d'articles.

Étant donné que HA Bridge est un script Java, la première étape consiste à installer l'environnement d'exécution Java.

Installation de l'environnement d'exécution Java toc

Le référentiel Raspberry Pi OS contient de nombreux paquets Java. Il y a d'abord deux versions : OpenJDK et Oracle Java (rappelez-vous que Sun a cédé Java à Oracle). À moins d'un besoin particulier, il est préférable d'éviter la version Oracle en raison de sa licence plus restrictive. Même en ne regardant que la version "gratuite" OpenJDK, pas moins de huit paquets sont disponibles.

Environnement de développementEnvironnement d'exécutionVersion
openjdk-8-jdkopenjdk-8-jre8u212-b01-1+rpi1
openjdk-9-jdkopenjdk-9-jre9.0.4+12-4
openjdk-10-jdkopenjdk-10-jre10.0.2+13-2
openjdk-11-jdkopenjdk-11-jre11.0.12+7-2~deb10u1

Le suffixe jdk identifie le l'environnement de développement Java tandis que jre est l'environnement d'exécution Java. Le JDK contient le JRE et d'autres composants nécessaires pour créer des applications Java (en savoir plus sur la différence voir ici). J'ai décidé d'installer la version d'exécution la plus légère, openjdk-8-jre. Vraisemblablement, si HA Bridge fonctionne dans cet environnement, il fonctionnera dans n'importe lequel des autres. Comme d'habitude, l'installation d'un paquet à partir du référentiel est simple.

nostra@damus:~ $ sudo apt install openjdk-8-jre ... The following NEW packages will be installed: openjdk-8-jre 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 61.8 kB of archives. After this operation, 234 kB of additional disk space will be used. ...

Ne jamais dire jamais Montrer

Installion du script ha-bridge toc

Puisque Ha Bridge est un script Java, l'installation n'est pas trop compliquée.

  1. Créez un répertoire pour contenir le script.
  2. Copiez le script dans le répertoire.
  3. Configurez un lien symbolique vers le script.
nostra@damus:~ $ mkdir ha-bridge nostra@damus:~ $ cd ha-bridge nostra@damus:~/ha-bridge $ wget https://github.com/bwssytems/ha-bridge/releases/download/v5.4.1RC1/ha-bridge-5.4.1RC1.jar --2021-09-23 16:12:35-- https://github.com/bwssytems/ha-bridge/releases/download/v5.4.1RC1/ha-bridge-5.4.1RC1.jar Resolving github.com (github.com)... 140.82.112.4 Connecting to github.com (github.com)|140.82.112.4|:443... connected. ... 2021-09-23 16:12:38 (5.60 MB/s) - ‘ha-bridge-5.4.1RC1.jar’ saved [9672480/9672480] nostra@damus:~/ha-bridge $ ln -s ha-bridge-5.4.1RC1.jar ha-bridge.jar vérifications que le lien fonctionne nostra@damus:~/ha-bridge $ ls -l total 9448 -rw-r--r-- 1 nostra nostra 9672480 Mar 24 2021 ha-bridge-5.4.1RC1.jar lrwxrwxrwx 1 nostra nostra 22 Sep 23 16:13 ha-bridge.jar -> ha-bridge-5.4.1RC1.jar

Assurez vous de télécharger la dernière version du script. Il devrait être disponible dans la page des versions releases page du compte github du projet. Comme on peut le voir, j'utilise une version bêta de la prochaine version 5.4.1. Elle ajoute la possibilité d'attribuer des numéros d'identification de 9 octets aux appareils Hue virtuels présentés à Alexa. Avec la dernière mise à jour du firmware de l'Echo Dot, c'était un ajout nécessaire, sinon les appareils ne sont pas découverts par Alexa.

Le lien symbolique n'est pas obligatoire, mais il facilitera la mise à jour du script sans avoir à changer le fichier unité utilisé pour intégrer le script dans la séquence de démarrage de systemd. Créez le fichier unité avec un éditeur. Comme d'habitude j'utilise nano.

nostra@damus:~/ha-bridge $ sudo nano /etc/systemd/system/ha-bridge.service

[Unit] Description=HA Bridge Wants=network.target After=network.target [Service] Type=simple WorkingDirectory=/home/nostra/ha-bridge ExecStart=/usr/bin/java -jar -Dconfig.file=/home/nostra/ha-bridge/data/habridge.config /home/nostra/ha-bridge/ha-bridge.jar [Install] WantedBy=multi-user.target

N'oubliez pas de modifier le nom d'utilisateur, qui dans mon cas était nostra. Il apparaît trois fois dans le fichier unité.

Il ne reste plus qu'à démarrer le service.

nostra@damus:~/ha-bridge $ sudo systemctl daemon-reload nostra@damus:~/ha-bridge $ sudo systemctl start ha-bridge.service ● ha-bridge.service - HA Bridge Loaded: loaded (/etc/systemd/system/ha-bridge.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-09-23 16:18:53 ADT; 3s ago Main PID: 15282 (java) Tasks: 22 (limit: 2178) CGroup: /system.slice/ha-bridge.service └─15282 /usr/bin/java -jar -Dconfig.file=/home/nostra/ha-bridge/data/habridge.config /home/nostra/ha-bridge/ha-bridge.jar Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55.623:INFO:oejs.session:Thread-0: DefaultSessionIdManager workerName=node0 Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55.623:INFO:oejs.session:Thread-0: No SessionScavenger set, using defaults Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55.634:INFO:oejs.session:Thread-0: Scavenging every 660000ms Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55,677 [main] INFO com.bwssystems.HABridge.hue.HueMulator - Hue emulator servic Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55.710:INFO:oejs.AbstractConnector:Thread-0: Started ServerConnector@184f9e3{HTTP/1.1,[HTTP/1.1]}{0.0.0.0:80} Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55.712:INFO:oejs.Server:Thread-0: Started @2050ms Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55,796 [main] INFO com.bwssystems.HABridge.upnp.UpnpSettingsResource - Description xml service started.... Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55,815 [main] INFO com.bwssystems.HABridge.upnp.UpnpListener - UPNP Discovery Listener starting.... Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55,824 [main] INFO com.bwssystems.HABridge.upnp.UpnpListener - Create and run mDNS service. Sep 23 16:18:55 damus java[15282]: 2021-09-23 16:18:55,916 [main] INFO com.bwssystems.HABridge.upnp.UpnpListener - UPNP Discovery Listener running and ready....

Il devrait maintenant être possible de se connecter à l'interface Web.

Et, bien sûr, le pont ne contient aucun dispositif.

Configuration du système domotique toc

Tous les services essentiels pour un système domotique similaire au nôtre sont en place, mais jusqu'à présent, le système n'est qu'une coquille vide. Notre système domotique a été construit au cours de plusieurs mois et il n'y a aucun moyen pratique de le décrire en détail ici. Au lieu de cela, je décrirai l'installation d'un interrupteur virtuel dans Domoticz, qui est la première étape de l'ajout d'un dispositif IdO avec le micrologiciel Tasmota au système. Dans la sous-section suivante, le capteur virtuel Domoticz est ajouté à la liste des appareils émulés dans HA Bridge, ce qui est la première étape de l'ajout d'un appareil de la Maison connectée dans un compte Alexa.

Ajout d'un interrupteur virtuel dans Domoticz toc

J'ai décomposé le processus d'installation du premier interrupteur virtuel dans Domoticz, en 20 étapes (21 si l'on veut l'interface en français). Heureusement, toutes sauf les deux dernières sont des démarches ponctuelles à ne faire qu'une seule fois puisqu'il faut définir les coordonnées du serveur et installer le « matériel » de support : MQTT et Dummy initialement. Les coordonnées géographiques sont utilisées pour calculer les heures de lever et de coucher du soleil. MQTT est nécessaire pour communiquer avec les appareils IdO et le matériel factice (Dummy) est un support générique pour les capteurs virtuels, qui peuvent être entre autres des interrepteurs.

La plupart des tâches administratives dans Domoticz se font dans son interface web. Comme déjà vu, son URL est http://damus.local:8080 ou http://192.168.1.139:8080 (ou quelle que soit l'adresse IP statique attribuée au Raspberry Pi).

Voilà, maintenant la base de données de Domoticz contient un dispositif virtuel nommé Test de type interrupteur qui peut être vu dans l'onglet nommé Interrupteurs [Switches].

N'oubliez pas que ces deux dernières étapes doivent être répétées pour chaque interrupteur ou capteur virtuel supplémentaire à ajouter. Encore une fois, cela se fait dans la page Configuration / Matériel [Setup / Hardware].

Configuration du micrologiciel Tasmota toc

Juste pour vérifier que tout fonctionne, l'interrupteur virtuel Domoticz nouvellement créé est relié à une fiche intelligente de CE Smart Home modèle LA-WF3 dont le micrologiciel est Tasmota 9.1.0. Elle a été utilisée auparavant alors elle peut déjà se brancher au Wi-Fi local. Il reste à établir le lien entre la fiche et le dispositif virtuel nouvellement créé dans la nouvelle instance de Domoticz. Ce lien est le protocole MQTT qui sert de moyen de communication entre les deux logiciels et un numéro d'identité unique, nommé Idx, affecté à l'interrupteur virtuel dans Domoticz. Cet Idx peut être trouvé dans le tableau des dispositifs de l'interface web:Configuration / Dispostifs [Setup / Devices].

Au minimum il faut donc modifier l'adresse du serveur MQTT, et le numéro d'identité Domoticz dans Tasmota. Je voudrais auss modifier l'adresse du serveur Syslog, le niveau de journalisation et les divers noms de l'appareil. Les paramètres peuvent être modifiés un par un dans divers menus de l' écran de configuration de l'interface Web de Tasmota. Cela devient très vite fastidieux et sujet aux erreurs souvent en oubliant de définir quelque chose. Je préfère utiliser la Console qui permet de saisir une seule chaîne contenant de multiples commandes, en exploitant la fonction Backlog.

Backlog Hostname Test; Topic Test; FriendlyName Test; deviceName Test; mqtthost damus.local; loghost damus.local; syslog 1; DzIdx1 1;

Le lecteur averti aura remarqué que le nom de l'appareil est déjà changé en Test. La raison en est que j'ai oublié de faire une capture d'écran lors de la première exécution de Backlog donc je suis retourné à la console pour capturer l'écran après coup.

Lors de la saisie de la commande Backlog, n'oubliez pas le point-virgule de fin. Sans lui la dernière partie, qui dans ce cas précise fixe le numéro d'index de l'appareil dans Domoticz, ne sera pas exécutée.

Le nom d'hote Zeroconf du Pi, soit damus.local a été utilisé à la fois pour l'adresse du courtier MQTT (paramètre mqtthost) et l'hôte Syslog (paramètre loghost). L'adresse IP statique du Pi aurait pu être utilisée à la place. D'ailleurs, je suggérerais de le faire, car je ne suis pas certain que ce mDNS soit pris en charge dans les versions plus récentes de Domoticz. Je sais qu'après la version 9.1.0, Tasmota ne publie plus le service son interface Web sur mDNS.

Pour tester cette configuration, il est probablement plus facile de brancher une lumière dans la fiche murale à ce stade. Basculez l'état de l'interrupteur virtuel en cliquant sur l'icône d'ampoule dans l'interface Web.

Assurez-vous que la fiche murale physique (c'est-à-dire la lumière) suit l'état de l'interrupteur virtuel. Essayez ensuite dans l'autre sens. Allumez et éteignez la lumière à l'aide de l'interrupteur de la fiche murale (pas l'interrupteur d'éclairage s'il y en a un) et vérifiez que l'état du périphérique virtuel est mis à jour. Sachez que la mise à jour peut prendre un peu de temps. Les impatients peuvent rafraîchir la page web; F5 fonctionne dans de nombreux navigateurs Web.

Configuration du pont HA Bridge toc

La première partie de la procédure suivante ne doit être effectuée qu'une seule fois. Elle définit le nom d'hôte ou l'adresse IP du serveur sur lequel s'exécute Domoticz. Il n'est pas nécessaire que Ha Bridge soit exécuté sur le même ordinateur que le reste du système domotique, d'ailleurs, j'ai déjà décrit son installation sur un ordinateur monocarte différent dans HA Bridge on Armbian Working with Domoticz and Alexa.

La deuxième partie de la procédure ajoute tous les appareils virtuels de Domoticz pouvant être présentés comme des ampoules Hue à la base de données des appareils émulés par HA Bridge. En pratique, tous les dispositifs virtuels dans Domoticz ne seront pas ajoutés, seulement ceux où il est judicieux d'utiliser des commandes vocales.

Autres services pour la domotique sur un Raspberry Pi (en Anglais)-> <-Configuration d'un Raspberry Pi en tant qu'ordinateur sans tête (septembre 2021)