Vorbereitungen für BOB Workshop in Hannover im März 2023

Ok. Wenn die Hardware intakt ist… Es scheint, als würde der Webserver gestartet werden, wenn noch kein Interface verfügbar ist. Das müsste also erst “später” gemacht werden.

Mglw. hast Du bei den Geräten gerade schlechteren Empfang als bei früheren Inbetriebnahmen? [1] Versuche doch einmal, näher an den Router heranzugehen mit dem Setup, um etwaige Timingprobleme zu minimieren.


  1. Oder benutzt Du vielleicht einen anderen Router als früher? ↩︎

Es ist definitiv ein Softwarefehler. Er tritt gleich am Anfang nach dem Start auf:

"# main.py → main-ori.py FiPy 10.05.2021

"# python imports
import gc
import logger
import machine
from machine import Pin, I2C
import micropython
import network
from pycom import rgbled
import sys
import time
import uos

" #own -code imports

import webserver

Wenn ich die letzte Zeile auskommentiere, funktioniert alles. Nur der AccessPoint nicht.
Ohne Kommentar in line 17 folgende Fehlermeldung:

%Run -c $EDITOR_CONTENT
CSV Logger failed. Is a SD card inserted?
init sensors
init → DS18B20
Found 6 DS1820.
Gain & initial value set
in webserver.py
Traceback (most recent call last):
File “”, line 17, in
File “webserver.py”, line 142, in
File “/flash/lib/microDNSSrv.py”, line 19, in Create
File “/flash/lib/microDNSSrv.py”, line 161, in Start
OSError: Network card not available

Die SD-Karte funktioniert nicht, wenn vom PC aus gestartet, vom FiPy aus geht es,
das init der Sensoren DS18B20 und HX711 funktioniert von PC und FIPy

Dann wird der Webserver importiert und der Fehler beginnt

Es ist reproduzierbar:

  1. Firmware “FiPy-1.20…tar.gz” downloaden
  2. mit PyCom-Tool flashen
  3. FiPy-Master.zip von github downloaden und auspacken
  4. mit Atom laden
  5. FiPy anschliessen
  6. Software uploaden
  7. automatischer Boot → Fehler in line 17
  8. line 17 auskommentieren
  9. reboot → messen funktioniert, Accesspoint nicht

Da sich der Fehler kaum auf github in FiPy.master,zip eingeschlichen haben kann, tippe ich auf die Firmware.

Der webserver wird sehr früh importiert, obwohl er nur für den AccessPoint gebraucht wird und nicht für das Messen.
Vielleicht kann ich ihn ja erst dann importieren, bevor der AccessPoint gestartet wird.

Das ganze hat ja Mal funktioniert, ich würde eine Inkompatibilität zwischen Firmware und Software vermuten, ggf. pfuscht auch das Atom-Plugin rein. Ich kann heute Abend Mal schauen, habe allerdings sind schon länger runtergeschmissen und zuletzt VS Code verwendest.

Hatten wir nicht auch binarys?! Sorry falls das Quatsch ist, war schon recht lange her.

Ja, das meine ich, so in etwa. Aber es geht nicht ums Importieren, sondern ums Starten.

Ich habe gerade alles nochmal wiederholt:
a) dritten FiPy mit FiPy…vanilla-squirrel.tar.gz neu geflasht → OK
b) von github FiPy-master.zip nach G:\4-BOB-Workshop\3-FiPy-test1 ausgepackt. Alle Files sind vom 10.05.2021 ( siehe Bild )
c) Atom mit Pymkr gestartet, Projekt 3-FiPy-test1 ( siehe Bild )
d) Upload project to device ( 27 files to FiPy )
e) automatischer boot: Fehler in line 14 ( import webserver)

Was habe ich falsch gemacht? nun in
f) line 14 auskommentiert
g) Upload project to device ( 1 files to FiPy main.py )
h) instabiler Betrieb nach reboot
h) manchmal Messungen möglich, noch keine Konfiguration von Wlan und Sensoren

auf dem ersten FiPy lief es gestern bis heute 10:34 nach händischer Konfiguration stabil

Bitte nicht zur Laufzeit auf das Dateisystem schreiben. Bei solchen Dingen gibt das Ding gern seinen Geist auf, wegen eines Bugs in der CPU, siehe Investigating random core panics on Pycom/ESP32 devices.

