Controlling Somfy RTS Dry Contact Interface with Fibaro Smart Implant

Hi a noob here. I have a Somfy Blind that I can open and close using the dry contact interface. I’d like to use the outputs of the Fibaro SmartImplant FGBS-222 to do this. However I’d like it to appear and operate as a window covering in the Devices menu. How do I do this and map the two outputs? Any pointers would be great.
TIA

The only way is to use a virtual device.
I’ve not implemented direct control into it, but http calls will work locally anyway.

Just use a local HTTP call, as for ON

http://127.0.0.1:3480/data_request?id=lu_action&output_format=json&DeviceNum=555&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1

or for OFF

http://127.0.0.1:3480/data_request?id=lu_action&output_format=json&DeviceNum=555&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0

Where 555 is your input. I guess, in your case, you’ll just need ON for the two endpoints, so take note of the two device IDs mapped to the outputs.

Thanks for the prompt reply. I’m new to all of this so may well miss obvious steps.

I have loaded the Virtual HTTP Devices app and created a device. Then I’m getting lost trying to follow the readme on GitHub…

I have gone to the virtual device/advanced but from there I’m not sure what to edit.

Params
device_type: urn:schemas-upnp-org:device:WindowCovering:1
device_file: D_VirtualWindowCovering1.xml
impl_file: I_VirtualBinaryLight1.xml
category_num: 8

And then I have edited the variables as you describe

First off I would have though the Virtual device graphic would have changed to one for a window?
subcategory_num: 1

This is correct. No need to change subcategory_num.

Post your commands. Keep in mind that Roller Shutters have dimming command as well.

At the moment the AppStore version seems to be corrupted, so try to download it directly from GitHub while I’m working on a fix.

A manual load is a little better in that I have the expected graphic. What I still don’t have is operation of the relays although commands do work in a browser

I’m not sure how to map the dimming command as it does not seem to be supported by the SmartImpant which is configured as a generic device.

It seems that however the SmartImplant is installed it appears as a GerericDevice with 2 Appliance Modules, one for each volt free output.

I’ve got another one of these that I needed to use for an input from a rain sensor and I had to follow this post to get that part working.

I’m familiar with this post :slight_smile:

All that said, are the commands working in the browser? if yes, post your configuration.

Up and down are currently mapped to 0/100. So, down will definitely work, while up will not, out of the box.
I could try to make this more intelligent via a flag, so you could call on/off instead. Can you please confirm down is working for you?

Daniele thanks for you attention to this. I’ve been tracing my steps and documenting as I go.

One thing I have noticed and was confusing me is that it seems to take quite a while for the device to be created properly with the control graphic and underlying parameter configuration. As soon as I had created the device I was diving in to the config and finding thngs missing.

So this is where I’m at…
Via a web browser I can turn the output on/off by changing the target value
http://192.168.10.182:3480/data_request?id=action&output_format=json&DeviceNum=195&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1

But this does not seem to work from the device…

The brightness command does not work from the command line, I guess this is because as a generic device the smart implant does not support this.

Once I get something working I need to figure out how to map the two devices (open & close)

Try to update the plug-in from GitHub, because the Store release is broken.
dbochicchio/vera-VirtualDevices: Virtual HTTP Devices plug-in for Vera and openLuup (github.com)

Download the latest release, unzip the files. To install, simply upload the files in the release package, using Vera’s feature (Go to Apps , then Develop Apps , then Luup files and select Upload - multiple files can be selected when uploading).

I think we can map the brightness to something specific for you. I’ll create a new feature just to support this, but first I want to be sure you have the basic feature in place.

Yes I have already done a manual install as you describe. So I have obviosly missed something somewhere

Set DebugMode to 1 and submit some logs.

So I have gone to the virtual device\advanced\varibles and set debug mode to 1. Then I tested each of the buttons but there are no logs?

Alerts are not logs.

You willl find logs here
http://local_ip_of_vera/cgi-bin/cmh/log.sh?Device=LuaUPnP

1 Like

See told you I was a noob :blush:
So I pressed all the buttons in order and this is a snippet of what poured out

