[patch] 11_OWX_FRM.pm & FHEM-Crash

Begonnen von jensb, 02 Januar 2018, 14:19:14

Vorheriges Thema - Nächstes Thema

jensb

Wenn OneWire-Devices an Firmata-Devices angeschlossen werden, kann es zu Fehlkonfigurationen kommen (z.B. nicht existierenden Pin konfiguriert oder der Verbindungsaufbau zwischen FHEM und Firmata-Device ist gestört - dann stehen die Metadaten des Firmata-Devices nicht zur Verfügung). Derartige Fehler führen derzeit zum Absturz von FHEM, da der Firmata-Treiber sich gegen unplausible Zugriffe wehrt (siehe z.B. Fehlerbeschreibung aus diesen Thread) und der Anwendungscode das Einfangen und Behandeln sollte .

Der beigefügte Patch führt die Fehlerbehandlung durch (eval) und wurde von @ThoTo und mir erfolgreich getestet. Als Ergebnis der Fehlerbehandlung steht dann im "state" reading des OWX-Devices z.B. "error initializing: pin 5".

Grüße,
Jens

UPDATE 07.01.2019: Patch aktualisiert, nun werden alle perl-firmata Aufrufe mit eval abgesichert.
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

jensb

Patch aktualisiert, nun erfolgt die OneWire-Initialisierung nach jedem Firmata-Connect.

@pah
Der Ansatz für den Reconnect ist Low-Level  (siehe Define und Init), aber so können die vorhandenen Abläufe und das OWX-Modul unverändert bleiben.

Mit einer ähnlichen Vorgehensweise könnte man das "reopen" Kommando von OWX in der Weboberfläche bei Verwendung von FRM unsichtbar machen, damit es durch unbedachten Aufruf nicht zu Fehlern kommt (siehe hier). Besser wäre es aber "reopen" in die Klassendefinition aufzunehmen und schnittstellenspezifisch zu implementieren.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Prof. Dr. Peter Henning

OK, kann ich das dann so übernehmen ?

LG

pah

jensb

Hallo pah,

du kannst das so übernehmen, habe keine weiteren Änderungen gemacht. Die Rückmeldungen waren zuletzt positiv (z.B. hier, hier und hier).

Die Randproblematik mit dem "reopen" bin ich nicht angegangen, da dafür auch Anpassungen an OWX erforderlich wären (z.B. in der SetFn "reopen" blockieren, wenn OWX_FRM verwendet wird).

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Prof. Dr. Peter Henning

OK, habe den Patch übernommen, wird umgehend eingecheckt. Danke für die Mitwirkung.

Reopen wird eine Weile dauern.

LG

pah

JensS

Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

JensS

Mir ist etwas seltsames aufgefallen. Wenn ich "/etc/init.d/fhem stop" ausführe, werden meinen FRM-OWX-Devices in der fhem.cfg wieder IODevs zugeordnet. Das passiert allerdings nur bei "stop", nicht bei "start" oder bei "shutdown restart". Die Module sind aktuell.00_OWX.pm      15904 2018-01-16 09:19:19Z phenning
11_OWX_FRM.pm  15978 2018-01-24 07:27:33Z phenning


Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

stefan-dd

Dort gibt es noch ein Problem, aber keine Abhilfe.

JensS

Mittlerweile habe ich neue Info's.
Das Attribut IODev wird nach dem Start von FHEM temporär angelegt. In der fhem.cfg erscheint kein Eintrag. Nach einem Neustart passiert das Gleiche. Sobald ich einmal "Save config" aufrufe, wird es in die fhem.cfg geschrieben und FHEM meckert korrekt beim Neustart, dass es ein solches Attribut nicht gibt. Ich vermute, es liegt am Aufruf von AssignIoPort in der 10_FRM.pm. Also werde ich mich vertrauensvoll an jensb wenden.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

jensb

Hallo Jens,

danke für die Blumen, aber so merkwürdig dir das Verhalten vorkommen mag, es ist grundsätzlich richtig:

FRM ist das IODev für OWX (also die Schnittstelle, die OWX verwendet, um an die OneWire-Devices zu kommen). Zum Registrieren ruft das Modul OWX_FRM FRM_Init_Pin_Client auf und das wiederum ruft AssignIoPort auf. Letzteres ist eine Funktion des FHEM-Kerns und diese Funktion legt das Attribut an, wenn es fehlt. Es ist ein FHEM-Standard, dass das IODev beim Slave-Device (in diesem Fall OWX) als Attribut registriert wird.

Schau dir zum Vergleich mal ein OneWire-Device an (z.B. OWTHERM) - da ist das OWX-Modul als IODev-Attribut gesetzt.

Dass sich andererseits FHEM beim Starten über das Attribut beschwert, liegt wiederum daran, dass OWX_FRM kein eigenständiges Modul ist, sonder eine Klasse, die vom Modul OWX eingebunden wird. Das OWX Modul ist selbst IODev für andere Module, sieht aber aktuell nicht in vollem Umfang vor, dass es bei Verwendung von OWX_FRM selbst auf ein IODev angewiesen ist. Was fehlt, um die Fehlermeldung zu verhindern, ist in Zeile 131ff von 00_OWX.pm folgendes einzutragen:

  $hash->{AttrList}= "asynchronous:0,1 dokick:0,1 ".
                     "interval timeout opendelay expert:0_def,1_detail ".
                     "IODev ".
                     $readingFnAttributes;   


Diese Änderung müsste @pah integrieren.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Prof. Dr. Peter Henning


stefan-dd

Wenn es mal länger dauert...

ZitatUnsinn, aber hoch drei.

11_OWX_FRM wurde gepatcht, siehe den entsprechenden Thread.

pah

Mit der vorgeschlagenen Änderung ist die Meldung weg.

JensS

@pah

Danke für's Einchecken. Die Meldung ist nun weg.  :)

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.