9 posts were merged into an existing topic: Troubleshooting the Sequans Modem on Pycom devices
On WSL I get, so in your instruction is an install command for lftp missing
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make install-ftp
lftp -u micro,python 192.168.178.26 < tools/upload-all.lftprc
/bin/sh: 1: lftp: not found
Makefile:57: recipe for target 'install-ftp' failed
make: *** [install-ftp] Error 127
So you should add
sudo apt-get install lftp
in the doc
Watchdog updates
The watchdog subsystem has been improved through Improve Watchdog subsystem by adjusting to edge cases · hiveeyes/hiveeyes-micropython-firmware@1c7abf9 · GitHub so the watchdog timer is now adjusted for things like LTE modem deinit as well as the infamous maintenance mode. In practice, it looks like that.
Compensate for six seconds of LTE spinup/teardown
To be safe here, we propose a watchdog timeout of 15 seconds for covering the extended time the LTE modem needs to rest and mumble and crumble. When the configured watchdog timeout is lower than anticipated, the firmware takes account of that by bumping the value temporarily.
10.1499 [terkin.device ] INFO : Reset cause and wakeup reason: {'reset_cause': {'code': 0, 'message': 'PWRON'}, 'wakeup_reason': {'code': 0, 'message': 'PWRON'}}
10.1682 [terkin.watchdog ] INFO : Starting the watchdog timer (WDT) with timeout 10000ms
10.2253 [terkin.watchdog ] INFO : Reconfiguring watchdog timeout to 15000 milliseconds
10.2363 [terkin.device ] INFO : Turning off LTE modem
10.2470 [terkin.device ] INFO : Turning off LTE modem on boot
10.2577 [terkin.device ] INFO : Invoking LTE.deinit()
16.8252 [terkin.device ] INFO : Turning off Bluetooth
17.3399 [terkin.watchdog ] INFO : Resuming watchdog
17.3567 [terkin.watchdog ] INFO : Reconfiguring watchdog timeout to 10000 milliseconds
17.3713 [terkin.datalogger ] INFO : Starting BOB MicroPython Datalogger 0.5.1
Adjust watchdog timeout when lower than or near sleep time
When running without deep sleep, the watchdog timeout has to be adjusted to the measurement interval / duty cycle appropriately.
28.0322 [terkin.device ] INFO : Entering light sleep for 15.0 seconds
28.0489 [terkin.watchdog ] WARNING: Reconfiguring original watchdog timeout 10.0 as it is smaller or near the configured sleep time 15.0
28.0650 [terkin.watchdog ] INFO : Reconfiguring watchdog timeout to 35000 milliseconds
Suspend watchdog when running in maintenance mode
The watchdog can’t be stopped once it’s started. So we “suspend” it by configuring the timeout to a reasonable large value when running in maintenance mode.
26.3070 [terkin.network.core ] INFO : Enabling maintenance mode
26.3223 [terkin.watchdog ] INFO : Suspending watchdog
26.3401 [terkin.watchdog ] INFO : Reconfiguring watchdog timeout to 999999999 milliseconds
Thanks
@pinguin was the first one who brought this to our attention and gave us an idea about how to care about that detail. Taking care of that is crucial for piece of mind to protect against eventual crashes in production.
Thanks a bunch!
More updates.
Device discovery
@clemens makes Windows users happy with Change timeout value for ARP-Ping when pulling device into maintenance mode by ClemensGruber · Pull Request #14 · hiveeyes/hiveeyes-micropython-firmware · GitHub. Thanks!
Device provisioning
We closed some gaps by adding another helper
make connect-wifi ssid=<YourNetwork> password=<YourPassword>
to bring a device into the local network which has just been unboxed, see also Speed up provisioning and Makefile.
Sandbox improvements
@roh asked for some entry-level guide in form of a self-documenting Makefile
and had strong opinions about a colored output. Et voilà.
All the details of "make help"
$ make
Available rules:
setup Prepare sandbox environment and download requirements
terkin-agent Run the MicroTerkin Agent, e.g. "make terkin-agent action=maintain"
connect-wifi Load the MiniNet module to the device and start a WiFi STA connection.
ip-address Load the MiniNet module to the device and get IP address.
install Install all files to the device, using rshell
install-ftp Install all files to the device, using FTP
install-ng Install all files to the device, using best method
install-pycom-firmware Install Pycom firmware on device
format-flash Format flash filesystem with LittleFS
erase-fs Erase flash filesystem
list-serials List all serial interfaces
list-boards List all MicroPython boards
device-info Inquire device information
console Open console over serial or telnet
rshell Run interactive rshell on the device
repl Run interactive REPL on the device
reset-device Send reset command to device
reset-device-attached Send reset command to device and keep the REPL shell attached
Bits and pieces
As always, a number of other improvements and bugfixes have been made. Thanks to all who contributed to that and enjoy the changelog.
Mit diesen Änderungen wurde gerade die Struktur des sensors
-Abschnitt in der Konfigurationsdatei settings.example-bob.py geändert. Den Bereich "sensors.registry"
gibt es nicht mehr, die Struktur auf Detailebene der Sensoreinträge ist zwar die gleiche geblieben, die Einträge wurden aber erweitert und auf die Anforderungen aus HTTP- und webbasierte Konfiguration für Terkin-Datenlogger (captive portal) vorbereitet.
Am besten man übernimmt die Änderungen 1:1 aus dem neuen Bereich "sensors.environment"
der Blaupause, schaut dann nochmal über die selbst getätigten Einstellungen im Bereich "sensors.registry"
drüber, übernimmt ggf. abweichende Einstellungen und löscht letzteren dann.
Falls die Rückwärtskompatibiliät (untested!) funktioniert, könnte es auch mit der alten Konfiguration funktionieren. Davon raten wir jedoch ab, weil neue Endpunkte der HTTP API die neue Konfigurationsstruktur voraussetzen werden.
Versuche gerade 2 BME280 an bus : i2c:0 zu betreiben.
allerdings habe ich probleme mit der in Settings.example.py vorgeschlagenen config.
wenn ich
'bme280_1': {
'enabled': True,
'bus': 'i2c:0',
'address': 0x76,
},
'bme280_2': {
'enabled': True,
'bus': 'i2c:0',
'address': 0x77,
},
Versuche wird gar kein Sensor erkannt.
wenn ich einen der beiden wie in der settings.example-bob.py
bme280': {
wird nur dieser Sensor erkannt. wenn ich beide so nenne wird der erste Sensor von dem 2. überschrieben.
werde gleich nochmal
'bme280': {{
'enabled': True,
'bus': 'i2c:0',
'address': 0x76,
},
{
'enabled': True,
'bus': 'i2c:0',
'address': 0x77,
}},
testen. Befürchte aber, das das auch fehl schlägt.
jemand einen Tip?
Ich habe bisher noch nicht die stelle im code gefunden wo die einzelnen BME280 im Code erkannt werden.
wenn ich nach der datalogger.py zeile 114 gehe dürfte nur ‘BME280’ erkannt werden
bin jetzt noch nicht in Python so firm, da ein ‘BME280**’ draus zu machen.
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.
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.
{
'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,
}
=
Exelent! Danke @Andreas. Hab oben gleich mal ein Fleißhäckchen gesetzt.
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 https://github.com/hiveeyes/hiveeyes-micropython-firmware/commit/6ab4f569e69a2bb0993f31c8af7af5ec09515c44 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).
Todo: Details der Sensorkonfigurationsblöcke ausführlich kommentieren. ↩︎
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',
],
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.
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?
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
Es fehlt noch die Möglichkeit, die Liste aller beim Bus-Scan entdeckter 1-Wire DS18B20-Sensoren abrufen zu können.
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.
scale.0.raw: 0.0
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
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.
Wir werden die Struktur dieses Schnipsels vermutlich auch noch einmal umbauen in Richtung:
# DS18B20-Konfiguration v2-regular '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, }, ],
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
DS18B20
Es fehlt noch die Möglichkeit, die Liste aller beim Bus-Scan entdeckter 1-Wire DS18B20-Sensoren abrufen zu können.
Dafür gibt es den neuen Endpunkt /api/v1/peripherals/sensors/ds18b20
als schlauere Schwester von
/api/v1/peripherals/busses
/api/v1/peripherals/sensors