Konfiguration des Datenloggers per "settings.example-bob.py" verbessern

Hallo @MKO,
vielen Dank für deine Hilfe bei Upload und initiale Konfiguration der MicroPython-Firmware. Inzwischen habe ich die Temperatur Sensoren in der settings.py eingetragen. In der BOB App tauchen aber leider immer noch nicht alle Sensoren auf :frowning:. Der Weight Sensor taucht auch gar nicht auf. In der Telnet Verbindung sehe ich einen Unterschied zwischen den Werten mit und ohne Gewicht auf der Waage. Meine Vermutung ist aktuell, dass in der Settings.py irgend etwas anderes nicht richtig konfiguriert ist.
@Andreas: muss an der settings.py noch etwas signifikant geändert werden im Gegensatz zu der Settings.example-bob.py? Habe ich etwas übersehen?
Sonnige Grüße
Andreas

Hi @waggi,

danke dass Du dran bleibst.

Die settings.example-bob.py sollte die Blaupause für eine gelingende Konfiguration darstellen – sofern ich dabei nichts übersehen habe.

Dazu müsstest Du mir Deine aktuelle settings.py kurz mitteilen, dann könnte ich mal drüber schauen. Wenn Du bei der Gelegenheit einen vollen Log-Auszug mitsendest, wie er Dir über serielle oder die Telnet-Konsole präsentiert wird, kann ich es sogar gegen Deinen aktuellen Gerätezustand halten und dabei u.U. Anomalien feststellen und den Fehlerteufel verjagen. Ohne Gewähr, versteht sich ;].

Viele Grüße,
Andreas.

Hallo @Andreas,

danke für die schnelle Antwort. Meine aktuelle Settings.py sieht so aus:
"""Datalogger configuration"""

    # General settings.
    main = {

    # Measurement interval in seconds.
    # TODO: Please note this is not the _real thing_ yet at it will just use
    #       this value to apply to ``time.sleep()`` after each duty cycle.
    'interval': 2.0,

    # Whether to use deep sleep between measurement cycles.
    'deepsleep': False,

    # Configure logging.
    'logging': {

        # Enable or disable logging completely.
        'enabled': True,

        # Log configuration settings at system startup.
        'configuration': True,
    },

    # Configure Watchdog.
    'watchdog': {

        # Enable or disable Watchdog completely.
        'enabled': False,

        # Watchdog timeout in milliseconds.
        'timeout': 20000,
    },

    # Configure RGB-LED.
    'rgb_led': {
        'heartbeat': True,
    },

}

# Interface settings.
interfaces = {
    'uart0': {
        'terminal': True,
    }
}

# Networking configuration.
networking = {
    'wifi': {
        # WiFi stations to connect to in STA mode.
        'stations': [

            # Variant 1: Use DHCP.

            # Variant 1a: Straight forward.
            {'ssid': 'Speedy_Gonzales', 'password': '{redacted}'},

            # Variant 1b: Configure timeout (default: 15 seconds).
            # Configure this to decrease or increase the maximum time in
            # seconds to wait for the connection to succeed.
            #{'ssid': 'FooBar', 'password': 'SECRET', 'timeout': 5.0},

            # Variant 2: Using static IP address.
            #{
            #    'ssid': 'FooBar',
            #    'password': 'SECRET',
            #    # Use static network configuration (ip, subnet_mask, gateway, DNS_server).
            #    'ifconfig': ('192.168.42.42', '255.255.255.0', '192.168.42.1', '192.168.42.1'),
            #},
        ],
    },
}

# Telemetry configuration.
telemetry = {
    'targets': [

        # Hiveeyes telemetry: JSON over MQTT
        {
            # Enable/disable this telemetry target.
            'enabled': True,

            # Define telemetry endpoint and address information.
            'endpoint': 'mqtt://swarm.hiveeyes.org',
            'topology': 'mqttkit',
            'address': {
                "realm": "hiveeyes",
                "network": "testdrive",
                "gateway": "Waggi-micropyton",
                "node": "FiPY-Test",
            },
        },

        # Beep telemetry: JSON over HTTP
        {
            # Enable/disable this telemetry target.
            'enabled': True,

            # Define telemetry endpoint and address information.
            'endpoint': 'https://bee-observer.org/api/sensors',
            'topology': 'beep-bob',
            'data': {
                'key': '{redacted}',
            },
        },

    ],
}

