Journal collectd et MQTT

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
14
29
nov.
2025

Bonjour,

hier j'ai voulu faire en sorte que mon routeur envoie des infos à mon contrôleur domotique.

Vu que j'ai méchamment galéré, je vous partage ça.

Protocole

D'après ce que j'ai pu lire à gauche et à droite, le protocole MQTT est le plus adapté à mon besoin, qui est d'envoyer très peu de données, et à une fréquence basse.

Là, par exemple, il s'agit de dire si les téléphones des hôtes de la maison sont connectés au wifi. Ça permet de détecter la présence des gens.

Mon routeur est motorisé par OpenWrt et mon contrôleur domotique par Home Assistant.

Et ça semble bien tomber, OpenWrt et Home-Assistant supportent tous les deux MQTT :

  • openwrt avec collectd et son extension mqtt,
  • homeassistant avec mosquitto.

Installation

Côté openwrt il faut installer les paquets collectd, collectd-mod-mqtt et collectd-mod-exec. Soit en clic-clic depuis Luci ou en se connectant en ssh sur la bécane.

Sur HA, il faut installer Mosquitto broker sur la page des modules complémentaires. C'est assez trivial.

Config côté collectd

C'est dans le fichier /etc/collectd.conf que ça se passe.

Il faut charger et exécuter un petit script sur le routeur. Ici /usr/bin/presence.sh :

[...]
LoadPlugin exec
<Plugin exec>
        Exec "nobody" "/usr/bin/presence.sh"
</Plugin>
[...]

Il faut aussi configurer collectd pour charger le plugin et envoyer les statistiques sur mqtt :

LoadPlugin mqtt
<Plugin mqtt>
        <Publish "service">
                Host "homeassistant.chez_moi.org"
                Port 1883
                User "mon_utilisateur"
                Password "mon_mot_de_passe"
                Qos 0
        </Publish>
</Plugin>
[...]

Vous aurez bien entendu préalablement configuré votre broker MQTT sur home-assistant. De ce côté, je ne vais pas m'épancher, ça marche tout droit.

Le script

Pour que les données soient envoyées par openwrt en mqtt sur le contrôleur domotique, il faut que le script sorte sur sa sortie standard quelque chose du style :

#!/bin/sh
HOSTNAME="router"
INTERVAL="${COLLECTD_INTERVAL:-15}"

# Convert INTERVAL to integer (strip decimals)
INTERVAL_INT="${INTERVAL%%.*}"

[...]
while sleep "$INTERVAL_INT"; do
[...]
   echo "PUTVAL \"$HOSTNAME/<categorie>/<valeur>\" interval=$INTERVAL_INT N:$presence"
done

Pour adapter la sortie, il va vous falloir choisir categorie et valeur.

La catégorie peut être ce que vous voulez. Par contre, le champ valeur doit être listé dans la base de donnée des types ! C'est ce que j'ai peiné à trouver.

Par défaut, la bibliothèque de types se trouve dans /usr/share/collectd/types.db. Il vous suffit de choisir parmi tous les types listés dedans, ou alors d'en d'en rajouter un à vous.

Par exemple dans la ligne suivante, extraite de types.db :

gauge                   value:GAUGE:U:U

Le champ du script d'au dessus doit être remplacé par le mot gauge.

Voilà, j'espère que ça dépannera quelqu'un.

  • # Auth MQTT

    Posté par  (site web personnel) . Évalué à 3 (+1/-0).

    Merci pour cet article.

    Comment sont authentifiés les clients MQTT (collectd) par le serveur et comment est authentifié le serveur par les clients ?

    Tout est sur le même réseau local ? le Home Assistant est sur ton tél ?

    C'est la seconde fois que j'entends parlé de Mosquitto en 1 mois, ce qui, pour un projet Eclipse, est rare en ce moment.

    I use Arch BTW

    • [^] # Re: Auth MQTT

      Posté par  . Évalué à 2 (+2/-0).

      Tout est sur mon réseau local, et Home-Assistant est installé sur un raspberry-pi.

      La connexion se fait en TCP du client au serveur. Il y a un nom d'utilisateur et un mot de passe qui sont définis côté contrôleur domotique. Si tu regardes bien la config de collectd qui est dans mon post, tu les renseignes dans le fichier de conf. Il est aussi possible d'encrypter les choses, mais je ne l'ai pas mis en œuvre.

      MQTT est très lié à l'IoT, puisqu'il permet des échanges entre appareils. Et Mosquitto est l'un des "brokers" les plus utilisés pour ça.

      Bonne journée !

  • # Intégration OpenWrt

    Posté par  . Évalué à 1 (+0/-0).

    Home assistant a une intégration pour OpenWrt.
    Bon, l'inconvénient est qu'il faut autoriser Home assistant à se connecter en ssh, en root, au routeur…

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.