Shelly Debugging leicht gemacht – Ausfälle erkennen, analysieren und vermeiden

Shelly Geräte sind eine beliebte Lösung zur Heimautomatisierung, doch viele Nutzer kennen das Problem: Geräte sind plötzlich nicht mehr erreichbar, reagieren träge oder stürzen ohne erkennbaren Grund ab. Diese Anleitung hilft dir dabei, genau diese Probleme systematisch zu analysieren und zu beheben.
Du erfährst, wie du mit einfachen Mitteln und hilfreichen Skripten ein effektives Monitoring einrichtest, Debug-Informationen sammelst und gezielt Fehlerquellen identifizierst.
Warum stürzen Shelly Geräte ab oder sind nicht erreichbar?
Shelly Geräte sind kompakte, leistungsfähige WLAN-fähige Smart-Home-Komponenten, die jedoch unter bestimmten Bedingungen zu Ausfällen oder Nichterreichbarkeit neigen. Im Folgenden werden die häufigsten Ursachen und deren Symptome erläutert:
WLAN-Probleme
Ein häufiger Grund für Verbindungsabbrüche ist eine instabile WLAN-Verbindung. Besonders bei schlechter Signalstärke, Interferenzen (z. B. durch andere Netzwerke oder Mikrowellen) oder überlasteten Routern kann es zu Paketverlusten und Verbindungsabbrüchen kommen. Shelly Geräte benötigen eine stabile Verbindung, um dauerhaft erreichbar zu bleiben.
Lösungsansätze:
- WLAN-Kanal wechseln oder optimieren (z. B. durch Nutzung von 2,4 GHz Band mit möglichst wenig Überlagerung)
- Netzwerk und WLAN Konfiguration auf Shelly Devices optimieren
- eigenes IoT Netzwerk mit eigener SSID wenn möglich
- 2,4 GHz Band, Kanal statisch festlegen (1, 6, 11),
- setzt die TX Power auf low (Antennen Sendeleistung niedrig)
- aktivieren von mDNS & mDNS Proxy
- deaktivieren von Roaming
- deaktivieren von IGMP Snooping
- deaktivieren von UAPSD (Power Savings)
- deaktivieren von Multicast Enhancement
- eigenes IoT Netzwerk mit eigener SSID wenn möglich
- zusätzliche Access Points, WLan Repeater oder Mesh-Systeme gezielt platzieren
- Antenne richtig ausrichten bzw. abschirmen (https://community.shelly.cloud/topic/3387-shelly-relais-installation-position-in-wall/)
- hier ein Artikel mit Tips für den korrekten Einbau um optimalen WIFI Empfang zu gewährleisten:
- Bei Shelly Plug Devices kann ein drehen des Steckers in der Steckdose schon eine Verbesserung des Empfangs bringen!
- Bei schlechtem WLan Empfang feste IP Adresse vergeben.
- eventuell bei schlechter WLan Verbindung Kommunikation via MQTT anstelle von Webschnittstellen (OpenHAB Shelly IoT Devices mittels MQTT einbinden)
Überhitzung
In engen Installationsumgebungen oder bei dauerhaft hoher Schaltlast kann sich ein Shelly stark erhitzen. Übertemperaturschutz greift dann häufig zu spät oder führt zum plötzlichen Reboot.
Lösungsansätze:
- Verwendung großer Einbaudosen
- Verkabelung: Kabelsalat vermeiden
- Shelly ECO Mode aktivieren
- Lüftung oder Entwärmung verbessern
- Einsatzort kritisch hinterfragen
Firmware-Probleme
Fehlerhafte oder veraltete Firmware-Versionen können Instabilitäten verursachen. Besonders nach automatischen Updates treten mitunter unerwartete Nebenwirkungen auf.
Lösungsansätze:
- Regelmäßig auf neue Firmware prüfen
- Changelogs auf bekannte Bugs durchsuchen (https://shelly-api-docs.shelly.cloud/gen2/changelog/)
Netzwerkkonfiguration & DHCP
Unklare oder fehlerhafte IP-Zuweisung (z. B. bei instabilen DHCP-Servern oder IP-Adresskonflikten) kann dazu führen, dass Shelly Geräte im Netz nicht mehr erreichbar sind.
Lösungsansätze:
- Feste IP-Adressen vergeben
- Router/DHCP-Logs prüfen
- DNS-Konfiguration überprüfen
Werkzeuge zur Überwachung und Fehleranalyse
Folgende Skripte und Werkzeuge haben sich zur Überwachung und Fehleranalyse von Shelly-Geräten bewährt:
shelly-status-check.py
- Funktion: Prüft die Erreichbarkeit und den Status mehrerer Shelly-Geräte über deren REST-API.
- Einsatz: Zur regelmäßigen Überwachung, ob Geräte online sind und korrekt antworten.
- Ausgabe: IP-Adresse, Erreichbarkeit, installierte Scripte, Eco Mode, Bluetooth und MQTT Status, etc.
shelly-check.sh
- Funktion: Einfaches Shell-Skript zur Verfügbarkeitsprüfung per HTTP (ping-artig)
- Einsatz: Ideal für cronjob-gestützte Basisüberwachung, auch in minimalistischen Umgebungen ohne Python, da einfaches BASH Script.
shelly-debug-setter.py
- Funktion: Aktiviert den Debug-Modus bei Shelly-Geräten über die HTTP API.
- Einsatz: Zur gezielten Fehleranalyse bei instabilen Geräten oder zur Vorbereitung von Log-Erfassung.
shelly-mqtt-config.py
- Funktion: Prüft, ob die MQTT-Konfiguration korrekt gesetzt ist und das Gerät erfolgreich mit dem Broker verbunden ist.
- Einsatz: Zur Validierung der Kommunikation zwischen Shelly und einem zentralen MQTT-Broker (z. B. bei Home Assistant Setups).
Syslog-Server Docker Stack
- Funktion: Zentrale Sammelstelle für Debug-Logs via UDP, mit Webinterface zur Auswertung.
- Einsatz: Für strukturierte Analyse von Fehlermeldungen, Reboots, Verbindungsabbrüchen etc.
- Verweis: → Syslog-Server Docker Stack mit Webinterface für Log-Analyse
Vorgehen zur Überwachung und Fehleranalyse
Wie geht man nun am besten vor, wenn man wissen will ob alles rund läuft, und wenn nein, woran es liegen könnte. Ich nutze dafür alle oben stehenden Werkzeuge, die in eigenen Kapitel jeweils nochmals genau beschrieben sind. Das Analysevorgehen sieht wie folgt aus:
- Monitoring: Regelmäßige Prüfung ob alle Shelly Devices erreichbar sind, oder ob es Geräte gibt die ab und an nicht erreichbar sind. Dafür richte ich das Skript shelly-check.sh ein, damit es alle 5 Minuten alle meine Shelly Devices auf Verfügbarkeit prüft und mir im Fehlerfall einfach eine E-Mail schickt. Ich monitore die Häufigkeit dann einfach mit einer art Strich Liste (ShellyDeviceXYZ IIIII) So kann ich eine gewisse Regelmäßigkeit erkennen und man identifiziert schnell welche Shellies Probleme haben.
- Problemanalyse: Um nun herauszufinden, was das Problem der nicht Erreichbarkeit des Shelly Devices ist, braucht es einen Syslog-Server, an den alle Shellies ihre Debug Messages schicken. Die Konfiguration aller Shellies kann mittels Skript shelly-debug-setter.py in einem Rutsch geschehen, oder aber auch via Webinterface unter
Settings --> Debug --> UDP Debug
manuell geschehen. Loggen nun alle Devices dort hin, kann man sich in Ruhe die Logs anschauen. Im falle meines Beispiels, ganz bequem via Webinterface. So kann man auf das Device zum Beispiel Filtern und sich dann die Logzeilen zeitlich zum Ausfall anzeigen lassen. Man kann auch nach ERROR oder WARNING filtern und so sehen, ob die Geräte Fehler melden, die es ggf. zu beheben gilt. - Statusabfrage: Um sich einen Überblick über die wichtigsten Funktionen der im Einsatz befindliche Shelly Devices zu machen, nutze ich dann das shelly-status-check.py. Hier interessiert mich im Normalfall als aller erstes, welche Geräte haben schlechten WIFI Empfang (Option:
--sort wifi
). Meiner Erfahrung nach ist alles unter 80 RSSI OK. Alles darüber sollte man beobachten. Ich handhabe hier zum Beispiel, das ich Geräten mit schlechtem Empfang den Shelly ECO Mode auf jeden Fall deaktiviere. Ein anderer Punkt, der interessant ist und auf ein stabiles Shelly Ökosystem hinweist ist die Uptime der Shellies (Option:--sort uptime
). Wenn hier Geräte eine sehr kurze Uptime haben, und ihr das Gerät nicht selbstständig neugestartet habt, kein Stromausfall war, deutet es auf einen Absturz hin. Diesen kann man dann zeitlich wieder im Syslog Webinterface überprüfen.
Tips für ein stabiles Shelly Smart-Home
- Prüft auf alle Lösungsansätze weiter oben
- Sorgt überall für guten WLan Empfang, das ist wirklich das Wichtigste!
- Aktuelle Firmware auf allen Shellies installieren, es gab bei älteren Firmware Versionen regelmäßige Abstürze mit CoreDumps bei mir.
- Habt ihr ein Gerät identifiziert, welches schlechten Empfang hat und ihr es nicht vermeiden könnt:
- Stellt in den WLAN Einstellungen ein das Roaming erst zum Beispiel bei -85 RSSI geschehen soll, ggf. das Intervall von 60 auf 180 oder gar 300 Sekunden erhöhen. Das Device würde sonst viel zu oft nach einem besseren Accesspoint suchen.
- Schaut ob die Nutzung zum Beispiel über MQTT besser funktioniert als über die WEB API
- Es hilft auch manchmal die Position des Shelly in der Dose ein wenig zu ändern, oder den Shelly Plug zu andersherum einzustecken
- ECO Modus deaktivieren
- habe ich zum Beispiel auf allen Geräten die häufiger nicht erreichbar waren
- auf allen Geräten auf denen ich Scripte laufen habe
All das hat bei mir dafür gesorgt das meine Shelly Infrastruktur aus 100+ Geräten stabil läuft.
Verwendung von shelly-status-check.py
Das Python-Skript shelly-status-check.py
dient zur Statusabfrage mehrerer Shelly-Geräte über ihre REST-API. Es liefert eine tabellarische Übersicht mit wichtigen Kennzahlen wie IP-Adresse, WiFi-Qualität und Uptime. Es kann zum Beispiel dazu genutzt werden, auf einen Blick herauszufinden wie gut die Wifi Verbindung ist, ob zum Beispiel der ECO Mode an ist oder Scripte auf dem Shelly Device installiert sind.
Installation
Python-Pakete installieren:
pip install requests tabulate
Oder auf Debian-basierten Systemen:
apt update && apt install python3-requests python3-tabulate
Skript herunterladen und ausführbar machen:
wget https://raw.githubusercontent.com/alaub81/shelly/main/shelly-status-check.py
chmod +x shelly-status-check.py
Gerätekonfiguration
IP-Adressen oder Hostnamen in Datei shellies.txt
eintragen, z. B.:
shelly-kitchen.local
shelly-garage.local
192.168.1.42
Tipp: Automatische Generierung mit nmap:
nmap -sP 192.168.1.0/24 | grep "shelly" | awk '/Nmap scan report/ {print $5}' > shellies.txt
Ausführung
./shelly-status-check.py
Optionale Parameter
--file /path/to/shellies.txt
– Ohne Parameter Default: ./shellies.txt
--sort ip
– Sortiert alphabetisch nach IP/Host (Standard)--sort uptime
– Sortiert nach Betriebszeit (absteigend)--sort wifi
– Sortiert nach WiFi-Signalstärke (beste zuerst)
Beispiel:
./shelly-status-check.py --file /tmp/shellies.txt --sort uptime
Beispielausgabe
+---------------------------------------+---------------------+-------------+------------+------------+--------------+-------------+--------+-------------------+--------------------------------------------------------------+ | IP | Device Typ | Reachable | Uptime | Eco Mode | WiFi (dBm) | Bluetooth | MQTT | Debug UDP | Scripts | +=======================================+=====================+=============+============+============+==============+=============+========+===================+==============================================================+ | shelly-dl-ak.laubiot.loc | Mini1PMG3 (Gen 3) | ✅ | 15d 3h 52m | True | -67 | ❌ | ❌ | 192.168.50.20:514 | – | +---------------------------------------+---------------------+-------------+------------+------------+--------------+-------------+--------+-------------------+--------------------------------------------------------------+ | shelly-dl-bu.laubiot.loc | Mini1PMG3 (Gen 3) | ✅ | 15d 3h 52m | False | -52 | ✅ | ❌ | 192.168.50.20:514 | oh-blu-scanner.js | +---------------------------------------+---------------------+-------------+------------+------------+--------------+-------------+--------+-------------------+--------------------------------------------------------------+ | shelly-dl-bz.laubiot.loc | Plus1PMMini (Gen 2) | ✅ | 15d 3h 53m | True | -53 | ❌ | ❌ | 192.168.50.20:514 | – | +---------------------------------------+---------------------+-------------+------------+------------+--------------+-------------+--------+-------------------+--------------------------------------------------------------+ | shelly-dl-carport.laubiot.loc | Plus2PM (Gen 2) | ✅ | 5d 9h 16m | False | -80 | ✅ | ❌ | 192.168.50.20:514 | ble-shelly-motion.js, shelly-blumotion-darknight.js | +---------------------------------------+---------------------+-------------+------------+------------+--------------+-------------+--------+-------------------+--------------------------------------------------------------+
Verwendung von shelly-check.sh
Das Bash-Skript shelly-check.sh
führt eine einfache Erreichbarkeitsprüfung für eine Liste von Shelly Gen2 Geräten durch. Es verwendet HTTP-Requests zum /rpc/Shelly.GetStatus
-Endpoint und erkennt, ob ein Gerät online ist oder nicht.
Ideal für schnelle Tests oder regelmäßige Prüfungen per Cronjob in minimalistischen Umgebungen, z. B. auf einem Linux-Server ohne Python.
Installation
Das Skript benötigt nur ein installiertes curl
:
apt update && apt install curl
Dann Skript herunterladen:
wget https://raw.githubusercontent.com/alaub81/shelly/main/shelly-check.sh
chmod +x shelly-check.sh
Geräte-Liste verwenden
Die IPs oder Hostnamen müssen in einer Datei namens shellies.txt
aufgelistet sein (eine Zeile pro Gerät). Im Skript wird standardmäßig auf /root/shellies.txt
zugegriffen:
192.168.10.101
192.168.10.102
shelly-garten.local
Tipp: Automatische Generierung mit nmap:
nmap -sP 192.168.1.0/24 | grep "shelly" | awk '/Nmap scan report/ {print $5}' > shellies.txt
Ausführung
Standardausführung (mit shellies.txt im selben Verzeichnis):
./shelly-check.sh
Oder mit benutzerdefinierter Datei:
./shelly-check.sh --file /etc/shelly/alle_geraete.txt
Funktionsweise
Das Skript sendet eine HTTP-Anfrage an den Status-Endpunkt jedes Geräts:
http://<IP>/rpc/Shelly.GetStatus
Ist eine Antwort mit "id":
enthalten, gilt das Gerät als erreichbar.
Nicht erreichbare Geräte werden als OFFLINE
ausgegeben. Die Logzeile kann bei Bedarf in eine Datei geschrieben werden, z. B. durch Entfernen des Kommentars:
#>> /tmp/shelly_monitor.log
Cronjob Beispiel
Regelmäßige Prüfung alle 5 Minuten einrichten:
crontab -e
und diesen cronjob Zeile eintragen.
*/5 * * * * /path/to/shelly-check.sh --file /path/to/shellies.txt
Ist euer System in der Lage Cronjob Mails zu versenden, bekommt ihr immer, wenn ein Device nicht verfügbar ist eine Mail.
Verwendung von shelly-debug-setter.py
Das Skript shelly-debug-setter.py
dient dazu, das UDP-Debug-Logging für eine Liste von Shelly Geräten zu konfigurieren. Es setzt die Zieladresse und den UDP Port für Debug-Nachrichten, sodass diese z. B. auf einem zentralen Syslog-Server empfangen werden können. Möchtet ihr einen eigenen Syslog-Server aufsetzen, so könnt ihr zum Beispiel diesen Anleitungen folgen:
- Syslog-Server Docker Stack mit Webinterface für Log-Analyse
- Syslog-NG Server Docker Setup
- Syslog Server als Shared System aufsetzten
- Syslog Server unter Debian Linux mit Rsyslog
- Syslog Server unter Red Hat Linux mit Rsyslog
Installation
Benötigte Pakete installieren:
pip install requests
Oder auf Debian-basierten Systemen:
apt update && apt install python3-requests
Skript herunterladen und ausführbar machen:
wget https://raw.githubusercontent.com/alaub81/shelly/main/shelly-debug-setter.py
chmod +x shelly-debug-setter.py
Geräte-Liste vorbereiten
Erstelle eine Datei mit den IPs oder Hostnamen der Geräte:
shellies.txt
:
192.168.1.101
192.168.1.102
shelly-pro-kitchen.local
Tipp: Automatische Generierung mit nmap:
nmap -sP 192.168.1.0/24 | grep "shelly" | awk '/Nmap scan report/ {print $5}' > shellies.txt
Parameterübersicht
Argument | Pflicht | Beschreibung |
---|---|---|
--host
|
Ja | Ziel-IP oder Hostname für UDP-Debug-Logs (z. B. Syslog-Server) |
--port
|
Ja | UDP-Port, z. B. 514 für Syslog |
--file
|
Nein | Datei mit Geräten (Standard: shellies.txt )
|
Beispiel: Alle Geräte für Debug-Logging konfigurieren
./shelly-debug-setter.py --host 192.168.1.100 --port 514
Hinweise
- Funktioniert ausschließlich mit Shelly Gen2+ Geräten (RPC-API erforderlich)
- Geräte müssen im lokalen Netzwerk erreichbar sein
- Authentifizierung wird aktuell nicht unterstützt – kann aber manuell im Script ergänzt werden
Verwendung von shelly-mqtt-config.py
Das Skript shelly-mqtt-config.py
dient dazu, eine konsistente MQTT-Konfiguration für mehrere Shelly Geräte zentral zu setzen. Es überträgt die Konfiguration per HTTP an die Geräte und stellt sicher, dass alle korrekt mit dem MQTT-Broker verbunden sind. Solltet ihr noch keinen MQTT-Broker am Laufen haben, schaut hier:
Anwendungsfall
Dieses Skript ist hilfreich, wenn du in einer größeren Installation sicherstellen möchtest, dass:
- alle Shelly-Geräte denselben MQTT-Broker nutzen,
- eine einheitliche Topic-Struktur (z. B.
shelly/device-name
) verwendet wird, - die relevanten Optionen wie
rpc_ntf
oderenable_control
aktiviert sind.
MQTT-Basis-Konfiguration im Skript
Die Konfiguration wird innerhalb des Skripts shelly-mqtt-config.py
angepasst. Wichtige Felder:
base_config = {
"enable": True,
"server": "<MQTT-FQDN>:8883", # ❗ DEIN MQTT-BROKER FULLY QUALIFIED HOSTNAME HIER EINTRAGEN
"user": "<MQTT-USERNAME>", # ❗ DEIN MQTT-BENUTZER HIER EINTRAGEN
"pass": "<MQTT-PASSWORD>", # ❗ DEIN MQTT-PASSWORT HIER EINTRAGEN
"ssl_ca": "*",
"rpc_ntf": True,
"status_ntf": True,
"use_client_cert": False,
"enable_rpc": True,
"enable_control": True
}
Das Skript ergänzt automatisch:
client_id
= Name/IP des Gerätstopic_prefix
= z. B.shelly/shelly-kitchen
Installation
Benötigt wird nur das Python-Paket requests
:
pip install requests
Das Skript kann aus dem GitHub-Repository heruntergeladen und ausgeführt werden:
wget https://raw.githubusercontent.com/alaub81/shelly/main/shelly-mqtt-config.py
chmod +x shelly-mqtt-config.py
Geräte-Liste vorbereiten
In der Datei shellies.txt
muss jede Zeile eine IP-Adresse oder ein Hostname enthalten:
shelly-kitchen.local
192.168.1.102
Standardpfad im Skript: /root/shellies.txt
– bei Bedarf anpassen.
Tipp: Automatische Generierung mit nmap:
nmap -sP 192.168.1.0/24 | grep "shelly" | awk '/Nmap scan report/ {print $5}' > shellies.txt
Ausführung
./shelly-mqtt-config.py
# wenn nicht ./shellies.txt verwendet werden soll
./shelly-mqtt-config.py --file </path/to/shellies.txt>
Das Skript prüft automatisch die Rückmeldungen und startet jedes Gerät neu, nachdem die Konfiguration erfolgreich gesetzt wurde.
Hinweise
- Funktioniert ausschließlich mit Shelly Gen2+ Geräten mit
/rpc
-API - Geräte müssen per HTTP erreichbar sein
- Authentifizierung ist vorbereitet, aber standardmäßig deaktiviert:
auth = None # Beispiel: auth = ('admin', 'passwort')
- Das Skript ist besonders nützlich in Kombination mit zentralem MQTT-Monitoring wie z. B. Home Assistant, Node-RED oder MQTT Explorer