Fibaro Roller Shutter FGRM-222 with Venetian Blinds - Lamellas Position

Update: got my blinds mounted yesterday, then just spent the morning installing the modules, result:
With one of the old (blue cover bar, firmware application version 22.22) FGRM-222, everything works as expected (can control lamella tilt using Fibar class commands).
With a new (green cover bar, firmware application version 25.25) FGRM-222, it does not (no Fibar commands available -> no separate lamella control).
What you can do in the meantime is to create a series of commands after positioning (send UP, short pause, then STOP) to simulate what the lamella control part does in a working module. That of course is just an uncomfortable workaround, but at least you can turn lamellas that way.

Still, I can’t believe they actually removed this feature in latest hardware or firmware.
I’ve posted this in the Fibaro forum, but no feedback yet.

@mstormi

The proprietary fibaro command class is currently tied to one specific device with id 0x010F, 0x0301. Your new roller shutter has probably a different id and is not recognised as having the fibaro command class.

Hmm. Right, my working devices have that ID while the newer ones have 0x010F,0x0302 (but note manufacturer is 1001 instead of 1000).
I checked the zwave database, in products.xml both IDs are known and refer to the same fgrm-222.xml file.
Shouldn’t the device itself announce its capabilities, i.e. its proprietary class ? Or what part of the code do you refer to where we would need to add the new device’s ID ?

Yes it is probabley announce its capabilities, like having the proprietary command class. Since its proprietary the binding takes extra precautions not the give all devices with the proprietary command class the fibaro one.
The code your looking for is here https://github.com/openhab/openhab/blob/master/bundles/binding/org.openhab.binding.zwave/src/main/java/org/openhab/binding/zwave/internal/protocol/commandclass/ZWaveCommandClass.java#L480

@maggu2810, would you be willing to write a fix for your binding code that also recognizes newer FGRM-222s ? ID to add see my post above.

Hi @mstormi, as @jongj already stated, it is just a “whitelist” of the IDs.
It should enough to add your ones.

Hm, okay, perhaps it is not such easy


This is the PR of the initial addition in the openHAB 1 binding:

@chris There is one key per manufacturer and device ID combination.
Using different CommandClass enums with different keys (manu/dev) that all reference to the FibaroFGRM222CommandClass.class (code) will work in this direction.
But the class itself reference to a CommandClass (code).

Have you any ideas how to implement that one?

One option would be to make FibaroFGRM222CommandClass abstract with the abstract method “getCommandClass()” and the different enums (key / manu+dev) reference to different child classes.
But that is not nice.

WDYT?

Well, a really quick (and not so nice!) fix is just to add the extra device to the table -:

        FIBARO_FGRM_222_1(0x010F, 0x0301, "FIBARO_FGRM_222", FibaroFGRM222CommandClass.class);
        FIBARO_FGRM_222_2(0x010F, 0x0302, "FIBARO_FGRM_222", FibaroFGRM222CommandClass.class);

It’s not very pretty, but it’s simple and maybe sufficient for OH1 at least


I can’t see any other way to do this - there needs to be some way to link the command class, to the actual device (and arguably, different versions of the device). It’s probably something we could configure in the database or something, but I’d suggest for now we just do the simple option above?

Are we talking about OH1?
I have been thinking about the openHAB 2 Z-Wave binding.
I just adding the OH1 PR link, that we have a code base that contains the changes that has been done that time.

As written above the FibaroFGRM222CommandClass.class contains a function “getCommandClass()” that does need to return a enum value (currently FIBARO_FGRM_222). If we have two, which one should returned (FIBARO_FGRM_222_1 or FIBARO_FGRM_222_2)? I don’t know what the caller does with this enum.

For me there is no need to add a quick and dirty solution.
IMHO (at least for the OH2 one) we should consider a “good” solution that fit the needs.

Yes - at least the original question was referring to OH1, and my answer was on this basis as it was asking about OH1 binding strings. I haven’t read every message since my earlier reply, so maybe the conversation changed to OH2 - sorry for that.

Well, if this is for OH1, I disagree, and I made the statement on this basis, so again, sorry for missing that this was now talking about OH2. I think for OH1, there’s no point in spending lots of time to make an elegant solution when in 3 years of maintaining the binding, this is the first time this has come up, and it’s unlikely the binding will receive a lot more work


For OH2, I agree - I would like to do this properly, but as above, I thought we were talking about OH1 - sorry. :blush:.

I agree, for OH1 a solution that is working is enough. No need to do much work for that.
I assume we have been talked about OH1 all the time and I missed that.
So, I don’t think I will touch that code myself, as it is IMHO outdated and superseded by the OH2 binding of @chris (thanks a lot to that guy).

