Bonjour,
Si comme moi, vous passez à Debian 12 (Armbian sur Odroid XU4 pour moi), vous avez bien galéré à tout installer ou rendre compatible (j’ai fini par faire une clean install à cause d’un manque de place)
Dans les plugins jeedom KO, il me reste XiaomiHome et ZmWebRelay (l’autre plugin de carte relais est aussi ko je crois)… Bref, des plugins non maintenus.
Ma carte relais était donc inaccessible par jeedom.
Vous avez plusieurs solutions :
-
Acheter une autre carte
Solution radicale et couteuse mais si c’est votre choix je vous conseille fortement une carte avec MQTT natif (ex dingtian) -
Passer par le plugin Script pour créer les requêtes HTTP manuellement pour chaque appel relai (on, off et pulse).
Mais la limite est vite atteinte pour récupérer l’état des input et des relais :
Les états sont aussi récupérés par requête HTTP mais elles ne sont pas lancées en temps réel (2000ms je crois sur le plugin zmWebRelay), il faut les lancer manuellement ou par un cron (minimum 1min sur jeedom je crois) -
Rendre la carte IOTZone « compatible » MQTT
Et oui, cette carte est compatible mqtt sans forcément qu’on le sache (c’est caché).
C’est le but de ce tutoriel :
→ 0) Préquis :
- serveur MQTT
- Carte 8Ch IOTZone ou nom de code ZMRN0808-V5 pour moi (pe valable aussi pour les autres cartes?)
- plugin jMQTT (adaptable pour tout autre client MQTT)
→ 1) Activation MQTT sur carte relais :
-
Se connecter sur l’interface de la carte relais (adresse ip)
-
Aller dans le menu « RS485 Interface »
-
Activer « RS485 to mqtt enable » en cliquant sur le bouton de la ligne ) :
- Valider par le bouton « OK » en bas de page
→ 2) Paramétrer MQTT sur carte relais :
- Se rendre sur la page de paramétrage du MQTT de la carte relais :
Il faut saisir l’url suivante directement car il n’y a pas de lien vers ce menu :
http://[ip carte relais]/zm.cgi :
Avec :- MAC : l’adresse MAC de la carte (non modifiable) à priori
- Update IP : aucune idée j’ai mis l’ip d e la carte ?? (si quelqu’un sait?)
- MQTT : ip du serveur MQTT
- MQTT domain : non pris en compte malgré mes modifications (la carte écrit sur MQTT dans la racine du MQTT)
- MQTT Server port : Port du serveur MQTT (1883 par défaut)
- MQTT user : à saisir si authentification actif sur MQTT
- MQTT password: à saisir si authentification actif sur MQTT
- MQTT period time : délais de maj MQTT ??? pas forcément pris en compte, réduire ne réduit pas la réactivité
- MQTT Enable : passer à « Enable » pour activer le MQTT
- device SN Code : Numéro de série - Nom du topic utilisé pour MQTT (ne pas modifier car tout redémarrage de la carte le réinitialise)
(Italique = obligatoire)
- Valider avec le bouton « OK » tout en bas de page
- Redémarrer la carte
→ 3) Résultats sur MQTT :
2 Topics MQTT sont exploités par la carte relais dans la racine de votre MQTT :
[TODO ajouter copie écran MQTT Manager]
- <num série>state : pour les états :
v5XXXXXXX4state/{"cmd":"post","output":"10000000","input":"00101010","sn":"v5XXXXXXX4"}
input pour les boutons (la position dans la chaine correspond au numéro (ici : relai 2 off, relai 3 on,…)
output pour les relais (la position dans la chaine correspond au numéro (ici : input 1 on, les autres off)
- <num série>ctr : pour donner des ordres à la carte :
v5XXXXXXX4ctr/{"cmd":"post","output":"2xxxx0x1"}
la position dans la chaine correspond au numéro du relai à contrôler - 0 pour off, 1 pour on, 2 pour pulse et x pour ne rien faire (ici : demande de relai 1 à pulse, relai 5 à off et relai 8 à on, les autres non contrôlés)
→ 4) Exploitation dans Jeedom :
Il est ensuite possible de récupérer ces informations dans Jeedom, par le plugin jMQTT dans mon cas.
ex on peut récupérer les états par jMQTT :
On récupère l’ensemble des valeurs des 8 inputs et output.
Pour avoir chaque valeur (1 à 8 ici), il faut effectuer des manipulations de chaines par la fonction substr.
Ce n’est pas possible directement dans jMQTT, il faut passer par un virtuel. Ex :
→ substr(‹ #[Garage][jmqtt-CarteRelayIOTGarage][Etat Relais Input]# ›,2,1)
Pour l'input 3 (on commence à la position 0 sur cette fonction)
Bien mettre la commande à lire entre ' ' car elle sera interprétée sinon et les 0 du début seront supprimés faussant la récupération de la valeur (00010000 deviendra 10000)
Pour les commandes d’actions sur les relais, on peut le faire directement dans jMQTT :
On peut même cumuler une commande pour plusieurs relais (comme dans l’ex plus haut) - pas mon besoin.
→ 3) Conclusions :
La solution est parfaitement fonctionnelle pour moi.
La latence semble égale au plugin ZmWebRelay (de l’ordre de 1 à 2s je pense)
Après des coupures électriques, j’ai cru que la carte relais avait du mal à se reconnecter au MQTT mais ca demande juste un peu de temps
Mais je mutualise et supprime un plugin
J’espère ne pas avoir été trop long…
Source :
GitHub - mgx0/ZMRN0808-V5