🚀 Matter & Gladys Assistant: Los geht’s!

Hallo zusammen :blush:

Ich habe heute weiter an Matter gearbeitet.

Ich bin noch am Herumprobieren, da wir am Anfang der Entwicklung stehen. Bitte achtet nicht auf die Übersetzungen, die noch nicht gemacht wurden.

Matter-Integration: manuelle Aktivierung

Ab sofort ist die Matter-Integration standardmĂ€ĂŸig deaktiviert und wird nur aktiviert, wenn sie manuell eingeschaltet wird:

Verbesserte « Matter-Knoten Â»-Ansicht

Schritt fĂŒr Schritt mĂŒssen alle Matter-GerĂ€te auf dem Markt hinzugefĂŒgt werden. DafĂŒr muss jeder die Informationen seiner GerĂ€te teilen.

Zwei Neuheiten:

  • Eine reichhaltigere « Matter-Knoten Â»-Ansicht, die anzeigt:
    • Die NodeId, die Marke und das Modell des GerĂ€ts
    • Die verbundenen GerĂ€te
    • Die Clusters, Befehle und Attribute, die verfĂŒgbar sind
    • Die child_endpoints, die verfĂŒgbar sind

  • Ein « Download Nodes JSON Â»-Button, mit dem eine JSON-Datei abgerufen werden kann, die die gesamte Struktur des Matter-Netzwerks enthĂ€lt. Diese Datei ermöglicht es uns, ein unbekanntes Matter-GerĂ€t einfach zu integrieren.

Das Ziel ist es, eine flĂŒssige Benutzererfahrung zu bieten, ohne in den Logs stöbern oder einen Inspektor verwenden zu mĂŒssen.

:movie_camera: Kurzes Demo-Video:

Verwaltung eines Bewegungs-/Helligkeitssensors

Ich habe einen Eve Motion gekauft, um ein batteriebetriebenes Matter-GerÀt zu testen. Die Integration ist Àhnlich wie bei anderen GerÀten, was mir die Validierung des Prozesses ermöglichte.

@Terdious Normalerweise sollten deine Knoten mit child_endpoints im « Einstellungen Â»-Tab erscheinen. Ich wĂ€re neugierig, diese Ansicht zu sehen und das JSON deines Matter-Netzwerks zu haben :wink:

@mutmut Vielleicht ist es noch ein bisschen frĂŒh, aber ich bin total heiß darauf, deine Tahoma-GerĂ€te zu integrieren, sobald wir eine erste Version der Matter-Integration bereitgestellt haben :slight_smile:

Alles ist auf GitHub gepusht :rocket:

haha, ich auch, das wĂŒrde mir node-red ersparen, um meine RolllĂ€den zu steuern!!

Hallo @pierre-gilles!
Sehr sauber alles das. Und ein guter Punkt, zusÀtzliche Informationen anzuzeigen, die viel einfacher zu lesen/finden/teilen sind.

Zur Erinnerung, falls möglich, den Pairing-Code ohne Bindestriche eingeben:

Gut, aber leider funktioniert die Bridge-Pairing im Moment nicht, weder im Bridge-Modus noch im Childbridge-Modus - Fehler 500 nach 10 Sekunden mit:

Na ja, ich habe einfach irgendwas erzĂ€hlt, ich hatte eine neue Linux-VM fĂŒr die Entwicklung installiert, aber in einem separaten VLAN. Allerdings scheint mDns nicht zwischen den beiden Netzwerken zu funktionieren.
Kurz gesagt, es funktioniert ^^ GlĂŒckwunsch. Falls du also das JSON brauchst, schicke ich es dir per E-Mail. In der Zwischenzeit hier die Screenshots / ErklĂ€rungen. Endpoint 1 ist das Plugin matter-shelly, das die GerĂ€te in Matterbridge gruppiert. Zu beachten ist, dass ich als „Bridge“ konfiguriert bin, die Endpoints sich also Ă€ndern, wenn ich in den Modus „Childbridge“ wechsle.


  • 5, 9 und 17 sind PRO3 (Modul mit 3 Ein-/Dreifachschaltern)
    • Child Endpoint 5 : 1 Feature PowerSource (identisch mit Endpoint 2 des P3EM),
    • Child Endpoint 6 : 1 Feature OnOff,
    • Child Endpoint 7 : 1 Feature OnOff,
    • Child Endpoint 8 : 1 Feature OnOff,
