ReadyFn - DevIo - Erkennung Verbindungsunterbrechung

Begonnen von olwaldi, 18 Februar 2026, 08:33:40

Vorheriges Thema - Nächstes Thema

olwaldi

Mir ist unklar, woran fhem erkennen kann, wenn eine Verbindung aus irgendeinem Grund unterbrochen wird.

Im Modul DENON_AVR gibts die Funktion DENON_AVR_ConnectionCheck, die regelmäßig eine Botschaft an das Gerät schickt und später guckt, ob eine Antwort eingegangen ist. Und damit kann DENON_AVR gut erkennen, wenn was schiefgelaufen ist.

Im Prinzip macht die ReadyFn-Funktionalität ja genau dasselbe, schickt aber aktiv keine Nachricht an's Gerät. Erst wenn DevIo_SimpleRead aufgerufen wird und keine Daten erhält, wird der Timer für ReadyFn gestartet. DevIo_SimpleRead wird aber erst dann von DENON_AVR_Read aufgerufen, wenn fhem Daten "sieht". Das passiert aber doch bei einer unterbrochene Verbindung gar nicht mehr.

Grüßle, Michael

rudolfkoenig

ZitatMir ist unklar, woran fhem erkennen kann, wenn eine Verbindung aus irgendeinem Grund unterbrochen wird.

Haengt von Modul ab.

Bei Netzwerk (TCP/IP): falls auf der anderen Seite das Programm beendet wird, dann schickt das Betriebsystem der Gegenseite fuer diese Verbindung eine Close-Nachricht, was wiederum als Read ohne Laenge auf der FHEM-Seite ankommt.
Falls das OS kein Close schickt (z.Bsp. weil der Stecker gezogen wurde), dann wird das Problem von FHEM nach ca 2 Stunden erkannt, weil das OS unter FHEM nach dieser Zeit per TCP Ping das Problem mitkriegt.

Natuerlich kann ein Modul zusaetzlich ping/keepalive implementieren, um die Zeitspanne zu verkuerzen, MQTT macht das.

ReadyFn wird vom FHEM Framework aufgerufen, um zu pruefen, ob die Gegenseite wieder da ist.
Zusaetzlich ist diese Funktion unter Windows bei seriellen Verbindungen notwendig, da select@Windows nur Netzwerkverbindungen behandeln kann.
Solche Verbindungen werden unter Windows gepollt.