Velbus binding for OpenHAB

Got it working (in OH3)… the full code:

var ButtonLong=false
var ButtonDown=false    

rule "Test short press"
when
    Channel 'velbus:vmbgpod-2:7f964e441a:02:input#CH1' triggered PRESSED
then
    ButtonLong=false
    var IKEA_state = IKEA_Color.state()
    logInfo("IKEA","IKEA detected on with luminosity " + IKEA_state.toString)
end

rule "Test long press"
when
    Channel 'velbus:vmbgpod-2:7f964e441a:02:input#CH1' triggered LONG_PRESSED
then
    logInfo("TEST", "Test fired! LONG_PRESSED")
        ButtonLong=true
        ButtonDown=true 
    if (IKEA_Color.state.toString != "0,0,0") { 
        var HSBType hsbValue = IKEA_Color.state as HSBType
        logInfo("IKEA", "IKEA_Color=" + hsbValue)
        var DecimalType hue = new DecimalType(hsbValue.hue.intValue % 360 + 10) // 0-360; 0=red, 120=green, 240=blue, 360=red(again)
        var PercentType sat = new PercentType(hsbValue.saturation.intValue) // 0-100
        var bright = (IKEA_Color.state as HSBType).brightness.intValue // 0-100
        logInfo("IKEA", "IKEA_Color_HUE=" + hue)
        logInfo("IKEA", "IKEA_Color_SATURATION=" + sat)
        logInfo("IKEA", "IKEA_Color_BRIGHNTESS=" + bright
        if (bright <30) {
            logInfo("IKEA", "IKEA_Color_BRIGHNTESS DIM UP")
            while(bright < 100 && ButtonDown == true) {
                bright = bright + 10
                if (bright >100) {bright=100}
                logInfo("IKEA", "IKEA_Color_BRIGHNTESS=" + bright)                
                var newStatus = hue+","+sat+","+bright 
                IKEA_Color.sendCommand(newStatus)
                Thread::sleep(500) //.5 seconds
            }
    }
    if (bright >30 ) {
         logInfo("IKEA", "IKEA_Color_BRIGHNTESS DIM DOWN")
        while(bright <= 100 && bright > 1 && ButtonDown == true) {
            bright = bright - 10
            if (bright <1) {bright=10}
                logInfo("IKEA", "IKEA_Color_BRIGHNTESS=" + bright)
                var newStatus = hue+","+sat+","+bright 
                IKEA_Color.sendCommand(newStatus)
                Thread::sleep(500) //  .5 seconds
                logInfo("IKEA", "IKEA_Color_BRIGHNTESS DIM DOWN NEXT")
            }
        }
    }
end

rule "Test release"
when
    Channel 'velbus:vmbgpod-2:7f964e441a:02:input#CH1' triggered RELEASED
then
    ButtonDown = false
    if (ButtonLong==false){
        logInfo("IKEA", "Test fired! PRESSED")
        if (IKEA_Color.state.toString == "0,0,0") { 
            IKEA_Color.sendCommand("ON")
    }
    else{
        IKEA_Color.sendCommand("OFF")
    }
}
    ButtonLong=false
end
1 Like