Beispiel PRO3 - Child Endpoint: 5 (+6+7+8)




  • 2 und 13 sind PRO3EM (Dreiphasen-EnergiezĂ€hler) bestehend aus
    • Child Endpoint 2 : 1 Feature PowerSource (hier gibt es wahrscheinlich eine Feinheit, da ich die 3 Phasen nicht sehe 
 oder die Funktion ist noch nicht fertig 
),
    • Child Endpoint 3 : 1 Feature OnOff,
    • Child Endpoint 4 : 1 Feature TemperatureSensor (Innentemperatur des Moduls)
    • 1 (oder 3) fehlende Funktion in MatterBridge : Energy
Beispiel PRO3EM - Child Endpoint: 2 (+3+4)



  • 15 ist ein 3EM (EnergiezĂ€hler fĂŒr Solar oder fĂŒr 3 GerĂ€te)
    • Child Endpoint 15 : 1 Feature PowerSource (identisch mit Endpoint 2 des P3EM),
    • Child Endpoint 16 : 1 Feature OnOff (identisch mit Endpoint 3 des P3EM),
    • 1 (oder 3) fehlende Funktion in MatterBridge : Energy
Beispiel 3EM - Child Endpoint: 15 (+16)


ZusĂ€tzlich: Bei jedem erneuten Pairing der verschiedenen GerĂ€te kann sich der Endpoint Ă€ndern (Reihenfolge der Pairing-Antwort), daher wird die Korrelation der external_id, wenn man das berĂŒcksichtigt, gebrochen. UniqueId, Seriennummer, VendorId, ProductId, egal, aber im Fall von Bridges sind es eindeutig nicht der Endpoint und die NodeId, die es ermöglichen, ein zuvor gepairtes GerĂ€t wieder zuzuordnen.

Vielen Dank fĂŒr den Hinweis auf die Spezifikation. Ich habe gesucht, aber nie gefunden :upside_down_face:

Ich kann den JSON per E-Mail haben, ich schau mir das am Montag an :slight_smile:

@Terdious Ich habe eine neue Version hochgeladen, die normalerweise deine verschachtelten child_endpoints (untergeordnete Endpunkte) verwaltet :slight_smile: Ich konnte es nicht in der Praxis testen, ich bin gespannt auf dein Feedback!

Hier ist die Ausgabe der GerÀte/Funktionen:

[
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:2:child_endpoint:3",
        "selector": "matter:5048395297330787217:1:child_endpoint:2:child_endpoint:3",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:2:child_endpoint:3:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:2:child_endpoint:3:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:6",
        "selector": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:6",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:6:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:6:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:7",
        "selector": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:7",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:7:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:7:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:8",
        "selector": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:8",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:8:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:5:child_endpoint:8:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:10",
        "selector": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:10",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:10:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:10:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:11",
        "selector": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:11",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:11:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:11:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:12",
        "selector": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:12",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:12:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:9:child_endpoint:12:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:15:child_endpoint:16",
        "selector": "matter:5048395297330787217:1:child_endpoint:15:child_endpoint:16",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:15:child_endpoint:16:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:15:child_endpoint:16:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:18",
        "selector": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:18",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:18:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:18:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:19",
        "selector": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:19",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:19:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:19:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    },
    {
        "name": "Matterbridge (Matterbridge Aggregator)",
        "external_id": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:20",
        "selector": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:20",
        "service_id": "1404ff11-4863-47e4-8060-dd25844b67e4",
        "should_poll": false,
        "features": [
            {
                "name": "on_off",
                "category": "switch",
                "type": "binary",
                "read_only": false,
                "has_feedback": true,
                "external_id": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:20:6",
                "selector": "matter:5048395297330787217:1:child_endpoint:17:child_endpoint:20:6",
                "min": 0,
                "max": 1
            }
        ],
        "params": []
    }
]


Allerdings muss der Name aus der ersten Ebene der child_endpoints abgerufen werden, wenn das GerÀt ein Aggregator ist. Dabei handelt es sich um den nodeLabel. Hier sind die Clusterausgaben in MatterBridge (auch wenn du sie im JSON siehst, das du exportieren kannst):

Clusters for device "Pro3 L1 BĂątiment Perso" on endpoint 5

