Hallo zusammen Bei meinem Shelly 2 PM Gen3 überwacht
- Switch 2 den Stromverbrauch der Heizung
- Switch 1 kann den Brenner anschalten
Ich möchte nun, dass wenn die Heizung über 200Watt zieht (der Brenner läuft), der Swich 1 eingeschaltet wird für 15 Minuten. Die Einschaltzeit kann ich ja über den Timer steuern, aber ich habe Probleme ein Script zu schreiben, dass bei 200 Watt den 1. Switch einschaltet.
Wie man den Switch einschaltet habe ich rausgefunden, aber noch nicht, wie man apower ausliest, überprüft und dann den Befel auslöst.
=> Shelly.call("Switch.Set", {id:0, on:"ein"==="ein"});
Code
var config= {
powerLimit: 200, //Limit in Watt, power needs tp be > Limit for sending a Call
powerTime: 10, //Time in seconds, how long the power needs to be over the powerLimit, before sending a call
}
var tHandle=0, called=false; //global Variables
function DoCall(){ //Do Webhook
try{
called= true;
tHandle= 0; //Reset Timer Handle
print("TEST : mumpfy mumpfy");
}catch(e){ErrorMsg(e,'DoCall()');}
}
function CheckPower(d){
let r= Efilter(d,{device:['switch:1'], filterKey:['apower','id','component']},1); //Filter event data
if(debug) print(Str(r));
if(!r || !Str(r.apower)) { //Exit if usless data
if(debug) print ('Useless Data') return;
}
if(r.apower >= config.powerLimit && !tHandle && !called){ //Check if over Powerlimit
if(debug) print('Timer armed');
tHandle= Timer.set(1000*config.powerTime,false,function() {DoCall()});
}
if(r.apower < config.powerLimit){ //Check if under Powerlimit
if(debug) print('Timer cleared');
Timer.clear(tHandle); //Reset Timer
tHandle= 0;
called= false; //Reset Called Flag
}
if(debug) print('Debug: found Event ',r,' Timer active:',tHandle>0,' Called:',called === true); //Debug output
}
function Main(){ //Main Code
Shelly.addEventHandler(CheckPower); //Add EventHandler with Asyn CallBack
}
Alles anzeigen