Llevo un tiempo bastante ausente de Gladys, pero me gustaría retomar el trabajo de integración del protocolo enocean en Gladys 4.
Sin embargo, el módulo enocean-js no me convence del todo, el tipo que lo desarrolla hace un trabajo increíble, pero está solo, no hay documentación y me cuesta mucho…
Como en el trabajo hago bastante Python, estoy mirando hacia ese lado y encuentro cosas que me gustaría experimentar.
Pero, en ese caso, sería más bien en modo módulo externo basado en intercambio MQTT.
¿Cuál sería el mejor enfoque desde Gladys? ¿Desarrollar una integración de Gladys encargada de la comunicación a través de MQTT con Python/Enocean o hay una interfaz estándar para eso?
Reconozco que no me he puesto mucho con la V4 hasta ahora, pero es hora de empezar
He hecho público tu mensaje para que sea visible para todos
Entonces tres opciones:
En sí, podrías llamar perfectamente código Python desde Gladys y mantener esta integración en Gladys. Después, a ver, si es realmente un programa Python que funciona permanentemente, no es ideal.
Puedes inspirarte en lo que se ha hecho en el módulo zigbee2mqtt, que es un servicio cuyo trabajo se realiza mediante un contenedor Docker que habla en MQTT con Gladys. Por lo tanto, sería necesario desarrollar el servicio externo, crear una interfaz de usuario en Gladys para poder controlar todo, y desarrollar una API MQTT entre los dos para que se comuniquen. Después, en el módulo zigbee2mqtt, se hizo así porque zigbee2mqtt es un proyecto externo que no controlamos y que ha hecho un trabajo formidable de convertir los mensajes zigbee de muchas integraciones en MQTT.
Más profundo, explorar el código de encoean-js y hacer una integración nativa en Gladys.. Fui a ver el repositorio de oncean-js, esperaba un proyecto abandonado y francamente parece sólido y bien diseñado. La v4 no es la v3, el objetivo de la v4 es diseñar un software para el público en general que sea fácil de usar y que funcione « out of the box ». Una integración nativa cuando es posible, cambia todo.
Puedes inspirarte en otros proyectos que utilizan enocean-js como node-red-contrib-enocean, el código es legible y creo que podríamos transponer eso en Gladys bastante fácilmente
Bueno, finalmente he comenzado a desarrollar una integración Enocean.
Después de unas horas dándome dolor de cabeza para entender cómo funciona la V4, obtengo un servicio que se inicia y se conecta a mi dongle USB
Voy a intentar integrar el módulo enocean-js directamente en gladys, lo cual no sé es la capacidad de soportar toda la variedad de equipos existentes… así que primero voy a ver para soportar los sensores simples (tipo temperatura, movimiento, etc.) y luego iremos poco a poco.
Lo que puedo hacer es subir mi rama a git y tal vez podrías decirme si es « Gladys compliant » lo que he comenzado. Me basé en la integración Z-wave.
Una pregunta sobre la gestión de dispositivos y sus características.
Al mirar las integraciones de Xiaomi y Zwave, en realidad tengo la impresión de que cuando se recibe un valor de un sensor, se envía un mensaje a Gladys con el tipo EVENTS.DEVICE.NEW_STATE reconstruyendo sistemáticamente el objeto dispositivo.
Creía que primero debía registrar los dispositivos conocidos / emparejados / registrados / escaneados antes de poder enviar / recibir datos.
Estoy un poco perdido aquí sobre el algoritmo a escribir.
No, solo debes emitir un evento con el external_id del dispositivo (el identificador único del lado de EnOcean) y el nuevo estado.
Ejemplo en el caso del servicio Xiaomi:
Sí, es lo que hay que hacer, inspírate en el servicio Z-Wave, por ejemplo. Hay 2 pestañas: 1 pestaña para los dispositivos que ya están conectados a Gladys, y una pestaña para conectar nuevos dispositivos Z-Wave a Gladys.
Si hay algo más que no entiendas, no dudes en preguntar
Es la función addDevice.js la que se encarga de emitir un evento con el nuevo dispositivo en el payload. Pero no entiendo cómo Gladys registra este dispositivo en la base de datos… No veo la llamada a gladys.device.create()
Solo el front parece escuchar el evento XIAOMI.NEW_DEVICE y, si he entendido bien, solo para recargar la lista de dispositivos.
Aún me escapan algunas cosas
Por el momento, en lo que he escrito, yo mismo llamo a gladys.device.create(), no paso por un evento.
Acepto un poco de luz aquí
Edición: ¡Vale, acabo de ver action.js en Xiaomi! ¡Lo entiendo mejor! ¡Me inspiraré en eso!
Por fin estoy retomando el servicio en Gladys… esta vez va a funcionar
Actualmente, estoy haciendo desarrollo en el trabajo, por lo que por la noche me cuesta volver a desarrollar… salvo que la V3 está al límite… Tengo muchos dispositivos enocean que no uso, y eso me pone de mal humor…
Incluso estuve a punto de probar Jeedom… en serio…
Así que me armé de valor y acabo de meterme de nuevo en el ajo!
He retomado el desarrollo de la integración enocean, y empieza a parecerse a algo, me siento más cómodo con la estructura del código.
He logrado añadir dispositivos y verlos correctamente en el tablero de control.
Me queda por:
gestionar más perfiles de equipo.
gestionar los mensajes cuando un equipo envía algo
enviar un mensaje a un equipo
escribir las pruebas
Tengo buenas esperanzas de tener algo funcional rápidamente!
Y después no tengo más integraciones que hacer sobre lo que hice en V3 que uso a diario (imprescindible para migrar y apagar la V3 en casa)
Ahí tienes un poco de noticias, espero que no me vuelva a caer en un agujero negro después de este correo
He avanzado mucho, puedo recuperar los valores de varios tipos de equipos.
Actualmente estoy trabajando en los equipos que pueden recibir órdenes.
También me quedan los tests por escribir.
Me dirijo a los poseedores de dispositivos enocean, ¿podrían indicarme los equipos y los perfiles EEP que tienen en casa?
Porque la dificultad va a ser poder soportar la mayor cantidad de equipos posible.
Para información, me apoyo en el módulo enocean-js del cual se pueden ver los perfiles que son soportados aquí: https://enocean-js.github.io/enocean-js
hola, llevo tiempo siguiendo tu proyecto, creo que sí, los interruptores son importantes, también los micro módulos tipo nodon para iluminación y persianas, lo más importante. Personalmente, yo uso material eltako que es un enocean bastante completo. Por cierto, probaré tu programa cuando entienda cómo instalarlo jajaja
Actualmente tengo un problema para hacer funcionar los interruptores de pared (d2-01). De hecho, logro controlar uno, pero si tengo varios, todos están emparejados juntos, por lo que no es práctico.
No he podido avanzar más por el momento.
Hola, algunas noticias… definitivamente es complicado encontrar tiempo
Estos días me he motivado y he logrado hacer funcionar correctamente mis interruptores con un perfil D2-01-00.
No tengo un módulo para las persianas @eric2-6, si puedes darme un enlace a lo que tienes para que vea cómo integrarlas.
Por lo tanto, he empezado a mirar para escribir las pruebas, pero tengo problemas @pierre-gilles
No he instalado la librería zwave, y eslint me está dando errores en la importación en la integración 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
Entonces, para evitarlo, he eliminado el pretest de los scripts npm. (bueno, he querido instalarlo, pero también hay que instalar el binario y me he encontrado con errores en el make… así que he optado por lo más simple)
Pero después, me encuentro con este error:
> 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)
Sí, lo he resuelto, tuve que tomarme un tiempo y profundizar por enésima vez para entender el funcionamiento, el problema es que el tipo que mantiene la lib no responde desde hace 6 o 7 meses
La idea es que lo voy a ejecutar en mi casa un tiempo antes de enviar una PR, no sé cómo compartir mi código si otros quieren probarlo, vi un post donde se puede hacer imágenes por integración..