Blog

  • Tastdimmer Shelly->Zigbee mit ioBroker

    
    
    on({id: 'shelly.0.shellyplus2pm#labor#1.Input0.Status'/*Eingangsstatus*/, change: 'gt'}, async function(obj) {
        function Sleep(milliseconds) {
            return new Promise(resolve => setTimeout(resolve, milliseconds));
        }
        //entprellen
        await Sleep(30);
        //nur weitermachen wenn das Event "btn_down" ist
        if(getState('shelly.0.shellyplus2pm#labor#1.Input0.Status'/*Input Status*/).val != 1){ 
            log("Event war ungleich btn_down");    
            return; 
        }
        log("reagiere auf btn_down");
        var shortdelay = 500; // max Dauer kurzer Tastendruck
        var i = 0;
        var state = "";
        var stateBrightness = "";
        for(i=0;i<(shortdelay/10);i++){
            //log("For: " + i);
            state = getState('shelly.0.shellyplus2pm#labor#1.Input0.Status'/*Input Status*/).val;
            //log(state);
            if(getState('shelly.0.shellyplus2pm#labor#1.Input0.Status'/*Input Status*/).val == 0){
                // Ein oder ausschalten
                log("schalte");
                if(getState('zigbee.0.38398ffffe958faa.brightness'/*Brightness*/).val == 0){
                    log("einschalten");
                    setState('zigbee.0.38398ffffe958faa.brightness'/*Brightness*/, getState('0_userdata.0.labor_lastbrightness').val);
                }else{
                    log("ausschalten");
                    setState('zigbee.0.38398ffffe958faa.brightness'/*Brightness*/,0);
                }
                return;
            }
            await Sleep(10);
        }
        // etwas warten
        await Sleep(200);
    
        var direction = getState('0_userdata.0.labor_dimmrichtung'/*labor dimmrichtung*/).val;
        var brightness = getState('zigbee.0.38398ffffe958faa.brightness'/*Brightness*/).val;
        while(getState('shelly.0.shellyplus2pm#labor#1.Input0.Status'/*Input Status*/).val == 1){
            if(brightness + 4 <= 100 && direction == "up"){
                brightness = brightness + 4;
                setState('zigbee.0.38398ffffe958faa.brightness'/*Brightness*/, brightness);
                if(brightness >= 100){ direction = "down"; }
            }
            if(brightness - 4 >= 1 && direction == "down"){
                brightness = brightness - 4;
                setState('zigbee.0.38398ffffe958faa.brightness'/*Brightness*/, brightness);
                
            }
            if(brightness <= 4){ direction = "up"; }
            await Sleep(100);
        }
        setState('0_userdata.0.labor_dimmrichtung', direction);
        setState('0_userdata.0.labor_lastbrightness', brightness);
    });
    
    on({id: 'shelly.0.shellyplus2pm#labor#1.Input1.Status'/*Eingangsstatus*/, change: 'gt'}, async function(obj) {
        function Sleep(milliseconds) {
            return new Promise(resolve => setTimeout(resolve, milliseconds));
        }
        //entprellen
        await Sleep(30);
        //nur weitermachen wenn das Event "btn_down" ist
        if(getState('shelly.0.shellyplus2pm#labor#1.Input1.Status'/*Input Status*/).val != 1){ 
            log("Event war ungleich btn_down");    
            return; 
        }
        log("reagiere auf Farb btn_down");
        var shortdelay = 500; // max Dauer kurzer Tastendruck
        var i = 0;
        var state = "";
        var stateBrightness = "";
    
        // etwas warten
        await Sleep(200);
    
        var cdirection = getState('0_userdata.0.labor_farbrichtung'/*labor dimmrichtung*/).val;
        var color = getState('zigbee.0.38398ffffe958faa.colortemp'/*Brightness*/).val;
        while(getState('shelly.0.shellyplus2pm#labor#1.Input1.Status'/*Input Status*/).val == 1){
            log('CLoop');
            if(color + 5 <= 495 && cdirection == "up"){
                color = color +5;
                log(color);
                setState('zigbee.0.38398ffffe958faa.colortemp'/*Brightness*/, color);
                if(color >= 500){ cdirection = "down"; }
            }
            if(color - 5 >= 0 && cdirection == "down"){
                color = color - 5;
                log(color);
                setState('zigbee.0.38398ffffe958faa.colortemp'/*Brightness*/, color);
                if(color <= 6){ cdirection = "up"; }
            }
            await Sleep(100);
        }
        setState('0_userdata.0.labor_farbrichtung', cdirection);
        setState('0_userdata.0.labor_lastcolor', color);
    });