# Sensor configuration.
sensors = {
    'system': {

        # Adjust voltage divider resistor values matching the board.
        #
        # See also
        # - https://forum.pycom.io/topic/3776/adc-use-to-measure-battery-level-vin-level
        # - https://github.com/hiveeyes/hiveeyes-micropython-firmware/issues/5
        # - https://community.hiveeyes.org/t/batterieuberwachung-voltage-divider-und-attenuation-fur-microypthon-firmware/2128
        #
        # As a reference (all readings using 6dB attenuation unless otherwise noted):
        #
        # - Pycom Expansion board v3.0: 115 kΩ / 56 kΩ
        # - Pycom Expansion board v3.1: 1 MΩ / 1 MΩ
        # - Pycom Expansion board v3.2: 1 MΩ / 1 MΩ
        # - BOB-HAT-V5: 1 MΩ / 470 kΩ or 220 kΩ
        # - BOB-SHIELD: 10 MΩ / 2 MΩ
        # - Air Quality monitor: 100kΩ / 47 kΩ, measured with 2.5dB attenuation

        # These settings are matching the resistor values of the Pycom Expansion Board 3.1 and 3.2.
        'vcc': {

            'pin': 'P16',

            # Main resistor value (R1).
            'resistor_r1': 1000,

            # Resistor between input pin and ground (R2).
            'resistor_r2': 1000,
        },

        # Settings for button events, e.g. through touch pads.
        'buttons': {
            'enabled': False,
        },
    },
    'registry': {
        'hx711': {
            'address': 0x00,
            'pin_dout': 'P22',
            'pin_pdsck': 'P21',
            'scale': 3.1592,
            'offset': -3159.0,
        },
        'ds18x20': {
            'bus': 'onewire:0',
        },
        'bme280': {
            'bus': 'i2c:0',
            'address': 0x77,
        },
    },
    'busses': [
        {
            "family": "i2c",
            "number": 0,
            "enabled": True,
            "pin_sda": "P9",
            "pin_scl": "P10",
        },
        {
            "family": "onewire",
            "number": 0,
            "enabled": True,
            "pin_data": "P11",
        },
    ]
}

# Map sensor field names to telemetry field names.
# Right now, please adapt this according to your sensor configuration by
# looking at the console output of the line
# `[terkin.datalogger] INFO: Sensor data`. Thanks!
#
# Remark:
# This will be replaced by runtime configuration through
# HTTP API and captive portal.
sensor_telemetry_map = {
    "_version": "1.0.0",
    "temperature.0x77.i2c:0": "t",
    "humidity.0x77.i2c:0": "h",
    "pressure.0x77.i2c:0": "p",
    "weight.0": "weight",
    "temperature.282df57997040326.onewire:0": "t_i_1",
    "temperature.28d5f979970403d4.onewire:0": "t_i_2",
    "temperature.28becd7997040374.onewire:0": "t_i_3",
	"temperature.282657799704036e.onewire:0": "t_i_4",
	"temperature.2863e879970403d0.onewire:0": "t_i_5",
	"temperature.284ba979970403e3.onewire:0": "t_i_6",
    "system.temperature": "t_i_7",
} 

Und hier ein eine Kopie aus meinem Log:

