🚀 Matter & Gladys Assistant: ¡Comenzamos!

¡Hola a todos! :smiley:

El protocolo Matter se vuelve cada vez más interesante: finalmente empezamos a ver dispositivos estables y convincentes en el mercado.

Como expliqué en mi directo “Proyectos para 2025” (a 23:57), tengo muchas esperanzas para Matter y creo que Gladys Assistant podría beneficiarse enormemente.

:backhand_index_pointing_right: A largo plazo, un solo protocolo de domótica podría dominar y si es Matter, reduciría enormemente las diferencias entre Gladys y otras soluciones en términos de integraciones. El principal desafío sería entonces la experiencia del usuario, que es justamente la gran fuerza de Gladys! :fire:

:bullseye: Primera prueba: un enchufe conectado Matter / Thread

Para avanzar en este tema, he pedido un enchufe Eve Energy compatible con Matter en la red Thread.

¡Es uno de los dispositivos Matter mejor valorados actualmente! La marca Eve se centra mucho en la UX y el respeto a la vida privada, lo que coincide totalmente con la filosofía de Gladys.

:clapper_board: Live coding Matter en Gladys – Viernes 28 de marzo a las 10h

Estaré en directo en YouTube para un live coding donde voy a codificar la integración Matter en Gladys en directo !

Como de costumbre, empezamos pequeño (un solo dispositivo) y iremos ampliando progresivamente.

:red_circle: Enlace del directo : https://youtube.com/live/gBxSVSGUjJ0

:loudspeaker: ¡No olviden activar la campanita :bell: para recibir notificaciones!

¡Tengo ganas de compartir esto con ustedes y recibir sus comentarios! :rocket:

hola @pierre-gilles,
estable y convincente, sí, y estoy convencido de ello.
pero otros dos elementos son igualmente importantes para mí:
- que sea un protocolo abierto y accesible para los desarrolladores (no un protocolo propietario que un lobby de marcas se apropie, como suele ocurrir con ciertos tipos de periféricos y normas)
- que los productos propuestos sigan siendo asequibles, al igual que con Zigbee, porque otros productos-protocolos suelen afectar al bolsillo
- pero también que Matter no mate a Zigbee por ello.

¡Es el caso! Ya he hecho pruebas y es muy abierto. Solo he creado este post después de mis investigaciones :wink:

Dado que el protocolo es abierto, cualquiera puede crear un dispositivo Matter, ¡incluso en DIY! :rocket: Esto debería tener el mismo impacto que Zigbee: una competencia ilimitada, empujando los precios hacia abajo. :chart_decreasing:

Matter no es un competidor de Zigbee, en cambio Thread sí es un competidor de Zigbee.

Matter no es un protocolo de radio :warning:

Puedes tener un dispositivo Zigbee compatible con Matter :slight_smile:

Listo para mañana ^^ De una simplicidad desconcertante para instalar ^^ Una vez instalado el complemento, lo encuentra todo solo… Me sorprendió que ni siquiera fuera necesario configurar los Shelly ^^

¡Exceptional! Tengo muchas ganas de ver todo esto funcionando con Gladys :star_struck:

¡Gracias a todos por venir a este directo!

El replay está disponible aquí:

He subido el desarrollo de esta mañana aquí:

Aún está en desarrollo, pero ya es una muy buena base, creo que no estamos lejos de tener algo para publicar en producción :slight_smile:

@Terdious como decíamos en el directo, me encantaría que probaras con MatterBridge para asegurarme de que las elecciones que he hecho sobre la identificación de dispositivos/funciones son correctas :slight_smile:

Acaba de lanzarse:

¿No debería desactivarse Matter por defecto? ¿Y aprovechar tu botón de activación en la configuración? ¿Y en la página de dispositivos, redirigir a la página de configuración si no está activado?

Entonces… No funciona (el código de emparejamiento), pero supongo que la razón:

2025-03-28T17:19:53+0100 <info> matter.pairDevice.js:38 (MatterHandler.pairDevice) Commissioning device with options: {"commissioning":{"regulatoryLocation":0,"regulatoryCountryCode":"XX","regulatoryLocationType":0},"discovery":{"identifierData":{"shortDiscriminator":15},"discoveryCapabilities":{"ble":false}},"passcode":63702205,"commissioningTimeoutSeconds":60,"commissioningAttempts":3,"commissioningRetryDelayMs":1000}
2025-03-28 17:19:53.938 INFO   PeerCommissioner     Commissioning device with identifier {"shortDiscriminator":15} and 1 scanners and knownAddress "undefined"
2025-03-28 17:19:53.938 INFO   ControllerDiscovery  Start Discovering devices using identifier {"shortDiscriminator":15} ...
2025-03-28 17:19:53.939 DEBUG  MdnsScanner          Registered waiter for query _S15._sub._matterc._udp.local with timeout 30 seconds
2025-03-28 17:19:53.939 DEBUG  MdnsScanner          Set 2 query records for query _S15._sub._matterc._udp.local: [{"name":"_matterc._udp.local","recordClass":1,"recordType":12},{"name":"_S15._sub._matterc._udp.local","recordClass":1,"recordType":12}]
2025-03-28 17:19:53.940 DEBUG  MdnsScanner          Sending 2 query records for 1 queries with 0 known answers. Re-Announce in 1.5 seconds
2025-03-28 17:19:53.942 DEBUG  NodejsChannel        Socket created and bound remoteAddress: undefined:5353 localAddress: 0.0.0.0:5353
2025-03-28 17:19:53.942 DEBUG  NodejsChannel        Socket created and bound remoteAddress: undefined:5353 localAddress: :::5353
2025-03-28 17:19:53.942 DEBUG  NodejsChannel        Initialize multicast address: 172.26.50.62:5353 interface: eth0 type: udp4
2025-03-28 17:19:53.943 DEBUG  NodejsChannel        Initialize multicast address: ::%eth0:5353 interface: eth0 type: udp6
2025-03-28 17:19:55.441 DEBUG  MdnsScanner          Sending 2 query records for 1 queries with 0 known answers. Re-Announce in 3 seconds
2025-03-28 17:19:58.441 DEBUG  MdnsScanner          Sending 2 query records for 1 queries with 0 known answers. Re-Announce in 6 seconds
2025-03-28 17:20:04.442 DEBUG  MdnsScanner          Sending 2 query records for 1 queries with 0 known answers. Re-Announce in 12 seconds
2025-03-28 17:20:16.443 DEBUG  MdnsScanner          Sending 2 query records for 1 queries with 0 known answers. Re-Announce in 24 seconds
2025-03-28 17:20:23.940 DEBUG  MdnsScanner          Finishing waiter for query _S15._sub._matterc._udp.local, resolving: true
2025-03-28 17:20:23.940 DEBUG  MdnsScanner          Removing last query _S15._sub._matterc._udp.local and stopping announce timer
2025-03-28 17:20:23.940 INFO   ControllerDiscovery  Found 0 devices using identifier {"shortDiscriminator":15}

Estoy atrapado en mi linux (desarrollo en windows).

Estoy mirando…

Todo reinstalado, he instalado un entorno de desarrollo en mi linux con … vscode. Veré más tarde si Cursor está disponible.
Por lo tanto, al conectar

  • Del lado de los registros de MatterBridge:
info [18:05:06.148] [Frontend] WebSocketServer client "::ffff:10.1.0.62" connected to Matterbridge
info [18:05:18.685] [PaseServer] Received pairing request from udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:39400.
info [18:05:18.957] [PaseServer] Session 2371 created with udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:39400.
info [18:05:18.968] [InsecureSession] End insecure session insecure/7632973793930278144
info [18:05:19.103] [BehaviorServer] Invoke Matterbridge.armFailSafe online#846f4e6@0 expiryLengthSeconds: 60 breadcrumb: 1
info [18:05:19.120] [BehaviorServer] Invoke Matterbridge.certificateChainRequest online#846f4e8@0 certificateType: 1
info [18:05:19.145] [BehaviorServer] Invoke Matterbridge.certificateChainRequest online#846f4ea@0 certificateType: 2
info [18:05:19.156] [BehaviorServer] Invoke Matterbridge.attestationRequest online#846f4ec@0 attestationNonce: 4715872ecb087233d5d062588e348c5d8327780d7e571a1972df59b9cc5ebeaa
info [18:05:19.167] [BehaviorServer] Invoke Matterbridge.csrRequest online#846f4ee@0 csrNonce: 7a47ebec9f78619baa1423d1cf550ffbc610c9b5b6d5528a56e69821cd2d92cb
info [18:05:19.184] [BehaviorServer] Invoke Matterbridge.addTrustedRootCertificate online#846f4f0@0 rootCaCertificate: 15300101002402013703 ... 65a682b8ff2be688ea18
info [18:05:19.203] [BehaviorServer] Invoke Matterbridge.addNoc online#846f4f2@0 nocValue: 15300101022402013703 ... a05d01243f6df9f3f918 icacValue: ipkValue: 249f416140414c8a8509587f128476f4 caseAdminSubject: 13660266413132073995 adminVendorId: 65521
info [18:05:19.212] [DeviceCommissioner] Announce done fabric: 1 fabricIndex: 1
info [18:05:19.216] [Transaction] Tx reactor#224 waiting on online#846f4f2@0
info [18:05:19.218] [Operationa~edentials] addNoc success, adminVendorId 65521, caseAdminSubject 13660266413132073995
info [18:05:19.257] [AccessControlServer] ACL updated, updating ACL manager { fabricIndex: 1, privilege: 5, authMode: 2, subjects: [ 13660266413132073995 ], targets: null }
info [18:05:19.274] [BehaviorServer] Invoke Matterbridge.armFailSafe online#846f4f4@0 expiryLengthSeconds: 60 breadcrumb: 1
info [18:05:19.387] [CaseServer] Received pairing request from udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:39400
notice [18:05:19.418] [Matterbridge] Session opened on server node for Matterbridge: { name: 'secure/2372', nodeId: 18303769249106620906, peerNodeId: 13660266413132073995, fabric: { fabricIndex: 1, fabricId: 1, nodeId: 18303769249106620906, rootNodeId: 13660266413132073995, rootVendorId: 65521, label: '' }, isPeerActive: true, lastInteractionTimestamp: 1743185119417, lastActiveTimestamp: 1743185119417, numberOfActiveSubscriptions: 0 }
info [18:05:19.421] [CaseServer] Session 2372 created with udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:39400 for Fabric FE040D278FB7F1EA (index 1) and PeerNode BD9303ED73EFCC0B with CATs undefined
info [18:05:19.451] [InsecureSession] End insecure session insecure/1863744617825343146
info [18:05:19.468] [BehaviorServer] Invoke Matterbridge.commissioningComplete online#912e3da@bd9303ed73efcc0b (no payload)
info [18:05:19.472] [DeviceCommissioner] All announcements stopped
info [18:05:19.474] [SecureSession] Register Session secure/2371 to close when exchange is ended.
notice [18:05:19.477] [Matterbridge] Server node for Matterbridge was initially commissioned successfully!
notice [18:05:19.479] [Matterbridge] Commissioned fabric index 1 added on server node for Matterbridge: { fabricIndex: 1, fabricId: 1, nodeId: 18303769249106620906, rootNodeId: 13660266413132073995, rootVendorId: 65521, label: '' }
info [18:05:19.480] [Matterbridge] Fabrics: [ { fabricIndex: 1, fabricId: '1', nodeId: '18303769249106620906', rootNodeId: '13660266413132073995', rootVendorId: 65521, rootVendorName: '(MatterServer)', label: '' } ]
info [18:05:19.481] [GeneralCom~erHandler] Commissioning completed on fabric #1 as node #18303769249106620906.
info [18:05:19.517] [BehaviorServer] Invoke Matterbridge.updateFabricLabel online#912e3dc@bd9303ed73efcc0b label: Gladys Assistant fabricIndex: 1
info [18:05:19.526] [Transaction] Tx reactor#230 waiting on online#912e3dc@bd9303ed73efcc0b
notice [18:05:19.531] [Matterbridge] Commissioned fabric index 1 updated on server node for Matterbridge: { fabricIndex: 1, fabricId: 1, nodeId: 18303769249106620906, rootNodeId: 13660266413132073995, rootVendorId: 65521, label: 'Gladys Assistant' }
info [18:05:19.531] [Matterbridge] Fabrics: [ { fabricIndex: 1, fabricId: '1', nodeId: '18303769249106620906', rootNodeId: '13660266413132073995', rootVendorId: 65521, rootVendorName: '(MatterServer)', label: 'Gladys Assistant' } ]
info [18:05:19.963] [InteractionServer] Successfully created subscription 1167932576 for Session 2372 to peer@1:0xbd9303ed73efcc0b. Updates: 1 - 60 => 62 seconds (sendInterval = 49 seconds)
notice [18:05:19.984] [Matterbridge] Session subscriptions changed on server node for Matterbridge: { name: 'secure/2372', nodeId: 18303769249106620906, peerNodeId: 13660266413132073995, fabric: { fabricIndex: 1, fabricId: 1, nodeId: 18303769249106620906, rootNodeId: 13660266413132073995, rootVendorId: 65521, label: '' }, isPeerActive: true, lastInteractionTimestamp: 1743185119417, lastActiveTimestamp: 1743185119417, numberOfActiveSubscriptions: 1 }

La imagen del código de emparejamiento flashable se ha convertido en:

  • Côté Gladys :
[...]
2025-03-28 19:05:23.461 DEBUG  PairedNode           Node 18303769249106620906: Creando dispositivo 0 {"29":{"deviceTypeList":[{"deviceType":22,"revision":2}],"serverList":[40,31,63,48,60,62,51,29],"clientList":[],"partsList":[1,10,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"31":{"acl":[{"privilege":5,"authMode":2,"subjects":["13660266413132073995"],"targets":null,"fabricIndex":1}],"subjectsPerAccessControlEntry":4,"targetsPerAccessControlEntry":3,"accessControlEntriesPerFabric":4,"clusterRevision":1,"featureMap":{},"attributeList":[0,2,3,4,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"40":{"dataModelRevision":17,"vendorName":"Matterbridge","vendorId":65521,"productName":"Matterbridge aggregator","productId":32768,"nodeLabel":"Matterbridge aggregator","location":"XX","hardwareVersion":6,"hardwareVersionString":"6.8.0-52-generic","softwareVersion":2,"softwareVersionString":"2.2.5","productLabel":"Matterbridge aggregator","serialNumber":"SN77b87cfd460bbd72","uniqueId":"UI77b87cfd460bbd72","capabilityMinima":{"caseSessionsPerFabric":3,"subscriptionsPerFabric":3},"specificationVersion":16973824,"maxPathsPerInvoke":10,"clusterRevision":3,"featureMap":{},"attributeList":[0,1,2,3,4,5,6,7,8,9,10,14,15,18,19,21,22,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"48":{"breadcrumb":0,"basicCommissioningInfo":{"failSafeExpiryLengthSeconds":60,"maxCumulativeFailsafeSeconds":900},"regulatoryConfig":2,"locationCapability":2,"supportsConcurrentConnection":true,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,65533,65532,65531,65529,65528],"acceptedCommandList":[0,2,4],"generatedCommandList":[1,3,5]},"51":{"networkInterfaces":[{"name":"enp2s0","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"7c8334b9fca5","iPv4Addresses":["0a0500e3"],"iPv6Addresses":["00000000"],"type":2},{"name":"docker0","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"0242d0a03741","iPv4Addresses":["ac110001"],"iPv6Addresses":["00000000"],"type":2},{"name":"br-2eecc872cee4","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"02ab40d33c39","iPv4Addresses":["ac120001"],"iPv6Addresses":["00000000"],"type":2},{"name":"veth2417577","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"5e9da348f214","iPv4Addresses":[],"iPv6Addresses":["00000000"],"type":2},{"name":"vethb8de1cb","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"d2e0b4de5248","iPv4Addresses":[],"iPv6Addresses":["00000000"],"type":2},{"name":"vethb8c8d92","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"4ec6e7ff65e7","iPv4Addresses":[],"iPv6Addresses":["00000000"],"type":2},{"name":"veth220f71b","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"36183ec2d11c","iPv4Addresses":[],"iPv6Addresses":["00000000"],"type":2},{"name":"veth2686606","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"d2add5942f62","iPv4Addresses":[],"iPv6Addresses":["00000000"],"type":2}],"rebootCount":3,"upTime":3472,"totalOperationalHours":21,"testEventTriggersEnabled":false,"clusterRevision":2,"featureMap":{"dataModelTest":true},"attributeList":[0,1,2,3,8,65533,65532,65531,65529,65528],"acceptedCommandList":[0,1,3],"generatedCommandList":[2,4]},"60":{"windowStatus":0,"adminFabricIndex":null,"adminVendorId":null,"clusterRevision":1,"featureMap":{"basic":false},"attributeList":[0,1,2,65533,65532,65531,65529,65528],"acceptedCommandList":[0,2],"generatedCommandList":[]},"62":{"nocs":[{"noc":"15300101022402013703241400182604df6d982d26055fa4454237062415012711eaf1b78f270d04fe1824070124080130094104fb834dd94b3f3147570912e12a52f3b43fc459aa33a8185528bcc8da544c5db74da780efe6c6b20fdcffe775040115f90ff9c502a0aba2cc1bc508b67e511b58370a3501280118240201360304020401183004144d6effa5be27c3ba2313b159f4ad233911c0fed4300514ea64585f9d84965b500818dd44a8385db5bc618418300b40a6771706dafea93da1bfad7c458943dfe6b96c836f5dbbc203d1c90af69bb9bcdb563cdeef1d96a9f286686f9763cde97a4c8c301f443ba05d01243f6df9f3f918","icac":null,"fabricIndex":1}],"fabrics":[{"rootPublicKey":"046c5b1b64fcf104c1e3200dedbaa2ca73368e43e75fc0e32386390c5c51bb343180137d6c38c51199f8cb5484b794eda0dbc571bc8c21bb8c4536ed56fb24ef4f","vendorId":65521,"fabricId":"1","nodeId":"18303769249106620906","label":"Gladys Assistant","fabricIndex":1}],"supportedFabrics":254,"commissionedFabrics":1,"trustedRootCertificates":["153001010024020137032414001826047c6c982d2605fca24542370624140018240701240801300941046c5b1b64fcf104c1e3200dedbaa2ca73368e43e75fc0e32386390c5c51bb343180137d6c38c51199f8cb5484b794eda0dbc571bc8c21bb8c4536ed56fb24ef4f370a3501290118240260300414ea64585f9d84965b500818dd44a8385db5bc6184300514ea64585f9d84965b500818dd44a8385db5bc618418300b40e925c4db5cb042668c7b59253d13353f2fb8303f453d20407875fe75bdedf1be6cd5ae3641710b7174f7e6bcd55aec0a07c183fd68947765a682b8ff2be688ea18"],"currentFabricIndex":1,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,5,65533,65532,65531,65529,65528],"acceptedCommandList":[0,2,4,6,7,9,10,11],"generatedCommandList":[1,3,5,8]},"63":{"groupKeyMap":[],"groupTable":[],"maxGroupsPerFabric":0,"maxGroupKeysPerFabric":1,"clusterRevision":2,"featureMap":{"cacheAndSync":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[0,1,3,4],"generatedCommandList":[2,5]}}
2025-03-28 19:05:23.492 DEBUG  PairedNode           Node 18303769249106620906: Creando dispositivo 1 {"29":{"deviceTypeList":[{"deviceType":14,"revision":1}],"serverList":[29],"clientList":[],"partsList":[10,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.495 DEBUG  PairedNode           Node 18303769249106620906: Creando dispositivo 2 {"29":{"deviceTypeList":[{"deviceType":19,"revision":2},{"deviceType":17,"revision":1}],"serverList":[29,57,47,64],"clientList":[],"partsList":[3,4],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"47":{"status":1,"order":0,"description":"AC Power","endpointList":[],"clusterRevision":2,"featureMap":{"wired":true,"battery":false,"rechargeable":false,"replaceable":false},"attributeList":[0,1,2,31,65533,65532,65531,65529,65528,5],"acceptedCommandList":[],"generatedCommandList":[],"wiredCurrentType":0},"57":{"vendorName":"Shelly","vendorId":65521,"productName":"SPEM-003CEBEU","nodeLabel":"Pro3EM Locaux Pro","hardwareVersion":1,"hardwareVersionString":"1.0.0","softwareVersion":1,"softwareVersionString":"1.4.4-g6d2a586","productUrl":"https://www.npmjs.com/package/matterbridge","productLabel":"Pro3EM Locaux Pro","serialNumber":"shellypro3em-2CBCBBB2DB18","reachable":true,"uniqueId":"e059a4bdf914374eee37f4fce8d8c1bb","clusterRevision":3,"featureMap":{},"attributeList":[1,2,3,5,7,8,9,10,13,14,15,17,18,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"64":{"labelList":[{"label":"composed","value":"Switch"}],"clusterRevision":1,"featureMap":{},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.500 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 3 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.503 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 4 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"29":{"deviceTypeList":[{"deviceType":770,"revision":2}],"serverList":[29,3,1026],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"1026":{"measuredValue":4720,"minMeasuredValue":null,"maxMeasuredValue":null,"tolerance":0,"clusterRevision":4,"featureMap":{},"acceptedCommandList":[],"generatedCommandList":[],"attributeList":[0,1,2,3,65533,65532,65531,65529,65528]}}
2025-03-28 19:05:23.504 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 5 {"29":{"deviceTypeList":[{"deviceType":19,"revision":2},{"deviceType":17,"revision":1}],"serverList":[29,57,47,64],"clientList":[],"partsList":[6,7,8],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"47":{"status":1,"order":0,"description":"AC Power","endpointList":[],"clusterRevision":2,"featureMap":{"wired":true,"battery":false,"rechargeable":false,"replaceable":false},"attributeList":[0,1,2,31,65533,65532,65531,65529,65528,5],"acceptedCommandList":[],"generatedCommandList":[],"wiredCurrentType":0},"57":{"vendorName":"Shelly","vendorId":65521,"productName":"SPSW-003XE16EU","nodeLabel":"Pro3 L1 Bâtiment Perso","hardwareVersion":1,"hardwareVersionString":"1.0.0","softwareVersion":1,"softwareVersionString":"1.4.4-g6d2a586","productUrl":"https://www.npmjs.com/package/matterbridge","productLabel":"Pro3 L1 Bâtiment Perso","serialNumber":"shellypro3-2CBCBBA5E414","reachable":true,"uniqueId":"9234c6c5e1cba064abc04f37f6707ac0","clusterRevision":3,"featureMap":{},"attributeList":[1,2,3,5,7,8,9,10,13,14,15,17,18,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"64":{"labelList":[{"label":"composed","value":"Switch"}],"clusterRevision":1,"featureMap":{},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.507 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 6 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":true,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.510 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 7 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.512 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 8 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.515 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 9 {"29":{"deviceTypeList":[{"deviceType":19,"revision":2},{"deviceType":17,"revision":1}],"serverList":[29,57,47,64],"clientList":[],"partsList":[10,11,12],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"47":{"status":1,"order":0,"description":"AC Power","endpointList":[],"clusterRevision":2,"featureMap":{"wired":true,"battery":false,"rechargeable":false,"replaceable":false},"attributeList":[0,1,2,31,65533,65532,65531,65529,65528,5],"acceptedCommandList":[],"generatedCommandList":[],"wiredCurrentType":0},"57":{"vendorName":"Shelly","vendorId":65521,"productName":"SPSW-003XE16EU","nodeLabel":"Pro3 L2 Bâtiment Perso","hardwareVersion":1,"hardwareVersionString":"1.0.0","softwareVersion":1,"softwareVersionString":"1.4.4-g6d2a586","productUrl":"https://www.npmjs.com/package/matterbridge","productLabel":"Pro3 L2 Bâtiment Perso","serialNumber":"shellypro3-2CBCBBA747C0","reachable":true,"uniqueId":"0ef1e597ee48f5f5b2e511a2ced51a5c","clusterRevision":3,"featureMap":{},"attributeList":[1,2,3,5,7,8,9,10,13,14,15,17,18,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"64":{"labelList":[{"label":"composed","value":"Switch"}],"clusterRevision":1,"featureMap":{},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.526 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 10 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.532 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 11 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.535 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 12 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.537 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 13 {"29":{"deviceTypeList":[{"deviceType":19,"revision":2},{"deviceType":17,"revision":1}],"serverList":[29,57,47,64],"clientList":[],"partsList":[14],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"47":{"status":1,"order":0,"description":"AC Power","endpointList":[],"clusterRevision":2,"featureMap":{"wired":true,"battery":false,"rechargeable":false,"replaceable":false},"attributeList":[0,1,2,31,65533,65532,65531,65529,65528,5],"acceptedCommandList":[],"generatedCommandList":[],"wiredCurrentType":0},"57":{"vendorName":"Shelly","vendorId":65521,"productName":"SPEM-003CEBEU","nodeLabel":"Pro3EM Bâtiment Perso","hardwareVersion":1,"hardwareVersionString":"1.0.0","softwareVersion":1,"softwareVersionString":"1.4.4-g6d2a586","productUrl":"https://www.npmjs.com/package/matterbridge","productLabel":"Pro3EM Bâtiment Perso","serialNumber":"shellypro3em-9454C5B99110","reachable":true,"uniqueId":"c4d1fe0bdf8549110f7afc1617b5b3af","clusterRevision":3,"featureMap":{},"attributeList":[1,2,3,5,7,8,9,10,13,14,15,17,18,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"64":{"labelList":[{"label":"composed","value":"PowerMeter"}],"clusterRevision":1,"featureMap":{},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.545 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 14 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"29":{"deviceTypeList":[{"deviceType":770,"revision":2}],"serverList":[29,3,1026],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"1026":{"measuredValue":4490,"minMeasuredValue":null,"maxMeasuredValue":null,"tolerance":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.553 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 15 {"29":{"deviceTypeList":[{"deviceType":19,"revision":2},{"deviceType":17,"revision":1}],"serverList":[29,57,47,64],"clientList":[],"partsList":[16],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"47":{"status":1,"order":0,"description":"AC Power","endpointList":[],"clusterRevision":2,"featureMap":{"wired":true,"battery":false,"rechargeable":false,"replaceable":false},"attributeList":[0,1,2,31,65533,65532,65531,65529,65528,5],"acceptedCommandList":[],"generatedCommandList":[],"wiredCurrentType":0},"57":{"vendorName":"Shelly","vendorId":65521,"productName":"SHEM-3","nodeLabel":"Puissance L3 Perso","hardwareVersion":1,"hardwareVersionString":"1.0.0","softwareVersion":1,"softwareVersionString":"v1.14.0-gcb84623","productUrl":"https://www.npmjs.com/package/matterbridge","productLabel":"Puissance L3 Perso","serialNumber":"shellyem3-C8C9A33E667D","reachable":true,"uniqueId":"04e585554a9b108a0de43ef4d45fa738","clusterRevision":3,"featureMap":{},"attributeList":[1,2,3,5,7,8,9,10,13,14,15,17,18,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"64":{"labelList":[{"label":"composed","value":"Switch"}],"clusterRevision":1,"featureMap":{},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.555 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 16 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}2025-03-28 19:05:23.557 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 17 {"29":{"deviceTypeList":[{"deviceType":19,"revision":2},{"deviceType":17,"revision":1}],"serverList":[29,57,47,64],"clientList":[],"partsList":[18,19,20],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"47":{"status":1,"order":0,"description":"AC Power","endpointList":[],"clusterRevision":2,"featureMap":{"wired":true,"battery":false,"rechargeable":false,"replaceable":false},"attributeList":[0,1,2,31,65533,65532,65531,65529,65528,5],"acceptedCommandList":[],"generatedCommandList":[],"wiredCurrentType":0},"57":{"vendorName":"Shelly","vendorId":65521,"productName":"SPSW-003XE16EU","nodeLabel":"Pro3 L3 Bâtiment Perso","hardwareVersion":1,"hardwareVersionString":"1.0.0","softwareVersion":1,"softwareVersionString":"1.4.4-g6d2a586","productUrl":"https://www.npmjs.com/package/matterbridge","productLabel":"Pro3 L3 Bâtiment Perso","serialNumber":"shellypro3-FCE8C0DBF970","reachable":true,"uniqueId":"d4d0174a4ba0c81571d931868b458dec","clusterRevision":3,"featureMap":{},"attributeList":[1,2,3,5,7,8,9,10,13,14,15,17,18,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"64":{"labelList":[{"label":"composed","value":"Switch"}],"clusterRevision":1,"featureMap":{},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.563 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 18 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.565 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 19 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.569 DEBUG  PairedNode           Nodo 18303769249106620906: Creando dispositivo 20 {"3":{"identifyTime":0,"identifyType":0,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65533,65532,65531,65529,65528],"acceptedCommandList":[0,64],"generatedCommandList":[]},"4":{"nameSupport":{"nameSupport":false,"groupNames":false},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]},"6":{"onOff":false,"clusterRevision":6,"featureMap":{"lighting":true,"deadFrontBehavior":false,"offOnly":false},"attributeList":[0,65533,65532,65531,65529,65528,16384,16385,16386,16387],"acceptedCommandList":[0,64,65,66,1,2],"generatedCommandList":[],"globalSceneControl":false,"onTime":0,"offWaitTime":0,"startUpOnOff":null},"29":{"deviceTypeList":[{"deviceType":266,"revision":3}],"serverList":[29,3,4,6],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65533,65532,65531,65529,65528],"acceptedCommandList":[],"generatedCommandList":[]}}
2025-03-28 19:05:23.572 DEBUG  PairedNode           Nodo 18303769249106620906: Endpoints de PartsLists [[0,[1,10,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9]],[1,[10,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9]],[2,[3,4]],[3,[]],[4,[]],[5,[6,7,8]],[6,[]],[7,[]],[8,[]],[9,[10,11,12]],[10,[]],[11,[]],[12,[]],[13,[14]],[14,[]],[15,[16]],[16,[]],[17,[18,19,20]],[18,[]],[19,[]],[20,[]]]
2025-03-28 19:05:23.573 DEBUG  PairedNode           Nodo 18303769249106620906: Usos de Endpoint {"1":[0],"2":[0,1],"3":[0,1,2],"4":[0,1,2],"5":[0,1],"6":[0,1,5],"7":[0,1,5],"8":[0,1,5],"9":[0,1],"10":[0,1,9],"11":[0,1,9],"12":[0,1,9],"13":[0,1],"14":[0,1,13],"15":[0,1],"16":[0,1,15],"17":[0,1],"18":[0,1,17],"19":[0,1,17],"20":[0,1,17]}
2025-03-28 19:05:23.573 DEBUG  PairedNode           Nodo 18303769249106620906: Procesando Endpoint [["1",[0]]]
2025-03-28 19:05:23.574 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 1 -> Padre: 0
2025-03-28 19:05:23.576 DEBUG  PairedNode           Nodo 18303769249106620906: Limpieza de datos de Endpoint {"0":true}
2025-03-28 19:05:23.576 DEBUG  PairedNode           Nodo 18303769249106620906: Procesando Endpoint [["2",[1]],["5",[1]],["9",[1]],["13",[1]],["15",[1]],["17",[1]]]
2025-03-28 19:05:23.576 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 2 -> Padre: 1
2025-03-28 19:05:23.577 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 5 -> Padre: 1
2025-03-28 19:05:23.577 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 9 -> Padre: 1
2025-03-28 19:05:23.580 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 13 -> Padre: 1
2025-03-28 19:05:23.581 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 15 -> Padre: 1
2025-03-28 19:05:23.581 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 17 -> Padre: 1
2025-03-28 19:05:23.582 DEBUG  PairedNode           Nodo 18303769249106620906: Limpieza de datos de Endpoint {"1":true}
2025-03-28 19:05:23.582 DEBUG  PairedNode           Nodo 18303769249106620906: Procesando Endpoint [["3",[2]],["4",[2]],["6",[5]],["7",[5]],["8",[5]],["10",[9]],["11",[9]],["12",[9]],["14",[13]],["16",[15]],["18",[17]],["19",[17]],["20",[17]]]
2025-03-28 19:05:23.583 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 3 -> Padre: 2
2025-03-28 19:05:23.584 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 4 -> Padre: 2
2025-03-28 19:05:23.584 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 6 -> Padre: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 7 -> Padre: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 8 -> Padre: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 10 -> Padre: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 11 -> Padre: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de Endpoint: Hijo: 12 -> Padre: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de punto final: Hijo: 14 -> Padre: 13
2025-03-28 19:05:23.587 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de punto final: Hijo: 16 -> Padre: 15
2025-03-28 19:05:23.587 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de punto final: Hijo: 18 -> Padre: 17
2025-03-28 19:05:23.587 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de punto final: Hijo: 19 -> Padre: 17
2025-03-28 19:05:23.587 DEBUG  PairedNode           Nodo 18303769249106620906: Estructura de punto final: Hijo: 20 -> Padre: 17
2025-03-28 19:05:23.588 DEBUG  PairedNode           Nodo 18303769249106620906: Datos de punto final de limpieza {"2":true,"5":true,"9":true,"13":true,"15":true,"17":true}
2025-03-28 19:05:23.588 DEBUG  InteractionClient    Enviando solicitud de lectura: atributos: 0x0/CredencialesOperativas(0x3e)/fabrics(0x1) y eventos: undefined
2025-03-28 19:05:23.589 DEBUG  MessageExchange      Nuevo canal de intercambio: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 en sesión secure/34538 protocolo: 1 exId: 1268 sess: secure/34538 peerSess: 2372 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP I
2025-03-28 19:05:23.590 DEBUG  InteractionClient    Enviando solicitud de lectura a udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 en sesión secure/34538 para atributos 0x0/CredencialesOperativas(0x3e)/fabrics(0x1) y eventos undefined
2025-03-28 19:05:23.591 DEBUG  ExchangeManager      Mensaje » para: I/ReadRequest msgId: 2372/1268/152232953 tipo: 0x1/0x2 reqAck tamaño: 21 carga útil: 1536001724020024033e2404011818290324ff0c18
2025-03-28 19:05:23.595 DEBUG  MessageExchange      Mensaje « para: I/ReportData msgId: 34538/1268/240120675 tipo: 0x1/0x5 acked: 152232953 reqAck tamaño: 145 carga útil: 1536011535012600309fdc68370124020024033e24040118360215300141046c5b1b64fcf104c1e3200dedbaa2ca73368e43e75fc0e32386390c5c51bb343180137d6c38c51199f8cb5484b794eda0dbc571bc8c21bb8c4536ed56fb24ef4f2502f1ff2403012704eaf1b78f270d04fe2c0510476c6164797320417373697374616e7424fe011818181818290424ff0c18
2025-03-28 19:05:23.598 DEBUG  InteractionClient    Recibida respuesta de lectura con atributos 0x0/CredencialesOperativas(0x3e)/fabrics(0x1) = [{"rootPublicKey":"046c5b1b64fcf104c1e3200dedbaa2ca73368e43e75fc0e32386390c5c51bb343180137d6c38c51199f8cb5484b794eda0dbc571bc8c21bb8c4536ed56fb24ef4f","vendorId":65521,"fabricId":"1","nodeId":"18303769249106620906","label":"Gladys Assistant","fabricIndex":1}] y eventos
2025-03-28 19:05:23.598 DEBUG  ExchangeManager      Mensaje » para: SC/StandaloneAck msgId: 2372/1268/152232954 tipo: 0x0/0x10 acked: 240120675
2025-03-28T19:05:23+0100 <info> matter.pairDevice.js:42 (MatterHandler.pairDevice) Dispositivo comisionado con éxito con nodeId 18303769249106620906
2025-03-28T19:05:23+0100 <info> convertToGladysDevice.js:57 () Emparejamiento de Matter - Cluster cliente 29
2025-03-28 19:07:46.758 DEBUG  MessageExchange      Nuevo canal de intercambio: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 en sesión secure/34538 protocolo: 1 exId: 62691 sess: secure/34538 peerSess: 34538 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP
2025-03-28 19:07:46.758 DEBUG  MessageExchange      Mensaje « para: I/ReportData msgId: 34538/62691/240120678 tipo: 0x1/0x5 reqAck tamaño: 13 carga útil: 152600a03c9d45290424ff0c18
2025-03-28 19:07:46.759 DEBUG  ExchangeManager      Mensaje » para: SC/StandaloneAck msgId: 34538/62691/152232957 tipo: 0x0/0x10 acked: 240120678
2025-03-28T19:08:00+0100 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Comprobando disparadores de calendario en Fri, 28 Mar 2025 18:08:00 GMT
2025-03-28 19:08:35.667 DEBUG  MessageExchange      Nuevo canal de intercambio: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 en sesión secure/34538 protocolo: 1 exId: 62692 sess: secure/34538 peerSess: 34538 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP
2025-03-28 19:08:35.669 DEBUG  MessageExchange      Mensaje « para: I/ReportData msgId: 34538/62692/240120679 tipo: 0x1/0x5 reqAck tamaño: 13 carga útil: 152600a03c9d45290424ff0c18
2025-03-28 19:08:35.670 DEBUG  ExchangeManager      Mensaje » para: SC/StandaloneAck msgId: 34538/62692/152232958 tipo: 0x0/0x10 acked: 240120679
2025-03-28 19:07:46.758 DEBUG  MessageExchange      Nuevo canal de intercambio: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 en sesión secure/34538 protocolo: 1 exId: 62691 sess: secure/34538 peerSess: 34538 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP
2025-03-28 19:07:46.758 DEBUG  MessageExchange      Mensaje « para: I/ReportData msgId: 34538/62691/240120678 tipo: 0x1/0x5 reqAck tamaño: 13 carga útil: 152600a03c9d45290424ff0c18
2025-03-28 19:07:46.759 DEBUG  ExchangeManager      Mensaje » para: SC/StandaloneAck msgId: 34538/62691/152232957 tipo: 0x0/0x10 acked: 240120678
2025-03-28T19:08:00+0100 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Comprobando disparadores de calendario en Fri, 28 Mar 2025 18:08:00 GMT
2025-03-28 19:08:35.667 DEBUG  MessageExchange      Nuevo canal de intercambio: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 en sesión secure/34538 protocolo: 1 exId: 62692 sess: secure/34538 peerSess: 34538 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP
2025-03-28 19:08:35.669 DEBUG  MessageExchange      Mensaje « para: I/ReportData msgId: 34538/62692/240120679 tipo: 0x1/0x5 reqAck tamaño: 13 carga útil: 152600a03c9d45290424ff0c18
2025-03-28 19:08:35.670 DEBUG  ExchangeManager      Mensaje » para: SC/StandaloneAck msgId: 34538/62692/152232958 tipo: 0x0/0x10 acked: 240120679


Registros de red:

[
    {
        "name": "Matterbridge (Matterbridge aggregator)",
        "external_id": "matter:18303769249106620906:1",
        "selector": "matter:18303769249106620906:1",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [],
        "params": []
    }
]

Muchas otras cosas en los […] pero demasiado pesado para enviar aquí

Quizás permitir el emparejamiento mediante el código sin disparar:

¡Gracias por la investigación! Veo que solo tienes un dispositivo detectado, a pesar de que debería haber varios en tu casa.

Al mirar el código, me doy cuenta de que hay el mismo problema de .forEach async que encontré durante el directo, la IA se ha vuelto a enredar :stuck_out_tongue:

Acabo de enviar la corrección.

Por lo demás, estoy de acuerdo con todos tus comentarios:

¡Sí!

¡Sí!

¡Genial!

He añadido un poco de registro para ver más.
Te he puesto los registros eliminando las Funciones de los objetos:

2025-03-28T19:59:41+0100 <info> matter.init.js:36 (MatterHandler.init) Controlador de Matter iniciado
convertToGladysDevice gladysDevice
Aggregator {
  clusterServers: Map(1) {
    29 => {
      id: 29,
      name: 'Descriptor',
      _type: 'ClusterServer',
      attributes: [Object],
      commands: {},
      events: {},
      datasource: [Getter/Setter],
      _assignToEndpoint: [Function: _assignToEndpoint],
      [...]
    }
  },
  clusterClients: Map(1) {
    29 => {
      id: 29,
      name: 'Descriptor',
      revision: 2,
      _type: 'ClusterClient',
      supportedFeatures: [Object],
      isUnknown: false,
      endpointId: 1,
      attributes: [Object],
      events: {},
      commands: {},
      subscribeAllAttributes: [AsyncFunction: subscribeAllAttributes],
      [...]
    }
  },
  childEndpoints: [
    ComposedDevice {
      clusterServers: [Map],
      clusterClients: [Map],
      childEndpoints: [Array],
      number: 2,
      uniqueStorageKey: undefined,
      name: 'MA-bridgednode',
      structureChangedCallback: [Function: structureChangedCallback],
      descriptorCluster: [Object],
      deviceTypes: [Array]
    },
    ComposedDevice {
      clusterServers: [Map],
      clusterClients: [Map],
      childEndpoints: [Array],
      number: 5,
      uniqueStorageKey: undefined,
      name: 'MA-bridgednode',
      structureChangedCallback: [Function: structureChangedCallback],
      descriptorCluster: [Object],
      deviceTypes: [Array]
    },
    ComposedDevice {
      clusterServers: [Map],
      clusterClients: [Map],
      childEndpoints: [Array],
      number: 9,
      uniqueStorageKey: undefined,
      name: 'MA-bridgednode',
      structureChangedCallback: [Function: structureChangedCallback],
      descriptorCluster: [Object],
      deviceTypes: [Array]
    },
    ComposedDevice {
      clusterServers: [Map],
      clusterClients: [Map],
      childEndpoints: [Array],
      number: 13,
      uniqueStorageKey: undefined,
      name: 'MA-bridgednode',
      structureChangedCallback: [Function: structureChangedCallback],
      descriptorCluster: [Object],
      deviceTypes: [Array]
    },
    ComposedDevice {
      clusterServers: [Map],
      clusterClients: [Map],
      childEndpoints: [Array],
      number: 15,
      uniqueStorageKey: undefined,
      name: 'MA-bridgednode',
      structureChangedCallback: [Function: structureChangedCallback],
      descriptorCluster: [Object],
      deviceTypes: [Array]
    },
    ComposedDevice {
      clusterServers: [Map],
      clusterClients: [Map],
      childEndpoints: [Array],
      number: 17,
      uniqueStorageKey: undefined,
      name: 'MA-bridgednode',
      structureChangedCallback: [Function: structureChangedCallback],
      descriptorCluster: [Object],
      deviceTypes: [Array]
    }
  ],
  number: 1,
  uniqueStorageKey: undefined,
  name: 'MA-aggregator',
  structureChangedCallback: [Function: structureChangedCallback],
  descriptorCluster: {
    id: 29,
    name: 'Descriptor',
    _type: 'ClusterServer',
    attributes: {
      deviceTypeList: [FixedAttributeServer],
      serverList: [FixedAttributeServer],
      clientList: [FixedAttributeServer],
      partsList: [AttributeServer],
      clusterRevision: [AttributeServer],
      featureMap: [AttributeServer],
      attributeList: [AttributeServer],
      acceptedCommandList: [AttributeServer],
      generatedCommandList: [AttributeServer]
    },
    commands: {},
    events: {},
    datasource: [Getter/Setter],
    _assignToEndpoint: [Function: _assignToEndpoint],
    [...]
  },
  deviceTypes: [
    {
      name: 'MA-aggregator',
      code: 14,
      deviceClass: 'Simple',
      superSet: undefined,
      revision: 1,
      requiredServerClusters: [],
      optionalServerClusters: [Array],
      requiredClientClusters: [],
      optionalClientClusters: [],
      unknown: false
    }
  ]
}
{
  basicInformation: {
    dataModelRevision: 17,
    vendorName: 'Matterbridge',
    vendorId: 65521,
    productName: 'Matterbridge aggregator',
    productId: 32768,
    nodeLabel: 'Matterbridge aggregator',
    location: 'XX',
    hardwareVersion: 6,
    hardwareVersionString: '6.8.0-52-generic',
    softwareVersion: 2,
    softwareVersionString: '2.2.5',
    productLabel: 'Matterbridge aggregator',
    serialNumber: 'SN77b87cfd460bbd72',
    uniqueId: 'UI77b87cfd460bbd72',
    capabilityMinima: { caseSessionsPerFabric: 3, subscriptionsPerFabric: 3 },
    specificationVersion: 16973824,
    maxPathsPerInvoke: 10
  },
  deviceMeta: {
    ethernetConnected: false,
    wifiConnected: false,
    threadConnected: false,
    rootEndpointServerList: [
      40, 31, 63, 48,
      60, 62, 51, 29
    ],
    isBatteryPowered: false,
    isIntermittentlyConnected: false,
    isThreadSleepyEndDevice: false,
    dataRevision: 1
  }
}
PairedNode {
  events: {
    initialized: BasicObservable {},
    initializedFromRemote: BasicObservable {},
    stateChanged: BasicObservable {},
    attributeChanged: BasicObservable {},
    eventTriggered: BasicObservable {},
    structureChanged: BasicObservable {},
    decommissioned: BasicObservable {}
  },
  nodeId: 9432374632414880343n
}
2025-03-28T19:59:41+0100 <info> convertToGladysDevice.js:62 () Emparejamiento de Matter - Cliente de clúster 29
{
  id: 29,
  name: 'Descriptor',
  revision: 2,
  _type: 'ClusterClient',
  supportedFeatures: { tagList: false },
  isUnknown: false,
  endpointId: 1,
  attributes: {
    deviceTypeList: SupportedAttributeClient {
      schema: [ArraySchema],
      id: 0,
      attribute: [Object],
      name: 'deviceTypeList',
      endpointId: 1,
      clusterId: 29
    },
    serverList: SupportedAttributeClient {
      schema: [ArraySchema],
      id: 1,
      attribute: [Object],
      name: 'serverList',
      endpointId: 1,
      clusterId: 29
    },
    clientList: SupportedAttributeClient {
      schema: [ArraySchema],
      id: 2,
      attribute: [Object],
      name: 'clientList',
      endpointId: 1,
      clusterId: 29
    },
    partsList: SupportedAttributeClient {
      schema: [ArraySchema],
      id: 3,
      attribute: [Object],
      name: 'partsList',
      endpointId: 1,
      clusterId: 29
    },
    clusterRevision: SupportedAttributeClient {
      schema: [TlvNumberSchema],
      id: 65533,
      attribute: [Object],
      name: 'clusterRevision',
      endpointId: 1,
      clusterId: 29
    },
    featureMap: SupportedAttributeClient {
      schema: [TlvWrapper],
      id: 65532,
      attribute: [Object],
      name: 'featureMap',
      endpointId: 1,
      clusterId: 29
    },
    attributeList: SupportedAttributeClient {
      schema: [ArraySchema],
      id: 65531,
      attribute: [Object],
      name: 'attributeList',
      endpointId: 1,
      clusterId: 29
    },
    acceptedCommandList: SupportedAttributeClient {
      schema: [ArraySchema],
      id: 65529,
      attribute: [Object],
      name: 'acceptedCommandList',
      endpointId: 1,
      clusterId: 29
    },
    generatedCommandList: SupportedAttributeClient {
      schema: [ArraySchema],
      id: 65528,
      attribute: [Object],
      name: 'generatedCommandList',
      endpointId: 1,
      clusterId: 29
    },
    tagList: AttributeClient {
      schema: [ArraySchema],
      id: 4,
      attribute: [Object],
      name: 'tagList',
      endpointId: 1,
      clusterId: 29
    }
  },
  events: {},
  commands: {},
  subscribeAllAttributes: [AsyncFunction: subscribeAllAttributes],
  [...]
}

Creo que el hecho de que sea un puente, se construye de otra manera. Quizás concentrarse en tus módulos por el momento y revisar una próxima PR para los puentes.
En cualquier caso, recibimos bien en el archivo convertToGladysDevice bajo device los dispositivos registrados en el puente a través de: device.childEndpoints[] ya que las propiedades de los objetos del array contienen en device.childEndpoints[].ComposedDevice.number los números de los Endpoint de los shelly


A investigar más adelante en el próximo episodio o cuando lo desees.

Creo que sería bueno entender cómo se estructura esto solo para asegurarnos de no tomar un camino equivocado con el formato de los external_id :slight_smile:

¿Puedes intentar tener el formato « simplificado » de tu único Node?

Habría que pensar en cómo se vería el external_id de un dispositivo así.

Hola a todos,

Un poco de lectura sobre el desarrollo de dispositivos IoT Matter aquí: ESP LowCode Matter splits system and application firmware for simpler ESP32 device development - CNX Software :slightly_smiling_face: Así que podremos crear aún más fácilmente interfaces físicas a través de Matter con este tipo de productos cuyo SDK es Open :heart_eyes:

Hola @pierre-gilles,

He buscado, pero… ^^ aún no sé cómo acceder a los dispositivos detrás de un puente.
Al agregar la siguiente función en server/services/matter/lib/matter.pairDevice.js después de this.devices.push(gladysDevice);:

        const childEndpointsCount = device.childEndpoints?.length || 0;
        if (childEndpointsCount > 0) {
          logger.debug(`Processing ${childEndpointsCount} child endpoints for device ${device.number}`);

          await Promise.each(device.childEndpoints, async (childEndpoint) => {

            console.log('pairDevice childEndpoints');
            console.log(childEndpoint);
            const childDevice = await convertToGladysDevice(
              this.serviceId,
              nodeDetail.nodeId, // ID único para el dispositivo hijo
              node,
              childEndpoint, // El endpoint hijo se trata como un dispositivo
              nodeDetail.deviceData,
              nodeDetail.unique_id
            );
            this.listenToStateChange(nodeDetail.nodeId, childEndpoint);
            this.devices.push(childDevice);
          });
        }

Aquí tienes un ejemplo de un dispositivo « childEndpoints »:

childEndpoints: [
    PairedDevice {
      clusterServers: [Map],
      clusterClients: [Map],
      childEndpoints: [],
      number: 3,
      uniqueStorageKey: undefined,
      name: 'MA-onoffpluginunit',
      structureChangedCallback: [Function: structureChangedCallback],
      descriptorCluster: [Object],
      deviceTypes: [Array],
      declineAddingMoreClusters: true
    },
    PairedDevice {
      clusterServers: [Map],
      clusterClients: [Map],
      childEndpoints: [],
      number: 4,
      uniqueStorageKey: undefined,
      name: 'MA-temperaturesensor',
      structureChangedCallback: [Function: structureChangedCallback],
      descriptorCluster: [Object],
      deviceTypes: [Array],
      declineAddingMoreClusters: true
    }
  ],
  number: 2,
  uniqueStorageKey: undefined,
  name: 'MA-bridgednode',
  structureChangedCallback: [Function: structureChangedCallback],
  descriptorCluster: {
    id: 29,
    name: 'Descriptor',
    _type: 'ClusterServer',
    attributes: {
      deviceTypeList: [FixedAttributeServer],
      serverList: [FixedAttributeServer],
      clientList: [FixedAttributeServer],
      partsList: [AttributeServer],
      clusterRevision: [AttributeServer],
      featureMap: [AttributeServer],
      attributeList: [AttributeServer],
      acceptedCommandList: [AttributeServer],
      generatedCommandList: [AttributeServer]
    },
    commands: {},
    events: {},
    datasource: [Getter/Setter],
    _assignToEndpoint: [Function: _assignToEndpoint],
    _close: [Function: _close],
    isAttributeSupported: [Function: isAttributeSupported],
    isAttributeSupportedByName: [Function: isAttributeSupportedByName],
    isEventSupported: [Function: isEventSupported],
    isEventSupportedByName: [Function: isEventSupportedByName],
    isCommandSupported: [Function: isCommandSupported],
    isCommandSupportedByName: [Function: isCommandSupportedByName],
    getDeviceTypeListAttribute: [Function (anonymous)],
    getServerListAttribute: [Function (anonymous)],
    getClientListAttribute: [Function (anonymous)],
    getPartsListAttribute: [Function (anonymous)],
    setPartsListAttribute: [Function (anonymous)],
    subscribePartsListAttribute: [Function (anonymous)],
    getClusterRevisionAttribute: [Function (anonymous)],
    setClusterRevisionAttribute: [Function (anonymous)],
    subscribeClusterRevisionAttribute: [Function (anonymous)],
    getFeatureMapAttribute: [Function (anonymous)],
    setFeatureMapAttribute: [Function (anonymous)],
    subscribeFeatureMapAttribute: [Function (anonymous)],
    getAttributeListAttribute: [Function (anonymous)],
    setAttributeListAttribute: [Function (anonymous)],
    subscribeAttributeListAttribute: [Function (anonymous)],
    getAcceptedCommandListAttribute: [Function (anonymous)],
    setAcceptedCommandListAttribute: [Function (anonymous)],
    subscribeAcceptedCommandListAttribute: [Function (anonymous)],
    getGeneratedCommandListAttribute: [Function (anonymous)],
    setGeneratedCommandListAttribute: [Function (anonymous)],
    subscribeGeneratedCommandListAttribute: [Function (anonymous)]
  },
  deviceTypes: [
    {
      name: 'MA-bridgednode',
      code: 19,
      deviceClass: 'Utility',
      superSet: undefined,
      revision: 2,
      requiredServerClusters: [Array],
      optionalServerClusters: [Array],
      requiredClientClusters: [],
      optionalClientClusters: [],
      unknown: false
    },
    {
      name: 'MA-powersource',
      code: 17,
      deviceClass: 'Utility',
      superSet: undefined,
      revision: 1,
      requiredServerClusters: [Array],
      optionalServerClusters: [],
      requiredClientClusters: [],
      optionalClientClusters: [],
      unknown: false
    }
  ]

Y tengo

Pero bueno, no sé si esto te ayuda… ^^

Sin embargo, estaba mirando el problema de conservar los estados de un dispositivo incluso después de su descomisión (pero quizá ya lo hayas resuelto entre tanto ^^), ¿no deberíamos tomar el uniqueId para el external_id:
matter:${nodeDetail.deviceData.basicInformation.uniqueId}:${device.number} y solo conservar el nodeId en un param?

EDIT: No dudes en decirme si quieres que hagamos una llamada con pantalla compartida.

¡Eso ayuda mucho! :slight_smile:

Creo que podremos identificar estos dispositivos en modo:

node:{node_id}:{device.number}:child_endpoint:${child_endpoint.number}

De lo que leo en internet, el uniqueId no es un ID estándar y no se puede confiar realmente en él.

La combinación que hemos hecho es una buena solución :slight_smile:

¡Voy a seguir leyendo la documentación sobre el tema!

Hola @pierre-gilles,
No estoy necesariamente de acuerdo, si nos situamos a nivel del dispositivo, el nodeId no es fijo. De hecho, se considera un « puente » temporal. Cualquier causa que resulte en un reapareamiento provoca un cambio en el nodeId.
El UniqueId, en cambio, permanece fijo según lo que puedo leer/observar.
La prueba es que, a continuación, instalé 2 matterbridge en 2 redes distintas y pude emparejar mis Shelly en la segunda plataforma. Para información, también hubo un corte de corriente en ese momento, por lo que estoy seguro de que estos dispositivos se reiniciaron.
Los UniqueID son exactamente los mismos, los serialNumber también. Y cada vez que reapareo con MatterBridge (desinstalación del plugin matter-shelly o reinicio) se « reaparean » de manera idéntica.


Y, en último lugar, siempre podemos usar el número de serie en su lugar. El serieNumber parece estar accesible en el mismo lugar. Porque el nodeId no tiene nada que ver con un ID del dispositivo.
Ejemplo concreto, tu dispositivo está emparejado según tu método. Tienes un hilo al lado que también hace referencia a este último, cuando lo conectes tendrás un segundo dispositivo referenciado idéntico porque dependerá del nodeId de este otro canal…
Para mí, el nodeID es un parámetro que habrá que actualizar cuando este cambie.

Después, quizá me equivoque, pero se necesitarían varias plataformas para probar el uniqueId.

Pero para el serialNumber… no hay ninguna razón para que sea diferente de una plataforma a otra, ¿no?

Creo que deberíamos verificar la recomendación oficial y ver cómo lo hacen otras plataformas :slightly_smiling_face:

Matter es un estándar, ¡no nos corresponde a nosotros tomar estas decisiones!

Estoy leyendo la especificación Matter 1.4.

Hay más de 1000 páginas, pero al menos todo está descrito, es muy claro.

https://csa-iot.org/wp-content/uploads/2025/01/24-27349-006_Matter-1.4-Core-Specification-1.pdf

Ya, el campo uniqueId no era obligatorio antes de Matter 1.4, es un añadido reciente. Por lo tanto, hay objetos en la naturaleza sin uniqueId.

En el caso de un dispositivo « Bridge » como en tu caso @Terdious, el uniqueId no es estable en el tiempo según la especificación:

En general, tengo la impresión de que el identificador de un dispositivo es la asociación de 3 atributos:

  • FabricIndex
  • NodeId
  • Endpoint

No estábamos muy lejos, pero faltaba el FabricIndex porque el NodeId puede existir en otro Fabric, creo.

Mi opinión

El campo uniqueId no es una base estable de identificación según lo que leo en la especificación.

Sin embargo, nada nos impide guardar este uniqueId si existe (en un parámetro, por ejemplo), y luego hacer la coincidencia en caso de comisionar un dispositivo que evidentemente ya ha sido comisionado en Gladys.

Sigo leyendo la especificación…

Hola,
si necesitas información adicional sobre otros productos, he instalado un matterbridge con el puente tahoma para recuperar todas mis persianas y toldos.
No podré ayudar en el lado de desarrollo, pero si necesitas detalles de un dispositivo, podré proporcionarlos :slight_smile:
PD: también he importado mis dispositivos zigbee, por lo que tenemos un poco más de funcionalidades para otros dispositivos para más adelante.