Sorry, but I need to say as a topicstarter, that I lost interest to this topic, because I see it a bit incorrect way to support lamellas positioning using manufacturer/specific z-wave class. For me it would be definitely more interesting if we would have an item, which controls venetian blinds in hardware-independent manner, and keep z-wave binding itself clean from so kind “manufacturer-specific” features. Nobody knows, as it is right now, when support will be dropped, or what to do if Fibaro suddenly change behaviour of this pretty undocumented feature.
Then you also don’t have a kind of headache, how to make “good” support for it in OH 2.

@Artyom_Syomushkin IMHO there is no other way to set the position correctly for the FGRM-222. If the manufacturer only offers the option using a non-standard command class, there is nothing we can do (except implement that class).
So, if you don’t like to use such a solution you cannot use the FGRM-222. Perhaps other devices of other manufacturers offers a “normal” command class.
But I am not such familiar with Z-Wave at all.

Venetian Blinds control algorithm, realized in FGRM-222 is nothing else than just a function, which switches ON up/down motor direction shortly after new blinds position is adjusted. the duration of this ON pulse is defined by needed lamellas angle and can be easily calculated, knowing that full turn takes about 1,5 seconds and lamellas are either fully closed or open after long movement of blinds, depending on previous direction.
So all is required is to generate such pulse after user adjusts new position or wants to change lamellas angle. This should be possible using rules as well, so I don’t see the problem to add some type if item(aka implement our own class) for this with it’s own accepted commands.

Well, I’m still interested because I want my freshly installed venetian blinds to fully work (lamella tilt) with my FGRM-222s, just as probably everybody who owns some of these does.
Most people still use OH1, and will continue doing for quite some time. So do I.
So please add the new device ID into OH1 binding’s special support for Fibaro’s proprietary class.
Quick and dirty, just like the existing FIBARO_FGRM_222 command support.
If you can do easily, please also forward-port this quick and dirty solution to OH2 (just to ease transition, anybody with this setup doing the move from OH1 to OH2 will be thankful). If it can’t be done quickly, for OH2 go for the long term solution.

As a long-term solution, I agree with @Artyom_Syomushkin that the ‘right’ solution is to add another short movement in the opposite direction after positioning.
That’s something that should not and need not be done using proprietary commands (so it’ll work with any other rollershutter device, too, including non-zwave ones), and it should not be done in the zwave binding.

I suggest to add this function to the core OH module that implements the “Rollershutter” item. Keep the type=[shutter|lamella] syntax and implement (or fix) the ‘lamella’ part - possibly that’s even meant to already work that way ?
Maybe @Artyom_Syomushkin you could raise an issue to ask the ‘rollershutter’ author and have him either fix or add the feature ?

Done.

Please let me know if it works - both with new and old devices (well - I’m sure people will say if it doesn’t work anyway :wink:).

I don’t want to hack dirty solutions into OH2 - dirty hacks are hard to remove and are often joined by dirtier hacks to work around issues that should have been solved with a good design to start with.

Ultimately we need a good way to deal with the manufacturer specific classes. Currently this is the only one we have implemented, and maybe a more generic solution might be better. However, I do know that Fibaro have other interesting features in some of their devices that might be nice to hack one day, so we should have an elegant solution for incorporating them
 I have some ideas, but I won’t rush into it if it’s not needed yet


Well, not that many people trying this combo, I believe, so it’s up to us here in the thread to find out. Sorry it took me so long to try.

I’m afraid it doesn’t work. Now (cloudbees’ OH1 zwave addon jar as of yesterday) it does not work neither with old nor with new device.
Now the old device doesn’t know ‘FIBARO_FGRM_222’ command any more (“no such command class”), even after reinitializing the node from habmin (node.xml that got written see below. Same error now with the new device (and config that works with the 1.8.2 binding). Also tried command=FIBARO_FGRM_222_1. No error is logged with that one, but no lamella movement either. For both, old and new device.
old_fgrm-222.xml (6.4 KB)
new_fgrm-222.xml (6.4 KB)

You probably need to use MANUFACTURER_PROPRIETARY for the class - let me know if that works, and if not I’ll take a look.

no, then I get
2016-05-14 09:38:20.325 [WARN ] [.b.z.i.c.ZWaveConverterHandler] - NODE 113: No converter found for item = EG_Wohnen_Jalousie_links_Lamellen, ignoring command.

for both, old and new device. Also, command=FIBARO_FGRM_222 does not work any more on (non-reinitialized) old device.

Funny: I reverted to 1.8.2 but had accidentially kept the command=MANUFACTURER_PROPRIETARY,
and guess what? It works with the new actor. For the old HW revision actor, only FIBARO_FGRM_222 works.