Kontinuierliche Verbesserungen des Terkin-Datenloggers (600er)

Jeder Sensor am i2c-Bus muss eine eigene Adresse haben, sonst kann man sie nicht auslesen. Die BME280-Boards der Uni Bremen haben fest 0x77, kleinere von AZ-Delivery 0x76. Die Adresse ist nur durch Löten änderbar. Vielleicht gibt es ja andere breakout-Boards, bei denen die Adresse per Jumper einstellbar ist, wie z.B. beim AD-Wandler ADS1115, der mit einem AdressPin auf 4 Adressen einstellbar ist.
Fazit: wenn man mit mehreren BME280 an einem I2C-Bus messen will, müssen sie verschiedene Adressen haben.

Ja das weiß ich, daher ja 0x77 und 0x76 sind beide so gejumpert und können auch einzeln ausgelesen werden, aber halt nur, wenn ich denjenigen den ich auslesen will ‘BME280’ nenne und nicht anders.

Ok, mein Fehler,das du es so verstanden hast, habe oben den Code falsch angegeben zweimal 0x77 ist jetzt geändert.

 'bme280': [{
        'enabled': True,
        'bus': 'i2c:0',
        'address': 0x76,
    },
    {
        'enabled': True,
        'bus': 'i2c:0',
        'address': 0x77,
    }],

geht wie vermutet, auch nicht.
image
die sensoren werden übrigens an anderer stelle im Code einwandfrei erkannt, wenn der Bus gestartet wird.

OK geht jetzt, seit dem letzten Update.
Refactor "sensors"-section of configuration settings · hiveeyes/hiveeyes-micropython-firmware@2615d22 · GitHub
Habe knappe 10 min zu früh mein letztes Git Pull gemacht.:rofl:

{
        'key': 'bme280-1',
        'description': 'Temperatur und Feuchte außen',
        'type': 'BME280',
        'enabled': True,
        'bus': 'i2c:0',
        'address': 0x77,
    },
    {
        'key': 'bme280-2',
        'description': 'Temperatur und Feuchte innen',
        'type': 'BME280',
        'enabled': True,
        'bus': 'i2c:0',
        'address': 0x76,
    }

=
image

Exelent! Danke @Andreas. Hab oben gleich mal ein Fleißhäckchen gesetzt.

3 Likes

Da es mit dem BME280 so toll geklappt hat, hab ich mal versucht 2 HX711 gleichzeitig zu betreiben.
hat auch bis zu einem gewissen Maße geklappt. So wie es aussieht ließt er beide HX711 aus, schafft aber nicht den 2. HX711 auf ‘scale.1’ zu Mapen.