08 11/18/20 16:11:35.164 JobHandler_LuaUPnP::HandleActionRequest device: 188 service: urn:upnp-org:serviceId:WindowCovering1 action: Up <0x74258520>
08 11/18/20 16:11:35.164 JobHandler_LuaUPnP::HandleActionRequest argument action=Up <0x74258520>
08 11/18/20 16:11:35.165 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:WindowCovering1 <0x74258520>
08 11/18/20 16:11:35.165 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=188 <0x74258520>
06 11/18/20 16:11:35.166 Device_Variable::m_szValue_set device: 188 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelTarget was: 0 now: 100 #hooks: 0 upnp: 0 skip: 0 v:0xf39988/NONE duplicate:0 <0x74258520>
08 11/18/20 16:11:36.652 JobHandler_LuaUPnP::HandleActionRequest device: 188 service: urn:upnp-org:serviceId:WindowCovering1 action: Stop <0x74258520>
08 11/18/20 16:11:36.652 JobHandler_LuaUPnP::HandleActionRequest argument action=Stop <0x74258520>
08 11/18/20 16:11:36.653 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:WindowCovering1 <0x74258520>
08 11/18/20 16:11:36.653 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=188 <0x74258520>
08 11/18/20 16:11:38.902 JobHandler_LuaUPnP::HandleActionRequest device: 188 service: urn:upnp-org:serviceId:WindowCovering1 action: Down <0x74258520>
08 11/18/20 16:11:38.902 JobHandler_LuaUPnP::HandleActionRequest argument action=Down <0x74258520>
08 11/18/20 16:11:38.902 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:WindowCovering1 <0x74258520>
08 11/18/20 16:11:38.903 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=188 <0x74258520>
06 11/18/20 16:11:38.904 Device_Variable::m_szValue_set device: 188 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelTarget was: 100 now: 0 #hooks: 0 upnp: 0 skip: 0 v:0xf39988/NONE duplicate:0 <0x74258520>
08 11/18/20 16:11:41.867 JobHandler_LuaUPnP::HandleActionRequest device: 188 service: urn:upnp-org:serviceId:WindowCovering1 action: Down <0x74258520>
08 11/18/20 16:11:41.868 JobHandler_LuaUPnP::HandleActionRequest argument action=Down <0x74258520>
08 11/18/20 16:11:41.868 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:WindowCovering1 <0x74258520>
08 11/18/20 16:11:41.869 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=188 <0x74258520>
06 11/18/20 16:11:43.954 Device_Variable::m_szValue_set device: 22 service: urn:micasaverde-com:serviceId:EnergyMetering1 variable: KWH was: 0.0000 now: 0.0000 #hooks: 0 upnp: 0 skip: 0 v:0xf56f18/NONE duplicate:1 <0x7747e520>
06 11/18/20 16:11:43.954 Device_Variable::m_szValue_set device: 22 service: urn:micasaverde-com:serviceId:EnergyMetering1 variable: KWHReading was: 1605715784 now: 1605715903 #hooks: 0 upnp: 0 skip: 0 v:(nil)/NONE duplicate:0

Looks to me the URLs are not getting called

Yep, be sure DebugMode is really set to 1 :slight_smile:

As I said, Up and Down will call Dimming, so start with setting this as TurnOn/Off. If it’s working, I’ll provide you a patched version where it’s possible to send 0/1 and not 0/100 and you should be good to go.

If configure the SetBrightnessURL to either on or off it works but brightness does not. As I said previously I dont think this is supported by the implant

image

Below is what I see on screen. The lamps are the actual outputs of the smartimplant. You can see the Close contact is active but physically its not!

