Aller au contenu

Broker MQTT

Abls-Habitat utilise deux bus MQTT distincts. Les confondre est une source classique de confusion.

Bus Où il tourne Qui s'y connecte Contenu
MQTT API À côté de l'API Tous les agents du domaine, l'API, les navigateurs État des agents, visuels, historique
MQTT local Sur le serveur master de chaque site Les agents du site Commandes SET_DO/ et SET_AO/ vers les sorties

Le bus local reste fonctionnel même si la liaison vers l'API est coupée : les automatismes du site continuent de fonctionner.


Le bus MQTT local

Il est fourni par le paquet abls-agent-server sur le serveur master. Les agents en obtiennent l'adresse (master_hostname) dans la réponse d'enrôlement : aucune configuration locale n'est nécessaire.

Port : 1883, en clair, sur le réseau du site.

Ne pas exposer le bus local

Ce bus n'est pas authentifié. Il doit rester confiné au réseau local. N'ouvrez jamais le port 1883 du master vers Internet.

Topics utiles pour le diagnostic :

mosquitto_sub -h <master> -t '#' -v
Topic Sens Contenu
SET_DO/<tech_id>/<numéro> D.L.S → agent Consigne d'une sortie T.O.R
SET_AO/<tech_id>/<numéro> D.L.S → agent Consigne d'une sortie analogique

Le bus MQTT de l'API (socle auto-hébergé)

Seuls les administrateurs d'un socle auto-hébergé ont à l'installer.

Installation

sudo apt install mosquitto mosquitto-clients
sudo systemctl enable --now mosquitto
sudo dnf install mosquitto
sudo systemctl enable --now mosquitto

Comptes

Deux familles de comptes sont attendues :

Compte Utilisé par Mot de passe
api L'API elle-même Clé mqtt_password de /etc/abls-habitat-api.conf
<domain_uuid>-agent Les agents du domaine Généré par l'API, transmis à l'enrôlement
sudo mosquitto_passwd -c /etc/mosquitto/passwd api
# /etc/mosquitto/conf.d/abls.conf
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd

Les comptes agents sont gérés par l'API

Vous n'avez pas à créer manuellement les comptes <domain_uuid>-agent : l'API les provisionne et transmet leur mot de passe aux agents lors de l'enrôlement.

WebSocket pour les interfaces web

La Console et Home s'abonnent au bus via WebSocket :

listener 9001
protocol websockets

Placez un reverse-proxy TLS devant ce port.


Activer TLS

Côté API, dans /etc/abls-habitat-api.conf :

{
  "mqtt_over_ssl":   true,
  "mqtt_port":       8883,
  "mqtt_ca_file":    "/etc/abls/ca-interne.pem",
  "mqtt_ssl_verify": true
}

Côté agent, si l'autorité de certification est privée, déclarez-la localement :

{
  "mqtt_ca_file": "/etc/abls/ca-interne.pem"
}

Si mqtt_ca_file et mqtt_ca_path sont vides, l'agent cherche automatiquement le magasin système de la distribution. Le détail des chemins explorés figure dans les paramètres communs.

mqtt_ssl_verify: false

Désactiver la vérification du certificat expose la liaison aux attaques de type man-in-the-middle. À réserver strictement au développement.


Dépannage

Symptôme Piste
L'agent s'enrôle mais ne remonte aucun état Connexion au bus API refusée : vérifier mqtt_password renvoyé par l'API et le pare-feu
L'agent apparaît « mort » dans la Console alors qu'il tourne Le testament MQTT a été publié : la connexion au bus API a été coupée
Les sorties ne s'actionnent pas Vérifier le bus local : mosquitto_sub -h <master> -t 'SET_DO/#' -v
Unable to find CA au démarrage mqtt_over_ssl actif sans magasin CA trouvé : renseigner mqtt_ca_file
Erreur TLS certificate verify failed Autorité privée non déclarée côté agent