Rollershutter Bindings - wuellueb/openhab GitHub Wiki

Rollershutter Groups

An example how to group rollershutters:

Items

Group gRollladen "Rollladen" <rollershutter>
Group gRollladenEG "EG" <rollershutter> (gRollladen, gEG)

Group:Rollershutter:OR(UP, DOWN, STOP) gShutterEGWohnen "Rollladen Wohnraum [(%d)]" <rollershutter> (gEG)
Group:Rollershutter:OR(UP, DOWN, STOP) gShutterEGKueche "Rollladen Küche    [(%d)]" <rollershutter> (gEG)

Rollershutter	ZwaveShutterEGTV	        "Rollladen TV"	        <rollershutter>	(gRollladenEG)		{ zwave="6:invert_state=true" }
Rollershutter	ZwaveShutterEGEingang	    "Rollladen Eingang"	    <rollershutter>	(gRollladenEG)		{ zwave="7:invert_state=true" }
Rollershutter	ZwaveShutterEGKuecheLinks	"Rollladen Küche <"    <rollershutter>	(gRollladenEG, gShutterEGKueche)		{ zwave="10:invert_state=true" }
Rollershutter	ZwaveShutterEGKuecheRechts	"Rollladen Küche >"   <rollershutter>	(gRollladenEG, gShutterEGKueche)		{ zwave="8:invert_state=true" }
Rollershutter	ZwaveShutterEGWohnenLinks	"Rollladen Wohnraum >"	<rollershutter>	(gRollladenEG, gShutterEGWohnen)		{ zwave="11:invert_state=true" }
Rollershutter	ZwaveShutterEGWohnenRechts	"Rollladen Wohnraum <"	<rollershutter>	(gRollladenEG, gShutterEGWohnen)		{ zwave="9:invert_state=true" }

Sitemap

Text item=gRollladenEG label="Rollläden EG [(%d)]" {
    Switch item=gRollladenEG label="Rollläden EG [(%d)]" mappings=[UP="Hoch", STOP="X", DOWN="Runter"]
    Frame {
        Switch item=gShutterEGKueche label="Rollläden Küche  [(%d)]" mappings=[UP="Hoch", STOP="X", DOWN="Runter"]
        Switch item=gShutterEGWohnen label="Rollläden Wohnen [(%d)]" mappings=[UP="Hoch", STOP="X", DOWN="Runter"]
    }
    Group item=gRollladenEG
}

#Example for binding shutter using HTTP GET commands#

If you have following scenario:

Shutters are controllable via HTTP GET URL. shutterUpActionUrl completely opens shutter, shutterDownActionUrl closes them. Both commands can be cancelled by shutterStopActionUrl. Time in ms to completely move shutter up/down: SHUTTER_FULL_UP_TIME/SHUTTER_FULL_DOWN_TIME

Use following snippets:

###Items####

Rollershutter shutter "Shutter  [%d %%]"  <rollershutter>

###Sitemap###

Frame label="Shutter" {
Switch item=shutter
}

###Rules###

//variables to store current state of shutter
var Number shutterOldState = 50
var Number shutterLastUp = 0
var Number shutterLastDown = 0

//URL to be called as HTPP GET. Up and Down start moving shutting either until completely moved or until Stop called.
var String shutterDownActionUrl = "http://localhost:90/?shutter=down"
var String shutterUpActionUrl = "http://localhost:90/?shutter=up"
var String shutterStopActionUrl = "http://localhost:90/?shutter=halt"

//time in ms needed to completely open and close shutter, respectively
var Number SHUTTER_FULL_UP_TIME = 20000
var Number SHUTTER_FULL_DOWN_TIME = 20000
                
rule "Shutter Save Old State Rule"
when
    Item shutter changed	
then
    shutterOldState = previousState
end

rule "Shutter Control Rule"
when
    Item shutter received command 
then
    if(receivedCommand != null){
        var Number upTime = now.millis - shutterLastUp
        var Number downTime = now.millis - shutterLastDown
        switch(receivedCommand.toString.upperCase) {
            case "STOP" :{ 
                var Number newState = -1
                if(upTime < downTime && upTime < SHUTTER_FULL_UP_TIME) {
                    //last action was up and still going UP.
                    //0% is open!				
                    var Number percentMoved =  ((upTime) * 100 / SHUTTER_FULL_UP_TIME).intValue 
                    newState = shutterOldState - percentMoved
                    println("shutterOldState: " + shutterOldState + " UP: " + percentMoved + "% in " + upTime/1000 + "sec. Now: " + newState+ "%" )
                } else if(upTime > downTime && downTime < SHUTTER_FULL_DOWN_TIME) {
                    //last action was down and still going DOWN.
                    //100% is closed!
                    var Number percentMoved = ((downTime) * 100 / SHUTTER_FULL_DOWN_TIME).intValue
                    newState = shutterOldState + percentMoved
                    println("shutterOldState: " + shutterOldState + "% DOWN: " + percentMoved + "% in " + downTime/1000 + "sec. Now: " + newState+ "%" )
                }
                if(newState > 0 && newState < 100) {
                    postUpdate(shutter, newState)
                    if(shutterStopActionUrl != null){
                        sendHttpGetRequest(shutterStopActionUrl)
                    }
                }
            }			
            case "UP" : {
                if(upTime < SHUTTER_FULL_UP_TIME) {
                    //still going up. ignore.
                } else {
                    shutterLastUp = now.millis
                    if(shutterUpActionUrl != null){
                        sendHttpGetRequest(shutterUpActionUrl)
                    }
                }
            }
            case "DOWN":{
                if(downTime < SHUTTER_FULL_DOWN_TIME) {
                    //still going up. ignore.
                } else {
                    shutterLastDown = now.millis
                    if(shutterDownActionUrl != null){
                        sendHttpGetRequest(shutterDownActionUrl)
                    }
                }
            }
        }
    }
end