rature.2863e879970403d0.onewire:0': 22.0, 'scale.0.kg': -47003.88, 'system.wifi.rssi': -60, 'system.wifi.country': 'DE', 'temperature.284ba979970403e3.onewire:0': 22.625, 'system.time': 2097, 'scale.0.offset': -3159.0, 'system.wifi.channel': 6, 'humidity.0x77.i2c:0': 53.32, 'temperature.28becd7997040374.onewire:0': 22.3125, 'system.memfree': 2391536, 'temperature.28d5f979970403d4.onewire:0': 22.5625, 'system.voltage': 1.642, 'scale.0.raw': -151653.7, 'pressure.0x77.i2c:0': 1002.46, 'weight.0': -47003.88, 'scale.0.scale': 3.1592, 'system.wifi.max_tx_power': 78, 'system.wifi.bandwidth': 2, 'system.uptime': 2097.534, 'system.runtime': 2082, 'temperature.282df57997040326.onewire:0': 22.875}
 2104.3203 [terkin.telemetry         ] DEBUG  : MQTT topic:   hiveeyes/testdrive/Waggi-micropyton/FiPY-Test/data.json
 2104.3365 [terkin.telemetry         ] DEBUG  : MQTT payload: {"temperature.282657799704036e.onewire:0": 23.125, "temperature.0x77.i2c:0": 22.63, "system.temperature": 29.82608, "temperature.2863e879970403d0.onewire:0": 22.0, "scale.0.kg": -47003.88, "system.wifi.rssi": -60, "system.wifi.country": "DE", "temperature.284ba979970403e3.onewire:0": 22.625, "system.time": 2097, "scale.0.offset": -3159.0, "system.wifi.channel": 6, "humidity.0x77.i2c:0": 53.32, "temperature.28becd7997040374.onewire:0": 22.3125, "system.memfree": 2391536, "temperature.28d5f979970403d4.onewire:0": 22.5625, "system.voltage": 1.642, "scale.0.raw": -151653.7, "pressure.0x77.i2c:0": 1002.46, "weight.0": -47003.88, "scale.0.scale": 3.1592, "system.wifi.max_tx_power": 78, "system.wifi.bandwidth": 2, "system.uptime": 2097.534, "system.runtime": 2082, "temperature.282df57997040326.onewire:0": 22.875}
 2104.5134 [terkin.telemetry         ] INFO   : Sending HTTP request to https://bee-observer.org/api/sensors
 2104.5275 [terkin.telemetry         ] DEBUG  : Payload:     {"t_i_4": 23.125, "p": 1002.46, "t_i_1": 22.875, "t_i_2": 22.5625, "t_i_3": 22.3125, "h": 53.32, "t_i_6": 22.625, "weight": -47003.88, "t_i_7": 29.82608, "key": "{redacted}", "t_i_5": 22.0, "t": 22.63}
 2106.8265 [terkin.datalogger        ] INFO   : Telemetry status: SUCCESS (2/2)
 2106.9696 [terkin.device            ] INFO   : Entering light sleep for 2.0 seconds
 2108.9814 [terkin.datalogger        ] INFO   : --- loop ---
 2108.9942 [terkin.datalogger        ] INFO   : Reading 8 sensor ports
 2109.0057 [terkin.datalogger        ] INFO   : Reading sensor port "SystemMemoryFree"
 2109.0868 [terkin.datalogger        ] INFO   : Reading sensor port "SystemTemperature"
 2109.2250 [terkin.datalogger        ] INFO   : Reading sensor port "SystemBatteryLevel"
 2109.2470 [terkin.sensor.system     ] DEBUG  : Reading battery level on pin P16 with voltage divider 1000/1000
 2109.3535 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Mean of ADC readings (0-4095) = 1630.3400039672852
 2109.3714 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Mean of ADC voltage readings (0-1899mV) = 819.9999809265137
 2109.3900 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Variance of ADC readings = 16.3727703094482
 2109.4081 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: 10**6*Variance/(Mean**2) of ADC readings = 6.0000000000000
 2109.4301 [terkin.sensor.system     ] DEBUG  : Battery level: 1.64
 2109.4496 [terkin.datalogger        ] INFO   : Reading sensor port "SystemUptime"
 2109.4687 [terkin.datalogger        ] INFO   : Reading sensor port "SystemWiFiMetrics"
 2109.4911 [terkin.datalogger        ] INFO   : Reading sensor port "HX711Sensor"
 2111.6648 [terkin.datalogger        ] INFO   : Reading sensor port "DS18X20Sensor"
 2120.9829 [terkin.datalogger        ] INFO   : Reading sensor port "BME280Sensor"

Wenn ich noch mit weiteren Daten zur Lösung beitragen kann, dann gib mir bitte Bescheid.

Gruß

Andreas

Hi Andreas,

