Fehlende Meßwerte bei den DS18B20- und BME280-Sensoren

Einleitung

@ckrohne beobachtete nach der Inbetriebnahme des Datenloggers bei Willkommen, Christian! sporadisch fehlende Meßwerte bei den DS18B20- und BME280-Sensoren.

Rückfrage

Allerdings werden nicht immer alle Daten geliefert - da stellt sich mir die Frage, warum.
Es sind auch einige Fehler im Log-Protokoll zu sehen.

@Andreas: Was ist hierfür die Ursache?
Log.txt (28,2 KB)

Ich sehe hier zwei verschiedene Probleme.

1. DS18B20-Sensoren

  160.0003 [terkin.datalogger           ] INFO   : Reading sensor port "DS18X20Sensor"
  160.0358 [terkin.driver.ds18x20_sensor] INFO   : Acquire readings from all DS18X20 sensors attached to bus "onewire:0"
  160.8268 [terkin.driver.ds18x20_sensor] INFO   : Start conversion for DS18X20 devices on bus "onewire:0"
  160.9329 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff0c07c0170160"
  160.9990 [terkin.driver.ds18x20_sensor] WARNING: No response from DS18X20 device "28ff0c07c0170160"
  161.0333 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff641d8fa5514a"
  161.0994 [terkin.driver.ds18x20_sensor] WARNING: No response from DS18X20 device "28ff641d8fa5514a"
  161.1337 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff641d8fc17e49"
  161.2002 [terkin.driver.ds18x20_sensor] WARNING: No response from DS18X20 device "28ff641d8fc17e49"

Es werden scheinbar nicht immer alle Sensoren erfasst. Das kann a) an der Hardware liegen und b) kann es vielleicht mit dem “nativen” Treiber besser werden. Momentan wird bei Dir noch der “Pure-Python” Treiber verwendet:

Using pure-Python 1-Wire driver on Pycom MicroPython

Ich empfehle den “nativen Treiber”, der dann folgendermaßen Bericht abstattet:

Using native 1-Wire driver on Pycom MicroPython

Die Umschaltung klappt folgendermaßen über die Aktivierung des “driver” Attributs.

2. BME280-Sensor

  161.3903 [terkin.datalogger           ] INFO   : Reading sensor port "BME280Sensor"
  161.4255 [terkin.datalogger           ] ERROR  : Reading sensor "BME280Sensor" failed
Traceback (most recent call last):
  File "/flash/lib/terkin/datalogger.py", line 461, in read_sensors
  File "/flash/lib/terkin/util.py", line 235, in __exit__
  File "/flash/lib/terkin/datalogger.py", line 461, in read_sensors
  File "/flash/lib/terkin/driver/bme280_sensor.py", line 45, in read
  File "/flash/dist-packages/bme280_float.py", line 154, in read_compensated_data
  File "/flash/dist-packages/bme280_float.py", line 119, in read_raw_data
OSError: I2C bus error

Dass der BME280-Sensor sporadisch nicht gelesen werden kann, haben wir bisher noch nicht erlebt. Vielleicht hat sich dieses Problem jedoch auch erst neulich über Shut down peripherals regardless of using deep sleep or not · hiveeyes/terkin-datalogger@61713c7 · GitHub eingeschlichen.

Ich kann Dir später eine Variante zur Verfügung stellen, mit der wir uns vielleicht gemeinsam diesem Problem nähern und es beseitigen können? Vielen Dank schon im Voraus!

Hallo Andreas,
danke für deine Antworten.
Für Problem 1. habe ich mit der “native” Driver Konfiguration ausprobiert und Tatsache, alle Daten des DS18X20 device werden jetzt jedesmal komplett geliefert.
Gruß
Christian

2 Likes

Exzellent!

Für das zweite Problem bei den BME280-Sensoren ist dann ziemlich sicher jenes verantwortlich, das ich – mea culpa! – ungetestet committed habe.

