Unterschiedliche Klappen/Läden/Türen

Hallo,
mit meiner gesamten Somfy-Ausrüstung habe ich Außenrollläden, Innen- und Außenjalousien und jetzt auch ein Garagentor.
Bei der Matter-Integration habe ich nur Rolläden für die Befehle und Zustände:




Kann man sie unterscheiden?
Und ich würde sogar so weit gehen, Fenster und Tor für später hinzuzufügen.
Position des Rolladens / Zustand des Rolladens
Position der Jalousie / Zustand der Jalousie
Position des Tors / Zustand des Tors
Position des Fensters / Zustand des Fensters

Falls nötig, kann ich die von Matterbridge stammenden Identifikatoren bereitstellen (für die, die ich habe).
Position des Tores / Zustand des Tores

Hallo :slight_smile:

Ich bin mir nicht sicher, ob das möglich ist. Auf der Matter-Seite sind diese drei Geräte „WindowCovering“-Cluster.

Man müsste schauen, ob auf der Matterbridge-Seite ein Attribut übermittelt wird, das angibt, um welchen Typ es sich bei jeder Funktion handelt.

Kannst du mir Screenshots von Matterbridge machen?

Du hast recht, es wird nur 0x0202-MA-windowCovering auf der Matter-Seite für alle meine Geräte gesendet :frowning:
Aber auf der Seite des matterbridge-somfy-Plugins haben wir mehr Informationen und es ist gut unterschieden.

Beispiel Rollladen Velux:

[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] Gerät: Velux Büro 
[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] - uniqueName RollerShutterVeluxIOComponent 
[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] - uiClass RollerShutter 
[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] - serial 612f437f-xxxx-xxxx-xxxx 
[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] - deviceURL io://xxxx-xxxx-xxxx/2602070 
[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] - commands [ 'addLockLevel', 'advancedRefresh', 'close', 'delayedStopIdentify', 'down', 'getName', 'identify', 'my', 'open', 'refreshMemorized1Position', 'removeLockLevel', 'resetLockLevels', 'setClosureAndLinearSpeed', 'setClosure', 'setDeployment', 'setMemorized1Position', 'setName', 'setPositionAndLinearSpeed', 'setPosition', 'setSecuredPosition', 'startIdentify', 'stop', 'stopIdentify', 'up', 'wink', 'pairOneWayController', 'setConfigState', 'unpairAllOneWayControllers', 'unpairOneWayController' ] 
[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] - states [ { name: 'core:NameState', type: 3, value: 'Velux Büro' }, { name: 'core:PriorityLockTimerState', type: 1, value: 0 }, { name: 'core:CommandLockLevelsState', type: 3, value: '[]', lastUpdateTime: 1747209967000 }, { name: 'core:StatusState', type: 3, value: 'available' }, { name: 'core:DiscreteRSSILevelState', type: 3, value: 'normal' }, { name: 'core:RSSILevelState', type: 2, value: 62 }, { name: 'core:BatteryDiscreteLevelState', type: 3, value: 'good' }, { name: 'core:ClosureState', type: 1, value: 100 }, { name: 'core:OpenClosedState', type: 3, value: 'closed' }, { name: 'core:Memorized1PositionState', type: 1, value: 0 } ] 
[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] - added with uiClass
[23:12:22.992] [Matterbridge somfy tahoma plugin] [debug] Gerät hinzufügen: Velux Büro 
[23:12:22.992] [Matterbridge somfy tahoma plugin] [debug] - uniqueName RollerShutterVeluxIOComponent 
[23:12:22.992] [Matterbridge somfy tahoma plugin] [debug] - uiClass RollerShutter 
[23:12:22.992] [Matterbridge somfy tahoma plugin] [debug] - serial 612f437f-xxxx-xxxx-xxxx 
[23:12:22.992] [Matterbridge somfy tahoma plugin] [debug] - deviceURL io://xxxx-xxxx-xxxx/2602070 
[23:12:22.992] [Matterbridge somfy tahoma plugin] [debug] - commands [ 'addLockLevel', 'advancedRefresh', 'close', 'delayedStopIdentify', 'down', 'getName', 'identify', 'my', 'open', 'refreshMemorized1Position', 'removeLockLevel', 'resetLockLevels', 'setClosureAndLinearSpeed', 'setClosure', 'setDeployment', 'setMemorized1Position', 'setName', 'setPositionAndLinearSpeed', 'setPosition', 'setSecuredPosition', 'startIdentify', 'stop', 'stopIdentify', 'up', 'wink', 'pairOneWayController', 'setConfigState', 'unpairAllOneWayControllers', 'unpairOneWayController' ] 
[23:12:22.993] [Matterbridge somfy tahoma plugin] [debug] - states [ { name: 'core:NameState', type: 3, value: 'Velux Büro' }, { name: 'core:PriorityLockTimerState', type: 1, value: 0 }, { name: 'core:CommandLockLevelsState', type: 3, value: '[]', lastUpdateTime: 1747209967000 }, { name: 'core:StatusState', type: 3, value: 'available' }, { name: 'core:DiscreteRSSILevelState', type: 3, value: 'normal' }, { name: 'core:RSSILevelState', type: 2, value: 62 }, { name: 'core:BatteryDiscreteLevelState', type: 3, value: 'good' }, { name: 'core:ClosureState', type: 1, value: 100 }, { name: 'core:OpenClosedState', type: 3, value: 'closed' }, { name: 'core:Memorized1PositionState', type: 1, value: 0 } ] 
[23:12:23.007] [Matterbridge somfy tahoma plugin] [debug] - duration 30 
[23:12:23.007] [Velux Büro] [debug] new MatterbridgeEndpoint: 0x0202-MA-windowCovering id: Velux Büro number: undefined taglist: undefined 
[23:12:23.009] [Matterbridge] [debug] Adding bridged endpoint matterbridge-somfy-tahoma:Velux Büro to Matterbridge aggregator node 
[23:12:23.057] [Endpoint] [info] Matterbridge.Matterbridge.VeluxBüro ready endpoint#: 37 type: MA_windowCovering (0x202) behaviors: ✓descriptor 💤matterbridge ✓identify ✓groups ✓windowCovering ✓bridgedDeviceBasicInformation ✓powerSource 
[23:12:23.108] [Matterbridge] [info] Subscribing attributes for endpoint Velux Büro (VeluxBüro) plugin matterbridge-somfy-tahoma 
[23:12:23.116] [Matterbridge] [info] Added and registered bridged endpoint (7/7) Velux Büro (VeluxBüro) for plugin matterbridge-somfy-tahoma