Das sieht eigentlich schon ziemlich hervorragend aus. Gerade "Telemetry status: SUCCESS (2/2)" macht Hoffnung. Hm, was war nochmal Deine Frage? ;]

Ich würde sagen: Die Telemetrie klappt ganz gut, Meßwerte kommen an. D.h. es sind vermutlich keine signifikanten Änderungen mehr notwendig – allerdings wichtiges Feintuning gerade der Einstellungen für die Waage.

Waage justieren

"weight": -47003.88 liegt auf jeden Fall weit daneben und wird von der BEEP-Anwendung vermutlich ignoriert. Damit das besser wird, müssen die Werte "scale" und "offset" richtig eingestellt werden. Sie sind im Konfigurationsabschnitt beim HX711 untergebracht:

'hx711': {
    'address': 0x00,
    'pin_dout': 'P22',
    'pin_pdsck': 'P21',
    'scale': 4.424242,
    'offset': -73000.0,
}

Wie man dabei genau vorgeht, hat @clemens versucht, unter Justify Scale for the Micropython Firmware zu beschreiben. Diese Anleitung noch ein wenig präziser (und u.U. hier im Forum auch auf Deutsch) zu haben, wäre vermutlich praktisch – es ist nämlich alles ganz einfach: Unbelastet ablesen, Belastet ablesen, Subtrahieren, Eintragen, Fertig.

Ausblick: Das GitHub - Hiverize/Webinterface bringt diese Schritte zwar schon schön komfortabel in eine Benutzermaske (danke @vinz und @Diren!), leider sind unsere Softwarestücke jedoch noch nicht interoperabel, das tut uns leid. Hier drüben bei Terkin for MicroPython haben wir das auf dem Schirm.

Fehlende Temperaturwerte

Bei den Temperaturwerten kann ich keinerlei Probleme erkennen. Außer vielleicht, dass t_i_7 nicht mehr durchgeht, weil es nicht im System zur Verfügung steht. Ich glaube es geht nur bis t_i_6 oder vielleicht sogar nur t_i_5? @vinz und @Diren könnten wir vielleicht kurz unter der Haube schauen.

Viele Grüße,
Andreas.

Hallo @Andreas,

vielen Dank für deine Hilfe.
Den 7. Temperaturwert habe ich entfernt, dennoch scheint ein Temperatursensor zu fehlen (im Vergleich zu vorher). Hier werde ich wohl noch mal die Sensor ID’s überprüfen.

Die Waage habe ich inzwischen auch justiert. Die Anleitung ist ja recht einfach. Der einzige Punkt der jetzt noch etwas merkwürdig ist, ist, dass ich die Gewichtsdaten nicht in der Bob-App sehen kann. In der Grafana Auswertung tauchen die Gewichtsdaten ganz normal auf.

Hast du hierzu eine Idee?

Viele Grüße aus dem Norden

Andreas

Kann es an scale vs. weight liegen?

Wie sollte ich meine Settings.py Datei anpassen, damit es richtig übermittelt wird?

Das ist seltsam. Laut der Log-Ausgabe ist alles in Ordnung und die Werte sollten passabel ankommen.

 2104.5275 [terkin.telemetry         ] DEBUG  : Payload:     {"t_i_4": 23.125, "p": 1002.46, "t_i_1": 22.875, "t_i_2": 22.5625, "t_i_3": 22.3125, "h": 53.32, "t_i_6": 22.625, "weight": -47003.88, "t_i_7": 29.82608, "key": "{redacted}", "t_i_5": 22.0, "t": 22.63}

An dieser Stelle hat vermutlich nur "weight": -47003.88 anfangs dafür gesorgt, dass die Werte u.U. maskiert wurden, weil sie einer möglichen eingebauten Plausibilitätsprüfung nicht standhielten. Das sind aber reine Vermutungen.

Hallo @Andreas,

