🚀 Matter & Gladys Assistant: Los geht’s!

Hallo zusammen! :smiley:

Das Matter-Protokoll wird immer interessanter: Man beginnt endlich, stabile und ĂŒberzeugende GerĂ€te auf dem Markt zu sehen.

Wie ich in meinem Live-Stream „Projekte fĂŒr 2025“ (ab 23:57) erklĂ€rt habe, habe ich große Hoffnungen fĂŒr Matter und denke, dass Gladys Assistant enorm davon profitieren könnte.

:backhand_index_pointing_right: Langfristig könnte ein einziges Smart-Home-Protokoll dominieren, und wenn es Matter ist, wĂŒrde dies die Unterschiede zwischen Gladys und anderen Lösungen in Bezug auf Integrationen erheblich verringern. Die Hauptaufgabe wĂŒrde dann die Benutzererfahrung sein, die genau die große StĂ€rke von Gladys ist! :fire:

:bullseye: Erster Test: Ein Matter/Thread-Steckdosenadapter

Um in diesem Bereich voranzukommen, habe ich einen Matter-kompatiblen Steckdosenadapter Eve Energy im Thread-Netzwerk bestellt.

Das ist eines der am besten bewerteten Matter-GerĂ€te derzeitig! Die Marke Eve legt großen Wert auf UX und Datenschutz, was perfekt zur Philosophie von Gladys passt.

:clapper_board: Live-Coding von Matter in Gladys – Freitag, 28. MĂ€rz, um 10 Uhr

Ich werde live auf YouTube sein, um Matter in Gladys live zu codieren!

Wie gewohnt fangen wir klein an (ein GerÀt) und erweitern dann schrittweise.

:red_circle: Link zum Live-Stream: https://youtube.com/live/gBxSVSGUjJ0

:loudspeaker: Denkt daran, die Glocke :bell: zu aktivieren, um benachrichtigt zu werden!

Ich freue mich darauf, das mit euch zu teilen und euer Feedback zu erhalten! :rocket:

hallo @pierre-gilles ,
stabil und ĂŒberzeugend, das ist klar, und ich bin davon ĂŒberzeugt.
doch zwei weitere Punkte sind fĂŒr mich genauso wichtig:
- dass es sich um ein offenes Protokoll handelt, das fĂŒr Entwickler zugĂ€nglich ist (kein proprietĂ€res Protokoll, das sich ein Lobbyverband aneignet, wie es allzu oft mit bestimmten Arten von PeripheriegerĂ€ten und Normen passiert)
- dass die angebotenen Produkte genauso erschwinglich bleiben wie bei Zigbee, denn andere Produkte und Protokolle belasten oft den Geldbeutel
- aber auch, dass Matter nicht gleichzeitig Zigbee zerstört!

Das ist der Fall! Ich habe bereits Tests durchgefĂŒhrt, und es ist sehr offen. Ich habe diesen Post erst nach meinen Untersuchungen erstellt :wink:

Da das Protokoll offen ist, kann jeder ein Matter-GerĂ€t erstellen, einschließlich DIY! :rocket: Das sollte den gleichen Effekt haben wie Zigbee: unbegrenzter Wettbewerb, der die Preise nach unten treibt. :chart_decreasing:

Matter ist kein Konkurrent von Zigbee, aber Thread ist ein Konkurrent von Zigbee.

Matter ist kein Funkprotokoll :warning:

Du kannst ein Matter-kompatibles Zigbee-GerÀt haben :slight_smile:

Bereit fĂŒr morgen ^^ Einfach zu installieren ^^ Sobald das Plugin installiert ist, findet es alles von alleine 
 Ich war ĂŒberrascht, dass man nicht einmal die Shelly konfigurieren muss ^^

Ausgezeichnet! Ich kann es kaum erwarten, das alles mit Gladys laufen zu sehen :star_struck:

Danke an alle, die zum Live-Stream gekommen sind!

Die Aufzeichnung ist hier verfĂŒgbar:

Ich habe die Entwicklung von heute Morgen hier hochgeladen:

https://github.com/GladysAssistant/Gladys/pull/2264

