Homematic Raffstore/blinds control

Hi,

I am struggling to find the correct things to control the Homematic BBL blinds in Openhab. I can now control up and down, however I cannot find a way to control the slates orientation if the blinds are closed (ie. to let some light through).
Has anyone a complete set of openhab items to control all aspects of the blinds?

Daniel

edit: these are my current items:

Number EG_WZ_Raffstore_1_SS "Wohnzimmer Fenster Signalstärke [%d]" <qualityofservice> (g_EG_WZ_Roll, gSignalstaerke,gTest) {channel="homematic:HmIP-BBL:::0#SIGNAL_STRENGTH"}
Dimmer EG_WZ_Raffstore_1 "Raffstore Terassentüre" <rollershutter>  (g_EG_WZ_Roll, gRaffstore,gTest) {channel="homematic:HmIP-BBL:::4#LEVEL"}
String EG_WZ_Raffstore_1_Status "Status" (g_EG_WZ_Roll,gTest) {channel="homematic:HmIP-BBL:::4#LEVEL_STATUS"}

String EG_WZ_Raffstore_1_Activity "Status2" (g_EG_WZ_Roll,gTest) {channel="homematic:HmIP-BBL:::4#ACTIVITY_STATE"}
String EG_WZ_Raffstore_1_Sections "Status3" (g_EG_WZ_Roll,gTest) {channel="homematic:HmIP-BBL:::4#SECTION_STATUS"}

I don’t use rollershutters but you may find some helpful info by reading thru issues on Github.

Be sure to check the closed issues as well. :wink:

Hi Daniel,

that’s a common problem, but the thread Rollershutter with Homematic IP (HmIP) HmIPW-DRBL4 (german and external version from the same user here) gives you a workaround.
I’m very glad that @shuo figured that out for us. :hugs:

tl;dr: If you want to change the blades angle (just the angle, not the height), it will be triggered only if you send a 2nd command for changing the shutter height straight behind, even if the shutter height shall stay the same. Sounds weird, but that’s how it works. :nerd_face:

I dit it like this with my items:

Rollershutter   Wintergarten_Jalousie_Tuer_Level2  		<rollershutter>		(gLamellen)		["Rollershutter"] {channel="homematic:HmIP-BBL:<your individual value here>:4#LEVEL_2"}
Switch          Wintergarten_Jalousie_Tuer_Stop		    {channel="homematic:HmIP-BBL:<your individual value here>:4#STOP"}

Here are the 2 commands I’m speaking about taken from my rules, one after another:

                Wintergarten_Jalousie_Tuer_Level2.sendCommand(50)
                Wintergarten_Jalousie_Tuer_Stop.sendCommand(ON)

As you can see, I’m using a STOP command for my BBLs and not the 101% value as suggested in the link above, but there is no special reason I did it like this. Just do what fits you best.

The value 50 is just an example and will turn your blades horizontally.

For my complete rule you may want to take a look at Control HmIP rollershutter slates / blinds using groups in rules.

Hi Linus, et all.

Even I have the background knowledge, I am still failing to control the blades fully.

Any chance to programm a rule together?

Target: To control the hight of the Shutter seperately from the position of the blades.

Channels 1,2 - 5,6 - 9,10 - 13,14 belongs together.
paramter “level” is for the hight and “level_2” is for the blades itself.

I figured out of homeatic- webinterface that both are generally depended. By using an example script, I saw, that you can “ignore” either the hight or the balde position from each other. This seems to be the magic number 101%

What I did (after creating items etc), a rule, which is exaclty doing these commands step by step for chaging the hight 100%:

                Jalousie_.Level2.sendCommand(101)
                Jalousie_.Level.sendCommand(100)
                Jalousie_Stop.sendCommand(ON)

respectively 0% hight:

                Jalousie_.Level2.sendCommand(101)
                Jalousie_.Level.sendCommand(0)
                Jalousie_Stop.sendCommand(ON)

This works well.

The same I did for the blades (100%)

                Jalousie_.Level.sendCommand(101)
                Jalousie_.Level2.sendCommand(100)
                Jalousie_Stop.sendCommand(ON)

