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);
});

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert