FHEM neu starten, wenn ein State eine bestimmte Zeit nicht aktualisiert wurde

Begonnen von Daniel_fhem, 29 Mai 2020, 07:17:53

Vorheriges Thema - Nächstes Thema

Daniel_fhem

Hi Leute,

ich habe bei mir FHEM für Enocean am laufen. Das Enocean wurde mit einem USB Gateway eingebunden.
Da hier die gesamte Lichtsteuerung vom Haus drauf hängt, ist es natürlich wichtig, dass das immer läuft.

Grundsätzlich werden bei mir die States der einzelnen Geräte alle paar Sekunden automatisch aktualisiert. Das passiert deshalb, da das USB Gateway von Eltako automatisch alle paar Sekunden die gesamten States überträgt.

Hin und wieder kommt es aber vor, dass die USB Verbindung beendet wird und sofort wieder verbunden wird. Dann ist zwar das Gateway wieder verbunden (ich kann also auch über fhem das Licht wieder schalten), jedoch wird nicht mehr zyklisch aktualisiert. Das hat das Problem, dass die Befehle vom Lichtschalter nicht an FHEM ankommen. Nach einem Neustart von FHEM (also nicht vom ganzen Server) funktioniert jedoch wieder alles normal.

Als workaround dachte ich mir, dass ich einfach den Zeitstempel von einem State eines Enocean Geräts abfrage und wenn der Zeitstempel älter als z.B. 3 Minuten ist, dass dann FHEM neu gestartet wird.

Wie kann ich das realisieren?

KernSani

Ich bezweifle, dass das der richtige Ansatz ist. Hilft es vielleicht auch, das Gateway neu zu initialisieren? Ich kenne Enocean nicht, aber die meisten Gateways haben ja einen reopen Befehl o.ä.
Zum Überwachen könntest du z.B. das monitoring Modul nutzen.


Kurz, weil mobil....
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

eki

Das kannst Du z.B. mit folgenden Modulen machen die bereits vorhanden sind (im Forum gibt es dazu jede Menge Ideen):
monitoring, DOIF, watchdog

Beispiele mit monitoring gibt es hier:
https://forum.fhem.de/index.php/topic,68765.msg602461.html#msg602461

Daniel_fhem

Dankeschön euch 2.

Habe jetzt einen Watchdog erstellt. Ich denke das müsste schon ausreichend sein oder?

define autorestart_watchdog watchdog EnOcean_00000011 00:10 SAME "shutdown restart"

Nach meiner Idee, sollte dieser Watchdog den Befehl "shutdown restart" ausführen, wenn das Gerät EnOcean_00000011 10 Minuten lang nicht aktualisiert wurde.

Ist das so korrekt?

eki

Soweit ich verstehe, dann passiert das genau ein mal wenn Du das so machst. Nach dem Restart müsstest Du das dann wieder aktivieren (zusätzliches Kommando trigger <watchdog> und möglicherweise save). Ansonsten müsste es aber gehen (ich hätte eher monitoring verwendet, das ist speziell dafür gemacht).

Wernieman

Ich würdeauch den anderen Vorschlägen nachgehen. Ist ein "reopen" des IO-Devices möglich?

Reboot ist dann doch schon "die große" Keule ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Daniel_fhem

Danke euch beiden.

Habe jetzt den watchdog noch erweitert um einen Trigger.

define autorestart_watchdog watchdog EnOcean_00000011 00:10 SAME "shutdown restart";; trigger autorestart_watchdog .

Geht das so in Ordnung?

Ich habe mich bevor ich den Watchdog angelegt habe, mit dem monitoring modul befasst. Konnte mit der commandref hier nicht viel anfangen :/. Das mit dem watchdog kam mir viel leichter vor und scheint auch so zu funktionieren.

Bezüglich "reopen". Wüsste nicht, wie ich das bei meinem Device machen könnte. Wäre mir natürlich lieber, aber glaube nicht, dass das im enocean modul vorgesehen ist. Kenne mich aber leider nicht so gut aus mit fhem. Bei mir läuft neben fhem noch eine andere Software. Fhem ist bei mir dabei nur eine Schnittstelle zwischen der anderen Software und der Hardware. Daher ist ein Neustart von fhem nicht so gravierend für mich.
Früher hatte ich das so gelöst, dass jede Änderung von fhem (selbst wenn sie gleich bleibt => siehe zyklisches Abfragen am Anfang von meinem Post) direkt an die andere Software weitergeleitet wurde. Daher konnte ich so den Neustart von FHEM über die andere Software auslösen. Das funktionierte auch einwandfrei so wie ich das wollte. Durch eine Umstellung werden aber "nur mehr" die Änderungen übertragen und so kann ich den Datenpunkt nicht mehr auf die 10 min überprüfen. Daher musste jetzt eine Lösung her, die direkt von fhem gemacht wird.

Beta-User

Also zumindest das IO vom TYPE=TCM scheint einen "reset" command zu kennen: https://fhem.de/commandref_modular.html#TCM.

Was für ein IO nutzt du? (Evtl. wäre ein list hilfreich...).

Aber selbst, wenn das funktioniert, ist es m.E. nur eine Notlösung; richtiger wäre es rauszufinden, warum sich das IO überhaupt weghängt. (z.B. USB-Power-Problem?)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files