[V4] Intégration enocean

Salut Pierre-Gilles,

Plutôt absent de Gladys depuis quelques mois, je souhaiterais reprendre le boulot d’intégration du protocole enocean sur Gladys 4.

Cependant, le module enocean-js ne me convient pas vraiment, le gars qui le développe fait un super boulot mais il est tout seul, y a pas de doc et je galère trop du coup…

Comme au taff je fais pas mal de python, je regarde du coté Python et je trouve des trucs que je souhaiterais expérimenter.
Mais du coup ce serait plutôt en mode module déporté à base d’échange MQTT.

Quelle serait la bonne approche coté Gladys ? Faut-il développer une intégration Gladys en charge de la discussion via MQTT avec Python/Enocean ou bien y a-t-il une interface standard pour ca ?

J’avoue que je ne me suis pas trop penché sur la V4 pour le moment mais il est temps de m’y mettre :smiley:

A+

Salut @Jean-Philippe !

J’ai mis ton post en public pour qu’il soit visible par tous :slight_smile:

Alors trois options:

  1. En soit, tu pourrais très bien appeler du code Python depuis Gladys et garder cette intégration dans Gladys. Après à voir, si c’est vraiment un programme Python qui tourne en permanence, c’est pas terrible.

  2. Tu peux t’inspirer de ce qui a été fait sur le module zigbee2mqtt qui est un service dont le travail est effectué par un container Docker qui parle en MQTT avec Gladys. Il faudrait donc développer le service déportée, faire une UI dans Gladys pour pouvoir contrôler le tout, et développer une API MQTT entre les deux pour que ça communique. Après, dans le module zigbee2mqtt, cela a été fait comme ça car zigbee2mqtt est un projet externe que nous ne maitrisons pas et qui a fait un travail formidable de convertir les messages zigbee de plein d’intégrations en MQTT.

  3. Plus fouiller le code de encoean-js et faire une intégration native dans Gladys… :slight_smile: Je suis allé voir le repo de oncean-js, je m’attendais à un projet abandonné et franchement ça a l’air solide et bien conçu. La v4 n’est pas la v3, l’objectif de la v4 est de concevoir un logiciel grand public qui est simple à utiliser et qui fonctionne “out of the box”. Une intégration native quand c’est possible, ça change tout.

Tu peux aller t’inspirer d’autres projets qui utilisent enocean-js comme node-red-contrib-enocean, le code est lisible et je pense qu’on pourrait assez simplement transposer ça dans Gladys :slight_smile:

Bon j’ai enfin commencé à developper une integration Enocean.
Après quelques heures à se faire mal au crane pour comprendre comment fonctionne la V4, j’obtiens un service qui démarre et qui se connecte à mon dongle USB :cowboy_hat_face:

Je vais donc essayer d’intégrer le module enocean-js directement dans gladys, ce qui me fait peut c’est la capacité à porter toute la variété d’équipement existant… donc je vais déjà voir pour porter les capteurs simple (type température, motions…etc) et puis on ira au fur et à mesure.

Ce que je peux faire c’est pousser ma branche sur git et peut etre que tu pourais déjà me dire, si c’est “Gladys compliant” ce que j’ai commencé. Je suis reparti de l’intégration Z-wave.

1 Like

Une question sur la gestion des devices et leur features.

En regardant sur les intégrations Xiaomi et Zwave, en fait j’ai l’impression que lorsqu’une valeur est recue d’un capteur, on envoit un message à Gladys avec le type EVENTS.DEVICE.NEW_STATE en reconstruisant systématiquement l’objet device ?

Je croyais devoir d’abord, enregistrer les devices connus / appairés / enregistrés / scannés avant depouvoir envoyer / recevoir de la donnée.

Je suis un peu perdu la sur l’algo à écrire.

Salut @Jean-Philippe ! Génial pour ce module EnOcean :slight_smile:

Non, tu dois juste émettre un event avec l’external_id du device (l’identifiant unique côté EnOcean) ainsi que le nouvel état.

Exemple dans le cas du service Xiaomi par exemple:

C’est bien ce qu’il faut faire, inspire toi tu service Z-Wave par exemple. Il y a 2 onglets: 1 onglet pour les devices qui sont déjà connectés à Gladys, et un onglet pour connecter de nouveaux device Z-Wave à Gladys.

Si il y a autre chose que tu ne comprend pas n’hésite pas :slight_smile:

merci, je m’en sors de mieux en mieux au fur et a mesure que j’avance.
Mon repo si tu veux y jeter un oeil me dire si j’ai pris la bonne direction:

Si je regarde l’exemple de Xiaomi.

C’est la fonction addDevice.js qui se charge d’émettre un évènement avec en payload, le nouveau device. Mais je ne parviens pas à saisir comment gladys enregistre ce device en db … ? Je vois pas l’appel à gladys.device.create()

Seul le front semble écouter sur l’évnement XIAOMI.NEW_DEVICE et si j’ai bien compris juste pour recharger la liste des devices ?

Des choses m’échappent encore :smiley:

Pour le moment, dans ce que j’ai écris, j’appel moi même gladys.device.create(), je ne passe pas par un event.

Je suis preneur d’un peu d’éclairage la :stuck_out_tongue:

Edit: Ok je viens de voir action.js sur Xiaomi … Je comprends mieux… Je vais m’en inspirer !

En fait, dans Gladys v4, ce n’est jamais le backend qui créé les devices: c’est trop obscure, et en cas d’erreur on a aucun retour.

Dans Gladys v4, c’est l’UI qui est au centre du produit. C’est le front qui appel la route de création de device!

Pour le service EnOcean, inspire toi plutôt du service Z-Wave qui est plus proche.