
Starten Sie Domoticz automatisch neu
Das HimbeerPi ist ein sehr stabiler Mini-Computer, der unter Linux läuft. Es ist auch ideal für Domoticz zum Einschalten. Es kommt jedoch manchmal vor, dass Domoticz (aus welchen Gründen auch immer) abstürzt. Dadurch besteht die Gefahr, dass Daten verloren gehen oder bestimmte Befehle nicht ausgeführt werden.
Um dieses Problem zu vermeiden, können Sie im Hintergrund ein Bash-Skript ausführen, das überprüft, ob Domoticz noch online ist. Sobald dieses Skript bemerkt, dass Domoticz offline ist, wird es gestoppt und anschließend neu gestartet.
Was brauchen Sie dafür?
- Himbeerpi;
- Domoticz;
- jq.
Wir gehen davon aus, dass Domoticz bereits auf dem Raspberry Pi installiert ist und alles einwandfrei läuft.
Öffnen Sie Nano oder einen anderen Texteditor auf dem Raspberry Pi und kopieren Sie das folgende Skript und fügen Sie es ein. Ausfüllen für:
Domoticz_ip
ist die (interne) IP-Adresse Ihres Raspberry Pi.domoticz_port
Geben Sie den Port ein, auf dem Ihr Domoticz läuft.Geräte ID
Geben Sie die IDX eines Schalters ein.
#!/bin/bash domoticz_ip="127.0.0.1" domoticz_port="8080" device_id="1" DOMOTICZ=`curl -s --connect-timeout 2 --max-time 5 "http://"$domoticz_ip": "$domoticz_port"/json.htm?type=devices&rid="$device_id` STATUS=`echo $DOMOTICZ | jq -r '.status'` if [ "$STATUS" = "OK" ] ; dann beenden, sonst schlafen 5 DOMOTICZ=`curl -s --connect-timeout 2 --max-time 5 "http://"$domoticz_ip":"$domoticz_port"/json.htm?type=devices&rid="$device_id` STATUS2=` echo $DOMOTICZ | jq -r '.status'` if [ "$STATUS2" = "OK" ] ; dann beenden, sonst schlafen 5 DOMOTICZ=`curl -s --connect-timeout 2 --max-time 5 "http://"$domoticz_ip":"$domoticz_port"/json.htm?type=devices&rid="$device_id` STATUS3=` echo $DOMOTICZ | jq -r '.status'` if [ "$STATUS3" = "OK" ] ; dann beenden, sonst echo „domoticz offline... neustarten…“ { gsub("/.*","",$7); print $7; exit } }') sleep 8 echo "domoticz gestoppt, startet jetzt..." sudo service domoticz.sh start fi fi fi
Speichern Sie das Bash-Skript unter domoticz_state_checker.sh
in der Karte ~/domoticz/scripts
.
jq installieren
Da wir JSON-Daten abrufen und nach den Schlüsseln STATUS, STATUS2 oder STATUS3 filtern und deren Wert überprüfen möchten, benötigen wir einen JSON-Prozessor.
Das jq ist ein befehlszeilenbasierter JSON-Prozessor, der das Transformieren, Filtern, Segmentieren, Mapping oder Ausführen anderer Operationen an JSON-Daten ermöglicht.
Verbinden Sie sich per SSH mit Ihrem Raspberry Pi oder geben Sie folgende Befehle direkt im Terminal ein:
sudo apt update sudo apt install -y jq
Nach Abschluss des Installationsvorgangs können wir testen, ob jq korrekt funktioniert.
echo '{"employees": {"employee": [{"id": "1", "firstName": "Tom", "lastName": "Cruise"},{"id": "2", "firstName". ": "Maria", "lastName": "Sharapova"},{"id": "3", "firstName": "Robert", "lastName": "Downey Jr."}]}}' > test.json
Das Programm jq hat mehrere Filter, um JSON-Daten zu manipulieren. Der einfachste Filter ist der Punkt .
. Dieser Filter lässt die Eingabe unverändert und druckt die Ausgabe im JSON-Format.
Geben Sie den folgenden Befehl ein und der .-Filter gibt die Ausgabe im JSON-Format zurück.
jq'.' test.json
{ "employees": { "employee": [ { "id": "1", "firstName": "Tom", "lastName": "Cruise" }, { "id": "2", "firstName": „Maria“, „lastName“: „Sharapova“ }, { „id“: „3“, „firstName“: „Robert“, „lastName“: „Downey Jr.“ } ] } }
Testen des Skripts
Gehen Sie zum Ordner ~/domoticz/scripts
und geben Sie den folgenden Befehl in die Befehlszeile ein:
sh domoticz_state_checker.sh
Wenn in der Befehlszeile keine Meldungen angezeigt werden, scheint das Skript ordnungsgemäß zu funktionieren. Wenn wir Domoticz jetzt vorübergehend stoppen und das Skript erneut ausführen, erhalten wir folgende Meldungen:
domoticz offline... wird neu gestartet... Verwendung: kill [Optionen] [...] Optionen: [...] Signal an alle senden gelistet - , -s, --signal Präzisiere das gesendet werden -l, --list=[ ] alle Signalnamen auflisten oder einen in einen Namen umwandeln -L, --table alle Signalnamen in einer schönen Tabelle auflisten -h, --help diese Hilfe anzeigen und beenden -V, --version Versionsinformationen ausgeben und beenden Für mehr Details siehe kill(1). Domoticz hat aufgehört und startet jetzt ...
Führen Sie das Skript automatisch aus
Wir möchten, dass dieses Skript regelmäßig automatisch ausgeführt wird. Dies ist möglich mit einem Cron-Job
. Ein Cron ist ein Aufgabenplaner in Unix-Systemen zum Ausführen von Aufgaben zu einem festen Datum oder einer festen Uhrzeit. Um eine solche Aufgabe auszuführen, können wir diese Aufgabe in eine Cron-Tabelle eingeben. Um die Cron-Tabelle zu öffnen/bearbeiten, führen wir den folgenden Befehl in der Befehlszeile aus:
crontab -e
In Ihrem Editor sehen Sie nun Folgendes:
# Bearbeiten Sie diese Datei, um Aufgaben einzuführen, die von Cron ausgeführt werden sollen. # # Jede auszuführende Aufgabe muss durch eine einzelne Zeile # definiert werden, die mit verschiedenen Feldern angibt, wann die Aufgabe ausgeführt wird # und welcher Befehl für die Aufgabe ausgeführt werden soll # # Um die Zeit zu definieren, können Sie konkrete Werte für # Minute angeben (m ), Stunde (h), Tag des Monats (dom), Monat (mon), # und Wochentag (dow) oder verwenden Sie '*' in diesen Feldern (für 'any'). # # Beachten Sie, dass Tasks basierend auf der Vorstellung von Zeit und Zeitzonen des #-Daemons des Cron-Systems gestartet werden. # # Die Ausgabe der Crontab-Jobs (einschließlich Fehler) wird per #-E-Mail an den Benutzer gesendet, dem die Crontab-Datei gehört (sofern nicht umgeleitet). # # Beispielsweise können Sie jede Woche um 5 Uhr morgens ein Backup aller Ihrer #-Benutzerkonten ausführen mit: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # Weitere Informationen finden Sie unter Handbuchseiten von crontab(5) und cron(8) # # mh dom mon dow Befehl
Fügen Sie die Zeile unten ganz unten hinzu und speichern Sie die Datei.
*/1 * * * * /domoticz/scripts/domoticz_state_checker.sh
Jetzt wird das Skript jede Minute ausgeführt.
Wie das Skript funktioniert
Im obigen Skript wird die JSON-Antwort vom ausgewählten Gerät abgerufen. Liefert die Taste STATUS, STATUS2 oder STATUS3 den Wert „OK“, ist Domoticz online und das Skript wird beendet.
Wenn die Bedingung nicht erfüllt ist, ist Domoticz nicht verfügbar und Domoticz wird mit dem Befehl gestoppt sudo-Dienst domoticz.sh beendet
.
Dann mit dem Befehl töten
in Kombination mit anderen Parametern beendet den Domoticz-Prozess.
Am Ende des Skripts steht der Befehl sudo-Dienst domoticz.sh starten
Domoticz neu gestartet.
Teilen mit:
- Klick, um über Twitter zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Facebook zu teilen (Wird in neuem Fenster geöffnet)
- Mehr
- Klicken, um einem Freund einen Link per E-Mail zu senden (Wird in neuem Fenster geöffnet)
- Klick, um auf LinkedIn zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Reddit zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Tumblr zu teilen (Wird in neuem Fenster geöffnet)
- Klicken, um auf Telegram zu teilen (Wird in neuem Fenster geöffnet)
- Klicken, um auf WhatsApp zu teilen (Wird in neuem Fenster geöffnet)
Hallo Björn, ich habe Monit verwendet, um alle meine Prozesse auf meiner Dietpi-Box zu überprüfen und neu zu starten.
Sie erhalten optional E-Mails, um Sie daran zu erinnern, dass etwas Schlimmes passiert ist. Scheint ziemlich effektiv zu sein.
Hi,
Hallo Björn,
Unabhängig davon, welche device_id Sie in das Skript eingeben, 1 oder 2 oder 99998888, das Ergebnis von jq ist immer in Ordnung
Also für STATUS, STATUS2 und STATUS3
Hör zu!
Wenn Sie Domoticz herunterfahren, ist das Ergebnis natürlich ein Neustart.
Eine einmalige Abfrage des Status der Domoticz-Instanz liefert bereits ausreichende Ergebnisse.
Dies durch: /json.htm?type=command¶m=getversion
Danke für dieses Checker-Setup.!!
Fritten