Beispiel Innenstore:

[23:12:22.671] [Matterbridge somfy tahoma plugin] [debug] Gerät: Velux Store 
[23:12:22.671] [Matterbridge somfy tahoma plugin] [debug] - uniqueName VerticalInteriorBlindVeluxIOComponent 
[23:12:22.672] [Matterbridge somfy tahoma plugin] [debug] - uiClass Screen 
[23:12:22.672] [Matterbridge somfy tahoma plugin] [debug] - serial 04064452-xxxx-xxxx-xxxx 
[23:12:22.672] [Matterbridge somfy tahoma plugin] [debug] - deviceURL io://xxxx-xxxx-xxxx/9733440 
[23:12:22.672] [Matterbridge somfy tahoma plugin] [debug] - commands [ 'addLockLevel', 'advancedRefresh', 'close', 'delayedStopIdentify', 'down', 'getName', 'identify', 'my', 'open', 'refreshMemorized1Position', 'removeLockLevel', 'resetLockLevels', 'setClosure', 'setMemorized1Position', 'setName', 'setPosition', 'setSecuredPosition', 'startIdentify', 'stop', 'stopIdentify', 'up', 'wink', 'pairOneWayController', 'setConfigState', 'unpairAllOneWayControllers', 'unpairOneWayController' ] 
[23:12:22.673] [Matterbridge somfy tahoma plugin] [debug] - states [ { name: 'core:NameState', type: 3, value: 'Velux Store' }, { name: 'core:PriorityLockTimerState', type: 1, value: 0 }, { name: 'core:CommandLockLevelsState', type: 3, value: '[]', lastUpdateTime: 1747209968000 }, { name: 'core:StatusState', type: 3, value: 'available' }, { name: 'core:DiscreteRSSILevelState', type: 3, value: 'normal' }, { name: 'core:RSSILevelState', type: 2, value: 80 }, { name: 'core:ClosureState', type: 1, value: 100 }, { name: 'core:OpenClosedState', type: 3, value: 'closed' } ] 
[23:12:22.673] [Matterbridge somfy tahoma plugin] [debug] - added with uiClass 
[23:12:23.184] [Matterbridge somfy tahoma plugin] [debug] Gerät hinzufügen: Velux Store 
[23:12:23.184] [Matterbridge somfy tahoma plugin] [debug] - uniqueName VerticalInteriorBlindVeluxIOComponent 
[23:12:23.184] [Matterbridge somfy tahoma plugin] [debug] - uiClass Screen 
[23:12:23.184] [Matterbridge somfy tahoma plugin] [debug] - serial 04064452-xxxx-xxxx-xxxx 
[23:12:23.184] [Matterbridge somfy tahoma plugin] [debug] - deviceURL io://xxxx-xxxx-xxxx/9733440 
[23:12:23.185] [Matterbridge somfy tahoma plugin] [debug] - commands [ 'addLockLevel', 'advancedRefresh', 'close', 'delayedStopIdentify', 'down', 'getName', 'identify', 'my', 'open', 'refreshMemorized1Position', 'removeLockLevel', 'resetLockLevels', 'setClosure', 'setMemorized1Position', 'setName', 'setPosition', 'setSecuredPosition', 'startIdentify', 'stop', 'stopIdentify', 'up', 'wink', 'pairOneWayController', 'setConfigState', 'unpairAllOneWayControllers', 'unpairOneWayController' ] 
[23:12:23.185] [Matterbridge somfy tahoma plugin] [debug] - states [ { name: 'core:NameState', type: 3, value: 'Velux Store' }, { name: 'core:PriorityLockTimerState', type: 1, value: 0 }, { name: 'core:CommandLockLevelsState', type: 3, value: '[]', lastUpdateTime: 1747209968000 }, { name: 'core:StatusState', type: 3, value: 'available' }, { name: 'core:DiscreteRSSILevelState', type: 3, value: 'normal' }, { name: 'core:RSSILevelState', type: 2, value: 80 }, { name: 'core:ClosureState', type: 1, value: 100 }, { name: 'core:OpenClosedState', type: 3, value: 'closed' } ] 
[23:12:23.185] [Matterbridge somfy tahoma plugin] [debug] - duration 30 
[23:12:23.185] [Velux Store] [debug] new MatterbridgeEndpoint: 0x0202-MA-windowCovering id: Velux Store number: undefined taglist: undefined 
[23:12:23.189] [Matterbridge] [debug] Hinzufügen des gebridgten Endpunkts matterbridge-somfy-tahoma:Velux Store zum Matterbridge-Aggregator-Knoten 
[23:12:23.199] [Endpoint] [info] Matterbridge.Matterbridge.VeluxStore ready endpoint#: 40 type: MA_windowCovering (0x202) behaviors: ✓descriptor 💤matterbridge ✓identify ✓groups ✓windowCovering ✓bridgedDeviceBasicInformation ✓powerSource 
[23:12:23.221] [Matterbridge] [info] Abonnieren von Attributen für den Endpunkt Velux Store (VeluxStore) Plugin matterbridge-somfy-tahoma 
[23:12:23.221] [Matterbridge] [info] Gebridgter Endpunkt hinzugefügt und registriert (10/10) Velux Store (VeluxStore) für Plugin matterbridge-somfy-tahoma

Ich werde schauen, ob ich Informationen zu Matter für die Differenzierung finde.

Kannst du mir Screenshots der Matterbridge-Oberfläche machen?

Ich habe gerade in den Matter-Logs von Matterbridge eine „Zeile“ gefunden, die scheinbar dafür ausgelegt ist, den Gerätetyp anzuzeigen, der auch in der Matterbridge-UI zu finden ist:
MA_windowCovering(0x33)/BridgedDeviceBasicInformation(0x39)/productName(0x3)="GarageDoor" (z. B.)






Ich bin mir nicht sicher, ob es sich um Standard-Matter handelt, es ist einfach ein offenes Feld (productName), das von Matterbridge gefüllt wird.

Damit ich unterscheiden kann, muss es eine offizielle Möglichkeit geben, den Gerätetyp zu identifizieren.

Kannst du mir einen vollständigen Screenshot machen? ^^

Brauchst du alle Zeilen Clusters for device von einem der Geräte?
Das Problem ist, dass ich die verschiedenen Zeilen getestet habe und nur uniqueId, productName, nodeLabel und serialNumber unterschiedlich sind, alle anderen absolut identisch :confused:







In diesem Fall sollte man mit dem Entwickler der Somfy Matterbridge-Integration sprechen! :slight_smile:

Oft enthält das Attribut « featureMap » Booleans, um zu identifizieren, was es ist.

Manche Thermostatgeräte unterscheiden zum Beispiel Heizungen von Klimaanlagen, indem sie ein Attribut « heating: true » vs « cooling: true » setzen.

Hallo @pierre-gilles
Erkennst du in deiner Matter-Integration die EndProductTypeEnum?

Damit könnte man potenziell die Gerätetypen unterscheiden.

Das sagt mir nichts!

Ist das ein Attribut, das du findest, wenn du die Matter-Knoten als JSON herunterlädst?

Suche mit verschiedenen Groß-/Kleinschreibungen.

Ich habe ein Beispiel genommen und sehe den EndProductType:

              {
                "id": "258",
                "name": "WindowCovering",
                "attributes": [
                  "0",
                  "1",
                  "2",
                  "3",
                  "4",
                  "5",
                  "6",
                  "7",
                  "8",
                  "9",
                  "10",
                  "11",
                  "12",
                  "13",
                  "14",
                  "15",
                  "16",
                  "17",
                  "18",
                  "19",
                  "23",
                  "26",
                  "65528",
                  "65529",
                  "65531",
                  "65532",
                  "65533",
-->>              "type",
                  "configStatus",
                  "operationalStatus",
-->>              "endProductType",
                  "mode",
                  "safetyStatus",
                  "physicalClosedLimitLift",
                  "physicalClosedLimitTilt",
                  "currentPositionLift",
                  "currentPositionTilt",
                  "numberOfActuationsLift",
                  "numberOfActuationsTilt",
                  "currentPositionLiftPercentage",
                  "currentPositionTiltPercentage",
                  "targetPositionLiftPercent100ths",
                  "targetPositionTiltPercent100ths",
                  "currentPositionLiftPercent100ths",
                  "currentPositionTiltPercent100ths",
                  "installedOpenLimitLift",
                  "installedClosedLimitLift",
                  "installedOpenLimitTilt",
                  "installedClosedLimitTilt",
                  "clusterRevision",
                  "featureMap",
                  "attributeList",
                  "acceptedCommandList",
                  "generatedCommandList"
                ],
                "commands": [
                  "0",
                  "1",
                  "2",
                  "4",
                  "5",
                  "7",
                  "8",
                  "upOrOpen",
                  "downOrClose",
                  "stopMotion",
                  "goToLiftValue",
                  "goToLiftPercentage",
                  "goToTiltValue",
                  "goToTiltPercentage"
                ],
                "all_keys": [
                  "id",
                  "name",
                  "revision",
                  "_type",
                  "supportedFeatures",
                  "isUnknown",
                  "endpointId",
                  "attributes",
                  "events",
                  "commands",
                  "subscribeAllAttributes",
                  "_triggerAttributeUpdate",
                  "_triggerEventUpdate",
                  "isAttributeSupported",
                  "isAttributeSupportedByName",
                  "isCommandSupported",
                  "isCommandSupportedByName",
                  "getTypeAttribute",
                  "setTypeAttribute",
                  "subscribeTypeAttribute",
                  "addTypeAttributeListener",
                  "removeTypeAttributeListener",
                  "getConfigStatusAttribute",
                  "setConfigStatusAttribute",
                  "subscribeConfigStatusAttribute",
                  "addConfigStatusAttributeListener",
                  "removeConfigStatusAttributeListener",
                  "getOperationalStatusAttribute",
                  "setOperationalStatusAttribute",
                  "subscribeOperationalStatusAttribute",
                  "addOperationalStatusAttributeListener",
                  "removeOperationalStatusAttributeListener",
                  "getEndProductTypeAttribute",
                  "setEndProductTypeAttribute",
                  "subscribeEndProductTypeAttribute",
                  "addEndProductTypeAttributeListener",
                  "removeEndProductTypeAttributeListener",
                  "getModeAttribute",
                  "setModeAttribute",
                  "subscribeModeAttribute",
                  "addModeAttributeListener",
                  "removeModeAttributeListener",
                  "getSafetyStatusAttribute",
                  "setSafetyStatusAttribute",
                  "subscribeSafetyStatusAttribute",
                  "addSafetyStatusAttributeListener",
                  "removeSafetyStatusAttributeListener",
                  "getPhysicalClosedLimitLiftAttribute",
                  "setPhysicalClosedLimitLiftAttribute",
                  "subscribePhysicalClosedLimitLiftAttribute",
                  "addPhysicalClosedLimitLiftAttributeListener",
                  "removePhysicalClosedLimitLiftAttributeListener",
                  "getPhysicalClosedLimitTiltAttribute",
                  "setPhysicalClosedLimitTiltAttribute",
                  "subscribePhysicalClosedLimitTiltAttribute",
                  "addPhysicalClosedLimitTiltAttributeListener",
                  "removePhysicalClosedLimitTiltAttributeListener",
                  "getCurrentPositionLiftAttribute",
                  "setCurrentPositionLiftAttribute",
                  "subscribeCurrentPositionLiftAttribute",
                  "addCurrentPositionLiftAttributeListener",
                  "removeCurrentPositionLiftAttributeListener",
                  "getCurrentPositionTiltAttribute",
                  "setCurrentPositionTiltAttribute",
                  "subscribeCurrentPositionTiltAttribute",
                  "addCurrentPositionTiltAttributeListener",
                  "removeCurrentPositionTiltAttributeListener",
                  "getNumberOfActuationsLiftAttribute",
                  "setNumberOfActuationsLiftAttribute",
                  "subscribeNumberOfActuationsLiftAttribute",
                  "addNumberOfActuationsLiftAttributeListener",
                  "removeNumberOfActuationsLiftAttributeListener",
                  "getNumberOfActuationsTiltAttribute",
                  "setNumberOfActuationsTiltAttribute",
                  "subscribeNumberOfActuationsTiltAttribute",
                  "addNumberOfActuationsTiltAttributeListener",
                  "removeNumberOfActuationsTiltAttributeListener",
                  "getCurrentPositionLiftPercentageAttribute",
                  "setCurrentPositionLiftPercentageAttribute",
                  "subscribeCurrentPositionLiftPercentageAttribute",
                  "addCurrentPositionLiftPercentageAttributeListener",
                  "removeCurrentPositionLiftPercentageAttributeListener",
                  "getCurrentPositionTiltPercentageAttribute",
                  "setCurrentPositionTiltPercentageAttribute",
                  "subscribeCurrentPositionTiltPercentageAttribute",
                  "addCurrentPositionTiltPercentageAttributeListener",
                  "removeCurrentPositionTiltPercentageAttributeListener",
                  "getTargetPositionLiftPercent100thsAttribute",
                  "setTargetPositionLiftPercent100thsAttribute",
                  "subscribeTargetPositionLiftPercent100thsAttribute",
                  "addTargetPositionLiftPercent100thsAttributeListener",
                  "removeTargetPositionLiftPercent100thsAttributeListener",
                  "getTargetPositionTiltPercent100thsAttribute",
                  "setTargetPositionTiltPercent100thsAttribute",
                  "subscribeTargetPositionTiltPercent100thsAttribute",
                  "addTargetPositionTiltPercent100thsAttributeListener",
                  "removeTargetPositionTiltPercent100thsAttributeListener",
                  "getCurrentPositionLiftPercent100thsAttribute",
                  "setCurrentPositionLiftPercent100thsAttribute",
                  "subscribeCurrentPositionLiftPercent100thsAttribute",
                  "addCurrentPositionLiftPercent100thsAttributeListener",
                  "removeCurrentPositionLiftPercent100thsAttributeListener",
                  "getCurrentPositionTiltPercent100thsAttribute"},
                  "setCurrentPositionTiltPercent100thsAttribute",
                  "subscribeCurrentPositionTiltPercent100thsAttribute",
                  "addCurrentPositionTiltPercent100thsAttributeListener",
                  "removeCurrentPositionTiltPercent100thsAttributeListener",
                  "getInstalledOpenLimitLiftAttribute",
                  "setInstalledOpenLimitLiftAttribute",
                  "subscribeInstalledOpenLimitLiftAttribute",
                  "addInstalledOpenLimitLiftAttributeListener",
                  "removeInstalledOpenLimitLiftAttributeListener",
                  "getInstalledClosedLimitLiftAttribute",
                  "setInstalledClosedLimitLiftAttribute",
                  "subscribeInstalledClosedLimitLiftAttribute",
                  "addInstalledClosedLimitLiftAttributeListener",
                  "removeInstalledClosedLimitLiftAttributeListener",
                  "getInstalledOpenLimitTiltAttribute",
                  "setInstalledOpenLimitTiltAttribute",
                  "subscribeInstalledOpenLimitTiltAttribute",
                  "addInstalledOpenLimitTiltAttributeListener",
                  "removeInstalledOpenLimitTiltAttributeListener",
                  "getInstalledClosedLimitTiltAttribute",
                  "setInstalledClosedLimitTiltAttribute",
                  "subscribeInstalledClosedLimitTiltAttribute",
                  "addInstalledClosedLimitTiltAttributeListener",
                  "removeInstalledClosedLimitTiltAttributeListener",
                  "getClusterRevisionAttribute",
                  "setClusterRevisionAttribute",
                  "subscribeClusterRevisionAttribute",
                  "addClusterRevisionAttributeListener",
                  "removeClusterRevisionAttributeListener",
                  "getFeatureMapAttribute",
                  "setFeatureMapAttribute",
                  "subscribeFeatureMapAttribute",
                  "addFeatureMapAttributeListener",
                  "removeFeatureMapAttributeListener",
                  "getAttributeListAttribute",
                  "setAttributeListAttribute",
                  "subscribeAttributeListAttribute",
                  "addAttributeListAttributeListener",
                  "removeAttributeListAttributeListener",
                  "getAcceptedCommandListAttribute",
                  "setAcceptedCommandListAttribute",
                  "subscribeAcceptedCommandListAttribute",
                  "addAcceptedCommandListAttributeListener",
                  "removeAcceptedCommandListAttributeListener",
                  "getGeneratedCommandListAttribute",
                  "setGeneratedCommandListAttribute",
                  "subscribeGeneratedCommandListAttribute",
                  "addGeneratedCommandListAttributeListener",
                  "removeGeneratedCommandListAttributeListener",
                  "upOrOpen",
                  "downOrClose",
                  "stopMotion",
                  "goToLiftValue",
                  "goToLiftPercentage",
                  "goToTiltValue",
                  "goToTiltPercentage"
                ]
              }

Als ich mir den Code von Matterbridge etwas angesehen habe, scheint es, dass diese beiden Parameter (Type und EndProductType) auf dem gleichen Standardwert bleiben, was dem Roller Shade in der Matter 1.4.1-Spezifikation entspricht:


Ausgezeichnet :heart_eyes:

Kannst du einen Feature-Request « Matter : EndProductType zur Unterscheidung von Rollläden, Markisen und Türen » erstellen? :slight_smile:

et voilà : [Matter] Différencier les volets/stores/portes avec le endProductType