Es ist noch WIP, aber es ist bereits eine sehr gute Basis. Ich denke, wir sind nicht weit davon entfernt, etwas in die Produktion zu veröffentlichen :slight_smile:

@Terdious wie wir im Live-Stream gesagt haben, ich wĂ€re dankbar fĂŒr einen Test von dir mit MatterBridge, um sicherzustellen, dass meine Entscheidungen zur Identifizierung der GerĂ€te/Merkmale gut sind :slight_smile:

Kaum gestartet:

Sollte man Matter nicht standardmĂ€ĂŸig deaktivieren? Und deinen Aktivierungsknopf in den Einstellungen nutzen? Und auf der GerĂ€te-Seite auf die Einstellungen-Seite verlinken, wenn nicht aktiviert?

Also 
 Es funktioniert nicht (der Pairing-Code), aber ich vermute, der Grund:

2025-03-28T17:19:53+0100 <info> matter.pairDevice.js:38 (MatterHandler.pairDevice) GerÀt mit den folgenden Optionen kommissionieren: {"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     GerÀt mit der Kennung {"shortDiscriminator":15} und 1 Scannern und der bekannten Adresse "undefined" kommissionieren
2025-03-28 17:19:53.938 INFO   ControllerDiscovery  Start der GerÀtesuche mit der Kennung {"shortDiscriminator":15} ...
2025-03-28 17:19:53.939 DEBUG  MdnsScanner          Registrierter WĂ€rter fĂŒr die Abfrage _S15._sub._matterc._udp.local mit einer Timeout von 30 Sekunden
2025-03-28 17:19:53.939 DEBUG  MdnsScanner          2 AbfrageeintrĂ€ge fĂŒr die Abfrage _S15._sub._matterc._udp.local festgelegt: [{"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          Senden von 2 AbfrageeintrĂ€gen fĂŒr 1 Abfragen mit 0 bekannten Antworten. Neuanmeldung in 1,5 Sekunden
2025-03-28 17:19:53.942 DEBUG  NodejsChannel        Socket erstellt und an remoteAddress: undefined:5353 localAddress: 0.0.0.0:5353 gebunden
2025-03-28 17:19:53.942 DEBUG  NodejsChannel        Socket erstellt und an remoteAddress: undefined:5353 localAddress: :::5353 gebunden
2025-03-28 17:19:53.942 DEBUG  NodejsChannel        Multicast-Adresse initialisiert: 172.26.50.62:5353 Schnittstelle: eth0 Typ: udp4
2025-03-28 17:19:53.943 DEBUG  NodejsChannel        Multicast-Adresse initialisiert: ::%eth0:5353 Schnittstelle: eth0 Typ: udp6
2025-03-28 17:19:55.441 DEBUG  MdnsScanner          Senden von 2 AbfrageeintrĂ€gen fĂŒr 1 Abfragen mit 0 bekannten Antworten. Neuanmeldung in 3 Sekunden
2025-03-28 17:19:58.441 DEBUG  MdnsScanner          Senden von 2 AbfrageeintrĂ€gen fĂŒr 1 Abfragen mit 0 bekannten Antworten. Neuanmeldung in 6 Sekunden
2025-03-28 17:20:04.442 DEBUG  MdnsScanner          Senden von 2 AbfrageeintrĂ€gen fĂŒr 1 Abfragen mit 0 bekannten Antworten. Neuanmeldung in 12 Sekunden
2025-03-28 17:20:16.443 DEBUG  MdnsScanner          Senden von 2 AbfrageeintrĂ€gen fĂŒr 1 Abfragen mit 0 bekannten Antworten. Neuanmeldung in 24 Sekunden
2025-03-28 17:20:23.940 DEBUG  MdnsScanner          Beenden des WĂ€rters fĂŒr die Abfrage _S15._sub._matterc._udp.local, auflösen: true
2025-03-28 17:20:23.940 DEBUG  MdnsScanner          Entfernen der letzten Abfrage _S15._sub._matterc._udp.local und Stoppen des Anzeigetimers
2025-03-28 17:20:23.940 INFO   ControllerDiscovery  0 GerÀte mit der Kennung {"shortDiscriminator":15} gefunden

Ich bin in meinem Linux eingeschlossen (Entwicklung unter Windows).

Ich schaue


Alles neu aufgesetzt, habe eine Entwicklungsumgebung auf meinem Linux mit 
 vscode! installiert. Ich werde spĂ€ter sehen, ob Cursor verfĂŒgbar ist.
Bei der Verbindung

  • Logs von 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 }

Das Bild des flashbaren Pairing-Codes hat sich in Folgendes verwandelt:

  • 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           Knoten 18303769249106620906: GerÀt 3 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 4 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 5 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 6 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 7 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 8 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 9 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 10 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 11 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 12 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 13 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 14 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 15 wird erstellt {"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           Knoten 18303769249106620906: GerÀt 16 wird erstellt {"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           Knoten 18303769249106620906: Erstellen von GerÀt 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           Knoten 18303769249106620906: Erstellen von GerÀt 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           Knoten 18303769249106620906: Erstellen von GerÀt 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           Knoten 18303769249106620906: Erstellen von GerÀt 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           Knoten 18303769249106620906: Endpunkte aus 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           Knoten 18303769249106620906: Endpunktverwendungen {"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           Knoten 18303769249106620906: Verarbeitung des Endpunkts [["1",[0]]]
2025-03-28 19:05:23.574 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 1 -> Eltern: 0
2025-03-28 19:05:23.576 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktdaten-Bereinigung {"0":true}
2025-03-28 19:05:23.576 DEBUG  PairedNode           Knoten 18303769249106620906: Verarbeitung des Endpunkts [["2",[1]],["5",[1]],["9",[1]],["13",[1]],["15",[1]],["17",[1]]]
2025-03-28 19:05:23.576 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 2 -> Eltern: 1
2025-03-28 19:05:23.577 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 5 -> Eltern: 1
2025-03-28 19:05:23.577 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 9 -> Eltern: 1
2025-03-28 19:05:23.580 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 13 -> Eltern: 1
2025-03-28 19:05:23.581 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 15 -> Eltern: 1
2025-03-28 19:05:23.581 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 17 -> Eltern: 1
2025-03-28 19:05:23.582 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktdaten-Bereinigung {"1":true}
2025-03-28 19:05:23.582 DEBUG  PairedNode           Knoten 18303769249106620906: Verarbeitung des Endpunkts [["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           Knoten 18303769249106620906: Endpunktstruktur: Kind: 3 -> Eltern: 2
2025-03-28 19:05:23.584 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 4 -> Eltern: 2
2025-03-28 19:05:23.584 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 6 -> Eltern: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 7 -> Eltern: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 8 -> Eltern: 5
2025-03-28 19:05:23.585 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 10 -> Eltern: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 11 -> Eltern: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 12 -> Eltern: 9
2025-03-28 19:05:23.586 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 14 -> Eltern: 13
2025-03-28 19:05:23.587 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 16 -> Eltern: 15
2025-03-28 19:05:23.587 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 18 -> Eltern: 17
2025-03-28 19:05:23.587 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 19 -> Eltern: 17
2025-03-28 19:05:23.587 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunktstruktur: Kind: 20 -> Eltern: 17
2025-03-28 19:05:23.588 DEBUG  PairedNode           Knoten 18303769249106620906: Endpunkt-Daten-Bereinigung {"2":true,"5":true,"9":true,"13":true,"15":true,"17":true}
2025-03-28 19:05:23.588 DEBUG  InteractionClient    Sende Leseanfrage: Attribute: 0x0/OperationalCredentials(0x3e)/fabrics(0x1) und Ereignisse: undefined
2025-03-28 19:05:23.589 DEBUG  MessageExchange      Neuer Austauschkanal: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/34538 Protokoll: 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    Sende Leseanfrage an udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/34538 fĂŒr Attribute 0x0/OperationalCredentials(0x3e)/fabrics(0x1) und Ereignisse undefined
2025-03-28 19:05:23.591 DEBUG  ExchangeManager      Nachricht » fĂŒr: I/ReadRequest msgId: 2372/1268/152232953 type: 0x1/0x2 reqAck size: 21 payload: 1536001724020024033e2404011818290324ff0c18
2025-03-28 19:05:23.595 DEBUG  MessageExchange      Nachricht « fĂŒr: 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    Empfangene Leseantwort mit Attributen 0x0/OperationalCredentials(0x3e)/fabrics(0x1) = [{"rootPublicKey":"046c5b1b64fcf104c1e3200dedbaa2ca73368e43e75fc0e32386390c5c51bb343180137d6c38c51199f8cb5484b794eda0dbc571bc8c21bb8c4536ed56fb24ef4f","vendorId":65521,"fabricId":"1","nodeId":"18303769249106620906","label":"Gladys Assistant","fabricIndex":1}] und Ereignisse
2025-03-28 19:05:23.598 DEBUG  ExchangeManager      Nachricht » fĂŒr: SC/StandaloneAck msgId: 2372/1268/152232954 type: 0x0/0x10 acked: 240120675
2025-03-28T19:05:23+0100 <info> matter.pairDevice.js:42 (MatterHandler.pairDevice) GerÀt mit nodeId 18303769249106620906 erfolgreich in Betrieb genommen
2025-03-28T19:05:23+0100 <info> convertToGladysDevice.js:57 () Matter-Pairing - Cluster-Client 29
2025-03-28 19:07:46.758 DEBUG  MessageExchange      Neuer Austauschkanal: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/34538 Protokoll: 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      Nachricht « fĂŒr: I/ReportData msgId: 34538/62691/240120678 type: 0x1/0x5 reqAck size: 13 payload: 152600a03c9d45290424ff0c18
2025-03-28 19:07:46.759 DEBUG  ExchangeManager      Nachricht » fĂŒr: SC/StandaloneAck msgId: 34538/62691/152232957 type: 0x0/0x10 acked: 240120678
2025-03-28T19:08:00+0100 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) ÜberprĂŒfe Kalenderauslöser am Fri, 28 Mar 2025 18:08:00 GMT
2025-03-28 19:08:35.667 DEBUG  MessageExchange      Neuer Austauschkanal: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/34538 Protokoll: 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      Nachricht « fĂŒr: I/ReportData msgId: 34538/62692/240120679 type: 0x1/0x5 reqAck size: 13 payload: 152600a03c9d45290424ff0c18
2025-03-28 19:08:35.670 DEBUG  ExchangeManager      Nachricht » fĂŒr: SC/StandaloneAck msgId: 34538/62692/152232958 type: 0x0/0x10 acked: 240120679
2025-03-28 19:07:46.758 DEBUG  MessageExchange      Neuer Austauschkanal: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/34538 Protokoll: 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      Nachricht « fĂŒr: I/ReportData msgId: 34538/62691/240120678 type: 0x1/0x5 reqAck size: 13 payload: 152600a03c9d45290424ff0c18
2025-03-28 19:07:46.759 DEBUG  ExchangeManager      Nachricht » fĂŒr: SC/StandaloneAck msgId: 34538/62691/152232957 type: 0x0/0x10 acked: 240120678
2025-03-28T19:08:00+0100 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) ÜberprĂŒfe Kalenderauslöser am Fri, 28 Mar 2025 18:08:00 GMT
2025-03-28 19:08:35.667 DEBUG  MessageExchange      Neuer Austauschkanal: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/34538 Protokoll: 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      Nachricht « fĂŒr: I/ReportData msgId: 34538/62692/240120679 type: 0x1/0x5 reqAck size: 13 payload: 152600a03c9d45290424ff0c18
2025-03-28 19:08:35.670 DEBUG  ExchangeManager      Nachricht » fĂŒr: SC/StandaloneAck msgId: 34538/62692/152232958 type: 0x0/0x10 acked: 240120679


Netzwerkprotokolle:

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

Viele andere Dinge in den [
] aber zu schwer zum Senden hier

Vielleicht Paarung ĂŒber Code ohne Ziehen ermöglichen:

Danke fĂŒr die Untersuchung! Ich sehe, dass nur ein GerĂ€t erkannt wurde, obwohl es bei dir mehrere geben sollte.

Beim Betrachten des Codes fÀllt mir auf, dass es dasselbe Problem mit .forEach async gibt, das ich wÀhrend des Livestreams gefunden habe. Die KI hat sich wieder selbst ein Bein gestellt :stuck_out_tongue:

Ich habe gerade den Fix gepusht.

Ansonsten stimme ich allen deinen Anmerkungen zu:

Ja!

Ja!

Top!

Ich habe etwas Logging hinzugefĂŒgt, um mehr zu sehen.
Ich habe dir die Logs bereitgestellt, wobei die Funktionen der Objekte entfernt wurden:

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

Ich denke, dass es sich um eine BrĂŒcke handelt, die anders aufgebaut ist. Vielleicht solltest du dich zunĂ€chst auf deine Module konzentrieren und einen nĂ€chsten PR fĂŒr die BrĂŒcken ĂŒberarbeiten?
Jedenfalls erhalten wir in der Datei convertToGladysDevice unter device die GerĂ€te, die im Bridge registriert sind, ĂŒber: device.childEndpoints[], da die Eigenschaften der Objekte im Array in device.childEndpoints[].ComposedDevice.number die Nummern der Endpunkte der Shelly enthalten


Das wird in der nÀchsten Folge oder wann immer du möchtest weiter untersucht.

Ich denke, es wÀre trotzdem gut, zu verstehen, wie das Ganze strukturiert ist, nur um sicherzustellen, dass wir nicht den falschen Weg beim Format der external_id einschlagen.

Kannst du versuchen, das „vereinfachte“ Format deines einzigen Nodes zu erhalten?

Man mĂŒsste darĂŒber nachdenken, wie die external_id eines solchen GerĂ€ts aussieht.

Hallo zusammen,

Ein bisschen Lesestoff zum Thema IoT Matter-Entwicklung hier: ESP LowCode Matter trennt System- und Anwendungsfirmware fĂŒr einfachere ESP32-GerĂ€teentwicklung - CNX Software :leicht_grinsend: Wir können also noch einfacher physische Schnittstellen ĂŒber Matter mit diesen Produkten erstellen, deren SDK Open ist :herz_augen:

Hallo @pierre-gilles,

Ich habe gesucht, aber 
 ^^ ich weiß noch nicht, wie ich auf die GerĂ€te hinter einer Bridge zugreifen kann.
Indem ich in server/services/matter/lib/matter.pairDevice.js nach this.devices.push(gladysDevice); die folgende Funktion hinzufĂŒge:

        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, // Eindeutige ID fĂŒr das Child-GerĂ€t
              node,
              childEndpoint, // Das Child-Endpoint wird wie ein GerÀt behandelt
              nodeDetail.deviceData,
              nodeDetail.unique_id
            );
            this.listenToStateChange(nodeDetail.nodeId, childEndpoint);
            this.devices.push(childDevice);
          });
        }

