Starten Sie Domoticz automatisch neu

Starten Sie Domoticz automatisch neu

8. Dezember 2021 2 Von Björn Meijer

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:

  1. Domoticz_ip ist die (interne) IP-Adresse Ihres Raspberry Pi.
  2. domoticz_port Geben Sie den Port ein, auf dem Ihr Domoticz läuft.
  3. 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.