🚀 Matter & Gladys Assistant : C’est parti!

Salut Ă  tous :blush:

J’ai continuĂ© Ă  avancer sur Matter aujourd’hui.

Je tùtonne encore, car on est au début du développement. Ne faites pas attention aux traductions qui ne sont pas encore faites.

Intégration Matter : activation manuelle

DĂ©sormais, l’intĂ©gration Matter est dĂ©sactivĂ©e par dĂ©faut et ne se lance que si elle est activĂ©e manuellement :

Vue « NƓuds Matter Â» amĂ©liorĂ©e

Petit à petit, il faudra ajouter tous les appareils Matter du marché. Pour cela, chacun devra partager les informations de ses appareils.

Deux nouveautés :

  • Une vue « NƓud Matter Â» plus riche, affichant :
    • Le NodeId, la marque et le modĂšle de l’appareil
    • Les devices associĂ©s
    • Les clusters, commandes et attributs disponibles
    • Les child_endpoints disponibles

  • Un bouton « Download Nodes JSON Â», permettant de rĂ©cupĂ©rer un fichier JSON contenant toute la structure du rĂ©seau Matter. Ce fichier nous permet d’intĂ©grer facilement un appareil Matter inconnu.

L’objectif est d’offrir une expĂ©rience utilisateur fluide, sans avoir Ă  fouiller dans les logs ou utiliser un inspecteur.

:movie_camera: Petite démo vidéo :

Gestion d’un capteur de mouvement/luminositĂ©

J’ai achetĂ© un Eve Motion pour tester un appareil Matter sur batterie. L’intĂ©gration est similaire aux autres appareils, ce qui m’a permis de valider le processus.

@Terdious Normalement, tes nƓuds avec des child_endpoints devraient apparaĂźtre dans l’onglet « ParamĂštres Â». Je serais curieux de voir cette vue et d’avoir le JSON de ton rĂ©seau Matter :wink:

@mutmut c’est peut-ĂȘtre encore un peu tĂŽt, mais je suis carrĂ©ment chaud pour intĂ©grer tes appareils Tahoma dĂšs qu’on a dĂ©ployĂ© une premiĂšre version de l’intĂ©gration Matter :slight_smile:

Tout est pushé sur GitHub :rocket:

3 « J'aime »

haha, moi aussi, ça m’évitera de devoir faire du node-red pour piloter mes volets !!

2 « J'aime »

Salut @pierre-gilles !!
TrĂšs propre tout ça. Et un bon point d’afficher des infos complĂ©mentaires beaucoup plus simple Ă  lire / trouver / partager.

Pour rappel, si possible pouvoir entrer le code d’appairage sans tirets:

Bon par contre du coup dĂ©solĂ©, pour le moment l’appairage du bridge ne passe pas, que ce soit en mode Bridge ou en mode Childbridge - Erreur 500 aprĂšs 10s avec :

Bon j’ai racontĂ© n’importe quoi, j’avais installer une nouvelle VM linux pour le dev mais sur un VLAN indĂ©pendant, sauf que visiblement le mDns ne passe pas entre les 2 plage rĂ©seau.
Bref, ça fonctionne ^^ Bravo. Du coup si tu veux le json, je te l’envoi par mail. En attendant voilĂ  les imprim Ă©crans / explications. Le Endpoint 1 est le plugin matter-shelly qui regroupe les devices dans le Matterbridge. En sachant que je suis configurĂ© en « Bridge Â», les Endpoint deviennent diffĂ©rents si je passe en mode « Childbridge Â».


  • 5, 9 et 17 sont des PRO3 (module de 3 commutateurs mono / tri)
    • Child Endpoint 5 : 1 feature PowerSource (Idem Endpoint 2 du P3EM),
    • Child Endpoint 6 : 1 feature OnOff,
    • Child Endpoint 7 : 1 feature OnOff,
    • Child Endpoint 8 : 1 feature OnOff,