Hier ist ein Beispiel fĂŒr ein « childEndpoints Â»-GerĂ€t:

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
    }
  ]

Und ich habe

Aber ich weiß nicht, ob das dir hilft 
 ^^

Allerdings habe ich nach einer Lösung fĂŒr das Problem gesucht, die ZustĂ€nde eines GerĂ€ts auch nach der Deaktivierung zu speichern (aber du hast das vielleicht schon zwischenzeitlich gelöst ^^), sollten wir nicht die uniqueId fĂŒr die external_id verwenden:
matter:${nodeDetail.deviceData.basicInformation.uniqueId}:${device.number} und nur den nodeId in einem param speichern?

EDIT: Zögere nicht, mir zu sagen, wenn du möchtest, dass wir einen Call mit Bildschirmfreigabe machen.

Das hilft sehr! :slight_smile:

Ich denke, wir können diese GerÀte im Modus identifizieren:

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

Laut dem, was ich im Internet lese, ist die uniqueId keine Standard-ID und man kann sich nicht wirklich darauf verlassen.

Die Kombination, die wir gemacht haben, ist eine gute Lösung :slight_smile:

Ich werde weiter die Dokumentation dazu lesen!

Hallo @pierre-gilles,
Ich bin nicht unbedingt derselben Meinung. Wenn man es auf die Ebene des GerĂ€ts betrachtet, ist die nodeId nicht fest. Sie wird sogar als eine Art « vorĂŒbergehende Â» BrĂŒcke betrachtet. Jede Ursache, die zu einem erneuten Pairing fĂŒhrt, bewirkt eine Änderung der nodeId.
Der UniqueId bleibt jedoch, soweit ich das lesen/beobachten kann, fest.
DafĂŒr spricht, dass ich unten zwei Matterbridge auf zwei separate Netzwerke installiert habe und meine Shelly auf der zweiten Plattform paaren konnte. Übrigens gab es auch einen Stromausfall dazwischen, ich bin mir also sicher, dass diese GerĂ€te neu gestartet wurden.
Die UniqueIDs sind genau gleich, die Seriennummern ebenfalls. Und bei jedem erneuten Pairing mit MatterBridge (Deinstallation des Plugins matter-shelly oder Neustart) paaren sie sich identisch.


