Je poursuis la mise en place de mon nouveau serveur avec ESPHome, Mosquitto et Node-RED.
Introduction
Suite à la partie 1 de mon reset domotique,
je vais donc installer les composants qui gravite autour de mon système domotique.
Nous allons ici voir comment préparer, installer et configurer les services suivants :
- ESPHome (mon article dessus)
- Mosquitto (serveur MQTT)
- Node-RED (présenté plus bas)
Ces éléments seront installé avec Docker via Docker Compose.
ESPHome
Préparation
Voici donc mon fichier docker-compose.yml
:
version: '3.8'
services:
esphome:
image: esphome/esphome
container_name: esphome
restart: always
healthcheck:
test: curl -f http://localhost:6052 || exit 1
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
environment:
- TZ=Europe/Paris
#ports:
# - 6052:6052
volumes:
- /var/lib/esphome/config:/config:rw
network_mode: host
J’ai mis un healthcheck
afin d’avoir le status du service.
Ainsi, la commande docker ps
renverra un status healthy
si le service (ici l’interface Web) est fonctionnel.
La section ports
est commenté car j’utilise directement le réseau de l’hôte
(mon serveur “physique”). J’ai fait de cette manière afin que le
mDNS fonctionne.
Afin d’avoir des données persistantes, j’ai mappé un dossier sur /config
.
Installation
Rien de compliqué ici, un simple docker-compose up -d
et le tour est joué !
L’interface Web devrait-être accessible sur le port 6052
.
Mosquitto
Préparation
J’ai préparé la configuration en amont afin d’utiliser le serveur
de manière authentifiée.
Ci-dessous, mon fichier de configuration.
- Fichier
/etc/mosquitto/mosquitto.conf
listener 1883
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
password_file /mosquitto/config/mosquitto-passwd
allow_anonymous false
Cette configuration nécessite donc un fichier de mot de passe.
Pour le créer, j’ai lancé un conteneur du service afin d’y initier le fichier.
$ docker run -it --entrypoint sh -v /etc/mosquitto:/data eclipse-mosquitto
mosquitto_passwd -b -c /data/mosquitto-passwd MonUserName MonPassword
exit
Astuce
Ajouts d’utilisateurs supplémentaires
Pour ajouter d’autres comptes, il faudra enlever l’option -c
.
Pour en créer de nouveau plus tard une fois le service lancé, il faudra exécuter la commande dans le conteneur.
$ docker exec -it mosquitto sh
mosquitto_passwd -b /mosquitto/config/mosquitto-passwd MonUserName MonPassword
Le Docker Compose :
version: '3.8'
services:
mosquitto:
image: eclipse-mosquitto:2.0
container_name: mosquitto
restart: always
volumes:
- /etc/mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf:ro
- /etc/mosquitto/mosquitto-passwd:/mosquitto/config/mosquitto-passwd
- /var/log/mosquitto/:/mosquitto/log/
- /var/lib/mosquitto/data/:/mosquitto/data/
ports:
- 1883:1883
Installation
Une fois le conteneur lancé on peut effectuer des tests de la même manière que sur mon article sur le pont RF.
Node-RED
Présentation
Node-RED c’est un outil de programmation dit “low code”,
c’est-à-dire que la programmation se fait par le biais d’une interface graphique
(au lieu d’écrire du code, on utilise des blocs de fonction).
Il est utilisé pour de la programmation liée à des évènements d’applications
(je ne sais pas trop comment mieux traduire “for event-driven applications”)…
Avec ce logiciel, on va pouvoir recueillir des informations à partir d’évènements
exposés comme une API par exemple.
Il existe un connecteur Home Assistant pour ce logiciel.
De ce fait, on va pouvoir effectuer des actions en fonctions des évènements
de notre système domotique. Je vais donc utiliser Node-RED pour configurer mes
automatismes en lieu et place de ceux d’HA.
Préparation
Le Docker Compose :
version: '3.8'
services:
node-red:
image: nodered/node-red:latest
container_name: nodered
restart: unless-stopped
user: "0:0"
environment:
- TZ=Europe/Paris
#ports:
# - 1880:1880
volumes:
- /var/lib/node-red/data:/data
network_mode: host
J’initie un fichier de configuration en récupérant celui sur le
GitHub de Node-RED
que je place afin d’être dans le dossier /data
du conteneur
(soit /var/lib/node-red
sur l’hôte (dans mon cas)).
Post-configuration
Une fois le conteneur lancé, je m’attarde à sécuriser l’accès via un mot de passe.
Pour cela, je vais éditer le fichier de paramètres.
Avant cela, je dois générer un hash du mot de passe.
La méthode la plus accessible est de le faire dans le conteneur.
Je SSH donc dans le conteneur et lance la commande fournis dans la
documentation officielle.
docker exec -it nodered bash
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" MonSuperMotsDePasse
En retour, j’obtiens donc le hash.
$2a$08$J/ycU0EmKox6lcKl271DVOeYTiI85mN/oTAAVfYAp5Rf.KLupfpuq
Je copie cela pour la suite.
j’édite donc le fichier settings.js
en remplaçant la section adminAuth
:
|
|
En relançant le conteneur (docker-compose restart
), l’authentification
devrait-être demandé.
En consultant les logs (docker-compose logs
),
j’ai remarqué l’avertissement suivant :
Your flow credentials file is encrypted using a system-generated key.
If the system-generated key is lost for any reason, your credentials file will not be recoverable, you will have to delete it and re-enter your credentials.
You should set your own key using the ‘credentialSecret’ option in your settings file. Node-RED will then re-encrypt your credentials file using your chosen key the next time you deploy a change.
J’ai donc amélioré cela en éditant le paramètre credentialSecret
avec un secret créer avec un pwgen -B 32 1
:
|
|
Intégration d’HA
Il faut ajouté la palette de contrôle node-red-contrib-home-assistant-websocket.
Pour cela, un clique sur le burger en haut à droite pour
ensuite séléctionner “Manage palette”.
Dans l’onglet Install, il faut installer la palette
node-red-contrib-home-assistant-websocket qui se retrouve
grâce à barre de recherche.
Pour configurer la connexion avec Home Assistant, il faut éditer un des “nodes”
de Node-RED. Dans la liste de ces nodes à gauche de l’interface, je scroll jusqu’à
trouvé la section home assistant.
Je drag and drop un node (“entity” dans mon cas) et double-clic dessus.
Dans le menu d’édition, on voit bien qu’aucun serveur n’est renseigné.
Je clique alors sur le ✏️ afin d’y ajouté mon serveur.
Le token se génère sur la page de votre profile utilisateur HA (tout en bas) :
Une fois le tout validé on relance le conteneur Node-RED,
ces logs nous valide la bonne configuration de notre serveur HA.
Pour la configuration de flow, je n’ai pas encore bien maitrisé ce logiciel. Une fois cet apprentissage effectué ,je ferais un petit article avec un exemple concret et un peu complexe (exemple que je suis en train de mettre en place).
SSL
En cours de réalisation.
Conclusion
De par mon expérience avec mon ancien serveur, j’ai constitué une nouvelle
base pour mon système domotique. Bien que je n’ai pas eu de problème particulier
avec mon ancienne installation, je pense avoir une installation plus saine.
Ma façon de faire est peut-être un peu différente que les autres tutoriels
que l’on peut voir sur le net. Je fais de cette manière pour pouvoir redéployer
mes services le plus rapidement possible car mes services sont en intégralités
mis en place via des rôles Ansible.
Donne-moi un peu de temps pour la partie SSL avec Traefik !