08 11/18/20 16:58:08.818 JobHandler_LuaUPnP::HandleActionRequest device: 188 service: urn:upnp-org:serviceId:Dimming1 action: SetLoadLevelTarget <0x72f2d520>
08 11/18/20 16:58:08.819 JobHandler_LuaUPnP::HandleActionRequest argument action=SetLoadLevelTarget <0x72f2d520>
08 11/18/20 16:58:08.819 JobHandler_LuaUPnP::HandleActionRequest argument newLoadlevelTarget=100 <0x72f2d520>
08 11/18/20 16:58:08.820 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:Dimming1 <0x72f2d520>
08 11/18/20 16:58:08.820 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=188 <0x72f2d520>
50 11/18/20 16:58:08.822 luup_log:188: VirtualBinaryLight2.2.2@188:actionBrightness(188,“100”) <0x72f2d520>
50 11/18/20 16:58:08.823 luup_log:188: VirtualBinaryLight2.2.2@188:setVar(“urn:upnp-org:serviceId:Dimming1”,“LoadLevelTarget”,“100”,188) old value “100” <0x72f2d520>
50 11/18/20 16:58:08.824 luup_log:188: VirtualBinaryLight2.2.2@188:sendDeviceCommand(“SetBrightnessURL”,100,188) <0x72f2d520>
50 11/18/20 16:58:08.833 luup_log:188: VirtualBinaryLight2.2.2@188:sendDeviceCommand.url(“http://127.0.0.1:3480/data_request?id=action&output_format=json&DeviceNum=195&serviceId=urn:upnp-org:serviceId:Dimming1&action=SetLoadLevelTarget&newLoadlevelTarget=%s”) <0x72f2d520>
02 11/18/20 16:58:08.834 luup_require duplicate http_async <0x72f2d520>
50 11/18/20 16:58:08.835 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet(“sync”) <0x72f2d520>
08 11/18/20 16:58:08.840 JobHandler_LuaUPnP::HandleActionRequest device: 195 service: urn:upnp-org:serviceId:Dimming1 action: SetLoadLevelTarget <0x7355c520>
08 11/18/20 16:58:08.840 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=195 <0x7355c520>
08 11/18/20 16:58:08.841 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:Dimming1 <0x7355c520>
08 11/18/20 16:58:08.841 JobHandler_LuaUPnP::HandleActionRequest argument action=SetLoadLevelTarget <0x7355c520>
08 11/18/20 16:58:08.842 JobHandler_LuaUPnP::HandleActionRequest argument newLoadlevelTarget=100 <0x7355c520>
06 11/18/20 16:58:08.842 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelTarget was: 100 now: 100 #hooks: 0 upnp: 0 skip: 0 v:0x8b4388/NONE duplicate:1 <0x7355c520>
50 11/18/20 16:58:08.852 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet(“http://127.0.0.1:3480/data_request?id=action&output_format=json&DeviceNum=195&serviceId=urn:upnp-org:serviceId:Dimming1&action=SetLoadLevelTarget&newLoadlevelTarget=100”, 1, 200, “{ "u:SetLoadLevelTargetResponse": { "JobID": "53" } }”) <0x72f2d520>
50 11/18/20 16:58:08.853 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet: onSuccess(200) <0x72f2d520>
50 11/18/20 16:58:08.855 luup_log:188: VirtualBinaryLight2.2.2@188:setVar(“urn:upnp-org:serviceId:Dimming1”,“LoadLevelStatus”,“100”,188) old value “100” <0x72f2d520>
50 11/18/20 16:58:08.856 luup_log:188: VirtualBinaryLight2.2.2@188:setVar(“urn:upnp-org:serviceId:Dimming1”,“LoadLevelLast”,“100”,188) old value “100” <0x72f2d520>
06 11/18/20 16:58:09.112 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelStatus was: 100 now: 100 #hooks: 0 upnp: 0 skip: 0 v:0x8b43f0/NONE duplicate:1 <0x76b82520>
06 11/18/20 16:58:09.112 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:SwitchPower1 variable: Status was: 0 now: 1 #hooks: 0 upnp: 0 skip: 0 v:0x8b2d50/NONE duplicate:0 <0x76b82520>
04 11/18/20 16:58:09.114 <0x76b82520>
08 11/18/20 16:58:15.946 JobHandler_LuaUPnP::HandleActionRequest device: 188 service: urn:upnp-org:serviceId:Dimming1 action: SetLoadLevelTarget <0x72d2d520>
08 11/18/20 16:58:15.946 JobHandler_LuaUPnP::HandleActionRequest argument action=SetLoadLevelTarget <0x72d2d520>
08 11/18/20 16:58:15.947 JobHandler_LuaUPnP::HandleActionRequest argument newLoadlevelTarget=0 <0x72d2d520>
08 11/18/20 16:58:15.947 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:Dimming1 <0x72d2d520>
08 11/18/20 16:58:15.948 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=188 <0x72d2d520>
50 11/18/20 16:58:15.949 luup_log:188: VirtualBinaryLight2.2.2@188:actionBrightness(188,“0”) <0x72d2d520>
50 11/18/20 16:58:15.951 luup_log:188: VirtualBinaryLight2.2.2@188:setVar(“urn:upnp-org:serviceId:Dimming1”,“LoadLevelTarget”,“0”,188) old value “100” <0x72d2d520>
06 11/18/20 16:58:15.951 Device_Variable::m_szValue_set device: 188 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelTarget was: 100 now: 0 #hooks: 0 upnp: 0 skip: 0 v:0x8b4388/NONE duplicate:0 <0x72d2d520>
50 11/18/20 16:58:15.960 luup_log:188: VirtualBinaryLight2.2.2@188:sendDeviceCommand(“SetBrightnessURL”,{ 1=0 },188) <0x72d2d520>
50 11/18/20 16:58:15.972 luup_log:188: VirtualBinaryLight2.2.2@188:sendDeviceCommand.url(“http://127.0.0.1:3480/data_request?id=action&output_format=json&DeviceNum=195&serviceId=urn:upnp-org:serviceId:Dimming1&action=SetLoadLevelTarget&newLoadlevelTarget=%s”) <0x72d2d520>
02 11/18/20 16:58:15.973 luup_require duplicate http_async <0x72d2d520>
50 11/18/20 16:58:15.974 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet(“sync”) <0x72d2d520>
08 11/18/20 16:58:15.980 JobHandler_LuaUPnP::HandleActionRequest device: 195 service: urn:upnp-org:serviceId:Dimming1 action: SetLoadLevelTarget <0x72f2d520>
08 11/18/20 16:58:15.980 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=195 <0x72f2d520>
08 11/18/20 16:58:15.981 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:Dimming1 <0x72f2d520>
08 11/18/20 16:58:15.981 JobHandler_LuaUPnP::HandleActionRequest argument action=SetLoadLevelTarget <0x72f2d520>
08 11/18/20 16:58:15.982 JobHandler_LuaUPnP::HandleActionRequest argument newLoadlevelTarget=0 <0x72f2d520>
06 11/18/20 16:58:15.982 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelTarget was: 100 now: 0 #hooks: 0 upnp: 0 skip: 0 v:0x8b4388/NONE duplicate:0 <0x72f2d520>
50 11/18/20 16:58:15.989 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet(“http://127.0.0.1:3480/data_request?id=action&output_format=json&DeviceNum=195&serviceId=urn:upnp-org:serviceId:Dimming1&action=SetLoadLevelTarget&newLoadlevelTarget=0”, 1, 200, “{ "u:SetLoadLevelTargetResponse": { "JobID": "54" } }”) <0x72d2d520>
50 11/18/20 16:58:15.990 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet: onSuccess(200) <0x72d2d520>
50 11/18/20 16:58:15.991 luup_log:188: VirtualBinaryLight2.2.2@188:setVar(“urn:upnp-org:serviceId:Dimming1”,“LoadLevelStatus”,“0”,188) old value “100” <0x72d2d520>
06 11/18/20 16:58:15.992 Device_Variable::m_szValue_set device: 188 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelStatus was: 100 now: 0 #hooks: 0 upnp: 0 skip: 0 v:0x8b43f0/NONE duplicate:0 <0x72d2d520>
06 11/18/20 16:58:16.229 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelStatus was: 100 now: 0 #hooks: 0 upnp: 0 skip: 0 v:0x8b43f0/NONE duplicate:0 <0x76b82520>
06 11/18/20 16:58:16.230 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:SwitchPower1 variable: Status was: 1 now: 0 #hooks: 0 upnp: 0 skip: 0 v:0x8b2d50/NONE duplicate:0 <0x76b82520>
04 11/18/20 16:58:16.231 <0x76b82520>
08 11/18/20 16:58:19.587 JobHandler_LuaUPnP::HandleActionRequest device: 188 service: urn:upnp-org:serviceId:Dimming1 action: SetLoadLevelTarget <0x72d2d520>
08 11/18/20 16:58:19.587 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=188 <0x72d2d520>
08 11/18/20 16:58:19.588 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:Dimming1 <0x72d2d520>
08 11/18/20 16:58:19.588 JobHandler_LuaUPnP::HandleActionRequest argument action=SetLoadLevelTarget <0x72d2d520>
08 11/18/20 16:58:19.588 JobHandler_LuaUPnP::HandleActionRequest argument newLoadlevelTarget=48 <0x72d2d520>
50 11/18/20 16:58:19.601 luup_log:188: VirtualBinaryLight2.2.2@188:actionBrightness(188,“48”) <0x72d2d520>
50 11/18/20 16:58:19.603 luup_log:188: VirtualBinaryLight2.2.2@188:setVar(“urn:upnp-org:serviceId:Dimming1”,“LoadLevelTarget”,“48”,188) old value “0” <0x72d2d520>
06 11/18/20 16:58:19.603 Device_Variable::m_szValue_set device: 188 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelTarget was: 0 now: 48 #hooks: 0 upnp: 0 skip: 0 v:0x8b4388/NONE duplicate:0 <0x72d2d520>
50 11/18/20 16:58:19.604 luup_log:188: VirtualBinaryLight2.2.2@188:sendDeviceCommand(“SetBrightnessURL”,48,188) <0x72d2d520>
50 11/18/20 16:58:19.624 luup_log:188: VirtualBinaryLight2.2.2@188:sendDeviceCommand.url(“http://127.0.0.1:3480/data_request?id=action&output_format=json&DeviceNum=195&serviceId=urn:upnp-org:serviceId:Dimming1&action=SetLoadLevelTarget&newLoadlevelTarget=%s”) <0x72d2d520>
02 11/18/20 16:58:19.625 luup_require duplicate http_async <0x72d2d520>
50 11/18/20 16:58:19.626 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet(“sync”) <0x72d2d520>
08 11/18/20 16:58:19.640 JobHandler_LuaUPnP::HandleActionRequest device: 195 service: urn:upnp-org:serviceId:Dimming1 action: SetLoadLevelTarget <0x7355c520>
08 11/18/20 16:58:19.640 JobHandler_LuaUPnP::HandleActionRequest argument DeviceNum=195 <0x7355c520>
08 11/18/20 16:58:19.641 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:upnp-org:serviceId:Dimming1 <0x7355c520>
08 11/18/20 16:58:19.641 JobHandler_LuaUPnP::HandleActionRequest argument action=SetLoadLevelTarget <0x7355c520>
08 11/18/20 16:58:19.641 JobHandler_LuaUPnP::HandleActionRequest argument newLoadlevelTarget=48 <0x7355c520>
06 11/18/20 16:58:19.642 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelTarget was: 0 now: 48 #hooks: 0 upnp: 0 skip: 0 v:0x8b4388/NONE duplicate:0 <0x7355c520>
50 11/18/20 16:58:19.647 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet(“http://127.0.0.1:3480/data_request?id=action&output_format=json&DeviceNum=195&serviceId=urn:upnp-org:serviceId:Dimming1&action=SetLoadLevelTarget&newLoadlevelTarget=48”, 1, 200, “{ "u:SetLoadLevelTargetResponse": { "JobID": "55" } }”) <0x72d2d520>
50 11/18/20 16:58:19.649 luup_log:188: VirtualBinaryLight2.2.2@188:httpGet: onSuccess(200) <0x72d2d520>
50 11/18/20 16:58:19.660 luup_log:188: VirtualBinaryLight2.2.2@188:setVar(“urn:upnp-org:serviceId:Dimming1”,“LoadLevelStatus”,“48”,188) old value “0” <0x72d2d520>
06 11/18/20 16:58:19.661 Device_Variable::m_szValue_set device: 188 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelStatus was: 0 now: 48 #hooks: 0 upnp: 0 skip: 0 v:0x8b43f0/NONE duplicate:0 <0x72d2d520>
50 11/18/20 16:58:19.662 luup_log:188: VirtualBinaryLight2.2.2@188:setVar(“urn:upnp-org:serviceId:Dimming1”,“LoadLevelLast”,“48”,188) old value “48” <0x72d2d520>
06 11/18/20 16:58:19.869 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:Dimming1 variable: LoadLevelStatus was: 0 now: 48 #hooks: 0 upnp: 0 skip: 0 v:0x8b43f0/NONE duplicate:0 <0x76b82520>
06 11/18/20 16:58:19.870 Device_Variable::m_szValue_set device: 195 service: urn:upnp-org:serviceId:SwitchPower1 variable: Status was: 0 now: 1 #hooks: 0 upnp: 0 skip: 0 v:0x8b2d50/NONE duplicate:0 <0x76b82520>

Success :slight_smile:

So, bear with me while I’m adding this feature.

It’ll work as follows:

  • when you’ll press down, it will turn the device off - so same endpoint as turnOff
  • when you’ll press up, it will turn the device on - so same endpoint as turnOn
  • when you’ll move the slide, it will turn off when <=50, or on when >50

It will be available as a flag. I’ll need some time to finish it, maybe a couple of hours. I’ll post back to the thread to let you know.

No rush.

I’m actually thinking this still might not work as I have an open and a close contact which are presented as two different devices.

To open you would need to turn OFF the close contact and ON the open contact and visa versa for close.

I guess this logic is all managed internally within a proper roller shutter module.

It’s doable, since you can specify multiple commands per action. I just need to map to them.

Ok, I just released a new version on GitHub.

If you want to emulate a Window Cover/Roller Shutter/Blind but your device is supporting only ON/OFF commands, simply leave SetBrightnessURL to its default.

Then go to the device’s variable and set BlindAsSwitch to 1. The device will now work as follows:

  • when position is set on a value between 0 and 50, or down/close button is pressed, the switch off command is sent
  • when position is set on a value between 51 and 100, or up/open button is pressed, the switch off command is sent

As I said, it’s possible to specify multiple commands, just set them one per line.