um bei diesem Thema eventuell weiter zu kommen habe ich noch einmal einen Blick in die Log Daten geworfen nachdem ich die Waage justiert habe. Aktuell sieht dies so aus:

 9732.4762 [terkin.datalogger        ] INFO   : Reading 8 sensor ports
 9732.4886 [terkin.datalogger        ] INFO   : Reading sensor port "SystemMemoryFree"
 9732.5649 [terkin.datalogger        ] INFO   : Reading sensor port "SystemTemperature"
 9732.7042 [terkin.datalogger        ] INFO   : Reading sensor port "SystemBatteryLevel"
 9732.7232 [terkin.sensor.system     ] DEBUG  : Reading battery level on pin P16 with voltage divider 1000/1000
 9732.8310 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Mean of ADC readings (0-4095) = 1630.4720878601074
 9732.8482 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Mean of ADC voltage readings (0-1899mV) = 819.9999809265137
 9732.8625 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: Variance of ADC readings = 16.6498031616211
 9732.8787 [terkin.sensor.system     ] DEBUG  : SystemBatteryLevel: 10**6*Variance/(Mean**2) of ADC readings = 6.0000000000000
 9732.8978 [terkin.sensor.system     ] DEBUG  : Battery level: 1.64
 9732.9140 [terkin.datalogger        ] INFO   : Reading sensor port "SystemUptime"
 9732.9292 [terkin.datalogger        ] INFO   : Reading sensor port "SystemWiFiMetrics"
 9732.9502 [terkin.datalogger        ] INFO   : Reading sensor port "HX711Sensor"
 9735.1093 [terkin.datalogger        ] INFO   : Reading sensor port "DS18X20Sensor"
 9744.4258 [terkin.datalogger        ] INFO   : Reading sensor port "BME280Sensor"
 9744.5059 [terkin.datalogger        ] INFO   : Sensor data:  {'temperature.282657799704036e.onewire:0': 33.75, 'temperature.0x77.i2c:0': 19.13, 'system.temperature': 26.0, 'temperature.2863e879970403d0.onewire:0': 32.875, 'scale.0.kg': 20.934, 'system.wifi.rssi': -85, 'system.wifi.country': 'DE', 'temperature.284ba979970403e3.onewire:0': 31.5, 'system.time': 9737, 'scale.0.offset': -137750.9, 'system.wifi.channel': 11, 'humidity.0x77.i2c:0': 54.5, 'temperature.28becd7997040374.onewire:0': 32.625, 'system.memfree': 2391376, 'temperature.28d5f979970403d4.onewire:0': 32.75, 'system.voltage': 1.64, 'scale.0.raw': -426453.7, 'pressure.0x77.i2c:0': 1013.33, 'weight.0': 20.934, 'scale.0.scale': -13791.3, 'system.wifi.max_tx_power': 78, 'system.wifi.bandwidth': 2, 'system.uptime': 9737.761, 'system.runtime': 9722, 'temperature.282df57997040326.onewire:0': 14.5}
 9744.6051 [terkin.telemetry         ] DEBUG  : MQTT topic:   hiveeyes/testdrive/Waggi-micropyton/FiPY-Test/data.json
 9744.6184 [terkin.telemetry         ] DEBUG  : MQTT payload: {"temperature.282657799704036e.onewire:0": 33.75, "temperature.0x77.i2c:0": 19.13, "system.temperature": 26.0, "temperature.2863e879970403d0.onewire:0": 32.875, "scale.0.kg": 20.934, "system.wifi.rssi": -85, "system.wifi.country": "DE", "temperature.284ba979970403e3.onewire:0": 31.5, "system.time": 9737, "scale.0.offset": -137750.9, "system.wifi.channel": 11, "humidity.0x77.i2c:0": 54.5, "temperature.28becd7997040374.onewire:0": 32.625, "system.memfree": 2391376, "temperature.28d5f979970403d4.onewire:0": 32.75, "system.voltage": 1.64, "scale.0.raw": -426453.7, "pressure.0x77.i2c:0": 1013.33, "weight.0": 20.934, "scale.0.scale": -13791.3, "system.wifi.max_tx_power": 78, "system.wifi.bandwidth": 2, "system.uptime": 9737.761, "system.runtime": 9722, "temperature.282df57997040326.onewire:0": 14.5}
 9748.8947 [terkin.telemetry         ] INFO   : Sending HTTP request to https://bee-observer.org/api/sensors
 9748.9071 [terkin.telemetry         ] DEBUG  : Payload:     {"p": 1013.33, "t_i_2": 32.75, "t_i_3": 32.625, "t_i_4": 33.75, "h": 54.5, "t_i_6": 31.5, "weight": 20.934, "key": "******", "t": 19.13, "t_i_5": 32.875, "t_i_1": 14.5}
 9751.4791 [terkin.datalogger        ] INFO   : Telemetry status: SUCCESS (2/2)
 9751.6184 [terkin.device            ] INFO   : Entering light sleep for 2.0 seconds
 9753.6316 [terkin.datalogger        ] INFO   : --- loop ---