26.8398 [terkin.sensor.core       ] INFO   : Starting all busses [{'pin_scl': 'P10', 'number': 0, 'enabled': 
True, 'family': 'i2c', 'pin_sda': 'P9'}, {'enabled': True, 'pin_data': 'P11', 'number': 0, 'family': 'onewire'}]
26.9011 [terkin.sensor.core       ] INFO   : Found 2 I2C devices: [118, 119].
26.9197 [terkin.sensor.core       ] INFO   : Registering bus "i2c:0"
28.5114 [terkin.sensor.core       ] INFO   : Found 0 OneWire (DS18x20) devices: [].
28.5317 [terkin.sensor.core       ] INFO   : Registering bus "onewire:0"
28.5460 [terkin.datalogger        ] INFO   : Registering system sensors
28.5910 [hiveeyes.datalogger      ] INFO   : Registering Hiveeyes sensors
28.6210 [hiveeyes.datalogger      ] INFO   : Setting up HX711 sensor with key scale-1 described as "Waage 1"
29.4135 [hiveeyes.sensor_hx711    ] INFO   : Selected HX711 hardware driver "heisenberg"
29.4432 [hiveeyes.sensor_hx711    ] INFO   : Initializing HX711 sensor with pin_dout=P23, pin_pdsck=P3, gain=128, scale=4.424242, offset=-73000
29.4646 [hiveeyes.datalogger      ] INFO   : Setting up HX711 sensor with key scale-2 described as "Waage 2"
29.4841 [hiveeyes.sensor_hx711    ] INFO   : Selected HX711 hardware driver "heisenberg"
29.5118 [hiveeyes.sensor_hx711    ] INFO   : Initializing HX711 sensor with pin_dout=P22, pin_pdsck=P21, gain=128, scale=4.424242, offset=-73000
29.5353 [hiveeyes.datalogger      ] INFO   : Setting up DS18B20 sensor with key ds18b20-1 described as "Wabengasse 1"
29.5554 [hiveeyes.datalogger      ] INFO   : Skipping DS18B20 sensor ds18b20-1
29.5753 [hiveeyes.datalogger      ] INFO   : Setting up BME280 sensor with key bme280-1 described as "Temperatur und Feuchte außen"
29.5906 [terkin.sensor.core       ] INFO   : Trying to find bus by name "i2c:0"
29.6056 [terkin.sensor.core       ] INFO   : Found bus by name "i2c:0": <I2CBus object at 3f9af3e0>
29.6343 [hiveeyes.datalogger      ] INFO   : Setting up BME280 sensor with key bme280-2 described as "Temperatur und Feuchte innen"
29.6513 [terkin.sensor.core       ] INFO   : Trying to find bus by name "i2c:0"
29.6663 [terkin.sensor.core       ] INFO   : Found bus by name "i2c:0": <I2CBus object at 3f9af3e0>
29.6933 [terkin.sensor.core       ] INFO   : Sending power_on to sensor HX711Sensor
29.7082 [hiveeyes.sensor_hx711    ] INFO   : Powering up HX711
29.7226 [hx711                    ] INFO   : HX711 power up
29.7415 [terkin.sensor.core       ] INFO   : Sending power_on to sensor HX711Sensor
29.7576 [hiveeyes.sensor_hx711    ] INFO   : Powering up HX711
29.7722 [hx711                    ] INFO   : HX711 power up
29.7869 [terkin.datalogger        ] INFO   : --- loop ---
29.8031 [terkin.datalogger        ] INFO   : Reading 9 sensor ports
29.8181 [terkin.datalogger        ] INFO   : Reading sensor port "SystemMemoryFree"
29.8988 [terkin.datalogger        ] INFO   : Reading sensor port "SystemTemperature"
29.9683 [terkin.datalogger        ] INFO   : Reading sensor port "SystemBatteryLevel"
30.1006 [terkin.datalogger        ] INFO   : Reading sensor port "SystemUptime"
30.1169 [terkin.datalogger        ] INFO   : Reading sensor port "SystemWiFiMetrics"
30.1392 [terkin.datalogger        ] INFO   : Reading sensor port "HX711Sensor"
30.1553 [hx711                    ] INFO   : HX711 power up
30.1702 [hx711                    ] INFO   : Initialization started
30.1847 [hx711                    ] INFO   : Initialization succeeded
30.2444 [terkin.datalogger        ] INFO   : Reading sensor port "HX711Sensor"
30.2617 [hx711                    ] INFO   : HX711 power up
30.2763 [hx711                    ] INFO   : Initialization started
30.2908 [hx711                    ] INFO   : Initialization succeeded
30.3509 [terkin.datalogger        ] INFO   : Reading sensor port "BME280Sensor"
30.4554 [terkin.datalogger        ] INFO   : Reading sensor port "BME280Sensor"
30.7881 [terkin.datalogger        ] INFO   : Sensor data:

                                            humidity.0x76.i2c:0: 57.59
                                            humidity.0x77.i2c:0: 54.52
                                            pressure.0x76.i2c:0: 1012.34
                                            pressure.0x77.i2c:0: 1013.45
                                            scale.0.kg: 16500.0
                                            scale.0.offset: -73000
                                            scale.0.raw: 0.0
                                            scale.0.scale: 4.424242
                                            system.memfree: 2123232
                                            system.runtime: 16
                                            system.temperature: 43.21738
                                            system.time: 34
                                            system.uptime: 2926.344
                                            system.voltage: 2.2524
                                            system.wifi.bandwidth: 2
                                            system.wifi.channel: 11
                                            system.wifi.country: DE
                                            system.wifi.max_tx_power: 78
                                            system.wifi.rssi: -65
                                            temperature.0x76.i2c:0: 25.91
                                            temperature.0x77.i2c:0: 26.76
                                            weight.0: 16500.0

