# Differentiation of shutters/blinds/doors

**URL:** <https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566>\
**Category:** Configuration\
**Created:** [June 6, 2025, 1:26pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566 "2025-06-06T13:26:50Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [June 6, 2025, 1:26pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/1 "2025-06-06T13:26:50Z")

</div>

Hello,  
with all my Somfy gear, I have exterior roller shutters, interior and exterior blinds, and now a garage door.  
In the Matter integration, I only have shutters for the controls and states:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/f/e/fec8d1ba029c21f173fafd9f82d4e36bd2617747.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/7/e/7e5668b53f925b167f42822d51296a0b17ac4709.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/0/7/07ff0e0528e28460d07f63f036713d9609694394.png)  
Is it possible to differentiate them?  
And I’d even go so far as to add window and gate for later.  
`Shutter position` / `Shutter state`  
`Blind position` / `Blind state`  
`Door position` / `Door state`  
`Window position` / `Window state`

If needed, I can provide the identifiers from Matterbridge (for the ones I have).  
`Gate position` / `Gate state`

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [June 6, 2025, 2:08pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/2 "2025-06-06T14:08:06Z")

</div>

Hi 🙂

I’m not sure that’s possible — on the Matter side these 3 devices are «&nbsp;WindowCovering&nbsp;» clusters.

We should check whether on the Matterbridge side there is an attribute being communicated that indicates the type of each feature.

Can you take screenshots of Matterbridge for me?

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [June 6, 2025, 2:27pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/3 "2025-06-06T14:27:50Z")

</div>

You’re right, it only sends `0x0202-MA-windowCovering` on the Matter side for all my devices ☹

However, we have more info on the matterbridge-somfy plugin side and it’s properly differentiated.

Example Velux roller shutter:

```auto
[23:12:22.667] [Matterbridge somfy tahoma plugin] [debug] Device: Velux Bureau 
[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 Bureau' }, { 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

```

```auto
[23:12:22.992] [Matterbridge somfy tahoma plugin] [debug] Adding device: Velux Bureau 
[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 Bureau' }, { 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 Bureau] [debug] new MatterbridgeEndpoint: 0x0202-MA-windowCovering id: Velux Bureau number: undefined taglist: undefined 
[23:12:23.009] [Matterbridge] [debug] Adding bridged endpoint matterbridge-somfy-tahoma:Velux Bureau to Matterbridge aggregator node 
[23:12:23.057] [Endpoint] [info] Matterbridge.Matterbridge.VeluxBureau 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 Bureau (VeluxBureau) plugin matterbridge-somfy-tahoma 
[23:12:23.116] [Matterbridge] [info] Added and registered bridged endpoint (7/7) Velux Bureau (VeluxBureau) for plugin matterbridge-somfy-tahoma

```

Example interior blind:

```auto
[23:12:22.671] [Matterbridge somfy tahoma plugin] [debug] Device: 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 

```

```auto
[23:12:23.184] [Matterbridge somfy tahoma plugin] [debug] Adding device: 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] Adding bridged endpoint matterbridge-somfy-tahoma:Velux Store to Matterbridge aggregator node 
[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] Subscribing attributes for endpoint Velux Store (VeluxStore) plugin matterbridge-somfy-tahoma 
[23:12:23.221] [Matterbridge] [info] Added and registered bridged endpoint (10/10) Velux Store (VeluxStore) for plugin matterbridge-somfy-tahoma

```

I’ll see if I can find any info on Matter regarding the differentiation.

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [June 6, 2025, 2:31pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/4 "2025-06-06T14:31:36Z")

</div>

Can you take screenshots of the Matterbridge interface for me?

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [June 6, 2025, 2:43pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/5 "2025-06-06T14:43:13Z")

</div>

I just found in the Matter logs of Matterbridge a «&nbsp;line&nbsp;» that seems exposed to show the device type that also appears in the Matterbrige UI:  
`MA_windowCovering(0x33)/BridgedDeviceBasicInformation(0x39)/productName(0x3)="GarageDoor"` (for example)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/0/f/0fd3010f37ebec21bc810927d4fb1f84106209d1.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/4/a/4aff97bbac88b8254bf72680c6a4b6a5f15d2adc.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/9/9/99c06da6eae5ad36ee29d3dcaa1027fa16ed99b7.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/3/a/3a29ad836b60123445cc5c8bb7e1c9b31ba7adb1.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/8/f/8f88227ed9433f1a4da2a0b0e374ecfbfb3d37b5.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/c/e/ce2434a66b2d8c5da840c15a6ae326a270b23919.png)

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [June 6, 2025, 3:02pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/6 "2025-06-06T15:02:13Z")

</div>

I’m not sure that’s part of the Matter standard; it’s just an open field (productName) that’s populated by Matterbridge.

For me to be able to differentiate, there needs to be an official way to identify the device type.

