openHAB 3.0 - passerelle RFLink/RFXCom 433MHz
Ce tutoriel concerne l’utilisation de périphériques communiquant en 433MHz sous openHAB 3.0 via une passerelle RFLink. RFLink est un projet Open Source qui permet de réaliser une passerelle (gateway) entre un logiciel domotique et des modules domotiques qui communiquent par ondes radio. C’est une alternative très économique à la gateway commerciale RFXCom. Le projet RFLink est développé par Stuntteam (blog du projet).
Voici le matériel utilisé pour ce tutoriel.
- pour la partie RFLink
- Arduino Mega 2560
- récepteur 433MHz Aurel RX-4M50RR30SF
- breadboard + câbles + 1 résistance 1KΩ
- PC sous Ubuntu avec l’IDE Arduino et le paquet
avrdude
- InoValley, capteur extérieur sans fil pour station météo FWS-310
- pour la partie openHAB
- Raspberry Pi 4 8Go sous openHABian 1.6.3
Fabrication de la passerelle RFLink
Cette partie est basée sur le tutoriel Fabriquer une passerelle domotique RFLink/RFXCom 433MHz pour 10,50€ (test avec Domoticz).
Câblage des modules radio
J’ai choisi d’utiliser un récepteur 433MHz de chez Aurel (réf. RX-4M50RR30SF, instruction manual). Pour ce module, le plan de câblage est le suivant:
RX-4M50RR30SF | connexion |
---|---|
2-7-11 | masse (GND de l’Arduino) |
3 | antenne |
10-15 | D16 de l’Arduino |
13 | non connectée |
14 | D19 de l’Arduino |
Pour démarrer, en guise d’antenne j’ai utilisé un simple morceau de cuivre de récupération 17cm de long. Comme préconisé dans la documentation du récepteur RX-4M50RR30SF, je l’ai connectée avec une résistance d'1KΩ.
Flashage du firmware
Il faut d’abord télécharger le firmware RFLink, ici la version v1.1_r48, et extraire le fichier RFLink.cpp.hex
. Une copie de cette archive est disponible ici.
Contrairement au tutoriel dont je me suis inspiré, je n’ai pas utilisé l’utilitaire RFLinkLoader car celui-ci n’est disponible que pour Windows. Or mon laptop fonctionne exclusivement sous Ubuntu. Après quelques recherches sur Internet j’ai trouvé que l’on pouvait très bien flasher le firmware sur l’Arduino directement en ligne de commande à l’aide de l’utilitaire avrdude
, lequel est d’ailleurs le programme utilisé par l’IDE Arduino (cf. tuto Programming Arduino Mega using avrdude).
La commande utilisée sous Ubuntu est: avrdude -p atmega2560 -c stk500v2 -P /dev/ttyACM0 -b 115200 -D -F -U flash:w:RFLink.cpp.hex
NB: Notez l’option -D
(cf. post atmega2560 won’t erase when programming).
Tests
L’Arduino étant toujours connecté en USB au PC Ubuntu, nous pouvons tester le bon fonctionnement avec le moniteur série de l’IDE Arduino. Il faut pour cela configurer le débit du port série à 57600 baud. On peut ainsi visualiser les données transmises par les périphériques 433MHz à portée. Pour ce tutoriel j’ai utilisé un capteur de température InoValley de chez Pearl Diffusion (capteur extérieur sans fil pour station météo FWS-310).
La ligne 20;01;InoValley;ID=4101;TEMP=00E9;HUM=36;BAT=LOW;
nous renseigne sur l’id du capteur (4101
), la température (00E9
en hexa, soit 23,3°C
) et le taux d’humidité (36%
).
Configuration de la passerelle RFLink sous openHAB
La seconde partie de ce tutoriel concerne la configuration de cette passerelle RFLink sous openHAB 3.0. J’ai pour cela utilisé un Raspberry Pi 4 8Go sur lequel j’ai installé openHABian 1.6.3 (via BerryBoot pour pouvoir installer l’OS sur un SSD externe).
Installation du Binding pour RFLink
Il n’existe pas pour l’instant de Binding pour RFLink fourni avec OH3. Je me suis donc inspiré des informations trouvées sur ce post pour télécharger et installer manuellement un Binding pour RFLink. J’ai téléchargé l’archive se trouvant ici. Si nécessaire, une copie se trouve ici.
Sur le RasPi4 il faut tout d’abord copier ce fichier dans le répertoire /usr/share/openhab/addons
en s’assurant que le propriétaire est bien openhab
:
cd /usr/share/openhab/addons
wget <your_web_server>/openhab.openhab org.openhab.binding.rflink-3.0.0-SNAPSHOT.jar
sudo chown openhab.openhab org.openhab.binding.rflink-3.0.0-SNAPSHOT.jar
Ce Binding dépend du plugin org.openhab.io.transport.serial
qu’il nous faut installer via la console openHAB (cf. doc):
ssh -p 8101 openhab@localhost
feature:install openhab-transport-serial
logout
Il ne reste plus qu’à redémarrer OH3 pour prendre en compte ce nouveau Binding:
sudo /bin/systemctl stop openhab.service
systemctl daemon-reload
sudo /bin/systemctl start openhab.service
On peut maintenant se connecter à l’interface web d’OH3 via l’URL http://openhabianraspi4-01:8080/
et dans Settings → Things → Blue « + » on voit bien apparaître le RfLink Binding.
Configuration de RFLink
- Sur ce RfLink Binding on sélectionne le RFLink USB Transceiver bridge et on le configure (cf. infos trouvées ici)
- Serial Port =
/dev/ttyACM0
- Baud Rate =
57600
- Disable Discover =
True
- cliquer sur Create Thing
- Serial Port =
- le RFLink USB Transceiver apparaît dans la liste des Things et est ONLINE
Enregistrement des périphériques
Capteur de température
- Création du Thing: Settings → Things → Blue « + » → RfLink Binding puis sélectionner l’ajout d’un RFLink Temperature Sensor
- Label =
InoValley 4101, RFLink Temperature Sensor
- Bridge =
RFLink USB Transceiver
- Device Id =
InoValley-4101
- cliquer sur Create Thing
- Label =
- Création d’un Item: Settings → Things → Blue « + » → InoValley 4101, RFLink Temperature Sensor → Channels → Temperature
- cliquer sur Add Link to Item
- choisir Create a new Item
- Name =
InoValley4101RFLinkTemperatureSensor_Temperature
- Label =
InoValley 4101, Temperature
- cliquer sur Link
- Dans la liste des Items on voir apparaître InoValley 4101, Temperature et quelques secondes plus tard sa valeur est actualisée.
Remarque
Comme nous pouvons le constater, il est nécessaire de connaître l’id du périphérique. Dans notre cas, nous l’avions découvert précédemment en utilisant le moniteur série de l’IDE Arduino. Une fois l’Arduino branché sur le Raspberry et le port USB correctement configuré (via le RFLink USB Transceiver bridge), il suffit de faire un cat /dev/ttyACM0
dans un terminal. Ceci est bien pratique…
- lors de l’ajout de nouveaux périphériques
- quand certains capteurs (ex: capteurs de température InoValley utilisés ici) changent d’id aléatoirement lorsque l’on remplace les piles…
Capteur d’humidité
Nous pouvons maintenant reproduire les étapes pour le canal humidité.
- Création du Thing: Settings → Things → Blue « + » → RfLink Binding puis sélectionner l’ajout d’un RFLink Humidity Sensor
- Label =
InoValley 4101, RFLink Humidity Sensor
- Bridge =
RFLink USB Transceiver
- Device Id =
InoValley-4101
- cliquer sur Create Thing
- Label =
- Création d’un Item: Settings → Things → Blue « + » → InoValley 4101, RFLink Humidity Sensor → Channels → Humidity
- cliquer sur Add Link to Item
- choisir Create a new Item
- Name =
InoValley4101RFLinkHumiditySensor_Humidity
- Label =
InoValley 4101, Humidity
- cliquer sur Link
- Dans la liste des Items on voir apparaître InoValley 4101, Humidity et quelques secondes plus tard sa valeur est actualisée.
Conclusion
Après plusieurs manipulations sous OH3 avec des périphériques Z-Wave (voir mes précédents tutoriels), j’ai expérimenté aujourd’hui l’utilisation de périphériques communiquant en 433MHz via une passerelle RFLink sur base d’Arduino. Là encore j’ai essayé de réaliser toutes les étapes directement via l’interface graphique d’OH3.
Pour toutes remarques ou suggestions, n’hésitez surtout pas à me contacter sur manuel.munier@univ-pau.fr.