[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 « J'aime »

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:

https://github.com/Jean-PhilippeD/Gladys/tree/enocean

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.

Bonjour Pierre-Gilles,

J’essaye enfin de reprendre du service sur Gladys … cette fois ca va le faire :smiley:
Actuellement, je fais du dev au taff, donc le soir j’ai du mal à refaire du dev … sauf que la V3 est à bout de souffle… J’ai plein d’équipements enocean qui ne me servent pas, et ca me fout les boules …

J’ai même failli tester Jeedom … nan mais sérieux …

Donc j’ai pris mon courage à deux mains, et je viens de remettre les mains dans le cambouis !

J’ai repris le dev de l’integration enocean, et ca commence à ressembler à quelque chose, je suis plus à l’aise sur la structure du code.

J’ai arrive à ajouter des devices et bien les voir correctement dans le tableau de bord.

Il me reste à :

  • gérer + de profile d’équipement.
  • gérer les messages quand un équipement envoie un truc
  • envoyer un message à un équipement
  • écrire les tests

J’ai bon espoir d’avoir quelque chose de fonctionnel rapidement !
Et après j’ai plus d’intégration à faire sur ce que j’avais fait en V3 que j’utilise au quotidien :wink: (indispensable pour migrer et éteindre la V3 à la maison)

Voila un peu de news, j’espère que je retomberais pas un trou noir après ce mail :smiley:

2 « J'aime »

Salut Jean-Philippe :slight_smile:

Yeees :slight_smile:

Tiens nous au courant ici, et n’hésite pas si tu as des questions !

Hello !

Quelques news.

J’ai bien avancé, je suis en mesure de récupérer les valeurs de plusieurs types d’équipements.
Je travaille sur les équipements qui peuvent recevoir des ordres actuellement.

Il me reste les tests également à écrire.

Je m’adresse aux détenteurs de périphériques enocean, pourriez-vous m’indiquer les équipements et les profiles EEP que vous avez chez vous ?
Car la difficulté va être de pouvoir supporter un max d’équipements.
Pour info, je m’appuie sur le module enocean-js dont on peut voir les profiles qui sont supportés ici:
https://enocean-js.github.io/enocean-js

1 « J'aime »

Si certains veulent jouer, voici une premiere version sur ma branche.

Fonctionnent pour le moment:

  • Capteur de température (a5-02-05)
  • Capteur de mouvement (a5-07-01)
  • Capteur d’ouverture de porte/fenetre (d5-00-01)
  • Rocker switch (f6-02-01)
  • Switch mural (d2-01-0f)
1 « J'aime »

bonjour je suis ton projet depuis longtemps maintenant , je pense que oui les switch sont important aussi les micro module type nodon éclairage et volet roulant pour le plus important ,personnellement j’utilise du materiel eltako qui est un enocean plutôt complet . au passage j’essaierai ton programme quand jaurais compris comment l’installer mdr

Salut,

Actuellement j’ai un soucis à faire fonctionner les interrupteurs muraux (d2-01), en fait j’arrive à en commander un, mais si j’en ai plusieurs, ils sont tous appairés ensemble, donc pas pratique.
Je n’ai pas pu avancer plus pour le moment.

Hey quelques news … décidément compliqué de libérer du temps :frowning:

Ces jours-ci, je me suis motivé et j’ai éussi à faire fonctionner correctement mes interrupteurs avec un profil D2-01-00.

Je n’ai pas de module pour les volets roulant @eric2-6 si tu as moyen de me donner un lien vers ce que tu possèdes que je vois comment les intégrer.

Du coup j’ai commencé à regarder pour écrire les tests, mais je rencontre des problèmes @pierre-gilles
Je n’ai pas installé la lib zwave, et eslint me crie dessus sur l’import dans l’intégration z-wave:

gladys-server@ pretest /home/jp/Gladys4/Gladys/server
> npm run eslint


> gladys-server@ eslint /home/jp/Gladys4/Gladys/server
> eslint .


/home/jp/Gladys4/Gladys/server/services/zwave/index.js
  7:25  error  Unable to resolve path to module 'openzwave-shared'  import/no-unresolved

Alors pour bypasser, j’ai salement enlevé le pretest dans les scripts npm. (bon j’ai bien voulu l’installer mais faut aussi installer le binaire et je me suis pris des erreurs au make … donc j’ai voulu aller au plus simple)

Sauf qu’après, je me prend cette erreur:

> gladys-server@ test /home/jp/Gladys4/Gladys/server
> cross-env NODE_ENV=test ./node_modules/mocha/bin/mocha --recursive ./test/bootstrap.test.js "./test/**/*.test.js" --exit

/home/jp/Gladys4/Gladys/server/services/mqtt/node_modules/mqtt/mqtt.js:1
(function (exports, require, module, __filename, __dirname) { #!/usr/bin/env node
                                                              ^

SyntaxError: Invalid or unexpected token
    at new Script (vm.js:100:7)

@Jean-Philippe as tu réussi à résoudre ton problème?

Tu utilise quelle version de Node.js ? (node -v), tu devrais être en Node >= 14.

Oui je l’ai résolu, il m’a fallu me poser et creuser une n-ième fois pour saisir le fonctionnement, le truc c’est que le gars qui maintient la lib ne répond plus depuis 6 ou 7 mois :frowning:
L’idée c’est que je vais le faire tourner chez moi quelque temps avant de pousser une PR, je ne sais pas comment partager mon code si d’autres veulent tester, j’ai vu un post ou un peut faire des images par integration…

Coté node, je suis v14.12.0

Ah :sweat_smile: Et il y a pas plus récent niveau lib? C’est pas super pour le futur de l’intégration si la dépendance est plus maintenue ^^

Je n’ai pas trouvé mieux, du moins en JS, j’ai vu une lib python mais à peine plus maintenue :confused: