Sommaire

Pont RF en Wi-Fi

Introduction

Contexte

Un des gros challenges de la domotique est l’alimentation de nos solutions et plus particulièrement de nos capteurs. C’est toujours embêtant d’obstruer une prise murale pour un simple capteur.
Les solutions en Wi-Fi sont assez consommateur et limitent donc leur utilisation sous batterie.

Les LPD (“Low Power Device”) fonctionnant dans la bande des 433 MHz sont des éléments connus pour tenir longtemps. À titre d’exemple, on peut parler des télécommandes de garage.
Cette bande de fréquence étant basse, elle pénètre bien les éléments de notre habitat et possède par conséquent une longue portée. L’utilisation de cette bande nécessite un élément permettant de faire le lien entre ce “réseau” RF et l’IP.

Pour cela, il existe plusieurs solutions. J’en ai trouvé une assez simple et pas trop couteuse de chez Sonoff, le “Sonoff RF Bridge”.
Pourquoi cette solution ? Car il est facilement flashable avec un firmware alternatif afin de, comme d’habitude, de s’affranchir du cloud et donc du vol de nos données (j’exagère peut-être un peu).

/installation-du-serveur-mqtt-mosquitto/img/IMG_20190822_134139-1024x469.webp
Sonoff RF Bridge

En tant que capteur, j’ai pris deux capteurs de porte (une pour la porte de chez moi et l’autre pour mon frigo) que voici :

/installation-du-serveur-mqtt-mosquitto/img/image-5.webp
Capteur de porte

L’avantage de ce capteur est qu’il est bidirectionnel, il envoie un signal à lorsque les deux éléments s’éloignent et un autre quand ils sont proches. De cette manière, on obtient distinctement quand la porte est ouverte et quand elle est fermée. Il fonctionne avec une pile LR03 (“AAA”), un modèle assez courant qui est de plus déjà incluse !

Solution

On va donc voir dans ce tutoriel comment mettre tout cela en place et comment l’intégrer avec Home Assistant.

Pour le firmware du pont, j’ai choisi d’utiliser Tasmota et non ESPHome car j’ai vu qu’il fallait modifier le hardware pour que cela fonctionne bien…

L’intégration d’un module sous Tasmota dans un système domotique se fait via l’utilisation du protocole MQTT. On installera donc dans un premier temps un serveur MQTT du nom de Mosquitto.

Serveur MQTT

Installation

1
sudo apt-get install mosquitto

Normalement, notre serveur est lancé dès l’installation finie. On vérifie avec la commande systemctl status mosquitto.

Configuration

Systemd

La commande systemctl list-unit-files | grep mosquitto m’indique que le service n’est pas activé au démarrage du serveur car elle me retourne “generated” au lieu de “enabled”.

On active donc le lancement du service au démarrage :

1
sudo systemctl enable mosquitto.service

La connexion avec HA s’effectue au démarrage de ce dernier. On doit alors s’assurer que Mosquitto démarre avant HA.

On va donc éditer le script de démarrage de HA (/etc/systemd/system/home-assistant@homeassistant.service) pour lui dire de se lancer après Mosquitto.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Unit]
Description=Home Assistant
After=network-online.target
After=network.target mosquitto.service

[Service]
Type=simple
User=homeassistant
ExecStart=/srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant"

[Install]
WantedBy=multi-user.target

On entre ensuite la commande systemctl daemon-reload prendre en compte se changement.

Authentification

Comme on ne néglige pas la sécurité (même sous son LAN), on va créer un compte utilisateur. Les données seront stockées dans le fichier /etc/mosquitto/passwd.

1
sudo mosquitto_passwd -c /etc/mosquitto/passwd homeassistant

On va donc ensuite éditer la configuration pour utiliser l’authentification. On ajoute donc les lignes suivantes dans le fichier /etc/mosquitto/mosquitto.conf.

1
2
allow_anonymous false
password_file /etc/mosquitto/passwd

Ainsi, on relance le service avec un systemctl restart mosquitto.service.

Tests

Notre pont va transmettre ses données au serveur MQTT. Pour être au plus proche de cela, on va tester le service depuis une autre machine (VM Ubuntu dans mon cas).

On installe donc le client Mosquitto sur ce PC :

1
sudo apt-get install mosquitto-clients

On va alors souscrire à un “topic” et y publier un message.
Pour cela, on ouvrira deux terminaux (ou deux connexions SSH) pour effectuer ces deux actions.

Dans le premier, on souscrit au topic test/untest :

1
mosquitto_sub -h 192.168.10.1 -u homeassistant -P mapassphrase -t "test/untest"

Et dans l’autre, on publie le message “salut” :

1
mosquitto_pub -h 192.168.10.1 -u homeassistant -P mapassphrase -t "test/untest" -m "salut"

Le message devrait alors apparaitre dans la première fenêtre.

Maintenant que notre serveur MQTT est en place, on va pouvoir s’attaquer au pont de connexion.

Intégration à Home Assistant

L’intégration se fait simplement dans le menu d’intégration. Comme je ne le savais pas, je l’ai fait à la main via le fichier configuration.yaml.

1
2
3
4
mqtt:
  broker: 127.0.0.1
  username: homeassistant
  password: !secret secret_mqtt_password

Mon broker est installé sur le même serveur que HA, d’où l’adresse d’hôte locale.
Je ne sais pas pourquoi, mais le nom d’utilisateur ne passe pas en secret… Je l’ai donc écrit directement et ça fonctionne…

Pont de connexion

Software

On va d’abord télécharger le firmware Tasmota sur la page Github associé ou sur le lien direct.

On télécharge ensuite l’utilitaire de flashage NodeMCU PyFlasher depuis sa page Github.

Hardware

Pour flasher le Sonoff, il faut accéder aux pins de connexion série de la carte. Pour accéder à la carte, il faut ouvrir le boitier (les vis sont sous les patins antidérapants).

/installation-du-serveur-mqtt-mosquitto/img/image-6-1024x643.webp
Carte du Sonoff RF Bridge

Les pins sont identifiés à gauche, on a donc le pin tout en haut qui correspond au 3,3 V et l’avant-dernier à la masse. L’interrupteur et à mettre sur “OFF” pour le flashage.

On y insère donc notre convertisseur USB/TTL en n’oubliant pas d’inverser RX et TX :

/installation-du-serveur-mqtt-mosquitto/img/image-7-1024x710.webp
Carte connectée au convertisseur

Pour assurer le maintien de la connexion, j’ai ajouté une attache :

/installation-du-serveur-mqtt-mosquitto/img/image-8.webp
Pins maintenus par l’attache

On peut donc passer au flashage du module.

Flashage

Pour démarrer la carte en mode flashage, il faut brancher l’USB au PC tout en appuyant (environ 5 secondes suffisent) sur le bouton d’appairage (situé à gauche dans la dernière illustration).

On lance ensuite NodeMCU PyFlasher, on sélectionne le port série associé au convertisseur.
On sélectionne le firmware et l’on paramètre l’outil comme sur la capture ci-dessous.

/installation-du-serveur-mqtt-mosquitto/img/image-10.webp
NodeMCU PyFlasher

On clique donc sur le bouton de flashage et l’on attend…

Configuration basique

Un réseau Wi-Fi devrait apparaitre ayant pour nom quelque chose du type “sonoff-5802”. On se connecte alors dessus et l’on va sur la page du pont à l’adresse 192.168.4.1.
On inscrit ensuite nos informations de connexion Wi-Fi dans le menu de configuration. Après validation, l’équipement devrait-être accessible via l’adresse qu’a attribué votre serveur DHCP.
On spécifie le type de module dans le menu de configuration du module : “Sonoff Bridge (25)”.
Au redémarrage, l’interface devrait avoir changé.

/installation-du-serveur-mqtt-mosquitto/img/image-11.webp
Interface Tasmota du Sonoff RF Bridge

On va maintenant configurer une IP statique avec les commandes suivantes dans la “Console” :

1
2
3
4
IPAddress1 192.168.10.200
IPAddress3 255.255.255.0
IPAddress2 192.168.10.254
IPAddress4 192.168.10.7

Ces commandes configurent respectivement : l’adresse IP, le masque, la passerelle et le serveur de résolution de noms.

On en profite pour configurer les paramètres MQTT :

/installation-du-serveur-mqtt-mosquitto/img/image-12.webp
Paramètres MQTT

Tests

On va maintenant tester la réception des signaux en 433 MHz. On joue donc avec notre capteur de porte et l’on regarde le résultat dans la console.

/installation-du-serveur-mqtt-mosquitto/img/Screenshot_41_.webp
J’obtiens donc une ligne pour l’ouverture et une autre pour la fermeture du capteur

