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
collectdet 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 YBoy360 (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 foué . É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 Gilles Mocellin . É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…
[^] # Re: Intégration OpenWrt
Posté par foué . Évalué à 0 (+0/-0).
Voilà.
Donc, impossible à utiliser.
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.