Endpoint	Id	GerÀtetypen	Cluster-Name	Cluster-ID	Attributname	Attribut-ID	Attributwert
5	main	0x0013, 0x0011	Descriptor	0x1d	deviceTypeList	0x00	
[ { deviceType: 19, revision: 2 }, { deviceType: 17, revision: 1 } ]
5	main	0x0013, 0x0011	Descriptor	0x1d	serverList	0x01	
[ 29, 57, 47, 64 ]
5	main	0x0013, 0x0011	Descriptor	0x1d	clientList	0x02	
[ ]
5	main	0x0013, 0x0011	Descriptor	0x1d	partsList	0x03	
[ 6, 7, 8 ]
5	main	0x0013, 0x0011	Descriptor	0x1d	clusterRevision	0xfffd	
2
5	main	0x0013, 0x0011	Descriptor	0x1d	featureMap	0xfffc	
{ tagList: false }
5	main	0x0013, 0x0011	Descriptor	0x1d	attributeList	0xfffb	
[ 0, 1, 2, 3, 65533, 65532, 65531, 65529, 65528 ]
5	main	0x0013, 0x0011	Descriptor	0x1d	acceptedCommandList	0xfff9	
[ ]
5	main	0x0013, 0x0011	Descriptor	0x1d	generatedCommandList	0xfff8	
[ ]
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	vendorName	0x01	
Shelly
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	vendorId	0x02	
65521
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	productName	0x03	
SPSW-003XE16EU
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	nodeLabel	0x05	
Pro3 L1 BĂątiment Perso
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	hardwareVersion	0x07	
1
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	hardwareVersionString	0x08	
1.0.0
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	softwareVersion	0x09	
1
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	softwareVersionString	0x0a	
1.4.4-g6d2a586
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	productUrl	0x0d	
https://www.npmjs.com/package/matterbridge
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	productLabel	0x0e	
Pro3 L1 BĂątiment Perso
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	serialNumber	0x0f	
shellypro3-2CBCBBA5E414
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	reachable	0x11	
true
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	uniqueId	0x12	
9234c6c5e1cba064abc04f37f6707ac0
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	clusterRevision	0xfffd	
3
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	featureMap	0xfffc	
{ }
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	attributeList	0xfffb	
[ 1, 2, 3, 5, 7, 8, 9, 10, 13, 14, 15, 17, 18, 65533, 65532, 65531, 65529, 65528 ]
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	acceptedCommandList	0xfff9	
[ ]
5	main	0x0013, 0x0011	BridgedDeviceBasicInformation	0x39	generatedCommandList	0xfff8	
[ ]
5	main	0x0013, 0x0011	PowerSource	0x2f	status	0x00	
1
5	main	0x0013, 0x0011	PowerSource	0x2f	order	0x01	
0
5	main	0x0013, 0x0011	PowerSource	0x2f	description	0x02	
AC Power
5	main	0x0013, 0x0011	PowerSource	0x2f	endpointList	0x1f	
[ ]
5	main	0x0013, 0x0011	PowerSource	0x2f	clusterRevision	0xfffd	
2
5	main	0x0013, 0x0011	PowerSource	0x2f	featureMap	0xfffc	
{ wired: true, battery: false, rechargeable: false, replaceable: false }
5	main	0x0013, 0x0011	PowerSource	0x2f	attributeList	0xfffb	
[ 0, 1, 2, 31, 65533, 65532, 65531, 65529, 65528, 5 ]
5	main	0x0013, 0x0011	PowerSource	0x2f	acceptedCommandList	0xfff9	
[ ]
5	main	0x0013, 0x0011	PowerSource	0x2f	generatedCommandList	0xfff8	
[ ]
5	main	0x0013, 0x0011	PowerSource	0x2f	wiredCurrentType	0x05	
0
5	main	0x0013, 0x0011	FixedLabel	0x40	labelList	0x00	
[ { label: 'composed', value: 'Switch' } ]
5	main	0x0013, 0x0011	FixedLabel	0x40	clusterRevision	0xfffd	
1
5	main	0x0013, 0x0011	FixedLabel	0x40	featureMap	0xfffc	
{ }
5	main	0x0013, 0x0011	FixedLabel	0x40	attributeList	0xfffb	
[ 0, 65533, 65532, 65531, 65529, 65528 ]
5	main	0x0013, 0x0011	FixedLabel	0x40	acceptedCommandList	0xfff9	
[ ]
5	main	0x0013, 0x0011	FixedLabel	0x40	generatedCommandList	0xfff8	
[ ]
6	switch:0	0x010a	Descriptor	0x1d	deviceTypeList	0x00	
[ { deviceType: 266, revision: 3 } ]
6	switch:0	0x010a	Descriptor	0x1d	serverList	0x01	
[ 29, 3, 4, 6 ]
6	switch:0	0x010a	Descriptor	0x1d	clientList	0x02	
[ ]
6	switch:0	0x010a	Descriptor	0x1d	partsList	0x03	
[ ]
6	switch:0	0x010a	Descriptor	0x1d	clusterRevision	0xfffd	
2
6	switch:0	0x010a	Descriptor	0x1d	featureMap	0xfffc	
{ tagList: false }
6	switch:0	0x010a	Descriptor	0x1d	attributeList	0xfffb	
[ 0, 1, 2, 3, 65533, 65532, 65531, 65529, 65528 ]
6	switch:0	0x010a	Descriptor	0x1d	acceptedCommandList	0xfff9	
[ ]
6	switch:0	0x010a	Descriptor	0x1d	generatedCommandList	0xfff8	
[ ]
6	switch:0	0x010a	Identify	0x03	identifyTime	0x00	
0
6	switch:0	0x010a	Identify	0x03	identifyType	0x01	
0
6	switch:0	0x010a	Identify	0x03	clusterRevision	0xfffd	
4
6	switch:0	0x010a	Identify	0x03	featureMap	0xfffc	
{ }
6	switch:0	0x010a	Identify	0x03	attributeList	0xfffb	
[ 0, 1, 65533, 65532, 65531, 65529, 65528 ]
6	switch:0	0x010a	Identify	0x03	acceptedCommandList	0xfff9	
[ 0, 64 ]
6	switch:0	0x010a	Identify	0x03	generatedCommandList	0xfff8	
[ ]
6	switch:0	0x010a	Groups	0x04	nameSupport	0x00	
{ nameSupport: false, groupNames: false }
6	switch:0	0x010a	Groups	0x04	clusterRevision	0xfffd	
4
6	switch:0	0x010a	Groups	0x04	featureMap	0xfffc	
{ groupNames: true }
6	switch:0	0x010a	Groups	0x04	attributeList	0xfffb	
[ 0, 65533, 65532, 65531, 65529, 65528 ]
6	switch:0	0x010a	Groups	0x04	acceptedCommandList	0xfff9	
[ ]
6	switch:0	0x010a	Groups	0x04	generatedCommandList	0xfff8	
[ ]
6	switch:0	0x010a	OnOff	0x06	onOff	0x00	
true
6	switch:0	0x010a	OnOff	0x06	clusterRevision	0xfffd	
6
6	switch:0	0x010a	OnOff	0x06	featureMap	0xfffc	
{ lighting: true, deadFrontBehavior: false, offOnly: false }
6	switch:0	0x010a	OnOff	0x06	attributeList	0xfffb	
[ 0, 65533, 65532, 65531, 65529, 65528, 16384, 16385, 16386, 16387 ]
6	switch:0	0x010a	OnOff	0x06	acceptedCommandList	0xfff9	
[ 0, 64, 65, 66, 1, 2 ]
6	switch:0	0x010a	OnOff	0x06	generatedCommandList	0xfff8	
[ ]
6	switch:0	0x010a	OnOff	0x06	globalSceneControl	0x4000	
false
6	switch:0	0x010a	OnOff	0x06	onTime	0x4001	
0
6	switch:0	0x010a	OnOff	0x06	offWaitTime	0x4002	
0
6	switch:0	0x010a	OnOff	0x06	startUpOnOff	0x4003	
null
7	switch:1	0x010a	Descriptor	0x1d	deviceTypeList	0x00	
[ { deviceType: 266, revision: 3 } ]
7	switch:1	0x010a	Descriptor	0x1d	serverList	0x01	
[ 29, 3, 4, 6 ]
7	switch:1	0x010a	Descriptor	0x1d	clientList	0x02	
[ ]
7	switch:1	0x010a	Descriptor	0x1d	partsList	0x03	
[ ]
7	switch:1	0x010a	Descriptor	0x1d	clusterRevision	0xfffd	
2
7	switch:1	0x010a	Descriptor	0x1d	featureMap	0xfffc	
{ tagList: false }
7	switch:1	0x010a	Descriptor	0x1d	attributeList	0xfffb	
[ 0, 1, 2, 3, 65533, 65532, 65531, 65529, 65528 ]
7	switch:1	0x010a	Descriptor	0x1d	acceptedCommandList	0xfff9	
[ ]
7	switch:1	0x010a	Descriptor	0x1d	generatedCommandList	0xfff8	
[ ]
7	switch:1	0x010a	Identify	0x03	identifyTime	0x00	
0
7	switch:1	0x010a	Identify	0x03	identifyType	0x01	
0
7	switch:1	0x010a	Identify	0x03	clusterRevision	0xfffd	
4
7	switch:1	0x010a	Identify	0x03	featureMap	0xfffc	
{ }
7	switch:1	0x010a	Identify	0x03	attributeList	0xfffb	
[ 0, 1, 65533, 65532, 65531, 65529, 65528 ]
7	switch:1	0x010a	Identify	0x03	acceptedCommandList	0xfff9	
[ 0, 64 ]
7	switch:1	0x010a	Identify	0x03	generatedCommandList	0xfff8	
[ ]
7	switch:1	0x010a	Groups	0x04	nameSupport	0x00	
{ nameSupport: false, groupNames: false }
7	switch:1	0x010a	Groups	0x04	clusterRevision	0xfffd	
4
7	switch:1	0x010a	Groups	0x04	featureMap	0xfffc	
{ groupNames: true }
7	switch:1	0x010a	Groups	0x04	attributeList	0xfffb	
[ 0, 65533, 65532, 65531, 65529, 65528 ]
7	switch:1	0x010a	Groups	0x04	acceptedCommandList	0xfff9	
[ ]
7	switch:1	0x010a	Groups	0x04	generatedCommandList	0xfff8	
[ ]
7	switch:1	0x010a	OnOff	0x06	onOff	0x00	
false
7	switch:1	0x010a	OnOff	0x06	clusterRevision	0xfffd	
6
7	switch:1	0x010a	OnOff	0x06	featureMap	0xfffc	
{ lighting: true, deadFrontBehavior: false, offOnly: false }
7	switch:1	0x010a	OnOff	0x06	attributeList	0xfffb	
[ 0, 65533, 65532, 65531, 65529, 65528, 16384, 16385, 16386, 16387 ]
7	switch:1	0x010a	OnOff	0x06	acceptedCommandList	0xfff9	
[ 0, 64, 65, 66, 1, 2 ]
7	switch:1	0x010a	OnOff	0x06	generatedCommandList	0xfff8	
[ ]
7	switch:1	0x010a	OnOff	0x06	globalSceneControl	0x4000	
false
7	switch:1	0x010a	OnOff	0x06	onTime	0x4001	
0
7	switch:1	0x010a	OnOff	0x06	offWaitTime	0x4002	
0
7	switch:1	0x010a	OnOff	0x06	startUpOnOff	0x4003	
null
8	switch:2	0x010a	Descriptor	0x1d	deviceTypeList	0x00	
[ { deviceType: 266, revision: 3 } ]
8	switch:2	0x010a	Descriptor	0x1d	serverList	0x01	
[ 29, 3, 4, 6 ]
8	switch:2	0x010a	Descriptor	0x1d	clientList	0x02	
[ ]
8	switch:2	0x010a	Descriptor	0x1d	partsList	0x03	
[ ]
8	switch:2	0x010a	Descriptor	0x1d	clusterRevision	0xfffd	
2
8	switch:2	0x010a	Descriptor	0x1d	featureMap	0xfffc	
{ tagList: false }
8	switch:2	0x010a	Descriptor	0x1d	attributeList	0xfffb	
[ 0, 1, 2, 3, 65533, 65532, 65531, 65529, 65528 ]
8	switch:2	0x010a	Descriptor	0x1d	acceptedCommandList	0xfff9	
[ ]
8	switch:2	0x010a	Descriptor	0x1d	generatedCommandList	0xfff8	
[ ]
8	switch:2	0x010a	Identify	0x03	identifyTime	0x00	
0
8	switch:2	0x010a	Identify	0x03	identifyType	0x01	
0
8	switch:2	0x010a	Identify	0x03	clusterRevision	0xfffd	
4
8	switch:2	0x010a	Identify	0x03	featureMap	0xfffc	
{ }
8	switch:2	0x010a	Identify	0x03	attributeList	0xfffb	
[ 0, 1, 65533, 65532, 65531, 65529, 65528 ]
8	switch:2	0x010a	Identify	0x03	acceptedCommandList	0xfff9	
[ 0, 64 ]
8	switch:2	0x010a	Identify	0x03	generatedCommandList	0xfff8	
[ ]
8	switch:2	0x010a	Groups	0x04	nameSupport	0x00	
{ nameSupport: false, groupNames: false }
8	switch:2	0x010a	Groups	0x04	clusterRevision	0xfffd	
4
8	switch:2	0x010a	Groups	0x04	featureMap	0xfffc	
{ groupNames: true }
8	switch:2	0x010a	Groups	0x04	attributeList	0xfffb	
[ 0, 65533, 65532, 65531, 65529, 65528 ]
8	switch:2	0x010a	Groups	0x04	acceptedCommandList	0xfff9	
[ ]
8	switch:2	0x010a	Groups	0x04	generatedCommandList	0xfff8	
[ ]
8	switch:2	0x010a	OnOff	0x06	onOff	0x00	
false
8	switch:2	0x010a	OnOff	0x06	clusterRevision	0xfffd	
6
8	switch:2	0x010a	OnOff	0x06	featureMap	0xfffc	
{ lighting: true, deadFrontBehavior: false, offOnly: false }
8	switch:2	0x010a	OnOff	0x06	attributeList	0xfffb	
[ 0, 65533, 65532, 65531, 65529, 65528, 16384, 16385, 16386, 16387 ]
8	switch:2	0x010a	OnOff	0x06	acceptedCommandList	0xfff9	
[ 0, 64, 65, 66, 1, 2 ]
8	switch:2	0x010a	OnOff	0x06	generatedCommandList	0xfff8	
[ ]
8	switch:2	0x010a	OnOff	0x06	globalSceneControl	0x4000	
false
8	switch:2	0x010a	OnOff	0x06	onTime	0x4001	
0
8	switch:2	0x010a	OnOff	0x06	offWaitTime	0x4002	
0
8	switch:2	0x010a	OnOff	0x06	startUpOnOff	0x4003	
null
Gesamtzahl der Unterendpunkte: 3