Settings:

 {
        'key': 'scale-1',
        'name': 'scale1',
        'description': 'Waage 1',
        'type': 'HX711',
        'enabled': True,
        'address': 0x00,
        'pin_dout': 'P23',
        'pin_pdsck': 'P3',
        'scale': 4.424242,
        'offset': -73000,
    },
    {
        'key': 'scale-2',
        'name': 'scale2',
        'description': 'Waage 2',
        'type': 'HX711',
        'enabled': True,
        'address': 0x00,
        'pin_dout': 'P22',
        'pin_pdsck': 'P21',
        'scale': 4.424242,
        'offset': -73000,
    },

Mit diesem Attribut kannst Du die Nummer angeben. Beim BME280 ist diese physisch, beim HX711 synthetisch – beides hat aber die gleichen Auswirkungen in Richtung Telemetriesubsystem, so dass das gewünschte passiert.

Mit Settings: Rename HX711 enumeration attribute from "address" to "number" · hiveeyes/hiveeyes-micropython-firmware@6ab4f56 · GitHub heißt das Attribut nun “number” und steht prominenter ganz oben im Konfigurationsblock [1], so dass es besser ins Auge fällt und semantischer leichter zugänglich ist (naming things).


  1. Todo: Details der Sensorkonfigurationsblöcke ausführlich kommentieren. ↩︎

1 Like

In der neuen Firmware-Version sind einzelne DS18B20 via settings.py an- und abschaltbar, ist das optional oder obligatorisch?

        'devices': {
            '1': {
                'enabled': True,
                #'offset': 0.42,
            },
            '2': {
                'enabled': True,
                #'offset': -0.42,
            },
        },

Früher konnte man einfach Sensoren dranhängen, ob 1 oder 5 oder 10 muss jetzt jeder explizit aufgeührt werden? Was ist 1, 2, sind das die Adressen / IDs, wie bei der BOB-Konfiguration? "temperature.28ff641d8fdae234.onewire:0": "t_i_1", also müsste ich oben statt 1 das eingeben 28ff641d8fdae234?

DS18B20-Konfiguration v1

Exakt. Die Blaupause für eine Konfiguration sieht derzeit so aus:

'devices': {
    '28ff641d8fdf18c1': {
        'enabled': True,
        #'offset': 0.42,
    },
    '28ff641d8fc3944f': {
        'enabled': True,
        #'offset': -0.42,
    },
}

enabled ist optional und implementiert als Standardwert True. Alle dort konfigurierten DS18B20-Sensoren sind also standardmäßig angeschaltet und können bei Bedarf abgeschaltet bzw. softwareseitig deaktiviert werden.

Das Attribut offset is ebenfalls optional.

DS18B20-Konfiguration v2-regular

Wir werden die Struktur dieses Schnipsels vermutlich auch noch einmal umbauen in Richtung:

'devices': [
    {
    	'id': 'ds18b20-w1r1',
    	'address': '28ff641d8fdf18c1',
    	'description': 'Wabengasse 1, Rahmen 1',
        'enabled': True,
        'offset': 0.42,
    },
    {
    	'id': 'ds18b20-w1r2',
    	'address': '28ff641d8fc3944f',
    	'description': 'Wabengasse 1, Rahmen 2',
        'enabled': True,
        'offset': -0.42,
    },
],

DS18B20-Konfiguration v2-minimal

Die bei v2-regular angegebenen Attribute beschreiben die volle Ausbaustufe. Die Attribute description, enabled sowie offset sind jedoch optional. Wenn man keine Konfiguration über die HTTP-API braucht, bleibt auch das id-Feld optional.

Eine minimale Konfiguration sähe also folgendermaßen aus:

'devices': [
    {
    	'address': '28ff641d8fdf18c1',
    },
    {
    	'address': '28ff641d8fc3944f',
    },
],

DS18B20-Konfiguration v2-goofy

