Mein Ziel war es, ein Script für meinen Shelly Plus 2PM zu erstellen, das den Energieverbrauch eines angeschlossenen Geräts überwacht. Ich wollte eine Funktion implementieren, die sich merkt, wenn der Verbrauch des Geräts einmal über 10 Watt steigt und es dann automatisch ausschaltet, sobald der Verbrauch unter 8 Watt fällt. Dies soll dazu beitragen, Energie zu sparen und den Betrieb meiner Geräte zu optimieren.
Ich habe dazu ein Shelly-Script entwickelt, welches den Zustand des Outputs fortlaufend überwacht. Mit dem Befehl Shelly.getComponentStatus
erfasse ich den aktuellen Leistungswert des Outputs. Ich benutze eine Variable, um zu verfolgen, ob die Leistung die 10-Watt-Grenze überschritten hat. Sobald der Verbrauch dann unter 8 Watt sinkt, sorgt mein Script dafür, dass der Output ausgeschaltet wird. Anschließend wird die Zustandsvariable zurückgesetzt, damit der Überwachungsprozess von neuem beginnen kann. Dies wird durch ein Event-Handling-System umgesetzt, das auf Änderungen in der Leistung reagiert, anstelle einer ständigen Überprüfung in einer Endlosschleife, was die Effizienz und Reaktionsfähigkeit meines Systems wesentlich verbessert.
Als nächstes möchte ich noch eine kleine Verzögerung einbauen, damit der Switch nicht sofort geschaltet wird. Hier der Code Stand heute:
let hasPowerExceeded10W = false;
function checkPowerAndSwitch() {
// Den aktuellen Zustand für Output 1 einlesen
let switchStatus = Shelly.getComponentStatus("switch:1");
// Prüfen, ob der Output eingeschaltet ist
if (switchStatus.output) {
// Den aktuellen Leistungswert für Output 1 einlesen
let power = switchStatus.apower;
// Prüfen, ob die Leistung 10W überschritten hat
if (power > 10) {
hasPowerExceeded10W = true;
}
// Wenn die Leistung einmal 10W überschritten hat und der Output an ist,
// prüfen, ob die Leistung unter 8W gefallen ist
if (hasPowerExceeded10W && power < 8) {
// Den Switch ausschalten
Shelly.call("switch.set", { id: 1, on: false });
// Die Bedingung zurücksetzen, damit das Verhalten wiederholt werden kann
hasPowerExceeded10W = false;
}
}
}
Shelly.addEventHandler(function (event) {
// Prüfen, ob es sich um ein Leistungs-Update-Event für switch:1 handelt
if (event.info.component === "switch:1" && event.info.event === "power_update") {
// Funktion aufrufen, um die Leistung zu überprüfen und ggf. den Switch zu schalten
checkPowerAndSwitch();
}
});
Alles anzeigen
Ich hoffe, das hilft jemand.
Eine Frage habe ich auch noch: Ich kann eigentlich ein wenig Programmieren, aber ich komme mit der Dokumentation auf der Shelly-Seite nicht klar. Gibt es eine Dokumentation mit vernünftigen Beispielen? Danke vorab!