Zur Erinnerung:

  • child_endpoint:2 und 13 sind Shelly Pro3EM, es gibt nur einen einzigen On_Off aktiviert auf dem 2 (nicht auf dem 13)
  • child_endpoint:15 ist ein Shelly EM3, es gibt nur einen einzigen On_Off
  • child_endpoint:5, 9 und 17 sind Shelly Pro3, es gibt drei On_Off-Schalter.

Kannst du die Shelly-GerÀte steuern?

Ja, okay fĂŒr den Befehl!

Aber es gibt keine StatusrĂŒckmeldung.

Ach? Eigentlich sollte es funktionieren. UnterstĂŒtzt MatterBridge die StatusrĂŒckmeldung?

Wo genau befindet sich der nodeLabel?

Gladys-Protokolle, wenn ich manuell oder ĂŒber die Shelly-Schnittstelle auslöse:

2025-04-07T15:39:40+0200 <debug> lan-manager.scanPresence.js:25 (LANManager.scanPresence) LANManager: 0 Anwesenheitssensor-Funktionen
2025-04-07 15:39:48.414 DEBUG  MessageExchange      Neuer Austauschkanal: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/42171 Protokoll: 1 exId: 62022 sess: secure/42171 peerSess: 42171 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP
2025-04-07 15:39:48.414 DEBUG  MessageExchange      Nachricht « fĂŒr: I/ReportData msgId: 42171/62022/235444815 type: 0x1/0x5 reqAck size: 41 payload: 152600c590d63d3601153501260069ab88083701240206240306240400182902181818280424ff0c18
2025-04-07 15:39:48.415 DEBUG  ExchangeManager      Nachricht » fĂŒr: I/StatusResponse status: Success(0x0) subId: 1037471941 attr: 1 msgId: 42171/62022/133132491 type: 0x1/0x1 acked: 235444815 reqAck size: 8 payload: 1524000024ff0c18
2025-04-07 15:39:48.419 DEBUG  MessageExchange      Nachricht « fĂŒr: SC/StandaloneAck msgId: 42171/62022/235444816 type: 0x0/0x10 acked: 133132491
2025-04-07 15:39:48.423 DEBUG  InteractionClient    Empfangene Attributaktualisierung: 0x6/OnOff(0x6)/onOff(0x0) = true (version=143174505)

