Fibaro Roller Shutter - FGRM222

Module FGRM222

I’m using this roller shutter module to operate an external venetian blind. The module has two value settings:
‘value’ - the blind position
‘value2’ - the blind slat or lamellas in Fibaro vernacular

The device comes through as a WindowShade with the following Capabilities

The ‘Switch Level’ capability seems to correctly pick up ‘value’ via @Device.Level as a number from 0-99 as a %
In the docs the ‘WindowShade’ capability suggests it’s an Enum but it seems to pick up a description that isn’t consistent with the Enum values listed.

My question though relates to ‘value2’ - the blind slat / lamellas position.

In terms of the default WindowShade device type there isn’t a Capability that is picking up this property. I added value2 to the Attributes of the device and was able to successfully control the blind slat position using @Device.value2

What I didn’t manage to do was be able to initialise the position of a slider to reflect the initial value of ‘value2’ on load. Once I set it via a slider it’s fine but it’s the on load value setting where I failed. I can happily initialise the slider position for the main blind position using @Device.Level

Any ideas on how to achieve this for ‘value2’?

What’s the value of @Device.value2 on load?

Add a Label to your page that is bound to this attribute so you can easily track its state. If the Label correctly display its state on load then so should the Slider.

Thanks for coming back to me so quickly on this.

What’s the value of @Device.value2 on load?

  • seems to be void / nothing

Add a Label to your page that is bound to this attribute so you can easily track its state

  • I tried that. Label didn’t display on load either. Also tried a Data Tigger. That didn’t work on load either.

What I have managed to get working…I created a scene in Fibaro to store a global variable that corresponds to the current state of blind’s value2. I then created an Event Trigger that when Loaded sets @Device.value2 to this global variable which Home Remote can read.

It works but just feels a bit convoluted. What would be ideal would be to have a second Capability that hooked up to value2?

If you added “value2” to the Attributes property on the Device object then the Home Remote will display the same value that is in the API JSON. I recommend you inspect the actual JSON coming from the controller because my guess is that it is empty there as well.


Hi Bill,

Below a sample of the JSON just before the list of ‘actions’ you can see the values:


It’s not clear to me why it’s not displaying.

By way of a little more detail:

Starting with the SwitchLevel Capability assigned to the WindowShade. If I use the corresponding @Device.Level as the Device Binding for a Slider Value the slider value is correct upon load and happily set the value when the slider is moved.

If I then include ‘value’ (the primary open/close position of the blind rather than Slat position which relates to ‘value2’) and change the Device Binding for the Slider Value to @Device.value upon load the slider doesn’t display a value but function ok once you change the slider value. In short it too doesn’t seem to read the value on load. So I observe the behaviour for both ‘value’ and ‘value2’.