Can you take a full screenshot for me? ^^

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [June 6, 2025, 3:18pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/7 "2025-06-06T15:18:40Z")

</div>

> [@pierre-gilles](#):
>
> Can you take a full screenshot for me? ^^

Do you need all the `Clusters for device` lines from one of the devices?  
The thing is I tested the different lines and only `uniqueId`, `productName`, `nodeLabel` and `serialNumber` differ, all the others are absolutely identical 😕

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/e/5/e585da1bbee6e42475e2ed97b1ebdfcc127eb9fb.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/b/2/b295297deef6475b7ee84ac13b6f945ae3601f7e.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/a/5/a5146eb197d80b34212fe567a686e433e00be4f8.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/7/a/7a5a69d9a24a81546d7154bbe59ded662782659e.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/c/d/cd97a959764fff70ce00e5986e8031dfc7278b40.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/8/7/87630cb1756ff916bd5bf63ac74af0fe1138cbb6.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/8/1/816554ddf2c2efeda4128f94aa8ca83362bf3bfa.png)

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [June 6, 2025, 3:28pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/8 "2025-06-06T15:28:12Z")

</div>

> [@mutmut](#):
>
> The thing is I tested the different lines and only `uniqueId`, `productName`, `nodeLabel` and `serialNumber` differ, all the others are absolutely identical 😕

In that case you need to talk to the developer of the Somfy Matterbridge integration! 🙂

Often, it’s the «&nbsp;featureMap&nbsp;» attribute that contains booleans to identify what it is.

Some thermostat devices, for example, differentiate heaters from air conditioners by using an attribute «&nbsp;heating: true&nbsp;» vs «&nbsp;cooling: true&nbsp;»

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [June 18, 2025, 12:09pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/9 "2025-06-18T12:09:09Z")

</div>

Hi @pierre-gilles  
Are you familiar with the `EndProductTypeEnum` in your Matter integration?

> <https://github.com/Luligu/matterbridge-somfy-tahoma/issues/27#issuecomment-2980704026>
>
> Hi @Luligu ,
> 
> I just added this week a garage's door motor (Serenia IO) in my so…mfy ecosystem.
> There are 2 devices in one discovered in Matterbridge : motor and light.
> 
> \`\`\`
> \[23:12:22.656\] \[Matterbridge somfy tahoma plugin\] \[debug\] Device: Porte garage 
> \[23:12:22.656\] \[Matterbridge somfy tahoma plugin\] \[debug\] - uniqueName DynamicGarageDoor 
> \[23:12:22.656\] \[Matterbridge somfy tahoma plugin\] \[debug\] - uiClass GarageDoor 
> \[23:12:22.657\] \[Matterbridge somfy tahoma plugin\] \[debug\] - serial 0140225e-xxxx-xxxx-xxxx
> \[23:12:22.657\] \[Matterbridge somfy tahoma plugin\] \[debug\] - deviceURL io://xxxx-xxxx-xxxx/14590173 
> \[23:12:22.657\] \[Matterbridge somfy tahoma plugin\] \[debug\] - commands \['addLockLevel', 'advancedRefresh', 'close', 'delayedStopIdentify', 'executeManufacturerProcedure', 'getName', 'goToAlias', 'identify', 'open', 'readManufacturerData', 'removeLockLevel', 'resetLockLevels', 'saveAlias', 'setName', 'startIdentify', 'stop', 'stopIdentify', 'wink', 'writeManufacturerData', 'runManufacturerSettingsCommand', 'keepOneWayControllersAndDeleteNode', 'pairOneWayController', 'sendIOKey', 'setConfigState', 'unpairAllOneWayControllersAndDeleteNode', 'unpairAllOneWayControllers', 'unpairOneWayController' \] 
> \[23:12:22.657\] \[Matterbridge somfy tahoma plugin\] \[debug\] - states \[{ name: 'core:NameState', type: 3, value: 'Porte garage' }, { name: 'core:PriorityLockTimerState', type: 1, value: 0 }, { name: 'core:CommandLockLevelsState', type: 3, value: '\[\]', lastUpdateTime: 1749065825000 }, { name: 'core:StatusState', type: 3, value: 'available' }, { name: 'core:DiscreteRSSILevelState', type: 3, value: 'good' }, { name: 'core:RSSILevelState', type: 2, value: 88 }, { name: 'core:ReachedAliasesState', type: 10, value: \[\] }, { name: 'core:OpenClosedState', type: 3, value: 'closed' } \] 
> \[23:12:22.657\] \[Matterbridge somfy tahoma plugin\] \[debug\] - added with commands "open", "close" and "stop"
> \`\`\`
> So GarageDoor was added, I see it in Devices.
> 
> \`\`\`
> \[23:12:22.658\] \[Matterbridge somfy tahoma plugin\] \[debug\] Device: Lumière garage  
> \[23:12:22.658\] \[Matterbridge somfy tahoma plugin\] \[debug\] - uniqueName DynamicLight 
> \[23:12:22.658\] \[Matterbridge somfy tahoma plugin\] \[debug\] - uiClass Light 
> \[23:12:22.658\] \[Matterbridge somfy tahoma plugin\] \[debug\] - serial 598870ea-xxxx-xxxx-xxxx 
> \[23:12:22.658\] \[Matterbridge somfy tahoma plugin\] \[debug\] - deviceURL io://xxxx-xxxx-xxxx/14590174 
> \[23:12:22.658\] \[Matterbridge somfy tahoma plugin\] \[debug\] - commands \['addLockLevel', 'advancedRefresh', 'delayedStopIdentify', 'executeManufacturerProcedure', 'getName', 'goToAlias', 'identify', 'off', 'on', 'readManufacturerData', 'removeLockLevel', 'resetLockLevels', 'saveAlias', 'setName', 'setOnOff', 'startIdentify', 'stopIdentify', 'wink', 'writeManufacturerData', 'runManufacturerSettingsCommand', 'keepOneWayControllersAndDeleteNode', 'pairOneWayController', 'sendIOKey', 'setConfigState', 'unpairAllOneWayControllersAndDeleteNode', 'unpairAllOneWayControllers', 'unpairOneWayController' \] 
> \[23:12:22.659\] \[Matterbridge somfy tahoma plugin\] \[debug\] - states \[{ name: 'core:NameState', type: 3, value: 'Lumière garage' }, { name: 'core:PriorityLockTimerState', type: 1, value: 0 }, { name: 'core:CommandLockLevelsState', type: 3, value: '\[\]', lastUpdateTime: 1749065859000 }, { name: 'core:StatusState', type: 3, value: 'available' }, { name: 'core:DiscreteRSSILevelState', type: 3, value: 'good' }, { name: 'core:RSSILevelState', type: 2, value: 84 }, { name: 'core:OnOffState', type: 3, value: 'on' }, { name: 'core:ReachedAliasesState', type: 10, value: \[\] } \]
> \`\`\`
> But Light was not added, nothing in Devices.
> 
> I also have some Netatmo devices coming from partner's integration in Tahoma app and I don't see them in Matterbridge but I can see them in logs.
> Logs showed me that some Sonos bridge ... but I have absolutly no Sonos devices. Maybe I clicked once on Tahoma app for adding Sonos to test, maybe.
> 
> \`\[23:12:22.650\] \[Matterbridge somfy tahoma plugin\] \[info\] Discovered 39 TaHoma devices \`
> \`\[23:12:22.704\] \[Matterbridge somfy tahoma plugin\] \[info\] Discovered 19 TaHoma screens \`
> So if I understand well, only "opening stuff" are exposed as Matter devices, is that correct ?
> 
> Do you plan to expose more ? 
> 
> Thanks again for that wonderful plugin !

It’s what potentially allows differentiating device types.

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [June 18, 2025, 6:58pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/10 "2025-06-18T18:58:15Z")

</div>

That doesn’t ring a bell!

Is that an attribute you find when you download Matter nodes as JSON?

 ![Screenshot 2025-06-18 at 20.57.44](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/2/b/2b4c6578469088e65492b0031c6e854f5896f01d.png)

Search using different types of case.

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [June 20, 2025, 9:43am UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/11 "2025-06-20T09:43:59Z")

</div>

I took an example and I clearly see the `EndProductType`:

```auto
              {
                "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"
                ]
              }

