Terkin-Datenlogger interaktiv

Continuing the discussion from Wartungsmodus für den Terkin-Datenlogger:

Einleitung

Ein paar Worte darüber, wie man hemdsärmlig interaktiv mit dem Datenlogger-Eumel arbeiten kann, während er läuft. Das funktioniert ganz gut,

Dadurch ist es möglich, die Interna noch ausführlicher zur Laufzeit zu erforschen, als es über die HTTP- und webbasierte Konfiguration des Terkin-Datenloggers zur Implementierung eines Captive Portal - #15 by Andreas klappt.

Beispiel

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

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

Sensoren manuell auslesen

Auch einmal in die Pedale treten klappt hervorragend.

>>> 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}

Dabei produziert das Gerät bei eingeschaltetem Log z.B. folgende Ausgabe.

 1211.9896 [terkin.datalogger        ] INFO   : Reading 8 sensor ports
 1212.0036 [terkin.datalogger        ] INFO   : Reading sensor port "SystemMemoryFree"
 1212.0838 [terkin.datalogger        ] INFO   : Reading sensor port "SystemTemperature"
 1212.1562 [terkin.datalogger        ] INFO   : Reading sensor port "SystemBatteryLevel"
 1212.2887 [terkin.datalogger        ] INFO   : Reading sensor port "SystemUptime"
 1212.3047 [terkin.datalogger        ] INFO   : Reading sensor port "SystemWiFiMetrics"
 1212.3253 [terkin.datalogger        ] INFO   : Reading sensor port "HX711Sensor"
 1214.5026 [terkin.datalogger        ] INFO   : Reading sensor port "DS18X20Sensor"
 1214.5221 [hiveeyes.sensor_ds18x20  ] INFO   : Acquire readings from all DS18X20 sensors attached to bus "onewire:0"
 1214.5429 [hiveeyes.sensor_ds18x20  ] INFO   : Start conversion for DS18X20 devices on bus "onewire:0"
 1215.5980 [hiveeyes.sensor_ds18x20  ] INFO   : Reading DS18X20 device "28ff641d8fdf18c1"
 1215.6579 [hiveeyes.sensor_ds18x20  ] INFO   : Adding offset 0.42 to value 27.625 from device "28ff641d8fdf18c1"
 1215.6795 [hiveeyes.sensor_ds18x20  ] INFO   : Reading DS18X20 device "28ff641d8fc3944f"
 1215.7400 [hiveeyes.sensor_ds18x20  ] INFO   : Adding offset -0.42 to value 24.625 from device "28ff641d8fc3944f"
 1215.9933 [terkin.datalogger        ] INFO   : Sensor data:

           scale.0.kg                                   0.712    Waage 1
           scale.0.offset                             87448.7    Waage 1
           scale.0.raw                                71262.5    Waage 1
           scale.0.scale                               -22743    Waage 1
           system.memfree                             2329376
           system.runtime                                1204
           system.temperature                         37.4783
           system.time                                   1216
           system.uptime                              1280.16
           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                               -44
           temperature.28ff641d8fc3944f.onewire:0      24.205    Wabengasse 1, Rahmen 2
           temperature.28ff641d8fdf18c1.onewire:0      28.045    Wabengasse 1, Rahmen 1
           weight.0                                     0.712    Waage 1

Objektbaum/-referenzen erforschen

Da damit zwar schon recht gut die Kompositionsreferenzen, also die Verweise auf andere Elemente im Objektbaum nachzuverfolgen sind, braucht man u.U. gar nicht die alternative Variante.

Manchmal ist man jedoch auf non-autocompletion shells unterwegs und kennt noch nicht alle Tricks. Daher wollen wir hiermit allen Python-Neuzugängen die Säge aus dem Schweizer Taschenmesser empfehlen.

Beispiel

>>> dir(datalogger.application_info)
['__class__', '__dict__', '__init__', '__module__', '__qualname__', 'name', 'version', 'settings', 'fullname', 'application']

>>> dir(datalogger)
['__class__', '__dict__', '__init__', '__module__', '__qualname__', 'name', 'sleep', 'start', 'version', 'settings', 'loop', 'setup', 'register_sensors', 'add_hx711_sensor', 'add_ds18x20_sensor', 'add_bme280_sensor', 'sensor_manager', '__instance__', 'getInstance', 'start_mainloop', 'get_sleep_time', 'read_sensors', 'record_reading', 'transmit_readings', 'start_buttons', 'application_info', 'storage', 'device', 'button_manager']

Resume

Wenn man genug geforscht hat, kann der Datenlogger auch wieder angeworfen werden per

datalogger.start_mainloop()