IoT
openHAB 3.0 - passerelle RFLink/RFXCom 433MHz

openHAB 3.0 - passerelle RFLink/RFXCom 433MHz

11/12/2023 - Mise à jour vers openHAB 4.0.4 → Comme on pouvait s’y attendre, l’archive externe pour le Binding RFLink indiquée dans ce tutoriel pour OH3 ne fonctionne pas avec OH4. Voir les explications ici pour télécharger la nouvelle version de ce Binding.

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

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).

Arduino serial monitor
Arduino serial monitor

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%).


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).

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 SettingsThingsBlue « + » on voit bien apparaître le RfLink Binding.

  • 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
  • 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: SettingsThingsBlue « + »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

  • Création d’un Item: SettingsThingsBlue « + »InoValley 4101, RFLink Temperature SensorChannelsTemperature
    • 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: SettingsThingsBlue « + »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

  • Création d’un Item: SettingsThingsBlue « + »InoValley 4101, RFLink Humidity SensorChannelsHumidity
    • 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.