Jeedom Mini+ en passerelle EnOcean

Bonjour la communauté Jeedom,

Je souhaite partager un projet concernant la réutilisation de l’ancienne box Jeedom Mini+
Sa fin de vie avec Jeedom V4 m’a poussé à revoir mon concept de passerelle décentralisée (Nota Bene 1) et à lui trouver une seconde vie en tant que passerelle EnOcean avec le module GPIO interne (Nota Bene 2) .

En théorie, l’idée est la suivante:

  • Réinstaller proprement un Debian 11 Bullseye sur la carte SD.
  • Partager l’interface série EnOcean sur le réseau (Serial to Ethernet / IP) avec ser2net.
  • Attacher le port série partagé précédemment sur une machine Jeedom avec socat pour accéder au module EnOcean à distance.

En pratique, j’ai rencontré deux difficultés particulières:

  • L’accès au ttymxc0 impossible par défaut.
  • La fiabilisation de la connexion série (en cas de coupure réseau, reboot, etc.).

Il est aussi utile de savoir que la Jeedomboard a été fabriquée par Solid Run sur une base de HummingBoard iMX6.

Mais bref, c’est parti, la procédure est la suivante (Note Bene 3):

Étape 1 / Flasher la carte SD

Télécharger le logiciel Balena Etcher pour Flasher votre carte SD.
Télécharger la dernière version Debian Buster pour notre Jeedomboard: [DebianBullseye-20220712]-(https://solid-run-images.sos-de-fra-1.exo.io/IMX6/Debian/sr-imx6-debian-bullseye-20220712-cli-sdhc.img.xz)
Se munir d’une carte micro SD d’au moins 4GB et la Flasher avec Etcher et votre image Debian.
Insérer cette carte SD fraîchement préparée dans votre Jeedom Mini+.

Étape 2 / Configuration de Debian

Booter votre Jeedom Mini+ et s’y connecter en SSH ou en KVM.
User: debian Pass: debian

Si besoin, afficher votre adresse IP avec la commande : ip addr show

Ensuite, suivre la procédure ci-dessous pour mettre à jour, changer le hostname et libérer l’interface série afin de pouvoir utiliser le module GPIO:

locale
sudo locale-gen en_US.UTF-8
sudo export LANGUAGE="en_US.UTF-8"
sudo export LANG="en_US.UTF-8"
locale

sudo apt update
sudo apt dist-upgrade
sudo echo "EnOceanGW" > /etc/hostname
sudo systemctl mask serial-getty@ttymxc0.service
sudo reboot

Ensuite configurer la synchronisation du temps et le fuseau horaire local :

sudo apt install ntpdate ntp
timedatectl
sudo timedatectl set-timezone Europe/Paris
timedatectl
ntpq -p
date

(optionnel) Pour être à l’aise… :

sudo apt install man-db
sudo apt install bash-completion
sudo apt install vim

Etape 3 / Partage du port série (côté EnOceanGW)

Maintenant que la base est prête, on va installer et configurer ser2net afin de partager le port série.
Donc j’ai passé le démarrage automatique de « init.d » à « systemd » afin d’ajouter un délai pour que le port série soit disponible.

Il faut récupérer les trois fichiers de configurations qui sont disponibles sur mon repo GitHub:

  • ser2net.yaml
  • ser2net.service
  • ser3net.timer

Les charger sur votre passerelle EnOcean (en SCP par exemple), et ensuite:

sudo apt install ser2net

sudo systemctl stop ser2net
sudo mv /etc/init.d/ser2net ~/ser2net.initd.backup
sudo mv /etc/ser2net.yaml ~/ser2net.yaml.backup
sudo systemctl daemon-reload

sudo mv ser2net.yaml /etc/default/
sudo chown root:root /etc/default/ser2net.yaml
sudo chmod 644 /etc/default/ser2net.yaml
sudo mv ser2net.service /etc/systemd/system/
sudo mv ser2net.timer /etc/systemd/system/
sudo chown root:root /etc/systemd/system/ser2net.*
sudo chmod 755  /etc/systemd/system/ser2net.*

sudo systemctl daemon-reload
sudo systemctl enable ser2net.timer
sudo systemctl start ser2net.service

Pour contrôler l’état:

netstat -lntu
sudo systemctl status ser2net.timer
sudo systemctl status ser2net.service

Etape 4 / Accès au port série partagé (coté Jeedom)

Finalement, on va configurer l’accès à la passerelle EnOcean depuis Jeedom.
Prenez en compte que mon Jeedom tourne sur un Debian 11 Bullseye, la configuration a été testée sur cette version.

Comme avant, il faut récupérer les deux fichiers de configurations qui sont disponibles sur mon repo GitHub:

  • socat-ttyenocean0.service
  • socat-ttyenocean0.sh

Et les charger sur votre system Jeedom (en SCP par exemple), et ensuite:

sudo apt install socat

sudo mv socat-ttyenocean0.sh /usr/bin/
sudo chown root:root /usr/bin/socat-ttyenocean0.sh
sudo chmod 755 /usr/bin/socat-ttyenocean0.sh
mv socat-ttyenocean0.service /etc/systemd/system/
sudo chown root:root /etc/systemd/system/socat-ttyenocean0.service
sudo chmod 755 /etc/systemd/system/socat-ttyenocean0.service

sudo systemctl daemon-reload
sudo systemctl enable socat-ttyenocean0.service
sudo systemctl start socat-ttyenocean0.service

Pour contrôler l’état:

sudo systemctl status socat-ttyenocean0.service
tail /var/log/socat-ttyenocean0.log

Etape 5 / Jeedom

Et normalement, là, ça fonctionne :space_invader:
Sur Jeedom, vous devriez pouvoir configurer le plugin EnOcean pour utiliser le port /dev/EnOcean0.
Il se peut qu’en cas de redémarrage de la gateway, le Daemon du plugin EnOcean se mette en erreur pendant 1 ou 2 minutes le temps de détecter que le port « /dev/EnOcean0 » est disponible.

Et pour être sûr que c’est béton, je vous recommande de tester avec équipement EnOcean (genre interupteur ou autre):

  • Coupure réseau de 1 mns sur la passerelle EnOcean (débrancher le RJ45)
  • Redémarrage de la passerelle EnOcean
  • Redémarrage du Jeedom

Remarques

Pour aller plus loin, je pense que cela peut fonctionner pour d’autres interfaces séries, comme du Z-Wave, et aussi pour partager un port USB (USB to Ethernet / IP) en utilisant USB IP avec cet exemple ou avec USB Redirector qui semble populaire dans la communauté Jeedom.

Nota bene 1 : Jusqu’à lors, j’utilisais un Jeedom central sous forme de VM puis une ou plusieurs box Jeedom décentralisées connectées au travers de Jeelink. C’était fiable, mais fastidieux à la configuration.

Nota bene 2 : Effectivement, mon autre projet de passerelle Zigbee m’a fait prendre conscience que la Mini+ en avait encore sous le capot, mais simplement pour des projets plus contenu en termes de CPU / RAM, donc sans Jeedom.
Et si vous avez une Jeedom Mini+ à donner >> MP ! Je suis preneur pour documenter d’autres projets (passerelle ZigBee avec clé Conbee II, Console Port server, …) :grin:

Nota bene 3 : Pour l’installation Debian, plus de détails sur mon poste précédent sur le topic : Installation Linux sur mini+.

Sources
https://www.lucid-control.com/accessing-usb-io-module-network-linux-socat/
https://gist.github.com/DraTeots/e0c669608466470baa6c
https://community.openhab.org/t/share-z-wave-dongle-over-ip-usb-over-ip-using-ser2net-socat-guide/34895
https://community.openhab.org/t/socat-serial-port-forwarding-keeps-crashing-how-to-stabilize/131201
https://community.openhab.org/t/forwarding-of-serial-and-usb-ports-over-the-network-to-openhab/46597
https://community.openhab.org/t/new-openhab2-enocean-binding/39917/1046
https://community.openhab.org/t/cant-use-forwarded-socat-serial-port-in-lgtvserial-binding-ioexception/97965

1 « J'aime »

Bonjour,

J’ai fait la même chose pour partager le port USB relié au téléinfo. Super tuto !

Bonjour,
Intéréssant comme retour.
Avec USB-IP en OpenSource ou USB Redirector de Incentives Pro ?
Et merci :slight_smile:

Avec USB redirector