Und schließlich kann man immer noch die Seriennummer verwenden. Die Seriennummer ist, soweit ich das sehe, an derselben Stelle zugĂ€nglich. Denn die nodeId hat nichts mit einer GerĂ€te-ID zu tun.
Konkrete Beispiel: Dein GerÀt ist nach deiner Methode gepaart. Du hast einen Thread daneben, der dieses ebenfalls referenziert. Wenn du es verbindest, wirst du ein zweites identisches GerÀt haben, da es vom nodeId dieses anderen Kanals abhÀngt

FĂŒr mich ist die nodeID ein Parameter, der aktualisiert werden muss, wenn er sich Ă€ndert.

Vielleicht irre ich mich, aber es brÀuchte mehrere Plattformen, um den uniqueId zu testen.

Aber beim serialNumber 
 gibt es keinen Grund, warum dieser von einer Plattform zur anderen unterschiedlich sein sollte, oder?

Ich denke, wir sollten die offizielle Empfehlung prĂŒfen und sehen, wie andere Plattformen das handhaben :slightly_smiling_face:

Matter ist ein Standard, das ist nicht unsere Entscheidung!

Ich lese gerade die Matter 1.4-Spezifikation.

Es gibt ĂŒber 1000 Seiten, aber zumindest ist alles beschrieben, es ist sehr klar.

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

