[PATCH] 51_I2C_BMP180.pm verursacht Absturz bei unvollständigen Kalibrierdaten

Begonnen von jensb, 19 Dezember 2015, 13:00:23

Vorheriges Thema - Nächstes Thema

jensb

Hallo Dirk, Hallo Rudi,

wenn man gerade das define für den Drucksensor 51_I2C_BMP180 gemacht hat, der BMP180 aber noch nicht stabil über I2C zu erreichen ist, kann FHEM wegen unvollständig empfangener Kalibrierdaten beim Berechnen von Temperatur oder Druck wegen Division durch Null abstürzen (hier ist der BMP180 an einem Arduino mit Firmata über LAN angeschlossen gewesen):


2015.12.14 19:24:39 5: onI2CMessage address: '119', register: '246' data: [111,117,0]
Illegal division by zero at ./FHEM/51_I2C_BMP180.pm line 485
        main::I2C_BMP180_calcTrueTemperature('HASH(0x34b0060)', 28533) called at ./FHEM/51_I2C_BMP180.pm line 342
        main::I2C_BMP180_GetPress('HASH(0x34b0060)', '111 117 0') called at ./FHEM/51_I2C_BMP180.pm line 289
        main::I2C_BMP180_I2CRec('HASH(0x34b0060)', 'HASH(0x3ae9bf0)') called at fhem.pl line 3110
        main::CallFn('Luftdruck', 'I2CRecFn', 'HASH(0x34b0060)', 'HASH(0x3ae9bf0)') called at ./FHEM/10_FRM.pm line 704
        main::FRM_i2c_update_device('HASH(0x34b0060)', 'HASH(0x3a61e78)') called at ./FHEM/10_FRM.pm line 471
        main::FRM_forall_clients('HASH(0x34a8358)', 'CODE(0x35a9548)', 'HASH(0x3a61e78)') called at ./FHEM/10_FRM.pm line 697
        main::FRM_i2c_observer('HASH(0x3a61e78)', 'HASH(0x34a8358)') called at FHEM/lib/Device/Firmata/Platform.pm line 325
        Device::Firmata::Platform::sysex_handle('Device::Firmata::Platform=HASH(0x3a97b78)', 'HASH(0x3a97590)') called at FHEM/lib/Device/Firmata/Platform.pm line 211
        Device::Firmata::Platform::messages_handle('Device::Firmata::Platform=HASH(0x3a97b78)', 'ARRAY(0x3ae9ab8)') called at FHEM/lib/Device/Firmata/Platform.pm line 848
        Device::Firmata::Platform::poll('Device::Firmata::Platform=HASH(0x3a97b78)') called at ./FHEM/10_FRM.pm line 254
        main::FRM_Read('HASH(0x2e8d788)') called at fhem.pl line 3110
        main::CallFn('FRM:192.168.177.200:49153', 'ReadFn', 'HASH(0x2e8d788)') called at fhem.pl line 652


Der beiliegende Patch stellt sicher, dass vor allen Berechnungen erst auf das Vorhandensein des letzten Werts der Kalibrierdaten geprüft wird und ansonsten die Berechnung abgebrochen wird.

Gruß,

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

rudolfkoenig

ZitatHallo Dirk, Hallo Rudi,
Sollte ich was unternehmen?
Soweit ich es sehe, ist nur Dirk betroffen.

jensb

Hallo Rudi,

wahrschrinlich nicht,  aber die letzte Änderung am Modul hat klausw eingecheckt, deshalb bin ich mir unsicher, wer sich aktuell das Modul kümmert. Wenn du es nicht zufällig weißt, werde ich Dirk direkt ansprechen.

Danke für die Rückmeldung,

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

betateilchen

Zitat von: jensb am 19 Dezember 2015, 17:30:48
deshalb bin ich mir unsicher, wer sich aktuell das Modul kümmert. Wenn du es nicht zufällig weißt, werde ich Dirk direkt ansprechen.

Steht doch im Modul:


=head1 AUTHOR - Dirk Hoffmann
dirk@FHEM_Forum (forum.fhem.de)
modified for use with physical I2C devices by Klaus Wittstock (klausw)
=cut


Also Klaus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jensb

Hallo,

bei weiteren Test habe ich festgestellt, dass es mit Firmata auch möglich ist, dass man vollständige aber ungültige Kalibrierdaten empfangen kann, die Nullen enthalten können.

Anbei die entsprechend erweiterte Version des ursprünglichen Patches inkl. zusätzlicher Doku für die Nutzung mit Firmata.

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