Das Gewichts sollte wieder im “normalen” Bereich liegen. Hilft diese Information irgendwie weiter? Ich hatte schon überlegt, ob ich den Sensor komplett neu anlege um zu testen ob die Daten dann angezeigt werden.

Grüße

Andreas

Hatte ich gestern auch schon gedacht, wenn sich da BOB verschluckt hat durch einen zu hohen Wert könnte das ein neu anlegen bei BOB und entsprechender Anpassung in der settings.py lösen, würde ich mal probieren!

Ok. Dieser Versuch brachte mich nicht weiter. Ich habe einen neuen Sensor in der Bob App angelegt. Das Ergebnis bleibt das gleiche. Ich bekomme kein Gewicht angezeigt und auch nur Werte von 5 Temperatur Sensoren plus der Temperatur des Hygrometers.


Daher gehe ich davon aus, dass anscheinend doch etwas in meiner Konfiguration der Settings.py nicht stimmt. Hat jemand noch ein anderes Beispiel wie diese Datei aussehen sollte?

Kann gerade nicht testen und nachsehen glaube “weight_kg” anstatt “weight” ist richtig.

Gruß Michael

1 Like

Das wäre natürlich die plausibelste Erklärung! Dann ist es in der Vorlage falsch und es kann nicht funktionieren, wenn man es so nachmacht. a) Tut mir leid und b) bin gespannt, ob das die Ursache ist.

Aus der hiverize/FiPy Software.

data['weight_kg'] = hx711.get_value(times=5)

In meiner priv. testconfig hatte ich das auch glaube ich geändert. In der die ich dir als example gepostet hatte hab ich es leider nicht beachtet @waggi.

2 Likes

Sorry, unser Fehler, mir ist es bisher auch nicht aufgefallen, da ich nur geschaut habe, ob Daten fließen, waren bei mir aber auch nur die Temperaturen, Feuchte, … auch bei mir hat das Gewicht gefehlt!

Die Angaben zum Gewicht in der settings.example-bob.py sind falsch!

"weight.0": "weight",

korrekt ist:

"weight.0": "weight_kg",

2 Likes

Merged. Thanks, @MKO and @clemens.

1 Like

Hallo @clemens,
ich habe die Settings.py entsprechend angepasst. Fantastisch – kaum macht mans richtig, schon funktionierts. Die Gewichtsdaten kommen jetzt wie gewohnt in der Bob-App an. Vielen Dank für die Hilfe hierbei.

Jetzt fehlt mir nur noch ein Temperaturwert…

Ich sammele ja insgesamt 7 Werte mit dem Sensor: 6 separate Temperatur Sensoren plus den Temperatur Wert aus dem BME280. Alle Werte werden übertragen, jedoch nur 6 angezeigt.

Gibt es hier auch einen Wert der angepasst werden muss?

Gruß

Andreas

1 Like

Vermutlich ist die Anzahl der Temperatursensoren hard gecodet, nimm doch einfach

"system.temperature": "t_i_7",

am Ende deiner settings.py raus, das ist nur ein Wert des Prozessors und für uns eigentlich nicht relevant.

Die Anzahl der Innensensoren “t_i_x” Sensoren ist auf 5 begrenzt. Der Außensensor heißt “t_o”.

Beispiel:
image

Ergebnis:

gruß Michael

3 Likes

Super. Vielen Dank. Diesen Hinweis sollten wir unbedingt in die settings.example-bob.py mit aufnehmen!

2 Likes