Protokolle, wenn ich Gladys auslöse (in diesem Fall Ausschalten):

2025-04-07T15:40:59+0200 <debug> scene.executeActions.js:20 (executeAction) AusfĂŒhren der Aktion device.set-value
2025-04-07T15:40:59+0200 <info> matter.setValue.js:52 (MatterHandler.setValue) Festlegen des Werts fĂŒr Knoten 5048395297330787217
2025-04-07 15:40:59.750 DEBUG  InteractionClient    Aufruf des Befehls: 0x6/OnOff(0x6)/off(0x0) mit "undefined"
2025-04-07 15:40:59.750 DEBUG  MessageExchange      Neuer Austauschkanal: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/42171 Protokoll: 1 exId: 35120 sess: secure/42171 peerSess: 35175 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP I
2025-04-07 15:40:59.752 DEBUG  ExchangeManager      Nachricht » fĂŒr: I/InvokeRequest msgId: 35175/35120/133132493 type: 0x1/0x8 reqAck size: 29 payload: 1528002801360215370024000624010624020018350118181824ff0c18
2025-04-07T15:40:59+0200 <debug> gateway.forwardWebsockets.js:14 (Gateway.forwardWebsockets) Gateway: nicht verbunden. Weiterleitung des Ereignisses verhindern.
2025-04-07 15:40:59.772 DEBUG  MessageExchange      Nachricht « fĂŒr: I/InvokeResponse msgId: 42171/35120/235444818 type: 0x1/0x9 acked: 133132493 reqAck size: 33 payload: 152800360115350137002400062401062402001835012400001818181824ff0c18
2025-04-07 15:40:59.775 DEBUG  ExchangeManager      Nachricht » fĂŒr: SC/StandaloneAck msgId: 35175/35120/133132494 type: 0x0/0x10 acked: 235444818
2025-04-07T15:40:59+0200 <debug> gateway.forwardWebsockets.js:14 (Gateway.forwardWebsockets) Gateway: nicht verbunden. Weiterleitung des Ereignisses verhindern.
2025-04-07 15:40:59.821 DEBUG  MessageExchange      Neuer Austauschkanal: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 auf Sitzung secure/42171 Protokoll: 1 exId: 62024 sess: secure/42171 peerSess: 42171 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP
2025-04-07 15:40:59.822 DEBUG  MessageExchange      Nachricht « fĂŒr: I/ReportData msgId: 42171/62024/235444819 type: 0x1/0x5 reqAck size: 41 payload: 152600c590d63d360115350126006aab88083701240206240306240400182902181818280424ff0c18
2025-04-07 15:40:59.822 DEBUG  ExchangeManager      Nachricht » fĂŒr: I/StatusResponse status: Success(0x0) subId: 1037471941 attr: 1 msgId: 42171/62024/133132495 type: 0x1/0x1 acked: 235444819 reqAck size: 8 payload: 1524000024ff0c18
2025-04-07 15:40:59.825 DEBUG  InteractionClient    Empfangene Attributaktualisierung: 0x6/OnOff(0x6)/onOff(0x0) = true (version=143174506)
2025-04-07 15:40:59.826 DEBUG  MessageExchange      Nachricht « fĂŒr: SC/StandaloneAck msgId: 42171/62024/235444820 type: 0x0/0x10 acked: 133132495