21:42:42 RSL: tele/RF_Bridge/RESULT = {“RfReceived”:{“Sync”:14020,“Low”:480,“High”:1380,“Data”:“54350E”,“RfKey”:“None”}} 21:42:47 RSL: tele/RF_Bridge/RESULT = {“RfReceived”:{“Sync”:14010,“Low”:490,“High”:1370,“Data”:“54350A”,“RfKey”:“None”}}

Noter tous les codes de tous vos capteurs, on en aura besoin pour la configuration de second niveau.

Configuration

Sonoff RF Bridge

La première chose à faire et de s’assurer de maintenir le dernier état de notre capteur si un redémarrage se produit. On va aussi spécifier nous-mêmes le message qui va être envoyé à notre broker.

Cela se fait par la création de règles via la console Tasmota.
Voyez ci-dessous mon exemple pour les signaux d’ouverture et fermeture de mes deux capteurs.

1
rule1 on RfReceived#Data=54350A do publish2 RFBridge/PorteEntree Ouvert endon on RfReceived#Data=54350E do publish2 RFBridge/PorteEntree Ferme endon on RfReceived#Data=5C800A do publish2 RFBridge/Frigo Ouvert endon on RfReceived#Data=5C800E do publish2 RFBridge/Frigo Ferme endon

On active ensuite la règle avec la commande rule1 1 (rule1 0 pour la désactiver).

Voici le résultat en manipulant le capteur destiné à mon frigo :

/installation-du-serveur-mqtt-mosquitto/img/image-13.webp
Console Tasmota

Après avoir positionné les capteurs et vérifié que le pont les capte bien, on peut passer à l’intégration sous Home Assistant.

Home Assistant

Ces capteurs délivrent des messages de type binaire. On va donc configurer un “binary_sensor” pour chaque capteur.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
binary_sensor:

  - platform: mqtt
    name: "Porte d'entrée"
    state_topic: "RFBridge/PorteEntree"
    availability_topic: "tele/RF_Bridge/LWT"
    qos: 1
    payload_on: "Ouvert"
    payload_off: "Ferme"
    payload_available: "OK"
    payload_not_available: "HS"
    device_class: door
  
  - platform: mqtt
    name: "Réfrigérateur"
    state_topic: "RFBridge/Frigo"
    availability_topic: "tele/RF_Bridge/LWT"
    qos: 1
    payload_on: "Ouvert"
    payload_off: "Ferme"
    payload_available: "OK"
    payload_not_available: "HS"
    device_class: opening

Après une vérification de la configuration et un redémarrage de HA, on peut créer une carte d’entités pour visualiser l’état de nos deux portes.

À ce moment-là, je remarque que mes deux capteurs affichent le statut “Unavailable”… Mes recherches sur Internet mon permis de résoudre le problème en commentant les lignes availability_topic

En redémarrant le pont et en regardant la console, je remarque bien que je ne me suis pas trompé sur le “topic” pour la disponibilité :

/installation-du-serveur-mqtt-mosquitto/img/Screenshot_38.webp
Extrait de la console Tasmota du pont RF

Bon, en tout cas le résultat est bien là :

/installation-du-serveur-mqtt-mosquitto/img/image-14.webp
Capteurs RF sur Lovelace (HA)

Bonus

On peut aussi ajouter des compteurs de changement d’état grâce au composant History Statistics Sensor de HA.
Voici mon exemple pour compter le nombre de fois où ma porte d’entrée s’ouvre durant la journée :

1
2
3
4
5
6
7
8
sensor:
  - platform: history_stats
    name: Ouverture porte d'entrée
    entity_id: binary_sensor.porte_d_entree
    state: 'on'
    type: count
    start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
    end: '{{ now() }}'

Et aussi le temps d’ouverture journalier de mon réfrigérateur :

1
2
3
4
5
6
7
8
sensor:
  - platform: history_stats
    name: Temps réfrigérateur ouvert
    entity_id: binary_sensor.refrigerateur
    state: 'on'
    type: time
    start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
    end: '{{ now() }}'

Conclusion

On a donc pu intégrer des capteurs basse consommation et peu onéreuse dans notre système domotique. On pourra songer à ajouter d’autres capteurs en 433 MHz comme des détecteurs de fuite d’eau ou de fumée ou encore plus de capteurs (sur les fenêtres par exemple).

Ce tutoriel nous a aussi permis de découvrir le protocole de messagerie MQTT ainsi que l’excellent firmware Tasmota.