Bus+Sensor werden einmalig zu Beginn angefahren,

   37.6635 [terkin.sensor.core          ] INFO   : Trying to find bus by name "i2c:0"
   37.6853 [terkin.sensor.core          ] INFO   : Found bus by name "i2c:0": <I2CBus object at 3f9a8490>
   37.7325 [terkin.datalogger           ] INFO   : Setting up sensor with with id=bme280-1 and type=bme280 on bus=i2c:0 with address=0x77 described as "Temperatur und Feuchte auflen"

nach dem Meßvorgang – wie kürzlich gewünscht auch unabhängig vom Deep Sleep Modus – wieder heruntergefahren,

   47.2686 [terkin.sensor.core          ] INFO   : Sending power_off to bus i2c:0
   47.3026 [terkin.sensor.core          ] INFO   : Turning off I2C bus i2c:0

und dann aber bei einem erneuten Meßvorgang vermutlich nicht wieder ordentlich aktiviert. Ich werde versuchen, das heute noch zu beheben.

2 Likes

Der entsprechende Fix ist – vorerst leider weiterhin ungetestet – per Power on I2C peripheral after power off · hiveeyes/terkin-datalogger@f35d9a6 · GitHub im Master-Branch gelandet. Vielleicht reicht das ja schon.

Per

git pull
make install

müsstest Du die Änderungen auf das Gerät bekommen.

4 posts were merged into an existing topic: Untersuchung und Verbesserung des Timings bei der Ansteuerung der DS18B20 Sensoren unter MicroPython

Hallo Andreas,

leider sehe ich nach git pull und make install immer noch das gleiche Verhalten:

  160.4814 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff641d8fa67062"
  160.5726 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff641d8fdae234"
  160.6675 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "281fe0799704030b"
  160.9884 [terkin.datalogger           ] INFO   : Reading sensor port "BME280Sensor"
  161.0226 [terkin.datalogger           ] ERROR  : Reading sensor "BME280Sensor" failed
Traceback (most recent call last):
  File "/flash/lib/terkin/datalogger.py", line 461, in read_sensors
  File "/flash/lib/terkin/util.py", line 235, in __exit__
  File "/flash/lib/terkin/datalogger.py", line 461, in read_sensors
  File "/flash/lib/terkin/driver/bme280_sensor.py", line 45, in read
  File "/flash/dist-packages/bme280_float.py", line 154, in read_compensated_data
  File "/flash/dist-packages/bme280_float.py", line 119, in read_raw_data
OSError: I2C bus error

Mit dem Output der Installation sollte es doch eigentlich die geänderte SW übernommen worden sein:

[ckrohne@centos-ck hiveeyes-micropython-firmware]$ git pull
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 13 (delta 2), reused 6 (delta 2), pack-reused 0
Unpacking objects: 100% (13/13), done.
Von https://github.com/hiveeyes/hiveeyes-micropython-firmware
   6b3671d..f7959f5  master     -> origin/master
Aktualisiere 6b3671d..f7959f5
Fast-forward
 CHANGES.rst                     |  2 ++
 terkin/driver/ds18x20_sensor.py |  5 ++++-
 terkin/sensor/core.py           | 32 +++++++++++++++++++++++++-------
 tools/setup.mk                  |  4 ++--
 4 files changed, 33 insertions(+), 10 deletions(-)

Gruß
Christian

Gut, dann muss ich mal näher in Richtung Hardware. Sorry für den Fehlversuch und sorry für die Umstände.

Hallo Christian,

es war nur ein Tippfehler! ;] Mit Fix typo within I2C bus reinitialization after power off · hiveeyes/terkin-datalogger@e9b54a3 · GitHub könnte es jetzt besser klappen.

Viele Grüße,
Andreas.

Funktioniert jetzt bei mir mit 2x DS18B20 am Bus und dem native Treiber. Mein erster Sensor war defekt.

2 Likes

Hallo,
bin heute erst wieder zum Weitertesten gekommen.
Super, nach dem Update klappt jetzt alles wunderbar.
Gruß
Christian

3 Likes

A post was split to a new topic: Batteriespannung mit der BOB-Software auslesen