Illustartion

Der Shelly Watchdog – wenn das Smart Home sich selbst rettet

Es ist Sonntag. Die Sonne scheint, die PV-Anlage produziert fleißig Überschussstrom. Der Heizstab sollte längst laufen. Tut er aber nicht. Denn der Shelly Pro3 im Sicherungskasten hat mal wieder seine WLAN-Verbindung verloren – und sich nicht selbst wiedergefunden. Also: Keller, Sicherungskasten auf, Reset-Knopf drücken, zurück nach oben.

Ich mag Home Assistant und Hausautomatisierung sehr gerne. Shelly-Geräte spielen dabei bei mir eine zentrale Rolle – günstig, zuverlässig, gut integrierbar. Aber diese eine Macke hat mich Wochen genervt: WLAN-Verbindung weg, kein automatischer Reconnect, manueller Eingriff nötig. In diesem Artikel zeige ich dir, wie ich das Problem endgültig gelöst habe – mit einem kleinen Script direkt auf dem Shelly.


Das Problem: WLAN weg, Shelly weg

Shelly Pro3 im Sicherungskasten

Mein Shelly Pro3 sitzt im Sicherungskasten. Er steuert drei Schütze, die meinen Heizstab schalten. Die Logik dahinter: Eine Überschussladungsautomatik in Home Assistant erkennt, wann meine PV-Anlage mehr produziert als wir verbrauchen – und schaltet dann stufenweise 2 oder 3 Phasen in den Heizstab. Bei mir läuft der auf 400V ohne Nullleiter.

Das Problem: Ein Metallgehäuse im Keller ist kein guter Ort für WLAN. Das Signal ist schwach. Verliert der Shelly die Verbindung zum Router, bekommt er manchmal keine neue. Er hängt einfach – technisch noch irgendwie aktiv, aber für Home Assistant und meine Automatisierung komplett unerreichbar. Und ich muss in den Keller.

Shelly Power Strip 4 Gen4 in der Garage

Das gleiche Phänomen beim Shelly Power Strip 4 Gen4 in unserer Garage. Dort lade ich mein eBike. Die Garage liegt ungünstig: Zwei eigene Access Points überlappen sich dort mit ähnlicher Signalstärke, dazu starkes Rauschen von den WLAN-Netzen der Nachbarn. Das macht das Roaming zur Lotterie. Ergebnis: gelegentlicher Verbindungsverlust, kein selbstständiger Reconnect.

Warum passiert das überhaupt?

Shellies – wie viele IoT-Geräte – haben eine bekannte Schwäche: Verlieren sie die WLAN-Verbindung unter bestimmten Umständen (kurzer Router-Reboot, AP-Ausfall, starke Signalschwankungen), kann ihr WLAN-Stack intern blockieren. Ein Neustart löst das sofort. Aber wer drückt den Reset-Knopf, wenn man gerade keine Lust auf Kellertour hat?


Die Lösung: Ein Watchdog-Script direkt auf dem Shelly

Shellies der neueren Generation (Pro-Serie, Gen3/Gen4) laufen auf einem Linux-basierten System und bieten eine eigene Scripting-Engine auf Basis von mJS – einem minimalistischen JavaScript-Dialekt. Das bedeutet: Du kannst eigene Programme direkt auf dem Gerät laufen lassen. Kein externer Server, kein Home Assistant notwendig.

Meine Idee war simpel: Das Shelly soll sich selbst überwachen und bei Verbindungsverlust eigenständig neu starten. Ein klassischer Watchdog – wie man ihn aus der Embedded-Programmierung kennt.

Wie das Script funktioniert

Das Script prüft alle 30 Sekunden zwei Dinge in Folge:

  1. Hat das Shelly eine IP-Adresse? → Prüfung via Wifi.GetStatus
  2. Ist der Router erreichbar? → HTTP-Request an die Gateway-IP (Standard: 192.168.178.1 für eine Fritzbox)

Erst wenn drei Prüfungen hintereinander fehlschlagen – also 90 Sekunden Verbindungsproblem – führt das Script einen Neustart durch. Das verhindert voreilige Neustarts bei kurzen Schwankungen.

// Kombinierter WLAN & Router Watchdog für Shelly Pro Serie
let failCount = 0;
let maxFails = 3; // 3 Fehlversuche (insgesamt 90 Sekunden)
let checkInterval = 30000; // Alle 30.000 ms (30 Sekunden) prüfen

// HIER DIE IP DEINES ROUTERS EINTRAGEN
let targetIp = "192.168.178.1";

// DEBUG-MODUS: Auf 'true' setzen für ständige Logs, auf 'false' für Ruhe
let debug = false;

print("Kombinierter Watchdog gestartet...");

function checkReboot() {
  if (failCount >= maxFails) {
    print("Watchdog: Verbindung für 90s gestört. Führe Neustart durch!");
    Shelly.call("Shelly.Reboot");
  }
}

