🚀 Matter & Gladys Assistant : C’est parti!

Salut Ă  tous ! :smiley:

Le protocole Matter devient de plus en plus intéressant : on commence enfin à voir des appareils stables et convaincants sur le marché.

Comme je l’expliquais dans mon live “Projets pour 2025” (Ă  23:57), j’ai beaucoup d’espoirs pour Matter et je pense que Gladys Assistant pourrait en bĂ©nĂ©ficier Ă©normĂ©ment.

:point_right: À terme, un seul protocole domotique pourrait dominer et si c’est Matter, cela rĂ©duirait Ă©normĂ©ment les diffĂ©rences entre Gladys et d’autres solutions en termes d’intĂ©grations. L’enjeu principal deviendrait alors l’expĂ©rience utilisateur, qui est justement la grande force de Gladys ! :fire:

:dart: Premier test : une prise connectée Matter / Thread

Pour avancer sur ce sujet, j’ai commandĂ© une prise Eve Energy compatible Matter sur le rĂ©seau Thread.

C’est l’un des appareils Matter les mieux notĂ©s actuellement ! La marque Eve met un gros focus sur l’UX et le respect de la vie privĂ©e, ce qui correspond totalement Ă  la philosophie de Gladys.

:clapper: Live coding Matter dans Gladys – Vendredi 28 mars à 10h

Je serai en direct sur YouTube pour un live coding oĂč je vais coder l’intĂ©gration Matter dans Gladys en direct !

Comme d’habitude, on dĂ©marre petit (un seul appareil) et on Ă©toffera progressivement.

:red_circle: Lien du live : https://youtube.com/live/gBxSVSGUjJ0

:loudspeaker: Pensez Ă  activer la cloche :bell: pour ĂȘtre notifiĂ© !

Hñte de partager ça avec vous et d’avoir vos retours ! :rocket:

hello @pierre-gilles ,
stable et convaincant certes et j en suis convaincu.
mais 2 autres éléments sont aussi importants à mes yeux :
- que cela soit un protocole ouvert et accessible aux dev (pas un protocole proprietaire qu un lobby de marques s approprierait comme cela arrive trop souvent avec certains type de peripherique et de normes)
- que les produits proposés restent abordables au meme titre que avec zigbee, car autre produits-procotoles pesent souvent sur le porte monnaie
- mais aussi que matter ne vienne pas tuer zigbee pour autant !

2 « J'aime »

C’est le cas ! J’ai dĂ©jĂ  fais des tests, et c’est trĂšs ouvert. Je n’ai crĂ©Ă© ce post qu’aprĂšs mes investigations :wink:

Étant donnĂ© que le protocole est ouvert, n’importe qui peut crĂ©er un appareil Matter, y compris en DIY ! :rocket: Cela devrait avoir le mĂȘme impact que Zigbee : une concurrence illimitĂ©e, poussant les prix vers le bas. :chart_with_downwards_trend:

Matter n’est pas un concurrent de Zigbee, en revanche Thread est un concurrent de Zigbee.

Matter n’est pas un protocole radio :warning:

Tu peux avoir un appareil Zigbee compatible Matter :slight_smile:

4 « J'aime »

ParĂ© pour demain ^^ D’une simplicitĂ© dĂ©concertante Ă  installer ^^ Une fois le plugin installĂ©, il trouve tout tous seul 
 J’étais Ă©tonnĂ© qu’il n’y ai mĂȘme pas besoin de configurer les Shelly ^^

2 « J'aime »

Exceptionnel ! J’ai hñte de voir tout ça fonctionner avec Gladys :star_struck:

2 « J'aime »

Merci Ă  tous d’ĂȘtre venu pour ce live !

Le replay est disponible ici :

https://www.youtube.com/live/gBxSVSGUjJ0

J’ai poussĂ© le dĂ©veloppement de ce matin ici :

C’est encore WIP, mais c’est dĂ©jĂ  une trĂšs bonne base, je pense qu’on est pas loin d’avoir quelque chose Ă  publier en production :slight_smile:

@Terdious comme on disait dans le live, je suis preneur d’un test de ta part avec MatterBridge pour m’assurer que les choix que j’ai fais sur l’identification des device/features sont bon :slight_smile:

3 « J'aime »

A peine lancé :

Ne faudrait-il pas désactiver matter de base ? Et profiter de ton bouton activation dans les settings ? Et sur la page des appareils, renvoyer vers la page de settings si non activé ?

Alors 
 Ca ne passe pas (le pairing code) mais je suppose que la raison :

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}

Je suis enfermé dans mon linux (dev sous windows).

Je regard


Tout repris, j’ai installĂ© un env de dev sur mon linux avec 
 vscode ! Je verrais plus tard si Cursor dispo.
Donc Ă  la connexion

  • CĂŽtĂ© logs 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 }

L’image de pairing code flashable s’est transformĂ©e en :

  • CĂŽtĂ© Gladys :
[...]
2025-03-28 19:05:23.461 DEBUG  PairedNode           Node 18303769249106620906: Creating device 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: Creating device 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: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Creating device 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           Node 18303769249106620906: Endpoints from 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           Node 18303769249106620906: Endpoint usages {"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           Node 18303769249106620906: Processing Endpoint [["1",[0]]]
2025-03-28 19:05:23.574 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 1 -> Parent: 0
2025-03-28 19:05:23.576 DEBUG  PairedNode           Node 18303769249106620906: Endpoint data Cleanup {"0":true}
2025-03-28 19:05:23.576 DEBUG  PairedNode           Node 18303769249106620906: Processing Endpoint [["2",[1]],["5",[1]],["9",[1]],["13",[1]],["15",[1]],["17",[1]]]
2025-03-28 19:05:23.576 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 2 -> Parent: 1
2025-03-28 19:05:23.577 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 5 -> Parent: 1
2025-03-28 19:05:23.577 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 9 -> Parent: 1
2025-03-28 19:05:23.580 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 13 -> Parent: 1
2025-03-28 19:05:23.581 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 15 -> Parent: 1
2025-03-28 19:05:23.581 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 17 -> Parent: 1
2025-03-28 19:05:23.582 DEBUG  PairedNode           Node 18303769249106620906: Endpoint data Cleanup {"1":true}
2025-03-28 19:05:23.582 DEBUG  PairedNode           Node 18303769249106620906: Processing 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           Node 18303769249106620906: Endpoint structure: Child: 3 -> Parent: 2
2025-03-28 19:05:23.584 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 4 -> Parent: 2
2025-03-28 19:05:23.584 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 6 -> Parent: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 7 -> Parent: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 8 -> Parent: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 10 -> Parent: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 11 -> Parent: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 12 -> Parent: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 14 -> Parent: 13
2025-03-28 19:05:23.587 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 16 -> Parent: 15
2025-03-28 19:05:23.587 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 18 -> Parent: 17
2025-03-28 19:05:23.587 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 19 -> Parent: 17
2025-03-28 19:05:23.587 DEBUG  PairedNode           Node 18303769249106620906: Endpoint structure: Child: 20 -> Parent: 17
2025-03-28 19:05:23.588 DEBUG  PairedNode           Node 18303769249106620906: Endpoint data Cleanup {"2":true,"5":true,"9":true,"13":true,"15":true,"17":true}
2025-03-28 19:05:23.588 DEBUG  InteractionClient    Sending read request: attributes: 0x0/OperationalCredentials(0x3e)/fabrics(0x1) and events: undefined
2025-03-28 19:05:23.589 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/34538 protocol: 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    Sending read request to udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/34538 for attributes 0x0/OperationalCredentials(0x3e)/fabrics(0x1) and events undefined
2025-03-28 19:05:23.591 DEBUG  ExchangeManager      Message » for: I/ReadRequest msgId: 2372/1268/152232953 type: 0x1/0x2 reqAck size: 21 payload: 1536001724020024033e2404011818290324ff0c18
2025-03-28 19:05:23.595 DEBUG  MessageExchange      Message « for: I/ReportData msgId: 34538/1268/240120675 type: 0x1/0x5 acked: 152232953 reqAck size: 145 payload: 1536011535012600309fdc68370124020024033e24040118360215300141046c5b1b64fcf104c1e3200dedbaa2ca73368e43e75fc0e32386390c5c51bb343180137d6c38c51199f8cb5484b794eda0dbc571bc8c21bb8c4536ed56fb24ef4f2502f1ff2403012704eaf1b78f270d04fe2c0510476c6164797320417373697374616e7424fe011818181818290424ff0c18
2025-03-28 19:05:23.598 DEBUG  InteractionClient    Received read response with attributes 0x0/OperationalCredentials(0x3e)/fabrics(0x1) = [{"rootPublicKey":"046c5b1b64fcf104c1e3200dedbaa2ca73368e43e75fc0e32386390c5c51bb343180137d6c38c51199f8cb5484b794eda0dbc571bc8c21bb8c4536ed56fb24ef4f","vendorId":65521,"fabricId":"1","nodeId":"18303769249106620906","label":"Gladys Assistant","fabricIndex":1}] and events
2025-03-28 19:05:23.598 DEBUG  ExchangeManager      Message » for: SC/StandaloneAck msgId: 2372/1268/152232954 type: 0x0/0x10 acked: 240120675
2025-03-28T19:05:23+0100 <info> matter.pairDevice.js:42 (MatterHandler.pairDevice) Successfully commissioned device with nodeId 18303769249106620906
2025-03-28T19:05:23+0100 <info> convertToGladysDevice.js:57 () Matter pairing - Cluster client 29
2025-03-28 19:07:46.758 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/34538 protocol: 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      Message « for: I/ReportData msgId: 34538/62691/240120678 type: 0x1/0x5 reqAck size: 13 payload: 152600a03c9d45290424ff0c18
2025-03-28 19:07:46.759 DEBUG  ExchangeManager      Message » for: SC/StandaloneAck msgId: 34538/62691/152232957 type: 0x0/0x10 acked: 240120678
2025-03-28T19:08:00+0100 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Checking calendar triggers at Fri, 28 Mar 2025 18:08:00 GMT
2025-03-28 19:08:35.667 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/34538 protocol: 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      Message « for: I/ReportData msgId: 34538/62692/240120679 type: 0x1/0x5 reqAck size: 13 payload: 152600a03c9d45290424ff0c18
2025-03-28 19:08:35.670 DEBUG  ExchangeManager      Message » for: SC/StandaloneAck msgId: 34538/62692/152232958 type: 0x0/0x10 acked: 240120679
2025-03-28 19:07:46.758 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/34538 protocol: 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      Message « for: I/ReportData msgId: 34538/62691/240120678 type: 0x1/0x5 reqAck size: 13 payload: 152600a03c9d45290424ff0c18
2025-03-28 19:07:46.759 DEBUG  ExchangeManager      Message » for: SC/StandaloneAck msgId: 34538/62691/152232957 type: 0x0/0x10 acked: 240120678
2025-03-28T19:08:00+0100 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Checking calendar triggers at Fri, 28 Mar 2025 18:08:00 GMT
2025-03-28 19:08:35.667 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/34538 protocol: 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      Message « for: I/ReportData msgId: 34538/62692/240120679 type: 0x1/0x5 reqAck size: 13 payload: 152600a03c9d45290424ff0c18
2025-03-28 19:08:35.670 DEBUG  ExchangeManager      Message » for: SC/StandaloneAck msgId: 34538/62692/152232958 type: 0x0/0x10 acked: 240120679


Logs réseau :

[
    {
        "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": []
    }
]

Plein d’autres choses dans les [
] mais trop lourd pour envoyer ici

Maybe autoriser l’appairage via le code sans tirer :

Merci pour l’investigation !! Je vois que tu n’as qu’un seul appareil dĂ©tectĂ©, malgrĂ© le fait qu’il devrait y en avoir plusieurs chez toi.

En regardant le code, je me rend compte qu’il y a le mĂȘme souci de .forEach async que j’ai trouvĂ© pendant le live, l’IA s’est encore pris les pieds dans le tapis :stuck_out_tongue:

Je viens de pousser le correctif.

Sinon, je suis d’accord avec toutes tes remarques :

Oui !

Oui !

1 « J'aime »

Top !

J’ai rajouter un peu de log pour en voir plus.
Je t’ai mis les logs en expurgeant les Function des objets :

2025-03-28T19:59:41+0100 <info> matter.init.js:36 (MatterHandler.init) Matter controller started
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 () Matter pairing - Cluster client 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],
  [...]
}

Je pense que le fait que ce soit une passerelle, c’est construit autrement. Peut-ĂȘtre se concentrer sur tes modules pour le moment et revoir une prochaine PR pour les bridges ?
En tout cas on reçoit bien dans le fichier convertToGladysDevice sous device les appareils enregistré dans le bridge via : device.childEndpoints[] car les propriétés des objets du tableau contiennent dans device.childEndpoints[].ComposedDevice.number les numéros des Endpoint des shelly


A investiguer plus loin au prochain Ă©pisode ou quand tu le souhaites.

Je pense que ça serait bien quand mĂȘme de comprendre comment ça s’architecture juste pour ĂȘtre sĂ»r qu’on fasse pas fausse route sur le format des external_id :slight_smile:

Est-ce que tu peux essayer d’avoir le format « simplifiĂ© Â» de ton unique Node ?

Il faudrait rĂ©flĂ©chir Ă  quoi ressemble l’external_id d’un tel device

1 « J'aime »

Bonjour tout le monde,

Un peu de lecture concernant le dev de bidulles IoT Matter ici : ESP LowCode Matter splits system and application firmware for simpler ESP32 device development - CNX Software :slightly_smiling_face: On va donc pouvoir encore plus simplement pouvoir « crĂ©er Â» de interfaces physiques via Matter avec ce types de produits dont le SDK est Open :heart_eyes:

1 « J'aime »

Salut @pierre-gilles,

J’ai chercher mais 
 ^^ je ne sais pas encore comment accĂ©der aux devices derriĂšres un bridge.
En ajoutant dans server/services/matter/lib/matter.pairDevice.js la fonction suivante aprĂšs le 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 unique pour le child device
              node,
              childEndpoint, // Le child endpoint est traité comme un device
              nodeDetail.deviceData,
              nodeDetail.unique_id
            );
            this.listenToStateChange(nodeDetail.nodeId, childEndpoint);
            this.devices.push(childDevice);
          });
        }

VoilĂ  l’exemple d’un device « 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
    }
  ]

Et j’ai

Mais bon, je ne sais pas si ça t’aide 
 ^^

Toutefois je regardais pour la problĂ©matique de conserver les states d’un appareil meme aprĂšs decommissionning (mais tu as peut-ĂȘtre rĂ©solu ça entre temps ^^), ne devrait-on pas prendre le uniqueId pour le external_id :
matter:${nodeDetail.deviceData.basicInformation.uniqueId}:${device.number} et seulement conserver le nodeId dans un param ?

EDIT : Hesite pas Ă  me dire si tu veux qu’on fasse un call ecran partagĂ©.

ça aide beaucoup ! :slight_smile:

Je pense qu’on va pouvoir identifier ces appareils en mode:

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

De ce que je lis sur internet, le uniqueId n’est pas un ID standard et on ne peut pas vraiment s’y fier.

Le combo qu’on a fait est une bonne solution :slight_smile:

Je vais continuer de la lire de la documentation sur le sujet !

https://siliconlabs.github.io/matter/latest/index.html

2 « J'aime »

Bonjour @pierre-gilles,
Je ne suis pas forcĂ©ment d’accord, si on se place au niveau du device, le nodeId n’est pas fixe. Il est mĂȘme considĂ©rĂ© comme un pont « temporaire Â». N’importe quelle cause d’avoir pour consĂ©quence un rĂ©appairage engendre un changement de nodeId.
Le uniqueId lui reste fixe de ce que je peux lire/constater
Preuve en est, ci-dessous j’ai installĂ© 2 matterbridge sur 2 rĂ©seau distinct, et j’ai pu appairer mes Shelly sur la 2Ăšme plateforme. Pour info il y a Ă©galement eu 1 coupure de courant entre temps, je suis donc certains que ces appareils ont redĂ©marrĂ©.
Les UniqueID sont exactement les mĂȘmes, les serialNumber Ă©galement. Et Ă  chaque rĂ©appairage avec MatterBridge (dĂ©sinstallation du plugin matter-shelly ou redĂ©marrage) ils se « rĂ©appairent Â» identiquement.


Et en dernier lieu on peut toujours utiliser le numĂ©ro de sĂ©rie plutĂŽt. Le serieNumber est accessible au mĂȘme endroit me semble-t-il. Car le nodeId n’a rien d’un ID du device.
Exemple concret, ton appareil est appairé selon ta méthode. Tu as un thread à cÎté qui référence ce dernier egalement, lorsque tu vas le connecter tu auras un second appareil de référencé identique car il dépendra du nodeId de cet autre canal

Pour moi le nodeID est un paramùtre qu’il faudra mettre à jour lorsque ce dernier changera.

AprĂšs je me trompe peut-ĂȘtre, il faudrait plusieurs plateforme pour tester le uniqueId.

Mais pour le serialNumber 
 il n’y a aucune raison qu’il soit diffĂ©rent d’une plateforme Ă  l’autre, non ?

Je pense qu’il faut vĂ©rifier la recommandation officielle et voir comment les autres plateformes font :slightly_smiling_face:

Matter est un standard, ce n’est pas Ă  nous de prendre ces dĂ©cisions !

Je suis entrain de lire la spécification Matter 1.4.

Il y a plus de 1000 pages, mais au moins tout a Ă©tĂ© dĂ©crit, c’est trĂšs clair.

DĂ©jĂ , le champ uniqueId n’était pas obligatoire avant Matter 1.4, c’est un ajout rĂ©cent. Il y a donc des objets dans la nature sans uniqueId.

Dans le cas de device « Bridge Â» comme dans ton cas @Terdious, le uniqueId n’est pas stable dans le temps de ce que dit la spec :

De maniĂšre gĂ©nĂ©rale, j’ai l’impression que l’identifiant d’un appareil est l’association de 3 attributs :

  • FabricIndex
  • NodeId
  • Endpoint

On Ă©tait pas trĂšs loin mais il manquait le FabriceIndex car le NodeId peut exister dans un autre Fabric je pense.

Mon avis

Le champ uniqueId n’est pas une base stable d’identification de ce que je lis de la spĂ©cification.

NĂ©anmoins, rien ne nous empĂȘche de sauvegarder ce uniqueId si il existe (dans un param par exemple), et ensuite de faire le matching en cas de commissioning d’un appareil qui a visiblement dĂ©jĂ  Ă©tĂ© commissionĂ© dans Gladys !

Je continue de lire la spec


1 « J'aime »

Hello,
si besoin d’info complĂ©mentaires sur d’autres produits, je me suis installĂ© un matterbridge avec la passerelle tahoma pour rĂ©cupĂ©rer tous mes volets roulants et stores.
Je ne pourrais pas aider sur le cĂŽtĂ© dev mais si besoin de dĂ©tails d’un device, je pourrai fournir :slight_smile:
PS : j’ai aussi importĂ© mes devices zigbee donc on a un peu plus de fonctionnalitĂ©s pour d’autres devices pour plus tard.

2 « J'aime »