respectively 0%:

                Jalousie_.Level.sendCommand(101)
                Jalousie_.Level2.sendCommand(0)
                Jalousie_Stop.sendCommand(ON)

Unfortunately this is not working and the hight of the shutter is always moving.

Does this works in your environment?

I am getting really very frustrated…

Hi shuo

first of, pls keep in mind that I’m a bloody beginner. I only dare to paste my code since most of it has already been reviewed in other threads… or been taken from others. Especially the code for the items at the end of this post isn’t that accurate.

I’m not absolutely sure if I get you right, but I think that my setup already fulfills what you are aiming for. I can control:
a) the height of the shutters (the angle of the blades will stay as set last)
b) the angle of the blades (the height will stay as set last)

For the shutter height I’m using the following 2 rules, which basically add that Proxy function (see Control HmIP rollershutter slats / blades using groups in rules or Homematic Binding rollershutter inverted level) to assign e.g. DOWN to 0.:

    rule "Control Wintergarten_Jalousie_links_Proxy"
    when
       Item Wintergarten_Jalousie_links_Proxy received command
    then
    	logInfo( "rollershutter.rules", "Rule 'Control Wintergarten_Jalousie_links_Proxy' triggered" )
    	
    	switch(receivedCommand.toString) {
            case "UP": {
    			
                Wintergarten_Jalousie_links_Level.sendCommand(99)
            }
    		case "DOWN": {
    			
                Wintergarten_Jalousie_links_Level.sendCommand(0)
            }
    		case "STOP": {
    			
                Wintergarten_Jalousie_links_Stop.sendCommand(ON)
            }
        }
    end

    rule "Update Wintergarten_Jalousie_links_Proxy"
    when
    	Item Wintergarten_Jalousie_links_Level changed
    then
    	logInfo( "rollershutter.rules", "Rule 'Update Wintergarten_Jalousie_links_Proxy' triggered" )
    	Wintergarten_Jalousie_links_Proxy.postUpdate(100-(Wintergarten_Jalousie_links_Level.state as Number))  
    end

To change the slades angle I’m using this rule as mentioned in Control HmIP rollershutter slats / blades using groups in rules :

    rule "Control slat positions"

    when 
        Item Lamellen changed												// better use "received command" or "changed" than "received update"
    then
        if(tSlats !== null) return;											// timer already scheduled, so stop rule
        if(!(Lamellen.state instanceof Number)) return;						// illegal state, so stop rule

        nLevel = Lamellen.state as Number									// save position
        if(nLevel == 100) nLevel = 99
        iStep = 0

        tSlats = createTimer(now.plusMillis(10)) [							// parameter is integer! 
            iStep ++														// short for "iStep = iStep + 1"
            switch iStep {
                case 1: {
                    Wintergarten_Jalousie_Tuer_Level2.sendCommand(nLevel)
                    Wintergarten_Jalousie_Tuer_Stop.sendCommand(ON)
                    tSlats.reschedule(now.plusMillis(3500))					// reschedule next step
                }
                case 2: {
                    Wintergarten_Jalousie_links_Level2.sendCommand(nLevel)
                    Wintergarten_Jalousie_links_Stop.sendCommand(ON)
                    tSlats.reschedule(now.plusMillis(3500))					// reschedule next step
                }
                default: {
                    Wintergarten_Jalousie_rechts_Level2.sendCommand(nLevel)
                    Wintergarten_Jalousie_rechts_Stop.sendCommand(ON)
                    tSlats = null											// delete pointer to timer
                }
            }
        ]
    end

These are my items:

Group:Rollershutter gJalousien	

//Jalousieaktor 	Wintergarten Tür												
Rollershutter   	Wintergarten_Jalousie_Tuer_Proxy											<rollershutter>		(gJalousien)				["Rollershutter"]	
Rollershutter   	Wintergarten_Jalousie_Tuer_Level																													{channel="homematic:HmIP-BBL:<your individual value>:4#LEVEL"}
Rollershutter   	Wintergarten_Jalousie_Tuer_Level2  											<rollershutter>		(gLamellen)					["Rollershutter"] 		{channel="homematic:HmIP-BBL:<your individual value>:4#LEVEL_2"}
Switch          	Wintergarten_Jalousie_Tuer_Stop											    																		{channel="homematic:HmIP-BBL:<your individual value>:4#STOP"}
																																															
