Ich habe bei Licht Steuerung ein Shelly Mini der neuesten Generation, diesen im Abgetrennten Modus, weil HomeAssistant das Licht anhand der Uhrzeit und Helligkeit 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 geht der Drucktaster ins leere. Um dies entgegenzuwirken habe ich ein Script geschrieben welches beim Ausfall vom HomeAssistant oder dem Netzwerk automatisch in den Toggle Modus schaltet, so dass ich das Licht trozdem steuern kann, und wenn wieder alles 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.
Anbei ein Bild das aufzeigt in welchem Modi das Script umschaltet.
// Funktion zum Setzen des "Detached Modus" für Relais, wenn es nicht bereits der Fall ist
function activateDetachedMode() {
print("Versuche, den Detached Modus zu aktivieren...");
// Abfrage des aktuellen Modus des Shelly
Shelly.call("Switch.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("Switch.SetConfig", {
"id": 0,
"config": {
"in_mode": "detached", // Setzt den Modus auf "detached"
"swap_inputs": false
}
}, function (res, error) {
if (error) {
print("Fehler beim Wechseln in den Detached Modus: ", JSON.stringify(error));
} else {
print("Detached Modus für Relais erfolgreich aktiviert.");
}
});
});
} else {
print("Der Shelly ist bereits im Detached 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 Setzen des "Follow Modus" für Relais, wenn es nicht bereits der Fall ist
function activateFollowMode() {
print("Versuche, den Follow Modus zu aktivieren...");
// Abfrage des aktuellen Modus des Shelly
Shelly.call("Switch.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 "follow" ist, dann den Modus wechseln
if (res.in_mode !== "follow") {
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("Switch.SetConfig", {
"id": 0,
"config": {
"in_mode": "follow", // Setzt den Relaismodus auf Follow
"in_type": "button" // Setzt den Eingangstyp auf Button (für Follow)
}
}, function (res, error) {
if (error) {
print("Fehler beim Wechseln in den Follow Modus: ", JSON.stringify(error));
} else {
print("Follow Modus für Relais erfolgreich aktiviert.");
}
});
});
} else {
print("Der Shelly ist bereits im Follow 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 Detached Modus
activateDetachedMode();
} else {
print("Home Assistant ist online.");
// Wenn Home Assistant wieder online ist, Wechsel in den Follow Modus
activateFollowMode();
}
// 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