1 Like

Es riecht nach Firmware-Fehler: Nach den ersten Tests und crashs habe ich Pause gemacht.
Dann ein reboot, ohne Fehler wurde gemessen obwohl nichts konfiguriert wurde.
Dann nach der 51. Messung:

dann ein Guru Meditation Error

Es ist schlimmer. Es ist ein Bug in der CPU. Most probably, it is the venerable PSRAM Cache Issue stills exist (IDFGH-31) · Issue #2892 · espressif/esp-idf · GitHub. Beste Chance:

Das wäre aber nichts Neues, oder? Lief und läuft doch bei vielen schon und auch mit dem bekannten bug?

Pycom https://pycom.io ist tot, es gibt aber noch ein paar Überreste und erfreulicherweise gibt es immer noch die Doku-Seiten samt Downloads

Firmware updaten

Wir kommen also noch an das firmware updating tool ran:

todo: Check, ob die Veriosn ok ist, oder ob wir “unsere” alte besser nehmen

IDE Visual Studio (VS) Code

Bemerkung: Atom hatte ich schon länger vom Rechner geschmissen, weil das einfach grottig langsam war, ich glaube ich konnte das letzte mal als ich es versucht hatte das Atom Pymakr Plugin auch nicht installieren, daher versuche ich es gleich mit VS Code.

Bei VS Code ist aktuell Version 1.76.2 die latest und auch bei mir installiert.

Beim Pymakr Plugin für VS Code ist Version 2.22.5 (7 month ago) die neueste Version, die auch über Pymakr - Visual Studio Marketplace online verfügbar ist.

Damit sollte unsere Software-Ausstattung theoretisch flugfähig sein!

(temporäres) Problem mit dem Pymakr Plugin

Beim Testen der IDE bin ich zuerst hier gestrandet: Das Pymakr Plugin braucht zwingend ein “Projekt” um das dann mit dem FiPy zu “synchronisieren”, sprich den code raufzuladen. Dieses Projekt bekam ich aber anfangs nicht angelegt:

2023-03-19 13_23_48-

Die Lösung ist folgende: Nach Klicken auf “Create Project” muss man nicht nur den Ordner (in einem neuen popup) auswählen, sondern nach der Ordnerauswahl auch nochmal mit einem Return den Projektname – aus dem Orndername generiert – besätigen,

Verpasst man das, ESC drücken ist dabei gar nicht nötig, einfach woanders hin klicken (in der Annahme das Projekt sei mit der Ordner-Spezifikation schon erstellt) reicht, kommt es zu der Fehlermeldung, klares Usability-Problem wieder mal, würde ich sagen! ;-) Gut, dann geht es jetzt weiter:

BOB-Code aus GitHub

Nun habe ich den BOB code lokal abgespeichert und hochgeladen, nun bekomme ich folgende Fehlermeldung:

Starting boot process...
Boot finished.
CSV Logger failed. Is a SD card inserted?
Traceback (most recent call last):
  File "main.py", line 14, in <module>
  File "webserver.py", line 9, in <module>
  File "sensors/__init__.py", line 8, in <module>
  File "lib/onewire.py", line 5, in <module>
ImportError: no module named '_onewire'
Pycom MicroPython 1.20.3.b4 [v1.11-95ab8f63] on 2021-09-10; FiPy with ESP32
Type "help()" for more information.
>>>

Hatten wir onewire nicht bei uns in der Firmware (und nicht in der Offiziellen?! ganz hinten im Gedächtnis kramen …), gut dann versuche ich das jetzt: Also statt der vom firmware updating tool vorgeschlagenen und online automatisch heruntergeladenen Version 1.20.3.b4 verwende ich nun die in unserer Doku angegebene FiPy-1.20.2.rc6-0.10.2-vanilla-squirrel-nosmartconfig.tar.gz von @Andreas!

Und genau das war es auch. Nun läuft das Ding (noch ohne Sensoren)! :-)

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff8020,len:8
load:0x3fff8028,len:2140
ho 0 tail 12 room 4
load:0x4009fa00,len:19740
entry 0x400a05bc
Starting boot process...
Boot finished.
CSV Logger failed. Is a SD card inserted?
init sensors
init -> DS18B20
No DS1820 found. Is it connected properly?
Gain & initial value set
BME280 initialization failed. Is it connected properly?
in webserver.py
ssd1306.py:  esp32
Start -> logger
Start -> Info: (sysname='FiPy', nodename='FiPy', release='1.20.2.rc6-0.10.2-vanilla-squirrel-nosmartconfig', version='v1.20.1.r2-122-gd82a6f43e-dirty on 2020-03-06', machine='FiPy with ESP32', lorawan='1.0.2', sigfox='1.0.1')
Using Antenna:  False
WiFi: Using internal antenna
Antenna set
OpenBeeResearch_GuestAccess
channel: 1
sec: 3
rssi: -71
ssid: OpenBeeResearch_GuestAccess
bssid: 3ea62f6c2671
[... weitere WLANs]
Start -> 7 SSIDS found
Start -> AP SSID: Moltebeere
Start -> Cause of restart: PWRON
Start -> switching to ap mode is now possible
Start -> Starting measurement setup...
WLan is enabled, trying to connect.
No WLan connection configured!
No WLan connection configured!
No WLan connection configured!
No network connection.
Access Point Pin P16 set.
Callback registered...
1. Measurement
No DS1820 found. Is it connected properly?
   HX711:   0.0 kg
   DS18B20:  Sensors: 0
Can not write ds1820 data on SD-Card. Caused by not declared ds1820s positions.
 
   Time:  01:00:00    WLAN:    {'rssi': 0, 'weight_kg': 0.0}
wlan is enabled but not connected.
trying to reconnect in 11 intervals
stack: 896 out of 11264
GC: total: 2561344, used: 74848, free: 2486496
 No. of 1-blocks: 1130, 2-blocks: 281, max blk sz: 161, max free sz: 154157
2. Measurement
No DS1820 found. Is it connected properly?
   HX711:   0.0 kg
   DS18B20:  Sensors: 0
Can not write ds1820 data on SD-Card. Caused by not declared ds1820s positions.
 
   Time:  01:00:05    WLAN:    {'rssi': 0, 'weight_kg': 0.0}
wlan is enabled but not connected.
trying to reconnect in 10 intervals
stack: 896 out of 11264
GC: total: 2561344, used: 74896, free: 2486448
 No. of 1-blocks: 1133, 2-blocks: 281, max blk sz: 161, max free sz: 154157
3. Measurement
No DS1820 found. Is it connected properly?
   HX711:   0.0 kg
   DS18B20:  Sensors: 0
Can not write ds1820 data on SD-Card. Caused by not declared ds1820s positions.
 
   Time:  01:00:10    WLAN:    {'rssi': 0, 'weight_kg': 0.0}
wlan is enabled but not connected.
trying to reconnect in 9 intervals
stack: 896 out of 11264
GC: total: 2561344, used: 74896, free: 2486448
 No. of 1-blocks: 1133, 2-blocks: 281, max blk sz: 161, max free sz: 154157
4. Measurement
No DS1820 found. Is it connected properly?
   HX711:   0.0 kg
   DS18B20:  Sensors: 0
Can not write ds1820 data on SD-Card. Caused by not declared ds1820s positions.
 
   Time:  01:00:15    WLAN:    {'rssi': 0, 'weight_kg': 0.0}
wlan is enabled but not connected.
trying to reconnect in 8 intervals
stack: 896 out of 11264
GC: total: 2561344, used: 74896, free: 2486448
 No. of 1-blocks: 1133, 2-blocks: 281, max blk sz: 161, max free sz: 154157
5. Measurement
No DS1820 found. Is it connected properly?
   HX711:   0.0 kg
   DS18B20:  Sensors: 0

Was ich gerade nicht geschafft habe, mich per WLAN mit der config-Website zu verbinden, die LED leuchtet zwar blau, aber die config-Seite bekomme ich nicht geladen, trotz

14:52:44:538 -> init client
14:52:44:538 -> processing request
14:53:14:164 -> init client
14:53:14:164 -> processing request
14:53:14:165 -> init client
14:53:14:165 -> processing request
14:53:44:158 -> init client
14:53:44:158 -> processing request
14:53:45:505 -> init client

Jetzt komme ich auch gar nicht mehr in den AP-Modus … old problems are calling … Konfiguration des Sensor-Kits ist über den AP-Modus nicht möglich … die Tipps dort bringen aber gerade auch nichts.

Nein, genau, das ist das altbekannte Problem.

Weiß ich nicht. Ist das Logging aufs Dateisystem wirklich bei allen aktiviert? Das ist w.g. meine Empfehlung: Nicht zur Laufzeit aufs Dateisystem schreiben!

Wir haben es mit Problemen an mehreren Fronten zu tun.
Als erstes habe ich das main.py mit den Messungen durch ein sehr einfaches main.py mit Tests von RGBLed, Switche und I2C-bus in Dauerschleife ersetzt. Alle anderen Files sind unverändert vom 10.5.2021. Die Idee war, wenn es ohne Fehler durchläuft, muss der Fehler im ersten main.py sein. Aber es crashte ebenfalls oft.
Ich wollte noch andere Testfiles testen, aber beim Flashen mit Pymkr gab es viele Probleme und Abstürze bis gar nicht mehr ging. Ich vemute, der Flash vom FiPy Nr. 3 ist defekt.

Also den FiPy Nr. 4 geholt. Die Testprogramme von vor 2 Wochen liefen noch, doch Flashen mit Pymkr ging gar nicht mehr.
Mit Thonny konnte ich dann lib… logger… sensors… default_settings.json, user_settings.json, boot.py und main.py flashen. Das kleine main.py lief eine Stunde in Dauerschleife ohne Probleme, das grosse lief ohne import von webserver.py ohne crash, mit import von webserver,py stürzte es mit den oben beschriebenen Fehlern ab.

Ich bin jetzt genau so weit wie vor zwei Tagen.
Es gibt also Probleme mit dem Flash im FiPy UND beim flashen mit Pymkr.

Dazu noch eine Vermutung. Im Sommer 2019 war ich Python-Anfänger und die ganze Software in den libraries und in main.py undurchschaubar für mich. Also bin ich angefangen, kleine Testprogramme zu schreiben, in denen ich mich um einzelne Themen kümmerte. So entstanden einige unabhängige Testprogramme für BME280, DS18B20, HX711, OLED, config, WLAN, SD-Karte usw.

Bei den DS18B20 wurde viel über Messwertausreisser diskutiert. Mir fiel dann auf, dass CRC-Error im Treiber nicht sauber abgefangen wurden und execptions zum Absturz führen konnten. Im Hauptprogramm war das durch GarbageCollector und Watchdog nicht leicht zu erkennen.

Ebenso stockte der FTP-Transfer. Da war ein “_” bei der Initialisierung die Ursache.
Deshalb befürchte ich immer noch Unsauberkeiten im Code, die nur manchmal auffallen und nur sehr schwer zu finden sind.

Wir sollten nicht mehrere Baustellen parallel aufmachen, wenn wir nicht wissen wo das Problem ist. Fakt ist ja, dass Diren / Uni Bremen und andere das Ding irgendwie fliegen, d.h. bis auf die bekannten Macken und Unzulänglichkeiten sollte “die Software” laufen.

Bei der Firmware brauchen wir zwingend die in der Doku

wegen der Onewire-Implementierung, d.h. die ist gesetzt!

Die IDE transportiert im besten Fall nur Dateien vom Rechner zum FiPy, d.h. eigentlich sollte Atom oder VS Code egal sein, wenn die Dateien mal auf dem Gerät sind. Da Atom letztes Jahr eingemottet wurde und (für mich) auch unklar ist, ob es überhautp ein working plugin für eine Neuinstallation gibt, würde ich für den Workshop auf jeden Fall VS Code empfehlen, bzw. das den Leuten empfehlen, die noch am Code Hand anlegen wollen.

Nun ist noch die Frage, warum der Code von GitHub - Hiverize/FiPy bei dir, @didilamken nicht funktioniert. Bei mir scheint er ja zu laufen, abgesehen von den (bekannten) AP-Problemen. Du hast auch die Firmware von oben verwendet und die neueste Version des firmware update tools, gibt es da Eintellungen, die zu Problemen führen können?

2023-03-19 21_29_25-Pycom Upgrade