//Jalousieaktor 	Wintergarten links												                                                                                                        
Rollershutter  		Wintergarten_Jalousie_links_Proxy											<rollershutter>		(gJalousien)				["Rollershutter"]	                        
Rollershutter  		Wintergarten_Jalousie_links_Leve																													{channel="homematic:HmIP-BBL:<your individual value>:4#LEVEL"}
Rollershutter  		Wintergarten_Jalousie_links_Level2 											<rollershutter>		(gLamellen)					["Rollershutter"] 		{channel="homematic:HmIP-BBL:<your individual value>:4#LEVEL_2"}
Switch          	Wintergarten_Jalousie_links_Stop										    																		{channel="homematic:HmIP-BBL:<your individual value>:4#STOP"}
																																															
//Jalousieaktor 	Wintergarten rechts												                                                                                                        
Rollershutter   	Wintergarten_Jalousie_rechts_Proxy											<rollershutter>		(gJalousien)				["Rollershutter"]	                        
Rollershutter   	Wintergarten_Jalousie_rechts_Level  																												{channel="homematic:HmIP-BBL:<your individual value>:4#LEVEL"}
Rollershutter   	Wintergarten_Jalousie_rechts_Level2											<rollershutter>		(gLamellen)					["Rollershutter"] 		{channel="homematic:HmIP-BBL:<your individual value>:4#LEVEL_2"}
Switch          	Wintergarten_Jalousie_rechts_Stop										    																		{channel="homematic:HmIP-BBL:<your individual value>:4#STOP"}

Rollershutter   	Lamellen  																	<rollershutter>		(gLamellen)					["Rollershutter"]

Hi Linus.

Thanks for your reply. I have some questions.

Why do you nee this rule?

Update Wintergarten_Jalousie_links_Proxy

I dont get, why you need this:

    	Wintergarten_Jalousie_links_Proxy.postUpdate(100-(Wintergarten_Jalousie_links_Level.state as Number))  

Regarding your second rule of the blades (lamellen). I didnt get why you used a timer? And what does “case 1” or “case 2” means?

Thanks for your support…

After couple of trials its clear now.

One question: Does your shutter moves the hight a bit after chaning the blade position? Since its moving to the initial position back, I am fine. Just want to make sure thats its usual?

Does your shutter moves the hight a bit after chaning the blade position?

Yes, I can confirm that behavior.

Could you do me one more favor and check following behavior?
If you shutter is closed and you are setting the blades to e.g. 50% what does the hight do in your case?
In my case its moving completely to open position.

It’s different here. If the shutter is closed and I’m setting the blades to 50%, the blades turn horizontally and the height stays. It behaves as expected.

What I haven’t done yet is creating a separate blade control for each shutter. At the moment the blades of my 3 shutters are turning their angle together (as a group).
But maybe the according line from my sitemap is useful for you:

			Switch 			item=		Lamellen 											label="Lamellen"				mappings=[0="0%", 25="25%",50="50%", 75="75%", 100="100%"]

Btw, did you implement voice control for your shutters yet? If so, exchange of experience would be much appreciated. =)

Thanks Linus.
I did realize it with the mappings as you suggested. The issue is, that every value below 50 the shutter is first moving down , changing the blade position and than moving back to the initial position. The values above 50% the shutter is moving first up, changing the position of the blades and then move to intial position.

If the position of the shutter is closed and you want to set the blade position to 25%, the shutter wants to move down first. Since it cannot be, its moving up…Strange behaviour. I think I have to think about a workaround…

I am using shutters with Alexa (currently not my Jalousie). I will do this in the next step.

Linus, can you please double check one strange behaviour? Even I am setting Level Parameter to 0, the shutter is moving to 0 position and then moves after 2-3 sec to 2%.

Do you have the same phenomena?

