Kontext:
Mein SMA Sunny Home Manager steuert verschiedene Geräte über Shellys. Diese sollen möglichst viel mit SolarStrom laufen. In gewissen Fällen muss dies jedoch einfach übersteuert werden können (z.B. Trockner trotzdem einschalten, weil die Raumfeuchte einen Schwellwert übersteigt oder per Knopfdruck trotzdem den Geschirrspüler starten). Über den Sunny Manager lässt sich so etwas nicht realisieren. Wenn ich nun per Shelly App oder über den Taster Eingang den Shelly übersteuere, so wird dies durch den Home Manager erkannt und er sendet unmittelbar einen Event info":{"component":"switch:0","id":0,"event":"toggle","state":false} und schaltet gleich wieder aus.
Lösungsansatz:
Ich schalte den Shelly per Knopfdruck oder Szene ein und überwache dann mit einer Funktion den Stromverbrauch, prüfe ob das Gerät gerade läuft (die Variable active wird gesetzt) und lasse nicht zu, dass ausgeschaltet wird, bis das Gerät wieder aus ist. Der Eventhandler sieht so aus:
Shelly.addEventHandler(
function (event, user_data) {
if (typeof event.info.event !== 'undefined') {
if (event.info.id === 0 && event.info.event === 'toggle' && event.info.state === false) {
if (active === false) {
Shelly.call("Switch.set", {'id': 0, 'on': false});
print('remote switch off after finished');
}
else {
Shelly.call("Switch.set", {'id': 0, 'on': true});
print('cannot remote switch off, appliance still running');
}
}
}
}
);
Alles anzeigen
Frage:
Wie kann ich verhindern, dass der Event parallel trotzdem ausgeführt wird. Ansonsten schaltet der Event das Relais aus und ich schalte es mit dem Eventhandler gleich wieder ein, was unschön ist. Kann der Event irgendwie gedroppt werden oder kann der event.info.state auf true umgeschrieben werden?