Shelly Gerät abschalten, wenn Home Assistant nicht mehr verfügbar

Guten Morgen,
leider habe ich im Forum keine Antwort auf mein Problem gefunden und deshalb möchte ich hier einmal Euch ansprechen.
Mein Problem: Ich würde gern einen Magnetschalter durch einen Shelly und durch Home Assistant steuern bzw. ein- und ausschalten. Das ist ja grundsätzlich kein Problem, das ist mir klar. Ich benötige jedoch eine Sicherheit, dass wenn HA ausfällt bzw. nicht erreichbar ist usw., dass dann der Shelly automatisch den Magentschalter abschaltet und der Strom unterbrochen ist. Gibt es so eine Möglichkeit?
Vielen Dank schon einmal.
VG
Olaf

Wenn der Auslöser die nicht Verfügbarkeit / nicht Erreichbarkeit von Home Assistant sein soll. Ist es keine Aktion die Home Assistant noch ausführen kann, da ja nicht verfügbar / ausgefallen.

Also musst Du entweder schauen ob der Shelly selbst sowas bietet.
Hier würde mir auf die Schnelle nur einfallen, ein Auto Off einzustellen. Und mit Home Assistant schaltest Du regelmässig wieder ein. Fällt Home Assistant aus, bleibt das wiedereinschaltend aus.

Oder eine dritte Partei ins Spiel bringen, die die Erreichbarkeit von Home Assistant regelmässig prüft und bei nicht Erreichbarkeit den Shelly ausschaltet.

Mich würde aber mal interessieren was für ein Anwendungsfall das wäre.
ggf. Gibt es auch andere Möglichkeiten.

Gruß
Osorkon

Vielen Dank für Deine Antwort.
Der Anwendungsfall ist nicht ganz einfach zu beschreiben. Aber gut ich versuche es einmal.
Wir haben eine kleine angemeldete Brennerei im Nebenerwerb, so ungefähr als Hobby aus Spaß nebenher. Aber alles angemeldet und mit Genehmigung usw.
Der Kessel wird mit Gas beheizt und die Gaszufuhr wurde fachgerecht verlegt und durch ein Meisterbetrieb angeschlossen, abgenommen usw. Alles im grünen Bereich.
In der Zuleitung ist ein Magnetschalter montiert, der bei fehlender Lüftung (Luken Türen etc. zu) elektrisch abschaltet. Mein Kumpel (er ist Elektriker) hat das alles hardwaremäßig verdrahtet und es funktioniert auch.
Nun bin ich aber ein Sicherheitsfanatiker und habe eh Home Assistant dort im Einsatz. Deshalb habe ich mir mehrere CO2-Sensoren und mehrere Gas-Sensoren zusammengelötet und diese im Home Assistant eingebunden. Wenn die Sensoren bei einem bestimmten Wert anschlagen sollten, dann soll ein Shelly ebenfalls das Magnetventil abschalten und gut ist es. Zusätzlich werde ich noch eine Warnleuchte mit Horn montieren und zu guter Letzt ein Display mit den gemessenen Sensor-Werten.
Und nun denke ich noch über eine 4. Absicherung nach, die dann den Shelly bzw. das Magnetventil schalten soll, wenn das Home Assistant nicht mehr reagiert.
Wie gesagt, es geht auch so. Aber ich bin eben ein kleiner Sicherheitsfanatiker und die haben schon bekanntlich die Pferde kot… sehen.
Ich hoffe, ich habe den Einsatz verständlich erklären können.
VG
Olaf

Ich muss da @Osorkon recht geben, wenn HA nicht mehr läuft, kann auch keine Aktion mehr laufen.
Also auf ein 2. Automatisierungssymstem setzen, wie z.B. Tapo, Tuya o.ä. … soll ja hoffentlich die Ausnahme bleiben.

Ansonsten ein 2. HA. Könnte man dann komplett mit Proxmox oder Unraid (VM) realisieren. Aber dann käme Fall #5: Was wenn Proxmox/Unraid nicht läuft :wink:

Wenn Ausfallsicherheit über eine 2te Home Assistant Instanz, dann nur auf einem separaten Host!!

Mir ist in den letzen 4 Jahren noch nie Home Assistant abgeschmiert. Die Hardware allerdings schon.

Gruß
Osorkon

Was dann ja unter Fall #5 fallen würde.

Vielleicht ginge es ja auch über Google Home oder Alexa, da bin ich aber schon länger raus.

Gibts auch in einfach :stuck_out_tongue:

In den Shelly gehen per Web, unter Scripts ein Script anlegen

Sowas da reinkippen, bei mir booten die Shellys wenn sie nach 10min den HA nicht erreichen, so hab ich das Problem mit dem verlorenen Wifi gelöst was die Shellys mal geplagt hat

