Matter - Enphase avec l'Usine à Plugins Matterbridge

Salut,

J’ai des panneaux solaires avec des équipements Enphase sans batterie et je souhaite participer à l’intégration. Actuellement j’ai les retours suivants.

Il y a les valeurs de « Grid Consumption » que je ne retrouve pas dans mon appli et sur HA.
Est-ce que l’on peut m’expliquer ce qu’il faut exposer ? C’est bien le tableau « Mapping Matter » dans l’issue GitHub ? ([PLUGIN REQUEST] Enphase Envoy · Issue #31 · GladysAssistant/matterbridge-ai-plugin-factory · GitHub)

Dans Matterbridge tu as une autre vue de l’appareil qui permet de visualiser les clusters Matter qui sont exposés par le plugin, est-ce que tu peux nous montrer une capture d’écran de cette vue ?

@pierre-gilles Tu parles de cette vue ?

Non, il y a une vue plus précise où tu vois tous les clusters disponibles.

Sinon, côté Gladys tu peux télécharger le JSON des noeuds Matter et ça nous donne la même liste :slight_smile:

Je t’ai envoyé le JSON en PM.

Merci pour le fichier !

Voilà ce qu’expose Matterbridge, les clusters gérés par Gladys et ceux non géré par Gladys pour l’instant :

Clusters déjà gérés par Gladys (présents dans le fichier)

  • OnOff — prises (#2, #3)
  • BooleanState — contact (#31)
  • TemperatureMeasurement — température (#30)
  • ElectricalPowerMeasurement / ElectricalEnergyMeasurement — énergie (#28, #29)
  • PowerSource — batterie/alimentation (#28)
  • BridgedDeviceBasicInformation — métadonnées des devices bridgés

Clusters non gérés

  1. PowerTopology (#28, #29)
    Décrit comment l’énergie circule entre endpoints (topologie électrique). Pas de mapping Gladys aujourd’hui.
  2. DeviceEnergyManagement (#28)
    Gestion de la consommation énergétique du device (limitation de puissance, etc.). Pas de mapping Gladys.
  3. DeviceEnergyManagementMode (#28)
    Modes de gestion énergétique dérivés du cluster Mode Base. Pas de mapping Gladys.

Ces 3 clusters concernent surtout le panneau solaire (#28) et en partie le capteur électrique (#29). Les mesures principales (puissance, énergie cumulée) passent déjà par les clusters ElectricalPowerMeasurement et ElectricalEnergyMeasurement, déjà supportés.

Voici ce que j’ai comme appareil dans Gladys.

Je n’ai rien d’autre.

Pour info, je n’arrive pas à sélectionner la pièce « Maison » et j’ai que celle-là.

Comment puis-je t’aider ?

Bizarre, tu es bien dans la dernière version de Gladys ?

Tu peux télécharger les logs de Gladys et me les envoyer en MP ?

Je pense que tu n’as pas créé de pièces sur ton instance, il faut en créer dans « Paramètres » → « Maison ».

J’ai la version 4.81.0.

C’est fait.

Oui c’est vrai :slight_smile:

Merci pour les logs, il y a une erreur très claire dans les logs, maintenant à voir si ça vient du plugin, de Gladys, ou 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" not found (or not added to Gladys), skipping state update.
2026-07-08T18:56:41.061019372Z �[2m2026-07-08 20:56:41.052 WARN   �[0;1;90mExchangeManager      �[0;35m@1:1•81e2⇵5aad✉07bb95c0 �[33mUnhandled error handling incoming message: �[31mCannot mix BigInt and other types, use explicit conversions
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

J’ai créé un ticket :

Ok merci. En attendant le correctif je vais initialiser des plugins Matter pour MyRenault et Wallbox histoire d’avancer sur autre chose :slight_smile:

@ArMour85 c’était un bug Gladys au final, ce bug est corrigé et partira dans la prochaine version de Gladys :slight_smile:

Ok je vais tester lors de la prochaine version.

Le fix est live dans Gladys Assistant 4.84

Je vais créer une intégration externe pour gérer Enphase.

J’espère que j’aurais assez de temps libre :slight_smile:

Plus que du temps libre, il faut surtout un abonnement Claude Code :smiley:

Après, tout se fait sur mobile, dans les transports, à la salle de sport ^^

Oui je suis d’accord mais encore faut-il avoir les moyens. Ce qui me dérange maintenant et c’est de plus en plus vrai dans mon travail c’est que pour dev il faut payer un abonnement. Cela amène d’autres problématiques sur ta dépendance à un service qui peut fermer pour raison politique par exemple.

Mais je te rejoins sur le fait que tu vas beaucoup plus vite.

Je comprendrais la remarque s’il y avait un engagement.

Mais là, on parle de 20 € (le prix d’un menu au restaurant), sans engagement, pour avoir accès pendant un mois à un ingénieur logiciel senior disponible 24 h/24. Si on compare au coût total employeur d’un développeur senior en France en 2026 (salaire, charges, matériel, etc.), on parle d’un service qui représenterait 7-11k€ de valeur.

Je n’ai jamais vu dans l’histoire du développement logiciel une telle asymétrie entre le prix payé et la valeur obtenue.

Et tu parles de vitesse, moi je parlerais surtout de qualité. Aujourd’hui, je trouve que l’IA produit un meilleur résultat qu’un développeur humain, non seulement sur le code lui-même, mais surtout sur la rigueur globale du projet.

Les PR sont complètes : documentation, spécifications, tests unitaires, linting, migration, etc. La communication est excellente : titre, description et suivi de la PR sont mis à jour au fur et à mesure du développement. L’IA va aussi traiter une multitude de petits détails qu’un développeur, même senior, repousserait souvent par manque de temps ou simplement parce que ces tâches sont répétitives.

J’ai été très sceptique pendant les premières années, parce que les modèles n’étaient tout simplement pas au niveau. Aujourd’hui, je ne vois plus beaucoup de raisons d’écrire du code à la main pour un développement classique. À mon avis, cette pratique va devenir de plus en plus marginale.

La plupart des entreprises que je fréquente développent déjà majoritairement avec l’IA (en spec-driven-development)

Ma prédiction est que, d’ici un ou deux ans, écrire du code entièrement à la main sera considéré comme une mauvaise pratique dans beaucoup d’équipes, un peu comme on considère aujourd’hui qu’il est anormal de ne pas utiliser un compilateur, un IDE ou un système de contrôle de version. Je ne sais pas si ce sera “interdit”, mais je pense que ce sera fortement découragé.

Je suis entièrement d’accord avec toi mais ça dépend du domaine d’activité. Je travaille dans le domaine spatial où les clients ne l’autorisent pas ou alors c’est très contraignant. Par exemple il ne faut pas utiliser de services en ligne donc locaux pour la confidentialité et prouver que le code ne viole pas une licence software. La galère :slightly_smiling_face:

De plus, pour l’instant, les llms ne sont pas capables d’inventer et d’imaginer elles recrachent ce qu’elles ont appris et ce qu’on leur dit. Donc de ce côté là elle ne vont pas écrire des publications scientifiques de A à Z.

Moi j’utilise Cline car je peux l’utiliser avec Ollama et je viens de voir que Cline propose pour 10€ (ClinePass - Open Weights Models in Cline) des modèles ouverts très performants. Je vais tester ça même si j’ai beaucoup coder de moi même.