Schon das Feld uniqueId war vor Matter 1.4 nicht verpflichtend, es ist eine neue ErgÀnzung. Es gibt also GerÀte in der Natur ohne uniqueId.

Im Fall eines GerĂ€ts « Bridge Â» wie in deinem Fall @Terdious ist der uniqueId laut Spezifikation nicht zeitstabil:

Allgemein habe ich den Eindruck, dass die Kennung eines GerÀts die Kombination aus 3 Attributen ist:

  • FabricIndex
  • NodeId
  • Endpoint

Wir waren nicht weit davon entfernt, aber es fehlte der FabricIndex, da der NodeId in einem anderen Fabric existieren kann, denke ich.

Meine Meinung

Das Feld uniqueId ist keine stabile Basis fĂŒr die Identifikation, wenn man die Spezifikation liest.

Dennoch hindert uns nichts daran, diesen uniqueId zu speichern, falls er existiert (in einem Parameter zum Beispiel), und dann die Übereinstimmung herzustellen, falls ein GerĂ€t, das offensichtlich bereits in Gladys kommissioniert wurde, kommissioniert wird!

Ich lese weiter die Spezifikation


Hallo,
falls du zusĂ€tzliche Informationen zu anderen Produkten benötigst, habe ich mir einen Matterbridge mit der Tahoma-Gateway eingerichtet, um alle meine RolllĂ€den und Markisen zu ĂŒbernehmen.
Ich kann bei der Entwicklung nicht helfen, aber wenn du Details zu einem GerÀt brauchst, kann ich diese liefern :slight_smile:
PS: Ich habe auch meine Zigbee-GerĂ€te importiert, also haben wir spĂ€ter ein paar mehr Funktionen fĂŒr andere GerĂ€te.