Ich habe bei den Rolladen Steuerung einen Shelly Plus 2 PM, diesen im Abgetrennten Modus, weil HomeAssistant die Positionierung anhand der Drucktastenbefehle ausführt. Nun ist es so, wenn das HomeAssistant nicht erreichbar ist durch einen Router Ausfall oder HomeAssistant selber ist abgestürzt in meinem Fall ein Rasb. Pi 4 dann gehen die Drucktaster ins leere. Um dies entgegenzuwirken habe ich ein Script geschrieben welches beim Ausfall vom HomeAssistant oder dem Netzwerk automatisch in den Dualen Modus schaltet, so dass ich die Rolladen trozdem steuern kann, und wenn wieder alle Online ist wieder zurück in den Abgetrennten Modus. Der Code ist getestet und funktioniert.
Natürlich muss im Script noch die IP Adresse vom HomeAssistant oder einer anderen Smarten Automatisierung angegeben werden.
Ich denke es müsste auch mit anderen Shellys funktionieren solange diese Scripte beherschen.
Falls ihr nur einen Einfachen Shelly mit einem Relais habt müsst ihr im Script "dual" durch "single" , "follow" oder "toggle" ersetzten, das habe ich aber nicht getestet darum nur mit vorbehalt.
Anleitung gibt es hier von Shelly: https://shelly-api-docs.shelly.cloud/gen2/Component…/#configuration
Viel Spass damit - Anlumet
// Funktion zum Setzen des "abgetrennten Modus" für Relais, wenn es nicht bereits der Fall ist
function activateDetachedMode() {
print("Versuche, den abgetrennten Modus zu aktivieren...");
// Abfrage des aktuellen Modus des Shelly
Shelly.call("Cover.GetConfig", { "id": 0 }, function(res, error) {
if (error) {
print("Fehler beim Abfragen des Modus: ", JSON.stringify(error));
} else {
// Überprüfen, ob die Antwort die richtige Struktur hat
if (res && res.in_mode !== undefined) {
// Wenn der aktuelle Modus nicht "detached" ist, dann den Modus wechseln
if (res.in_mode !== "detached") {
print("Der Shelly ist aktuell im Modus: ", res.in_mode);
// Verzögerung von 1 Sekunde, um sicherzustellen, dass Home Assistant stabil läuft
Timer.set(1000, false, function () {
Shelly.call("Cover.SetConfig", {
"id": 0,
"config": {
"in_mode": "detached",
"swap_inputs": false
}
}, function (res, error) {
if (error) {
print("Fehler beim Wechseln in den abgetrennten Modus: ", JSON.stringify(error));
} else {
print("Abgetrennter Modus für Relais erfolgreich aktiviert.");
}
});
});
} else {
print("Der Shelly ist bereits im abgetrennten Modus, keine Änderung erforderlich.");
}
} else {
print("Fehler: Ungültige Antwort von Shelly, konnte den aktuellen Modus nicht abfragen.");
print("Antwort von Shelly: ", JSON.stringify(res));
}
}
});
}
// Funktion zum Wechseln in den "Dualen Modus", wenn es nicht bereits der Fall ist
function switchBackToDualMode() {
print("Wechsel zurück in den Dualen Modus...");
// Abfrage des aktuellen Modus des Shelly
Shelly.call("Cover.GetConfig", { "id": 0 }, function(res, error) {
if (error) {
print("Fehler beim Abfragen des Modus: ", JSON.stringify(error));
} else {
// Überprüfen, ob die Antwort die richtige Struktur hat
if (res && res.in_mode !== undefined) {
// Wenn der aktuelle Modus nicht "dual" ist, dann den Modus wechseln
if (res.in_mode !== "dual") {
print("Der Shelly ist aktuell im Modus: ", res.in_mode);
// Verzögerung von 1 Sekunde, um sicherzustellen, dass Home Assistant stabil läuft
Timer.set(1000, false, function () {
Shelly.call("Cover.SetConfig", {
"id": 0,
"config": {
"in_mode": "dual",
"swap_inputs": false
}
}, function (res, error) {
if (error) {
print("Fehler beim Wechseln in den Dualen Modus: ", JSON.stringify(error));
} else {
print("Dualer Modus für Relais
erfolgreich aktiviert.");
}
});
});
} else {
print("Der Shelly ist bereits im Dualen Modus, keine Änderung erforderlich.");
}
} else {
print("Fehler: Ungültige Antwort von Shelly, konnte den aktuellen Modus nicht abfragen.");
print("Antwort von Shelly: ", JSON.stringify(res));
}
}
});
}
// Funktion zum Überprüfen, ob Home Assistant wieder online ist
function checkHomeAssistantStatus() {
print("Überprüfe, ob Home Assistant erreichbar ist...");
Shelly.call("http.get", { url: "http://192.168.179.150:8123" }, function(response, error) {
if (error) {
print("Home Assistant ist derzeit nicht erreichbar.");
// Wenn Home Assistant nicht erreichbar ist, Wechsel in den Dualen Modus
switchBackToDualMode();
} else {
print("Home Assistant ist online.");
// Wenn Home Assistant wieder online ist, den abgetrennten Modus aktivieren
activateDetachedMode();
}
// Setze die Überprüfung nach 10 Sekunden fort
Timer.set(10000, false, checkHomeAssistantStatus);
});
}
// Start der Überprüfung, ob Home Assistant online ist
checkHomeAssistantStatus();
Alles anzeigen