SiloBau
Neue Skriptversion - die Beschreibung des Verhaltens wie in #39.
Zusätzlich wird der Eingang mit dem Schaltensperren auch gesperrt und mit dem Schaltenfreigeben auch freigegeben. Du kannst diesen Zusatz mit
auch deaktivieren - Zeile 6 im Skript.
Vorteil:
Damit wird die Wirkung des Eingangssignals während der Einschaltsperrphase ebenfalls verhindert und danach wieder aktiviert. Damit kannst du auch das Eingangssignal mit einem "sichtbaren" Shelly schalten, wodurch der "unsichtbare" und schaltende Shelly wirkungsmächtig während der Sperrphase am Schalten gehindert wird - dann gibt es auch kein sehr kurzes Einschalten während der Sperrphase.
Nachteil:
Mit jedem Einschalten wird etwas in den nichtflüchtigen Speicher geschrieben, welcher bekanntermaßen deutlich weniger Schreibzugriffe verträgt als flüchtiger Speicher (RAM). Vermutlich wird der Shelly trotzdem lange genug leben bzw. nicht aus diesem Grund sterben (Elkos dürften problematischer sein, allerdings austauschbar).
Was du bevorzugst, musst du selbst entscheiden. Je häufiger eingeschaltet wird, desto schneller altert der nichtflüchtige Speicher.
Das Skript
// von eiche für SiloBau, 2025-05-19_01
let
OnDur = 5000, //ON duration, Einschaltdauer in ms
DisDur = 120000, // DISABLE duration, Sperrdauer in ms
InpCfg = true, // Soll der Eingang temporär gesperrt werden?
// Ab hier nicht ändern!
En = true;
function switchEn(id, en) {
En = en;
if(InpCfg) Shelly.call("input.setconfig", {id:id, config:{enable:en}});
}
function switchOff(dis) {
Shelly.call("switch.set", {id:0, on:false}, function() {
print("ausgeschaltet");
if(dis) {
switchEn(0, false); // Eingang sperren
print("gesperrt");
Timer.set(DisDur, false, function() {
switchEn(0, true); // Eingang freigeben
print("freigegeben");
});
}
}, dis);
}
function check(ev) {
if(ev.component!=="switch:0" || ev.info===undefined) return;
let i = ev.info;
if(i.state===undefined) return;
if(i.state) {
if(En) {
Timer.set(OnDur, false, switchOff, true);
print("regulär eingeschaltet");
} else {
switchOff(false);
print("irregulär");
}
}
}
Shelly.addEventHandler(check);
Alles anzeigen
Soeben fällt mir eine noch bessere Variante ein, welche ich nachreichen will und die nicht in den nichtflüchtigen Speicher schreibt.
Dazu wird der Eingang von der direkten Wirkung auf den Ausgang entkoppelt (Eingang als "detached" konfigurieren). Der Eventhandler check() kann dann Signaländerungen am Eingang erfassen und passend entscheiden, ob der Ausgang eingeschaltet wird oder nicht. Das kann ich aber erst testen, wenn ich wieder zu Hause bin.