{“id”:147,“name”:“Study Blind”,“roomID”:14,“type”:“com.fibaro.FGRM222”,“baseType”:“com.fibaro.FGR”,“enabled”:true,“visible”:true,“isPlugin”:false,“parentId”:146,“remoteGatewayId”:0,“interfaces”:[“deviceGrouping”,“energy”,“levelChange”,“power”,“zwave”,“zwaveMultiChannelAssociation”,“zwaveProtection”,“zwaveSceneActivation”],“properties”:{“parameters”:[{“id”:3,“lastReportedValue”:1,“lastSetValue”:1,“size”:1,“value”:1},{“id”:10,“lastReportedValue”:2,“lastSetValue”:2,“size”:1,“value”:2},{“id”:12,“lastReportedValue”:100,“lastSetValue”:100,“size”:2,“value”:100},{“id”:13,“lastReportedValue”:1,“lastSetValue”:1,“size”:1,“value”:1},{“id”:17,“lastReportedValue”:10,“lastSetValue”:10,“size”:1,“value”:10},{“id”:18,“lastReportedValue”:10,“lastSetValue”:10,“size”:1,“value”:10},{“id”:22,“lastReportedValue”:240,“lastSetValue”:240,“size”:2,“value”:240},{“id”:29,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0},{“id”:30,“lastReportedValue”:2,“lastSetValue”:2,“size”:1,“value”:2},{“id”:31,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0},{“id”:32,“lastReportedValue”:1,“lastSetValue”:1,“size”:1,“value”:1},{“id”:33,“lastReportedValue”:1,“lastSetValue”:1,“size”:1,“value”:1},{“id”:35,“lastReportedValue”:1,“lastSetValue”:1,“size”:1,“value”:1},{“id”:40,“lastReportedValue”:10,“lastSetValue”:10,“size”:1,“value”:10},{“id”:42,“lastReportedValue”:3600,“lastSetValue”:3600,“size”:2,“value”:3600},{“id”:43,“lastReportedValue”:10,“lastSetValue”:10,“size”:1,“value”:10},{“id”:44,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0},{“id”:50,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0},{“id”:14,“lastReportedValue”:2,“lastSetValue”:2,“size”:1,“value”:2}],“pollingTimeSec”:0,“zwaveCompany”:“Fibargroup”,“zwaveInfo”:“3,3,52”,“zwaveVersion”:“25.25”,“RFProtectionState”:“0”,“RFProtectionSupport”:“3”,“categories”:"[“blinds”]",“configured”:true,“dead”:“false”,“deadReason”:"",“deviceControlType”:“55”,“deviceGroup”:"[]",“deviceGroupMaster”:“0”,“deviceIcon”:“87”,“emailNotificationID”:“0”,“emailNotificationType”:“0”,“endPointId”:“0”,“energy”:“0.35”,“localProtectionState”:“0”,“localProtectionSupport”:“5”,“log”:"",“logTemp”:"",“manufacturer”:"",“markAsDead”:“true”,“model”:"",“nodeId”:“32”,“parametersTemplate”:“721”,“power”:“0.00”,“productInfo”:“1,15,3,2,48,0,25,25”,“protectionExclusiveControl”:“0”,“protectionExclusiveControlSupport”:“false”,“protectionState”:“0”,“protectionTimeout”:“0”,“protectionTimeoutSupport”:“false”,“pushNotificationID”:“0”,“pushNotificationType”:“0”,“remoteGatewayId”:“0”,“saveLogs”:“true”,“sceneActivation”:“0”,“serialNumber”:"",“showEnergy”:“true”,“smsNotificationID”:“0”,“smsNotificationType”:“0”,“state”:“Unknown”,“useTemplate”:“true”,“userDescription”:"",“value”:“42”,“value2”:“50”},“actions”:{“close”:0,“open”:0,“reconfigure”:0,“reset”:0,“sceneActivationSet”:0,“setValue”:1,“setValue2”:1,“startLevelDecrease”:0,“startLevelIncrease”:0,“stop”:0,“stopLevelChange”:0},“created”:1626123921,“modified”:1626123921,“sortOrder”:41}

Can you please email me your project? Feel free to clear your credentials or any other sensitive information you have.

You should be able to monitor any property assuming you’ve added them to the Attributes property on the Device object. I’m not sure why that isn’t working for you.

will do - can you please point me to where i can find your email address


Thanks - just sent you an email

Where exactly is the Label I asked you to add that was bound to @Device.value2?

I’m not seeing it anywhere. The label you added is bound to the Slider not the device. I only asked you to add a temporary label for troubleshooting. It doesn’t have to be permanent. You can even add one to your start page like I did below.

I’ll probably have to look at this next week. I don’t think I have time to work on this now.

Apologies - I removed that label

What I sent was ‘working’ setup that I managed to get working, i.e. using Global Variables that I mentioned above.

I can easily add a label with that binding and resend if you like?

Basically, I just wanted to verify you had your Label configured properly. I wasn’t able to verify that in the project you sent. You should be able to monitor any property assuming you’ve added them to the Attributes property on the Device object. I’m not sure why that isn’t working for you.

Maybe next week you can setup port forwarding to your controller so I can connect remotely to troubleshoot.

Sure would be good to do that.

Just for what it’s worth, setting up a simple label (put on the opening screen) it shows no value initially when set to LoftStudyBlind.value2, once I go into the details tile, move the slider and come back out again it does display the value. This is the behaviour I am seeing for Attributes value2 and indeed value also where value is otherwise bound via the SwitchLevel Capability LoftStudyBlind.Level and it works fine on that label upon loading

I’m sorry, but I don’t believe you when you say “value2” when bound to a Label is showing a blank value. I just emulated a controller using the sample data you provided & it worked fine for me. You need to look at what you are doing. Since you didn’t send me your test project I have no way of telling you what that is.

Fibaro_Test.hrp (129.7 KB)

Just sent a hrp file with the label added as mentioned above

Your latest project looks fine. This doesn’t make any sense to me why it works for me & not you.

Are you 100% certain that the JSON value for “value2” is still 50?

Try my project & update the IP address & credentials. Does that work?

BTW I can confirm you hrp file does have the correct behaviour.

I am using a modified version of WindowShadeDetails.xaml and WindowShadeTile.xaml I wonder if that might be the issue?

That doesn’t make any difference. You didn’t add the Label to that page. You added it to Entry_Main.xaml in the latest file you sent me.

Bit confused here, you wanted to test the contents of ‘value2’ via a label, as you mention below that label can sit any where the important piece being it’s text is bound to LoftStudyBlind.value2 and that’s what I believe I did in the hrp I sent most recently

“You can even add one to your start page like I did below”


Press the Play button to start the simulator. What does that Label below AC Toggle show?

It should show 50.