Offensichtlich ja, es fÀngt das Event ab!!

Ich habe es mit etwas wie diesem erfasst:

  const bridgedCluster = Array.from(device.clusterClients.values()).find(
    (c) => c.name === 'BridgedDeviceBasicInformation'
  );
let detailedName = device.name;

  if (bridgedCluster) {
    if (bridgedCluster.attributes.hasOwnProperty('nodeLabel')) {
      detailedName = await bridgedCluster.attributes.nodeLabel.get().catch(() => device.name);
    }
    if (bridgedCluster.attributes.hasOwnProperty('productName')) {
      productName = await bridgedCluster.attributes.productName.get().catch(() => null);
    }
    if (bridgedCluster.attributes.hasOwnProperty('serialNumber')) {
      serialNumber = await bridgedCluster.attributes.serialNumber.get().catch(() => null);
    }
    if (bridgedCluster.attributes.hasOwnProperty('uniqueId')) {
      uniqueId = await bridgedCluster.attributes.uniqueId.get().catch(() => null);
    }
    if (bridgedCluster.attributes.hasOwnProperty('vendorId')) {
      vendorId = await bridgedCluster.attributes.vendorId.get().catch(() => null);
    }
    if (bridgedCluster.attributes.hasOwnProperty('productId')) {
      productId = await bridgedCluster.attributes.productId.get().catch(() => null);
    }
  }