// This script tries to execute HTTP GET requests within a set time, against a set of endpoints
// After certain number of failures the script resets the shelly

let CONFIG = {
  endpoints: [
    "http://192.168.167.1:8123/",
  ],
  //number of failures that trigger the reset
  numberOfFails: 5,
  //time in seconds after which the http request is considered failed
  httpTimeout: 10,
  //time in seconds to retry a "ping"
  pingTime: 120,
};

let endpointIdx = 0;
let failCounter = 0;
let pingTimer = null;

function pingEndpoints() {
  Shelly.call(
    "http.get",
    { url: CONFIG.endpoints[endpointIdx], timeout: CONFIG.httpTimeout },
    function (response, error_code, error_message) {
      //http timeout, magic number, not yet documented
      if (error_code === -114) {
        print("Failed to fetch ", CONFIG.endpoints[endpointIdx]);
        failCounter++;
        print("Rotating through endpoints");
        endpointIdx++;
        endpointIdx = endpointIdx % CONFIG.endpoints.length;
      } else {
        failCounter = 0;
      }

      if (failCounter >= CONFIG.numberOfFails) {
        print("Too many fails, resetting...");
        failCounter = 0;
        Timer.clear(pingTimer);
        Shelly.call("Shelly.Reboot");
      }
    }
  );
}

print("Start watchdog timer");
pingTimer = Timer.set(CONFIG.pingTime * 1000, true, pingEndpoints);

In der Zeile wo

Shelly.call("Shelly.Reboot");

steht müsstest du den Befehl für Turn Off switch 1 oder so einbauen.
Fertig, funktioniert so lang wie der Shelly Strom hat

Und Autostart nicht vergessen

Shelly Script Doku

4 „Gefällt mir“

Vielen Dank Euch allen.
So ein Script für den Shelly könnte die Lösung sein. Wäre klasse, wenn das hinhaut. Ich versuche das einmal.
Bis bald.
Olaf

Ich möchte mich bei Euch bedanken. Am Beispiel von Mirco mit etwas Anpassungen habe ich es dann hinbekommen.
Vielen Dank!
VG
Olaf

Die konkrete Lösung wäre unter Umständen vielleicht auch für andere interessant. :wink:

Gruß
Osorkon

Natürlich sehr gern. Aber berücksichtigt bitte, ich bin kein Profi und habe mich durchgewurschtelt. Aber es funktioniert wie gewünscht.

U. a. habe ich den Timer und den Befehl für das Ausschalten des Switch mit eingebaut.
VG
Olaf

// Dieses Skript versucht, HTTP-GET-Anfragen innerhalb einer festgelegten Zeit für eine Reihe von Endpunkten auszuführen
// Nach einer bestimmten Anzahl von Fehlern (Endpunkt ist nicht erreichbar) schaltet das Skript den Shelly-Switch aus

let CONFIG = {
  endpoints: [
    "http://192.***.**.***:8123/",
  ],
  //Anzahl der Fehler, die den Switch ausschalten
  numberOfFails: 2,
  //Zeit in Sekunden, nach der die HTTP-Anfrage als fehlgeschlagen gilt
  httpTimeout: 30,
  //Zeit in Sekunden für den erneuten Versuch eines „Pings“
  pingTime: 90,
  //Zeit in Sekunden zum erneuten Versuch der Funktion
  coverControlTimer: 150 * 1000,
};

let endpointIdx = 0;
let failCounter = 0;
let pingTimer = null;

function activateSwitch(activate) {
  Shelly.call(
    "Switch.Set",
    { id: 0, on: activate },
    function (response, error_code, error_message) {}
  );
}

function pingEndpoints() {
  Shelly.call(
    "http.get",
    { url: CONFIG.endpoints[endpointIdx], timeout: CONFIG.httpTimeout },
    function (response, error_code, error_message) {
      //http timeout, magic number, not yet documented
      if (error_code === -114) {
        print("Aufrufe fehlgeschlagen ", CONFIG.endpoints[endpointIdx]);
        failCounter++;
        print("Rotieren der Endpunkte");
        endpointIdx++;
        endpointIdx = endpointIdx % CONFIG.endpoints.length;
      } else {
        print("System online");
        failCounter = 0;
      }

      if (failCounter >= CONFIG.numberOfFails) {
        print("Zu viele Fehler, Switch ausschalten...");
        failCounter = 0;
        Timer.clear(pingTimer);
        activateSwitch(false);
      }
    }
  );
}

print("Start watchdog timer");
pingTimer = Timer.set(CONFIG.pingTime * 1000, true, pingEndpoints);

Timer.set(
    CONFIG.coverControlTimer,
    true,
    function (ud) {
        pingEndpoints();
    },
    null
);
1 „Gefällt mir“