Für den v2-minimal Konfigurationsstil wäre noch eine “shortcut notation” denkbar, die folgendermaßen aussehen könnte:

'devices': [
    '28ff641d8fdf18c1',
    '28ff641d8fc3944f',
],

:warning: Anmerkung: Derzeit implementiert die Firmware ausschließlich die erste Variante “DS18B20-Konfiguration v1”.

Aus welcher Box hattest Du denn das Pony genommen, das Dir die Aufzählung/Konfiguration per "1" oder "2" ans Herz gelegt hat? Da sollten wir schauen, dass wir die Beschriftung ändern.

Hatte nur aus 1111111111111111 eine einfache 1 gemacht.

Die Angabe der ID ist aber obligatorisch, dann Henne-Ei-Problem: Wie komme ich denn an die IDs, wenn ich sie für die Anzeige via Output zuerst in die settings.py eintragen muss?

Erwischt!

Es gibt derzeit nur eine Möglichkeit: Erstmal den Bus richtig konfigurieren per

'busses': [
    {
        "id": "onewire:0",
        "family": "onewire",
        "number": 0,
        "enabled": True,
        "pin_data": "P11",
    },
]

und dann beim Hochfahren zuschauen und die Sensor-Adressen der DS18B20 am 1-Wire Bus aus der Logausgabe auslesen.

   19.0344 [terkin.sensor            ] INFO   : Found 2 OneWire (DS18x20) devices: [b'28ff641d8fdf18c1', b'28ff641d8fc3944f'].

Eine weitere Möglichkeit schaffen wir gerade drüben bei

Ich habe momentan mit den 2x HX711 gerade noch ein paar Probleme. Wie ich sehe bekomme ich von den HX711 gerade keine Werte.

humidity.0x76.i2c:0: 57.63
humidity.0x77.i2c:0: 55.94
pressure.0x76.i2c:0: 1012.72
pressure.0x77.i2c:0: 1013.74
scale.0.kg: 16500.0
scale.0.offset: -73000
scale.0.raw: 0.0
scale.0.scale: 4.424242
scale.1.kg: 16500.0
scale.1.offset: -73000
scale.1.raw: 0.0
scale.1.scale: 4.424242
system.memfree: 2122224
system.runtime: 17
system.temperature: 43.21738
system.time: 142
system.uptime: 39830.03
system.voltage: 2.2524
system.wifi.bandwidth: 2
system.wifi.channel: 11
system.wifi.country: DE
system.wifi.max_tx_power: 78
system.wifi.rssi: -62
temperature.0x76.i2c:0: 26.58
temperature.0x77.i2c:0: 27.03
weight.0: 16500.0
weight.1: 16500.0

muß noch schauen ob es bei mir an der Config, am Board oder sogar der neuen Firmware Version liegt. Hab ja gerade das hier im gange.

1 Like

Bei mir geht noch was. Allerdings in der ursprünglichen Hardwarekonfiguration mit 1x HX711 per Designierte Pinbelegung für ESP32 auf FiPy-Board.

scale.0.raw: 70257.17

bei mir ist es jetzt auch wieder OK.
Hab aber noch nicht rausgefunden was ich vorher falsch hatte.
Die richtigen Pins für einen 2. HX711 ist allerdings nicht so leicht zu finden ist ja alles schon intern belegt oder die pins können kein pullup was wieder Fehlermeldungen hervorruft hab ihn jetzt erfolgreich auf p3 und p23 Getestet

Fürs Logbook:

  • Check configuration of multiple HX711 sensors.

  • Check configuration of multiple BME280 sensors.

  • Check configuration of multiple HX711 and BME280 sensors at the same time.

    scale.0.raw: 413133.7
    scale.1.raw: 33890.83
    

:+1:

1 Like

Die letzten Änderungen

haben u.a. folgende Dinge mitgebracht.

DS18B20-Konfiguration

Die Schnipsel zur Konfiguration einzelner DS18B20-Sensoren haben sich in ihrer Struktur geändert.

Verbesserte Log-Ausgabe

Statt eines kaum lesbaren JSON-Containers kann man optional auch folgende deutlich übersichtlichere Log-Ausgabe der Sensorwerte erhalten.

