Mosquitto est un courtier de messagerie (broker) MQTT (Message Queuing Telemetry Transport) open source. MQTT est un protocole de communication légère et basée sur la publication/abonnement, souvent utilisé dans les applications IoT (Internet des Objets) pour la transmission de messages entre les appareils connectés.
En d'autres termes, Mosquitto agit comme un intermédiaire dans les systèmes IoT, permettant aux dispositifs de publier des messages sur des sujets spécifiques et de s'abonner à des sujets pour recevoir des messages. Ce courtier MQTT facilite la communication bidirectionnelle asynchrone entre les différents appareils et applications au sein d'un réseau IoT.
Il existe des implémentations de Mosquitto disponibles pour différentes plates-formes, ce qui en fait un choix populaire pour la mise en œuvre de solutions de communication IoT. Mosquitto est également bien connu pour sa légèreté, sa simplicité d'utilisation et sa capacité à être intégré dans divers scénarios d'automatisation et de communication machine à machine.
Zigbee2MQTT est un projet open source qui permet d'intégrer des appareils Zigbee à un réseau domotique en utilisant le protocole MQTT (Message Queuing Telemetry Transport). Le protocole Zigbee est couramment utilisé dans les systèmes domotiques pour la communication sans fil entre différents dispositifs, tels que les capteurs, les actionneurs, les ampoules intelligentes, etc.
Zigbee2MQTT fonctionne en tant que pont (bridge) entre le réseau Zigbee et le protocole MQTT. Son rôle est de faire le lien entre les appareils Zigbee et le serveur MQTT, permettant ainsi aux dispositifs Zigbee d'être intégrés à un écosystème domotique basé sur MQTT.
En utilisant Zigbee2MQTT, les utilisateurs peuvent ajouter des appareils Zigbee à leur réseau domotique existant, offrant ainsi une plus grande flexibilité dans le choix des dispositifs compatibles.
Pour ce projet, nous allons partir sur une machine virtuelle, Debian 11, et en faire un environnement capable d'integrer mosquitto et Zigbee2Mqtt
Voici les commandes pour l'installation
# On passe sur le compte root
su
# Installation de sudo
apt install sudo
apt install mosquitto
apt install mosquitto-clients
# Pour verifier L'etat de mosquitto CTRL+X pour sortir
systemctl status mosquitto
# On modifie le MDP et le nom d'utilisateur du brooker
sudo mosquitto_passwd -c /etc/mosquitto/passwd ID
nano /etc/mosquitto/conf.d/mosquitto.conf
# Il faudra ajouter les informations suivantes
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
# Et relancer le service
systemctl stop mosquitto
systemctl start mosquitto
On essaye de trouver la clé conbee sur notre machine, il faudra la monter dans la machine virtuelle
ls -l /dev/ttyACM0
ls -l /dev/serial/by-id # on aura toutes les infos nécessaire pour la configuration
on commence l'installation
# On install CURL
apt update && apt install curl
sudo curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs git make g++ gcc libsystemd-dev
# Création du repo
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
Optional: NODE_MAJOR peut etre changer en fonction du besoin
NODE_MAJOR=16
NODE_MAJOR=18
NODE_MAJOR=20
NODE_MAJOR=21
sudo apt-get update
sudo apt-get install nodejs -y
Vérifier la version
node --version # doit etre V18.x, V20.x, V21.X
npm --version # doit etre 9.X or 10.X
Création d'un dossier et mise en place des droits
sudo mkdir /opt/zigbee2mqtt
sudo chown -R ${USER}: /opt/zigbee2mqtt
# Clone du repo Zigbee2MQTT
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
# On installe les dépendences
cd /opt/zigbee2mqtt
npm ci
# Création de l'application
npm run build
On passe à la configuration
cp /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml
nano /opt/zigbee2mqtt/data/configuration.yaml
homeassistant: true # si on veut une integration dans home assistant
frontend: true # pour une interface web de gestion (:8080)
# Configuration MQTT
mqtt:
base_topic: zigbee2mqtt
server: 'mqtt://localhost' # l'installation est local pour notre cas
# Si vous mettez une authentification en place il faudra les renseignées
# user: my_user
# password: my_password
serial:
# Dans mon cas il s'agit d'une conbee 2
port: /dev/ttyACM0
adapter: deconz
On demarre Z2M
cd /opt/zigbee2mqtt
npm start
Zigbee2MQTT:info 2019-11-09T13:04:01: Logging to directory: '/opt/zigbee2mqtt/data/log/2019-11-09.14-04-01'
Zigbee2MQTT:info 2019-11-09T13:04:01: Starting Zigbee2MQTT version 1.6.0 (commit #720e393)
Zigbee2MQTT:info 2019-11-09T13:04:01: Starting zigbee-herdsman...
Zigbee2MQTT:info 2019-11-09T13:04:03: zigbee-herdsman started
Zigbee2MQTT:info 2019-11-09T13:04:03: Coordinator firmware version: '{"type":"zStack30x","meta":{"transportrev":2,"product":2,"majorrel":2,"minorrel":7,"maintrel":2,"revision":20190425}}'
Zigbee2MQTT:info 2019-11-09T13:04:03: Currently 0 devices are joined:
Zigbee2MQTT:warn 2019-11-09T13:04:03: permit_join
set to true
in configuration.yaml.
Zigbee2MQTT:warn 2019-11-09T13:04:03: Allowing new devices to join.
Zigbee2MQTT:warn 2019-11-09T13:04:03: Set permit_join
to false
once you joined all devices.
Zigbee2MQTT:info 2019-11-09T13:04:03: Zigbee: allowing new devices to join.
Zigbee2MQTT:info 2019-11-09T13:04:03: Connecting to MQTT server at mqtt://localhost
Zigbee2MQTT:info 2019-11-09T13:04:03: Connected to MQTT server
On créer un service pour un demarrage auto
sudo nano /etc/systemd/system/zigbee2mqtt.service
[Unit]
Description=zigbee2mqtt
After=network.target
[Service]
Environment=NODE_ENV=production
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
# Or use StandardOutput=null if you don't want Zigbee2MQTT messages filling syslog, for more options see systemd.exec(5)
StandardError=inherit
Restart=always
RestartSec=10s
User=monuser # il faudra le changer au besoin
[Install]
WantedBy=multi-user.target
On démarre le service
sudo systemctl start zigbee2mqtt
# Voir le status
systemctl status zigbee2mqtt.service
# et on l'active
sudo systemctl enable zigbee2mqtt.service
On peut vérifier le fonctionnement de la machine et du service en allant sur l'ipdelamachine:8080 dans un navigateur
Depuis la nouvelle version, l'installation comporte un systeme de mise à jour automatique via un script .sh
Nous allons donc faire ensemble cette mise à jour, il faudra ce connecter en SSH sur le serveur est:
sudo systemctl stop zigbee2mqtt
cd /opt/zigbee2mqtt
sudo ./update.sh
Ensuite il faut attendre la fin du script de mise à jour
# J'ai eu un message d'erreur concernant des soucis de droit
# Il faudra donc lancer la commande
git config --global --add safe.directory /opt/zigbee2mqtt
Nous vérifions le service après la mise à jour avec la commande
systemctl status zigbee2mqtt
Nous devrions normalement pouvoir nous connecter sur la page via ip:8080