-
Autor
Hallo Community,
in unserer Studenten-WG möchte ich die Nutzung des Geschirrspülers auf zweimal pro Tag begrenzen. Dafür nutze ich einen Shelly 1PM Mini Gen 3 und habe ein Skript geschrieben. Allerdings scheint etwas nicht zu funktionieren. Vielleicht können die Experten hier einmal einen Blick darauf werfen und mir helfen, es zu korrigieren.
Beschreibung:
- Der Shelly ist eingeschaltet.
- Ein Spülvorgang wird gezählt, wenn die Leistung 800 W überschreitet (Heizvorgang) und danach wieder auf 0 W fällt (Spülvorgang beendet).
- Nach zwei Spülvorgängen soll der Shelly automatisch ausgeschaltet werden.
- Um Mitternacht soll der Zähler zurückgesetzt werden und Shelly wieder
Code
let dailyUsage = 0;
let lastCheckDay = -1;
let usageActive = false;
// Schwellwerte
let thresholdOn = 800; // Ab dieser Leistung (W) läuft der Spülzyklus
let thresholdOff = 0; // Spülvorgang ist "beendet"
// Tageswechsel prüfen
function resetIfNewDay() {
let now = new Date();
let currentDay = now.getDate();
if (currentDay !== lastCheckDay) {
dailyUsage = 0;
lastCheckDay = currentDay;
print("Neuer Kalendertag: Zähler auf 0.");
}
}
// Beim Skriptstart einmal aufrufen
resetIfNewDay();
// das Gerät morgens eingeschaltet ist, sofern das Tageslimit nicht erreicht ist:
if (dailyUsage < 2) {
Shelly.call("Switch.Set", { id: 0, on: true });
}
// Status-Handler
Shelly.addStatusHandler(function (event) {
// Prüfe, ob es sich um meter:0 -> power handelt
if (event.component === "meter:0" && event.id === "power") {
let power = event.value;
// Prüfe Tageswechsel
resetIfNewDay();
// Wenn Limit erreicht, einfach abschalten
if (dailyUsage >= 2) {
print("Tageslimit erreicht. Schalte Shelly aus.");
Shelly.call("Switch.Set", { id: 0, on: false });
return;
}
// Spülvorgang: Start bei >800W
if (!usageActive && power >= thresholdOn) {
usageActive = true;
print("Spülvorgang gestartet (power=" + power + "W).");
}
// Spülvorgang: Ende bei =0W
else if (usageActive && power <= thresholdOff) {
usageActive = false;
dailyUsage++;
print("Spülvorgang beendet. Zähler=" + dailyUsage + "/2");
if (dailyUsage >= 2) {
print("Limit (2) erreicht. Schalte aus.");
Shelly.call("Switch.Set", { id: 0, on: false });
}
}
}
});
// Zusätzlicher Timer (optional) – stündlich Tageswechsel prüfen
Timer.set(3600*1000, true, function () {
resetIfNewDay();
});
Alles anzeigen
Vielen Dank für Eure Unterstützung!