Matter - Enphase con la Fábrica de Plugins Matterbridge

Hola,

Tengo paneles solares con equipos Enphase sin batería y me gustaría participar en la integración. Actualmente tengo los siguientes resultados.

Hay los valores de « Grid Consumption » que no encuentro en mi aplicación y en HA.
¿Podéis explicarme qué es lo que hay que exponer? ¿Es la tabla « Mapping Matter » en el issue de GitHub? ([PLUGIN REQUEST] Enphase Envoy · Issue #31 · GladysAssistant/matterbridge-ai-plugin-factory · GitHub)

En Matterbridge tienes otra vista del dispositivo que permite visualizar los clusters Matter que se exponen mediante el plugin, ¿puedes mostrarnos una captura de pantalla de esta vista?

@pierre-gilles ¿Te refieres a esta vista?

No, hay una vista más precisa donde puedes ver todos los clústeres disponibles.

De todos modos, en Gladys puedes descargar el JSON de los nodos Matter y eso nos da la misma lista :slight_smile:

Te envié el JSON en mensaje privado.

¡Gracias por el archivo!

Aquí está lo que muestra Matterbridge, los clústeres gestionados por Gladys y los que no lo están por el momento:

Clústeres ya gestionados por Gladys (presentes en el archivo)

  • OnOff — tomas (#2, #3)
  • BooleanState — contacto (#31)
  • TemperatureMeasurement — temperatura (#30)
  • ElectricalPowerMeasurement / ElectricalEnergyMeasurement — energía (#28, #29)
  • PowerSource — batería/alimentación (#28)
  • BridgedDeviceBasicInformation — metadatos de los dispositivos puenteados

Clústeres no gestionados

  1. PowerTopology (#28, #29)
    Describe cómo fluye la energía entre los puntos finales (topología eléctrica). No hay mapeo Gladys hoy.
  2. DeviceEnergyManagement (#28)
    Gestión del consumo energético del dispositivo (limitación de potencia, etc.). No hay mapeo Gladys.
  3. DeviceEnergyManagementMode (#28)
    Modos de gestión energética derivados del clúster Modo Base. No hay mapeo Gladys.

Estos 3 clústeres se refieren principalmente al panel solar (#28) y en parte al sensor eléctrico (#29). Las medidas principales (potencia, energía acumulada) ya pasan por los clústeres ElectricalPowerMeasurement y ElectricalEnergyMeasurement, ya soportados.

Estos son los dispositivos que tengo en Gladys.

No tengo nada más.

Por cierto, no puedo seleccionar la habitación « Casa » y solo tengo esa.

¿Cómo puedo ayudarte?

Raro, ¿estás bien en la última versión de Gladys?

¿Puedes descargar los registros de Gladys y enviármelos por mensaje privado?

Creo que no has creado habitaciones en tu instancia, tienes que crearlas en « Configuración » → « Casa ».

Tengo la versión 4.81.0.

Hecho.

Sí, es cierto :slight_smile:

Gracias por los registros, hay un error muy claro en los registros, ahora a ver si proviene del plugin, de Gladys o de Matter.js :

[2m2026-07-08 20:56:15.582 WARN   �[0;1;90mExchangeManager      �[0;35m@1:1•81e2⇵5aac✉07bb95bf �[33mUnhandled error handling incoming message: �[31mCannot mix BigInt and other types, use explicit conversions
2026-07-08T18:56:15.732854580Z   �[2;39mat �[0m/src/server/services/matter/lib/matter.listenToStateChange.js�[2m:432:75
2026-07-08T18:56:15.732867500Z   at �[0m/src/server/services/matter/node_modules/@project-chip/matter.js/src/cluster/client/AttributeClient.ts�[2m:182:45
2026-07-08T18:56:15.732878854Z   at �[0mArray.forEach�[2m (<anonymous>)
2026-07-08T18:56:15.732889471Z   at �[0mSupportedAttributeClient.update�[2m (/src/server/services/matter/node_modules/@project-chip/matter.js/src/cluster/client/AttributeClient.ts:182:25)
2026-07-08T18:56:15.732900478Z   at �[0mObject._triggerAttributeUpdate�[2m (/src/server/services/matter/node_modules/@project-chip/matter.js/src/cluster/client/ClusterClient.ts:281:52)
2026-07-08T18:56:15.732911584Z   at �[0mPairedNode.#handleNodeChange�[2m (/src/server/services/matter/node_modules/@project-chip/matter.js/src/device/PairedNode.ts:665:58)
2026-07-08T18:56:15.732922415Z   at �[0mBasicObservable.emit�[2m (/src/server/services/matter/node_modules/@matter/general/src/util/Observable.ts:309:26)
2026-07-08T18:56:15.732933134Z   at �[0mCommissioningController.#handleNodeChange�[2m (/src/server/services/matter/node_modules/@project-chip/matter.js/src/CommissioningController.ts:848:23)
2026-07-08T18:56:15.732944033Z   at �[0mBasicObservable.emit�[2m (/src/server/services/matter/node_modules/@matter/general/src/util/Observable.ts:309:26)
2026-07-08T18:56:15.732955065Z   at �[0mChangeNotificationService.broadcastUpdate�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/integration/ChangeNotificationService.ts:51:22)
2026-07-08T18:56:15.732966012Z   at �[0mClientBehaviorBacking.broadcastChanges�[2m (/src/server/services/matter/node_modules/@matter/node/src/behavior/internal/BehaviorBacking.ts:365:30)
2026-07-08T18:56:15.732977232Z   at �[0mClientBehaviorBacking.broadcastChanges�[2m (/src/server/services/matter/node_modules/@matter/node/src/behavior/internal/ClientBehaviorBacking.ts:68:15)
2026-07-08T18:56:15.732988378Z   at �[0mDatasourceImpl.integrateExternalChange�[2m (/src/server/services/matter/node_modules/@matter/node/src/behavior/state/managed/Datasource.ts:518:38)
2026-07-08T18:56:15.733034338Z   at �[0mDatasourceCache.externalSet�[2m (/src/server/services/matter/node_modules/@matter/node/src/storage/client/DatasourceCache.ts:124:33)
2026-07-08T18:56:15.733044460Z   at �[0mClientStructure.#updateCluster�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/client/ClientStructure.ts:487:29)
2026-07-08T18:56:15.733052594Z   at �[0mClientStructure.#mutateAttribute�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/client/ClientStructure.ts:384:24)
2026-07-08T18:56:15.733060637Z   at �[0mClientStructure.mutate�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/client/ClientStructure.ts:226:53)
2026-07-08T18:56:15.733068713Z   at �[0mObject.updated�[2m (/src/server/services/matter/node_modules/@matter/node/src/behavior/system/network/NetworkClient.ts:144:38)
2026-07-08T18:56:15.733076645Z   at �[0mObject.updated�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/client/ClientNodeInteraction.ts:107:21)
2026-07-08T18:56:15.733084570Z   at �[0mClientSubscriptionHandler.#handleExchange�[2m (/src/server/services/matter/node_modules/@matter/protocol/src/action/client/subscription/ClientSubscriptionHandler.ts:124:21)
2026-07-08T18:56:15.733092852Z   at �[0mClientSubscriptionHandler.onNewExchange�[2m (/src/server/services/matter/node_modules/@matter/protocol/src/action/client/subscription/ClientSubscriptionHandler.ts:49:13)
2026-07-08T18:56:15.733101026Z   at �[0mInteractionServer.onNewExchange�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/server/InteractionServer.ts:193:20)
2026-07-08T18:56:15.733108956Z   at �[0mExchangeManager.#onMessage�[2m (/src/server/services/matter/node_modules/@matter/protocol/src/protocol/ExchangeManager.ts:380:21)�[0m
2026-07-08T18:56:15.734395009Z 2026-07-08T20:56:15+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) DeviceFeature "matter:1:1:child_endpoint:28:144:power" no encontrado (o no añadido a Gladys), saltando la actualización del estado.
2026-07-08T18:56:41.061019372Z �[2m2026-07-08 20:56:41.052 WARN   �[0;1;90mExchangeManager      �[0;35m@1:1•81e2⇵5aad✉07bb95c0 �[33mError no manejado al procesar mensaje entrante: �[31mNo se pueden mezclar BigInt y otros tipos, usar conversiones explícitas
2026-07-08T18:56:41.061101575Z   �[2;39mat �[0m/src/server/services/matter/lib/matter.listenToStateChange.js�[2m:432:75
2026-07-08T18:56:41.061117520Z   at �[0m/src/server/services/matter/node_modules/@project-chip/matter.js/src/cluster/client/AttributeClient.ts�[2m:182:45
2026-07-08T18:56:41.061131412Z   at �[0mArray.forEach�[2m (<anonymous>)
2026-07-08T18:56:41.061144899Z   at �[0mSupportedAttributeClient.update�[2m (/src/server/services/matter/node_modules/@project-chip/matter.js/src/cluster/client/AttributeClient.ts:182:25)
2026-07-08T18:56:41.061158676Z   at �[0mObject._triggerAttributeUpdate�[2m (/src/server/services/matter/node_modules/@project-chip/matter.js/src/cluster/client/ClusterClient.ts:281:52)
2026-07-08T18:56:41.061171933Z   at �[0mPairedNode.#handleNodeChange�[2m (/src/server/services/matter/node_modules/@project-chip/matter.js/src/device/PairedNode.ts:665:58)
2026-07-08T18:56:41.061229899Z   at �[0mBasicObservable.emit�[2m (/src/server/services/matter/node_modules/@matter/general/src/util/Observable.ts:309:26)
2026-07-08T18:56:41.061245787Z   at �[0mCommissioningController.#handleNodeChange�[2m (/src/server/services/matter/node_modules/@project-chip/matter.js/src/CommissioningController.ts:848:23)
2026-07-08T18:56:41.061259879Z   at �[0mBasicObservable.emit�[2m (/src/server/services/matter/node_modules/@matter/general/src/util/Observable.ts:309:26)
2026-07-08T18:56:41.061272828Z   at �[0mChangeNotificationService.broadcastUpdate�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/integration/ChangeNotificationService.ts:51:22)
2026-07-08T18:56:41.061286640Z   at �[0mClientBehaviorBacking.broadcastChanges�[2m (/src/server/services/matter/node_modules/@matter/node/src/behavior/internal/BehaviorBacking.ts:365:30)
2026-07-08T18:56:41.061300162Z   at �[0mClientBehaviorBacking.broadcastChanges�[2m (/src/server/services/matter/node_modules/@matter/node/src/behavior/internal/ClientBehaviorBacking.ts:68:15)
2026-07-08T18:56:41.061313330Z   at �[0mDatasourceImpl.integrateExternalChange�[2m (/src/server/services/matter/node_modules/@matter/node/src/behavior/state/managed/Datasource.ts:518:38)
2026-07-08T18:56:41.061330762Z   at �[0mDatasourceCache.externalSet�[2m (/src/server/services/matter/node_modules/@matter/node/src/storage/client/DatasourceCache.ts:124:33)
2026-07-08T18:56:41.061344755Z   at �[0mClientStructure.#updateCluster�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/client/ClientStructure.ts:487:29)
2026-07-08T18:56:41.061358118Z   at �[0mClientStructure.#mutateAttribute�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/client/ClientStructure.ts:384:24)
2026-07-08T18:56:41.061371639Z   at �[0mClientStructure.mutate�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/client/ClientStructure.ts:226:53)
2026-07-08T18:56:41.061385419Z   at �[0mObject.updated�[2m (/src/server/services/matter/node_modules/@matter/node/src/behavior/system/network/NetworkClient.ts:144:38)
2026-07-08T18:56:41.061398858Z   at �[0mObject.updated�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/client/ClientNodeInteraction.ts:107:21)
2026-07-08T18:56:41.061411726Z   at �[0mClientSubscriptionHandler.#handleExchange�[2m (/src/server/services/matter/node_modules/@matter/protocol/src/action/client/subscription/ClientSubscriptionHandler.ts:124:21)
2026-07-08T18:56:41.061425323Z   at �[0mClientSubscriptionHandler.onNewExchange�[2m (/src/server/services/matter/node_modules/@matter/protocol/src/action/client/subscription/ClientSubscriptionHandler.ts:49:13)
2026-07-08T18:56:41.061438864Z   at �[0mInteractionServer.onNewExchange�[2m (/src/server/services/matter/node_modules/@matter/node/src/node/server/InteractionServer.ts:193:20)
2026-07-08T18:56:41.061451919Z   at �[0mExchangeManager.#onMessage�[2m (/src/server/services/matter/node_modules/@matter/protocol/src/protocol/ExchangeManager.ts:380:21)�[0m

He creado un ticket:

Vale, gracias. Mientras tanto, voy a inicializar los plugins Matter para MyRenault y Wallbox para avanzar en otra cosa :slight_smile:

@ArMour85 al final era un error de Gladys, este error está corregido y saldrá en la próxima versión de Gladys :slight_smile:

Vale, lo probaré en la próxima versión.

La corrección está disponible en Gladys Assistant 4.84

Voy a crear una integración externa para gestionar Enphase.

Espero tener suficiente tiempo libre :slight_smile:

Más que tiempo libre, sobre todo necesitas una suscripción a Claude Code :smiley:

Después, todo se hace en el móvil, en el transporte, en el gimnasio ^^

Sí, estoy de acuerdo, pero aún hay que tener los medios. Lo que me molesta ahora, y es cada vez más cierto en mi trabajo, es que para programar hay que pagar una suscripción. Esto plantea otros problemas sobre tu dependencia de un servicio que puede cerrar por razones políticas, por ejemplo.

Pero estoy de acuerdo contigo en que vas mucho más rápido.

Entendería el comentario si hubiera un compromiso.

Pero aquí hablamos de 20 € (el precio de un menú en un restaurante), sin compromiso, para tener acceso durante un mes a un ingeniero de software senior disponible las 24 horas. Si lo comparamos con el costo total para el empleador de un desarrollador senior en Francia en 2026 (salario, cargas, material, etc.), hablamos de un servicio que representaría un valor de 7-11k€.

Nunca he visto en la historia del desarrollo de software una asimetría tan grande entre el precio pagado y el valor obtenido.

Y tú hablas de velocidad, yo hablaría sobre todo de calidad. Hoy, creo que la IA produce un mejor resultado que un desarrollador humano, no solo en el código en sí, sino sobre todo en la rigurosidad global del proyecto.

Las PR son completas: documentación, especificaciones, pruebas unitarias, linting, migración, etc. La comunicación es excelente: el título, la descripción y el seguimiento de la PR se actualizan a medida que avanza el desarrollo. La IA también tratará una multitud de pequeños detalles que un desarrollador, incluso senior, a menudo pospondría por falta de tiempo o simplemente porque estas tareas son repetitivas.

Estuve muy escéptico durante los primeros años, porque los modelos simplemente no estaban a la altura. Hoy, ya no veo muchas razones para escribir código a mano para un desarrollo clásico. En mi opinión, esta práctica se volverá cada vez más marginal.

La mayoría de las empresas que frecuento ya desarrollan mayormente con IA (en spec-driven-development).

Mi predicción es que, en uno o dos años, escribir código completamente a mano será considerado una mala práctica en muchos equipos, un poco como hoy se considera anormal no usar un compilador, un IDE o un sistema de control de versiones. No sé si estará « prohibido », pero creo que se desalentará fuertemente.

Estoy totalmente de acuerdo contigo, pero depende del sector. Yo trabajo en el sector espacial, donde los clientes no lo permiten o es muy restrictivo. Por ejemplo, no se pueden usar servicios en línea, por lo que se necesita local para la confidencialidad y demostrar que el código no viola una licencia de software. ¡Es un lío! :slightly_smiling_face:

Además, por ahora, los modelos de lenguaje grande no son capaces de inventar e imaginar; solo repiten lo que han aprendido y lo que se les dice. Por lo tanto, no van a escribir publicaciones científicas de principio a fin.

Yo uso Cline porque puedo usarlo con Ollama y acabo de ver que Cline ofrece modelos abiertos muy potentes por 10€ (ClinePass - Open Weights Models in Cline). Voy a probarlo, aunque tengo que codificar mucho por mi cuenta.