Einschalten lässt sich diese Option per sensors.prettify_log = True.

131.8821 [terkin.datalogger        ] INFO   : Sensor data:

humidity.0x77.i2c:0                          49.87    Temperatur und Feuchte außen
pressure.0x77.i2c:0                        1010.37    Temperatur und Feuchte außen
scale.0.kg                                   0.762    Waage 1
scale.0.offset                             87448.7    Waage 1
scale.0.raw                                70111.3    Waage 1
scale.0.scale                               -22743    Waage 1
system.memfree                             2148656
system.runtime                                  12
system.temperature                         39.3913
system.time                                     32
system.uptime                              1277.57
system.voltage                               3.822
system.wifi.bandwidth                            2
system.wifi.channel                              8
system.wifi.country                             DE
system.wifi.max_tx_power                        78
system.wifi.rssi                               -48
temperature.0x77.i2c:0                       23.76    Temperatur und Feuchte außen
temperature.28ff641d8fc3944f.onewire:0      22.705    Wabengasse 1, Rahmen 2
temperature.28ff641d8fdf18c1.onewire:0      26.545    Wabengasse 1, Rahmen 1
weight.0                                     0.762    Waage 1

Verbesserte HTTP API

Dafür gibt es den neuen Endpunkt /api/v1/peripherals/sensors/ds18b20 als schlauere Schwester von

  • /api/v1/peripherals/busses
  • /api/v1/peripherals/sensors

Terkin HTTP API » Peripherals

1 Like

Jaaaa, endlich, sehr schön!!!

3 posts were merged into an existing topic: MicroPython module freezing

8 posts were merged into an existing topic: MicroPython-Firmware schmirgeln (240er)

Drüben bei Terkin-Datenlogger interaktiv ist nachzulesen, wie das laufende Datenlogger Programm unterbrochen werden kann, um es interaktiv zu erforschen.

Beispiel

>>> datalogger.device.application_info.fullname
'Bee Observer Datalogger 0.5.1'

>>> datalogger.device.device_id
'807d3ac342bc'

>>> datalogger.read_sensors()
{'system.uptime': 1280.16, 'system.wifi.country': 'DE', 'scale.0.offset': 87448.65, 'weight.0': 0.712, 'scale.0.kg': 0.712, 'system.wifi.bandwidth': 2, 'system.wifi.rssi': -44, 'system.voltage': 3.822, 'system.temperature': 37.47827, 'system.wifi.channel': 8, 'temperature.28ff641d8fdf18c1.onewire:0': 28.045, 'system.memfree': 2329376, 'scale.0.scale': -22742.99, 'system.runtime': 1204, 'scale.0.raw': 71262.5, 'system.time': 1216, 'system.wifi.max_tx_power': 78, 'temperature.28ff641d8fc3944f.onewire:0': 24.205}

:aquarius: Last call for upcoming version 0.6.0

Einleitung

Seit einiger Zeit versuchen wir, die Version 0.6.0dev reif für ein Release zu bekommen. Wir haben seither einige wichtige Dinge realisiert, die wir bisher haben links liegen lassen. Vielen lieben Dank an alle, die daran mitgewirkt haben!

Essentials

Neben den versprengten Backlog Einträgen bei [Backlog] Terkin-Datenlogger für BOB und anderswo wollten wir nun noch einmal in die Runde fragen, welche absolut essentiellen Dinge aus Eurer Sicht noch für einen reibungslosen autonomen Betrieb im Feld notwendig sein könnten.

Sammlung

Low-voltage cut-off

Aus dem Stegreif fällt mir ein guter yet pragmatischer low-voltage-cutoff Mechanismus ein, den wir doch bestimmt gerne noch mit im Boot hätten? Vielleicht können wir diesen gemeinsam gestalten – es wird vermutlich keine Rocket Science sein, aber der Teufel steckt ja wie immer im Detail.

More

Ansonsten können wir hier gern noch ein paar lose Ideen zusammentragen, die noch nicht in [Backlog] Terkin-Datenlogger für BOB enthalten sind. Der Fokus darf dabei aber getreu des Aufhängers gerne auf absolutely essential liegen.

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