Ok, ich habe verstanden, es gibt ein kleines Problem im Code :smiley: Ich korrigiere es!

Ok, aber der clusterClient BridgedDeviceBasicInformation ist auf der Ebene ĂŒber der Funktion, auf der Ebene des bridgednode :thinking:

Ich muss sehen, wie ich das identifizieren kann, ich hoffe, es ist standardmĂ€ĂŸig, was Matterbrige gemacht hat :stuck_out_tongue:

@Terdious Ich habe den StatusrĂŒcksetz normalerweise repariert :slight_smile:

Bah dann


An sich stört mich das nicht, ich hoffe, sie folgen dem Standard, aber wenn man der Treppe folgt, ist es kohÀrent,
Ein Aggregator, der mehrere GerĂ€te enthĂ€lt, die wiederum mehrere Funktionen enthalten. Der Name des GerĂ€ts hier ist « Pro3 L1 BĂątiment Perso Â» und die Funktionen haben keine Namen, sie haben IDs « switch:0 Â», « switch:1 Â», « switch:2 Â»

Es muss einen Typ geben, nehme ich an, fĂŒr jede Etage
 ich werde mal schauen.

5	main	0x0013, 0x0011	FixedLabel	0x40	labelList	0x00	
[ { label: 'composed', value: 'Switch' } ]
13	main	0x0013, 0x0011	FixedLabel	0x40	labelList	0x00	
[ { label: 'composed', value: 'PowerMeter' } ]