Bringt “erase flash file system” etwas? Als FS ist LittleFS angegeben, das war in der Vergangenheit ja auch immer ein massiver Instabilitätsfaktor falls nicht, die Probleme oben bei dir hören sich etwas danach an, manchmal geht es manchmal nicht, unvorhergesehene Abstürze … magst du nochmal doublechecken, ob LittleSF beim Firmware einspielen aktiv war und “Enable Pybytes” deaktiviert ist?

Ah, https://thonny.org/ “Python IDE for beginners”, kannte ich bisher gar nicht.

Das Firmware Update Tool von PyCom läuft in der neuesten Version auch auf dem neuen Notebook sehr gut, die Einstellungen habe ich auch alle beachtet. Da sehe ich keine Probleme.

Mit /lib/onewire.py funktionieren die DS18B20 mit beiden … vanilla-squirrel… Firmware Versionen

Atom läuft nur noch auf dem alten Notebook und PyMkr hakte schon früher manchmal.
Der Menüpunkt " Download from device " ging nie richtig und " Upload projekt to device " stottert heute.

Die IDE Thonny für Windows habe ich beim Spielen mit folgendem entdeckt.
KEYESTUDIO ESP32 Smart Home IoT Stem Kit Kompatibel mit Arduino IDE, mit ESP32 Board, Python C, Musical Project, etc. 13 Funktionen Online-Tutorial: Amazon.de: Computer & Zubehör
Die Beispiele in micropython funktionieren alle.
Thonny funktioniert auf dem RaspberryPi auch sehr gut.

VS Code kenne ich noch gar nicht, hätte auch Probleme mich auf die schnelle einzuarbeiten.

Mit der händischen Konfiguration in user_config.json funktioniert FiPy Nr. 4 seit gestern Abend. Also sollten FiPy, Flash, Firmware, die Libraries und main.py OK sein.
Bleibt die Frage, warum der webserver nicht will.

Eben gerade habe ich an der seriellen Schnittstelle beobachtet, daß das Messen gestoppt hat und der AP für 10 Minuten aktiv war, dann startete das Messen wieder, als wenn nichts geschehen wäre.
Warum ??? Auf dem Bienenmonitor ist nichts zu erkennen.

13 Uhr
Ich habe versucht, 15 FiPy mit der BOB-Software zu flashen : bei 12 hat es auf Anhieb geklappt, bei 2 erst beim zweiten Mal und 1 ist definitiv kaputt. Der hat mir auch am Freitag so viel Ärger bereitet.

Vorgehensweise: mit Atom / pymkr müssen 30 Files zügig geflasht werden. Beim kleinsten Problem muss Atom/pymkr neu gestartet werden. Beim anschliessenden Boot muss sofort das Wlan verbunden werden und es müssen mindestens 50 Messungen zum Bienenmonitor gesendet werden.
Die beiden Wiederholer wurden mit dem Pycom Updater neu geflasht.
Beim dritten kommt jede Hilfe zu spät.

16 Uhr
Es scheint Probleme mit dem Flash zu geben: ein FiPy, der nicht auf Anhieb geflasht werden konnte, sondern erst beim zweiten Mal, hat dann schon gemessen. Aber in der letzten Stunde hat er mitten im Messen gedacht, der Switch an P16 wäre gedrückt und hat den AP aufgemacht. Da der webserver.py noch auskommentiert ist, kann man sich zwar mit einem Tablet verbinden, erhält aber keine Webseite. Nach 10 Minuten schliesst der AP und das Messen geht weiter.
Im Bienenmonitor fällt das kaum auf, man muss schon danach suchen.

Ich schliesse inzwischen einen schlechten Flash nicht mehr aus, um die seltsamen Fehler zu erklären.

Ich habe gestern von @Diren eine neue FiPy-Firmware bekommen. Sie gleicht in Namen und Größe der, die ich schon benutzt habe .
FiPy-1.20.2.rc6-0.10.2-vanilla-squirrel-nosmartconfig.tar.gz (1,2 MB) ( 1188 KB in Windows10 ).
Also noch einmal geflasht ( alles OK ). Dann mit Atom die FiPy-Programme aufgespielt ( alles OK )
Doch beim reboot der gleiche Fehler wie am Wochenende:
Vielleicht kann ja jemand die folgenden Meldungen interpretieren:

entry 0x400a05bc
Starting boot process...
Boot finished.
Init -> CSV logger in directory /sd/hiverizelog
init sensors
init -> DS18B20
Found 6 DS1820.
Gain & initial value set
in webserver.py
Traceback (most recent call last):
  File "main.py", line 14, in <module>
  File "webserver.py", line 142, in <module>
  File "/flash/lib/microDNSSrv.py", line 19, in Create
  File "/flash/lib/microDNSSrv.py", line 161, in Start
OSError: Network card not available
Pycom MicroPython 1.20.2.rc6-0.10.2-vanilla-squirrel-nosmartconfig [v1.20.1.r2-122-gd82a6f43e-dirty] on 2020-03-06; FiPy with ESP32
Type "help()" for more information.
'>>> 
  • Datei main.py
import sys
import time
import uos

'# own code imports
import webserver                                                            ->     line 14
from config import Config
from sensors import hx711, bme280, ssd1306, ds1820
  • Datei webserver.py
print("in webserver.py")
mws = MicroWebSrv()
mws.SetNotFoundPageUrl("http://hiverize.wifi")
MicroDNSSrv.Create({ '*' : '192.168.4.1' })                -> line 142
  • Datei /flash/lib/microDNSSrv.py
def Create(domainsList) :
        mds = MicroDNSSrv()
        if mds.SetDomainsList(domainsList) and mds.Start() :     -> line 19
            return mds
        return None

        if not self._started :
            self._server = socket.socket( socket.AF_INET,
                                          socket.SOCK_DGRAM,
                                          socket.IPPROTO_UDP )  -> line 161
            self._server.setsockopt( socket.SOL_SOCKET,
  • Fehlermeldung: OSError: Network card not available ist die Folge.

Damit ich weiterkomme, habe ich main.py line 14 import webserver auskommentiert. Der AccessPoint liess sich zwar starten, aber die Konfiguration funktioniert nicht ohne Webseite.

Hi Didi,

Das ist nichts neues, die hattest Du doch vorher auch schon drauf, nicht? Bei https://packages.hiveeyes.org/hiveeyes/foss/pycom/vanilla/ sind sie alle aufgelistet, die wir selbst gebacken haben. FiPy-1.20.2.rc6-0.10.2 ist die neueste, ja.

Dieser Code hier steht global auf Modulebene in der webserver.py Datei, wird also bereits beim Laden der Module ausgeführt. Das ist ganz schlecht!

Der Code muss in eine Routine gekapselt werden, die erst gerufen wird, wenn sinnvoll, also erst wenn das “Netzwerk da ist”. Es bietet sich vielleicht jene enable_ap Funktion an?

Viele Grüße,
Andreas.

1 Like

Es ist wie verhext. Ich habe die Einstellungen des PycomUpdaters überprüft und 6 Fipy mit Diren’s File geflasht. Dann mit Atom die FiPy-Files ( alle vom 10.5.2021 , unverändert ) geflasht. Alles OK.
Dann beim booten der bekannte Fehler line 14 …

Soll ich jetzt versuchen, webserver.py erst später zu importieren?

Z.B. so

293. '# enable ap
294. def enable_ap(pin=None):

      import webserver

295. global _wm, loop_run, _wlan, wdt, button_ap
296. '# if in button mode, make sure we don't enter this function again
297. if _config.get_value('general', 'general', 'button_ap_enabled'):
298. button_ap.callback(Pin.IRQ_FALLING, handler=ap_already_enabled)
299. print("Called. Pin {}.".format(pin))

Hi Didi,

Am besten wäre es, den modul-globalen Code in webserver.py abzuschaffen. Bei Vorbereitungen für BOB Workshop in Hannover im März 2023 - #27 by Andreas habe ich beschrieben, wie das zu bewerkstelligen wäre.

Hier im kanonischen Beispiel sieht man ebenfalls, dass MicroDNSSrv.Create() erst nach WLAN().init() gerufen wird.

Viele Grüße,
Andreas.

Vielleicht hilft Dir auch der Patch Fix Bug Wifi on Boot by MKO1640 · Pull Request #33 · Hiverize/FiPy · GitHub von @MKO weiter?