```

When trying to look a bit at the [Matterbridge code](https://github.com/Luligu/matterbridge/blob/c6476ce874923388e6ab3289f5c9857cc11cdbcc/src/matterbridgeEndpoint.ts#L1366), it seems to me that these 2 parameters (`Type` and `EndProductType`) remain on the same default value, which corresponds to Roller Shade in the Matter 1.4.1 spec:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/0/1/019f5fe6a01dcc7f0c8db676a2db4def0ac2cfcc.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/9/0/90522f389d1d3cfd2abbd7a37589a3b9a349baf3.png)

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [June 20, 2025, 12:01pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/12 "2025-06-20T12:01:03Z")

</div>

Excellent 😍

Can you create a feature request «&nbsp;Matter: Differentiate shutters/blinds/doors with endProductType&nbsp;»? 🙂

---

<div class="post-metadata">

**Author:** ![mutmut](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/mutmut/32/14064_2.png) [@mutmut](https://community.gladysassistant.com/u/mutmut)\
**Post date:** [June 20, 2025, 12:36pm UTC](https://community.gladysassistant.com/t/differenciation-des-volets-stores-portes/9566/13 "2025-06-20T12:36:40Z")

</div>

and here it is : [[Matter] Différencier les volets/stores/portes avec le endProductType](https://community.gladysassistant.com/t/matter-differencier-les-volets-stores-portes-avec-le-endproducttype/9607)