Exemple PRO3 - Child Endpoint: 5 (+6+7+8)




  • 2 et 13 sont des PRO3EM (compteur d’énergie triphasĂ©) composĂ©s de
    • Child Endpoint 2 : 1 feature PowerSource (il doit y avoir une subtilitĂ© en plus ici car je ne vois pas les 3 phases 
 ou alors la fonctionnalitĂ© n’est pas terminĂ©es
),
    • Child Endpoint 3 : 1 feature OnOff,
    • Child Endpoint 4 : 1 feature TemperatureSensor (TempĂ©rature interne du module)
    • 1 (ou 3) feature manquante dans MatterBridge : Energy
Exemple PRO3EM - Child Endpoint: 2 (+3+4)



  • 15 est un 3EM (compteur d’énergie pour solaire ou pour 3 appareillages)
    • Child Endpoint 15 : 1 feature PowerSource (Idem Endpoint 2 du P3EM),
    • Child Endpoint 16 : 1 feature OnOff (Idem Endpoint 3 du P3EM),
    • 1 (ou 3) feature manquante dans MatterBridge : Energy
Exemple 3EM - Child Endpoint: 15 (+16)


Pour info Ă©galement, Ă  chaque rĂ©appairage des diffĂ©rents device, le Endpoint peut ĂȘtre diffĂ©rent (ordre de rĂ©ponse d’appairage), du coup si on tiens compte de ça pour la corrĂ©lation de l’external_id, ce sera cassĂ©. UniqueId, serieNumber, VendorId, ProductId, peut importe, mais dans le cas des bridges, ce n’est clairement pas le Endpoint et le NodeId qui permettront de rĂ©associer un appareil prĂ©cĂ©demment associĂ©.

Un grand merci pour le partage de la spĂ©cification. J’ai cherchĂ© mais jamais trouvĂ© :upside_down_face:

1 « J'aime »

Je veux bien le JSON par email, je regarderais ça lundi :slight_smile:

1 « J'aime »

@Terdious J’ai poussĂ© une nouvelle version qui normalement gĂšre tes child_endpoints nested :slight_smile: J’ai pas pu tester en rĂ©el, je suis preneur de ton retour !

1 « J'aime »

Voici la sortie des devices / features :

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


Par contre pour le nom il faut aller le chercher dans le 1er niveau de child_endpoints si le device est un aggregator. Et il s’agit du nodeLabel. Voici la sorties des clusters dans MatterBridge (mĂȘme si tu les vois dans le JSON que tu permets d’exporter) :

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

Endpoint	Id	Device Types	Cluster Name	Cluster ID	Attribute Name	Attribute ID	Attribute Value
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
Total child endpoints: 3

Pour rappel, ici :

  • child_endpoint:2 et 13 sont des Shelly Pro3EM, il y a bien 1 seul On_Off activĂ© sur le 2 (pas sur le 13)
  • child_endpoint:15 est un Shelly EM3, il y a bien 1 seul On_Off
  • child_endpoint:5, 9 et 17 sont des Shelly Pro3, il y a 3 commutateurs On_Off.

Tu arrives Ă  contrĂŽler les Shelly?

Yes ok pour la commande !

Mais pas de retour d’état par contre

Ah ? C’est censĂ© fonctionner pourtant. Est-ce que MatterBridge supporte le retour d’état ?

Ou est exactement le nodeLabel ?

Logs Gladys lorsque je dĂ©clenche manuellement ou via l’interface Shelly :

2025-04-07T15:39:40+0200 <debug> lan-manager.scanPresence.js:25 (LANManager.scanPresence) LANManager: 0 presence sensor features
2025-04-07 15:39:48.414 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/42171 protocol: 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      Message « for: I/ReportData msgId: 42171/62022/235444815 type: 0x1/0x5 reqAck size: 41 payload: 152600c590d63d3601153501260069ab88083701240206240306240400182902181818280424ff0c18
2025-04-07 15:39:48.415 DEBUG  ExchangeManager      Message » for: 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      Message « for: SC/StandaloneAck msgId: 42171/62022/235444816 type: 0x0/0x10 acked: 133132491
2025-04-07 15:39:48.423 DEBUG  InteractionClient    Received attribute update: 0x6/OnOff(0x6)/onOff(0x0) = true (version=143174505)