Same behavior here except that moving back doesn’t 2-3 seconds. Moving back happens almost instant here.
Still, that sucks. Especially because the control via openhab (Smartphone App or Web GUI) acts different, than pushing the switch on the wall.

I am using shutters with Alexa (currently not my Jalousie).

Would you mind sharing your configuration (rules, items, relevant part of the sitemap)?

Hi Linus,
indeed, it sucks. Since I can control the shutter to 0 in the Webinterface of CCU I will try following:
Writing a script in CCU and linking to a virtual channel. This virtual channel I am going to control via openHab. Hope this workaround will fix this issue.
I guess its related to the prvious blade position, but I am not sure since I was not able to find any reason.

Integrating any Item to Alexa is quite easy.

  1. Install OpenHab Skill in Alexa (prerequisite is to use cloud connector binding)
  2. You have to add following phrases in your item:

[“Lighting”]
[“Switchable”]
[“Thermostat”]

e.g:

Rollershutter Markise 				"Markise [%d%%]"   							<rollershutter>  	  ["Switchable"]  { channel="homematic:xx-xx-xx:xx:xx:1#LEVEL" } 

  1. Search for new devices in your Alexa app.

Thats it…

Hi,

is it possible that the slate control does not work with Openhab 3.1?

Daniel

Hi,
I searched a whole morning and tried everything to control via openhab 3.0 binding a homematic DRBL4 - Jalousie (height, slates). What is working to move it to a specific position and control the slates but sometimes it doesn´t work ether (Level2/STOP commands…). Also moving up to the very top is resulting in 98% and not 100% (moving after 2-3 seconds downwards like mentioned from someone in the thread.
I just wanted to share my solution where this doesn´t happen and the height and slate control is possible.

As the binding is not able to control 100% for whatever reason and where the problem lies I moved the logic for controlling the jalousie to homematic controlled by variable which can be set through Gateway-Extras in the OH3 Homematic binding. The interpretation of the variable is been done through a program (for sure a script can probably interpret a dimmer item to have smooth positions but thats not my use-case.

Prerequisite

  • Correct timings for the jalousie (how long does it take to move from top to bottom set under settings for the device and jalousie!) This includes the timing for changing the slate position. Be careful with the slate timing as this will extend the moving time of the jalousie and will result probably not exactly on the expected position (set mine to 2 secs).

Homematic Setup

  1. Create Systemvariable
  2. Set Variabletype to Number
  3. Create a new programm that reacts on changes of the systemvariable

    In the screenshot just 2 rules can be seen but you can append as many as you want. Important is that you first set the slates and then the height. These are my settings for 0/25/50/75/100 (x - y/z) (number for systemvariable - Slateposition/Height). 26/51/76 are in the same height but slates in the mid to get some sun :slight_smile:

// =0 - 101/0
// =25 - 0/25
// =26 - 46/25
// =50 - 0/50
// =51 - 46/50
// =75 - 0/75
// =76 - 46/75
// =100 - 101/100

OH3 Setup
4. After setup the systemvariable and the programm you can see those both in OH3 under Gateway-Extras in the Homematic Binding. If not visible just remove the Gateway-Extras thing and re-add it - it will discover the new items (known problem)


5. Link the Channel to an item (no mappings or values included for this - just an example)

Number Jalousie_Right
“Jalousie Rechts”

(gLivingRoomBlinds)
[“Rollershutter”]
{channel=“homematic:GATEWAY-EXTRAS-xxx:yyy:GWE00000000:1#JalousieR”}

  1. Test it with the API editor and you are done
  2. State Updates can be received from the other channels like usual or interpreted by the value you post through the item.

Problems I ran into:

  • Remember that for the program in homematic not the inverted values from OH3 are been used
  • When a newly created variable is not writeable by OH3 just remove it and create a new one
  • When a newly created variable is not visible in the Gateway-Extras just remove the thing and re-add it in OH3
  • Like written it is for sure possible to have this in a more smoother way realized by a script but in my case I don´t need more like the above
  • Maybe I also need to set the value of the systemvariable after interpretation by the program to a number which is not been used. This is needed when the jalousie is triggered by something else and be re-setting the same value will result probably in no action of the program (need to be tested)

Hope this helps you guys