?

Mmmmh, scheint nicht zu funktionieren
 Hier habe ich manuell ausgeschaltet und dann manuell eingeschaltet

2025-04-07 16:19:33.184 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/2537 protocol: 1 exId: 5518 sess: secure/2537 peerSess: 2537 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP
2025-04-07 16:19:33.184 DEBUG  MessageExchange      Message « for: I/ReportData msgId: 2537/5518/45251895 type: 0x1/0x5 reqAck size: 41 payload: 152600d7c86c7b36011535012600be13d0253701240206240306240400182902181818280424ff0c18
2025-04-07 16:19:33.185 DEBUG  ExchangeManager      Message » for: I/StatusResponse status: Success(0x0) subId: 2070726871 attr: 1 msgId: 2537/5518/193656250 type: 0x1/0x1 acked: 45251895 reqAck size: 8 payload: 1524000024ff0c18
2025-04-07 16:19:33.187 DEBUG  MessageExchange      Message « for: SC/StandaloneAck msgId: 2537/5518/45251896 type: 0x0/0x10 acked: 193656250
2025-04-07 16:19:33.188 DEBUG  InteractionClient    Received attribute update: 0x6/OnOff(0x6)/onOff(0x0) = true (version=634393534)
2025-04-07 16:19:34.697 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/2537 protocol: 1 exId: 5519 sess: secure/2537 peerSess: 2537 SAT: 4000 SAI: 300 SII: 500 maxTrans: 5 MRP
2025-04-07 16:19:34.697 DEBUG  MessageExchange      Message « for: I/ReportData msgId: 2537/5519/45251897 type: 0x1/0x5 reqAck size: 41 payload: 152600d7c86c7b36011535012600bf13d0253701240206240306240400182902181818280424ff0c18
2025-04-07 16:19:34.698 DEBUG  ExchangeManager      Message » for: I/StatusResponse status: Success(0x0) subId: 2070726871 attr: 1 msgId: 2537/5519/193656251 type: 0x1/0x1 acked: 45251897 reqAck size: 8 payload: 1524000024ff0c18
2025-04-07 16:19:34.699 DEBUG  InteractionClient    Received attribute update: 0x6/OnOff(0x6)/onOff(0x0) = true (version=634393535)
2025-04-07 16:19:34.700 DEBUG  MessageExchange      Message « for: SC/StandaloneAck msgId: 2537/5519/45251898 type: 0x0/0x10 acked: 193656251

Schau mal, ob es deinen Logs Ă€hnelt, aber wenn es der Teil InteractionClient Received attribute update: 0x6/OnOff(0x6)/onOff(0x0) = true (version=634393535) ist, sendet er true zweimal. Ich weiß nicht, ob das der Grund ist ^^

Ich glaube, das ist nicht der Zustand der Lampe, den wir sehen, sondern der Input:


Das ist ein Taster!!

Ich teste mit einem Inter

Ich habe gerade die Verwaltung der BridgedDeviceBasicInformation hochgeladen :slight_smile:

Normalerweise solltest du jetzt die richtigen GerĂ€tenamen haben! Kannst du das bestĂ€tigen? (Es mĂŒssen nur die Gladys-GerĂ€te gelöscht werden, kein erneutes Pairing erforderlich)

Ah !! :smiley: Ja! Bisher verwaltet es nur das Ein/Aus

Es ist undefiniert :grimacing: :sweat_smile:

Gleiches gilt fĂŒr den Schalter, also keine Ursache ^^

Ich habe vendorName ( nodeLabel || productLabel ) gewĂ€hlt, also muss bei dir der vendorName leer sein! Ich mache Tests :stuck_out_tongue: Es muss sowohl fĂŒr MatterBridge als auch fĂŒr die „echten“ Matter-GerĂ€te funktionieren.

Ja natĂŒrlich, aber ich bestĂ€tige dir, dass vendorName ausgefĂŒllt ist:


Und ĂŒbrigens nodeLabel = productLabel ^^