Logs lorsque je déclenche par Gladys (extinction dans le cas présent) :

2025-04-07T15:40:59+0200 <debug> scene.executeActions.js:20 (executeAction) Executing action device.set-value
2025-04-07T15:40:59+0200 <info> matter.setValue.js:52 (MatterHandler.setValue) Setting value for node 5048395297330787217
2025-04-07 15:40:59.750 DEBUG  InteractionClient    Invoking command: 0x6/OnOff(0x6)/off(0x0) with "undefined"
2025-04-07 15:40:59.750 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/42171 protocol: 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      Message » for: 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: not connected. Prevent forwarding event.
2025-04-07 15:40:59.772 DEBUG  MessageExchange      Message « for: 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      Message » for: 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: not connected. Prevent forwarding event.
2025-04-07 15:40:59.821 DEBUG  MessageExchange      New exchange channel: udp://[fe80::1f9b:dcb9:d14b:707a%enp2s0]:5540 on session secure/42171 protocol: 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      Message « for: I/ReportData msgId: 42171/62024/235444819 type: 0x1/0x5 reqAck size: 41 payload: 152600c590d63d360115350126006aab88083701240206240306240400182902181818280424ff0c18
2025-04-07 15:40:59.822 DEBUG  ExchangeManager      Message » for: 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    Received attribute update: 0x6/OnOff(0x6)/onOff(0x0) = true (version=143174506)
2025-04-07 15:40:59.826 DEBUG  MessageExchange      Message « for: SC/StandaloneAck msgId: 42171/62024/235444820 type: 0x0/0x10 acked: 133132495

Donc visiblement oui, il attrape bien l’event !!

Je l’ai attrapĂ© en faisant quelque chose comme ça :

  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, j’ai compris, il y a un petit souci dans le code :smiley: Je corrige !

Ok, par contre le clusterClient BridgedDeviceBasicInformation est au niveau au dessus de la fonctionnalité, au niveau du bridgednode :thinking:

Il faut que je vois comment je peux identifier ça, j’espùre que c’est standard ce qu’à fait Matterbrige :stuck_out_tongue:

1 « J'aime »

@Terdious J’ai fixĂ© le retour d’état normalement :slight_smile:

1 « J'aime »

Bah en


En soit ça ne me choque pas, j’espĂšre ne effet qu’ils suivent le standard mais un si on suit l’escalier, c’est cohĂ©rent,
Un aggregator qui contient plusieurs devices qui contient plusieurs features. Le nom du device ici c’est bien « Pro3 L1 BĂątiment Perso Â» et les features n’ont pas de nom, elles ont des id « switch:0 Â», « switch:1 Â», « switch:2 Â»

Il doit y avoir un type je suppose pour chaque étage 
 je vais regarder.

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 visiblement ne fonctionne pas 
 Ici j’ai fais une extinction manu puis un allumage manu

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

Regarde si ça ressemble à tes logs mais si c’est la partie InteractionClient Received attribute update: 0x6/OnOff(0x6)/onOff(0x0) = true (version=634393535) il envoi true 2 fois. Je ne sais pas si c’est la raison ^^

Je pense que ce n’est pas le retour d’état de la lampe qu’on voit mais de l’input :


C’est un poussoir !!

Je test avec un inter

Je viens de pousser la gestion des BridgedDeviceBasicInformation :slight_smile:

Normalement, tu devrais avoir les bons noms de device ! Est-ce que tu peux confirmer ? (Il faut juste supprimer les devices Gladys, pas besoin de re-appairer)

1 « J'aime »

Ah !! :smiley: Yes ! Pour l’instant je gùre que le OnOff

It’s undefined :grimacing: :sweat_smile:

Idem pour pour le commutateur, donc sur de rien ^^

J’ai choisi vendorName ( nodeLabel || productLabel ), donc le vendorName doit ĂȘtre vide chez toi ! Je fais des tests :stuck_out_tongue: Il faut que ça marche autant pour MatterBridge et pour les « vrais Â» appareils Matter

Oui évidemment, mais je te confirme que vendorName est rempli :


Et d’ailleurs nodeLabel = productLabel ^^