Timer.set(checkInterval, true, function() {
  Shelly.call("Wifi.GetStatus", null, function(wifiRes) {

    if (!wifiRes || wifiRes.status !== "got ip") {
      failCount++;
      print("FEHLER WLAN: Keine IP-Adresse. Fehlversuch: " + JSON.stringify(failCount));
      checkReboot();

    } else {
      Shelly.call("HTTP.Request", {
        method: "GET",
        url: "http://" + targetIp,
        timeout: 5
      }, function(httpRes, err_code) {

        if (err_code !== 0) {
          failCount++;
          print("FEHLER Netzwerk: Router nicht erreichbar. Fehlversuch: " + JSON.stringify(failCount));
          checkReboot();

        } else {
          if (failCount > 0) {
            print("Verbindung wieder komplett intakt. Zähler zurückgesetzt.");
          }
          failCount = 0;

          if (debug) {
             let httpCode = httpRes ? httpRes.code : "Unbekannt";
             print("DEBUG: Check OK. WLAN verbunden. Router antwortet mit HTTP " + JSON.stringify(httpCode));
          }
        }
      });
    }
  });
});

Warum zwei Prüfstufen?

Ein reiner WLAN-Check reicht nicht. Der Shelly kann eine IP-Adresse haben und trotzdem den Router nicht erreichen – zum Beispiel nach einem kurzen Router-Reboot oder einer abgelaufenen DHCP-Lease. Der HTTP-Request ans Gateway ist deshalb der härtere Test: Antwortet der Router nicht, nützt die lokale IP nichts.

Ich persönlich finde diesen Ansatz sehr elegant: Das Gerät rettet sich selbst. Kein externer Dienst, keine zusätzliche Hardware, keine Abhängigkeit von Home Assistant. Auch wenn Home Assistant selbst down ist – der Watchdog läuft weiter. Das ist genau die Art Robustheit, die man von Geräten in der Gebäudetechnik erwartet.


Praktische Tipps zur Anwendung

Das kannst du direkt ausprobieren:

  1. Shelly-Weboberfläche öffnen: IP des Shelly im Browser aufrufen → Reiter Scripts anklicken.
  2. Neues Script anlegen: Add Script → Code einfügen → Speichern.
  3. Script benennen: Nenne es WiFi_Watchdog – so findest du es sofort wieder.
  4. Autostart aktivieren: Im Script-Editor das Häkchen bei "Run on startup" setzen. Damit startet der Watchdog automatisch nach jedem Neustart des Shelly.
  5. Router-IP anpassen: Zeile let targetIp = "192.168.178.1"; – Fritzbox-Nutzer in Standardkonfiguration können sie so lassen, alle anderen tragen ihre Gateway-IP oder eine Server IP ein, die immer an ist (z.B. 192.168.1.1).
  6. Debug kurz aktivieren: Setze let debug = true; für die ersten Stunden. Im Log siehst du dann, dass die Checks laufen. Danach wieder auf false – sonst wird das Log-Fenster sehr gesprächig.
  7. Script starten: Auf Run klicken und im Log prüfen, ob Kombinierter Watchdog gestartet... erscheint.
  8. Auf alle betroffenen Shellies ausrollen: Das Script läuft auf allen Geräten der Gen2/Gen3/Gen4-Serie sowie der Pro-Serie – also praktisch auf jedem modernen Shelly.

Fazit

Ein kleines Script, eine große Erleichterung. Seit dem Einsatz des Watchdogs muss ich nicht mehr in den Keller, wenn der Heizstab nicht lädt – und das eBike lädt durch, egal wie das WLAN in der Garage gerade drauf ist.

Was mich dabei am meisten begeistert: Der Shelly wird zur autarken Einheit. Er braucht keinen Babysitter von außen. Er prüft sich selbst, behebt sich selbst. Das ist gutes Engineering – klein, effizient, zuverlässig.

Nutzt du Shellies und hattest ähnliche Verbindungsprobleme? Schreib es in die Kommentare – mich interessiert, ob das Script auch bei dir nützlich ist. Und wenn du Fragen zur Einrichtung hast, meld dich gerne direkt.


Transparenzhinweis

Dieser Artikel wurde mit Unterstützung generativer KI (Claude Sonnet 4.6 in DeutschlandGPT) erstellt. Die Inhalte basieren auf vorgegebenen Ideen und wurden durch KI-gestützte Textelemente ergänzt. Die abschließende redaktionelle Bearbeitung und Ergänzung erfolgte durch den Autor.

Das Titelbild wurde mit Imagen 4 generiert. Verwendeter Prompt: "Ich brauche ein Beitragsbild zu einem Blog. Thema 'Shelly Watchdog'. Es soll eine Automatisierung symbolisieren, die ein Shelly neustartet, wenn es die WiFi Verbindung verliert. Keine Beschriftung, helle Farben."


Lizenzhinweis

Creative Commons Lizenzvertrag
Der Shelly Watchdog von Ulrich Ivens ist lizenziert unter einer CC BY-SA 4.0 International Lizenz.

Du willst den Inhalt remixen oder weiterverwenden? Der Markdown Quellcode dieses Beitrags ist zu finden unter: https://gitlab.eldshort.de/uivens/quellcode-blog-cc/-/raw/main/2026/shellywatchdog.md

Beitrag merken & teilen

Hier kannst Du dir den Link zum Beitrag kopieren - beispielsweise um ihn zu speichern oder mit anderen zu teilen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert