Verbesserung der Stabilität der BOB-Firmware

Soweit ich mich Erinnere gab es auch Probleme mit dem erkennen, ob der Webserver gestartet ist. Ich hatte mich damals hauptsächlich mit dem nicht funktionierendem Button mode beschäftigt kann daher nicht sagen, ob es im “normalen” Mode genauso ist.
auch wird Loop_run im Button Mode gestoppt und die Main.py wird dadurch beendet.

190: if not webserver.mws.IsStarted():

Gab bei mir immer ein true raus.
und der Webserver wurde versucht mehrfach zu starten.

Hatte da auch noch einige für mich nicht ganz nachvollziehbare Abfragen und
merkwürdiges verhalten in der Firmware/Webserver/Vue gefunden.
Habe dann aber irgendwann den Faden/Zeit/Ruhe dabei verloren.
Bin aber auch eher versierter Anwender als Programmierer und Python habe ich schon seit 10-15 Jahren nicht mehr wirklich benutzt.

Hatte aber auch gedacht die Entwicklung geht eh eher in Richtung hiveeyes-micropython-firmware, da ich persönlich finde das es einiges professioneller und stabiler aufgebaut ist. Aber da wird ein captive portal anscheinend immer noch von niemandem angegangen.

Er stürzt übrigens schon einiges vorher ab, bzw. reagiert nicht mehr schnell genug, daher auch keine aktuellen Daten von den Sensoren. Dieses fällt allerdings solange nicht auf, bis man Speichert. Als kleinen Trick kann man die Daten im Webinterface ändern und kurz vor dem speichern den FIPy neu starten.

Komme leider erst am Wochenende wieder nach Hause. Werde mal schauen ob ich den Faden wiederfinde.

Gruß Micha

1 Like

Hey,
danke für die ganzen Ideen!
Ich glaube ich konnte tatsächlich ein paar Bugs fixen:

  • die messwerte werden nicht mehr geladen, wenn die seite schon gewechselt wurde
  • mehr garbage collection im webinterface findet statt
  • wenn eine neue anfrage an messwerte geschickt wird, wird die alte gecancelt
  • das mess-interval insgesamt ist länger, damit genug zeit zum auslesen ist

Außerdem neu drin:

  • die ds treiber von didi (Vielen Dank! Ich hoffe ich hab alles richtig eingebaut)
  • die led leuchtet erfolgreichem startup grün (so kriegt man mit, wenn er abstürzt, dann ist sie wieder gelb)

known issues:

  • ssids werden im webinterface erst nach 2. restart angezeigt (hab schon eine idee woran es liegt, schaffe es aber vor dem wochenende nicht mer)
  • vielleicht immer noch memory leaks

Vielleicht habt ihr ja Lust zu testen.
Ich hoffe, ich hab alles nötige ins Repo gepusht.

lg
Diren

1 Like

Vielen Dank @Diren! Habe jetzt mit verschiedenen firmware-Versionen getestet,

bekomme aber jedesmal eine Fehlermeldung, die den Treiber der DS18B20 betrifft:

init ds
Traceback (most recent call last):
  File "main.py", line 14, in <module>
  File "webserver.py", line 9, in <module>
  File "sensors/__init__.py", line 23, in <module>
  File "sensors/ds18x20.py", line 22, in convert_temp
  File "lib/onewire.py", line 22, in reset
OneWireError:
Pycom MicroPython 1.20.2.rc3-0.8.0-vanilla-squirrel [v1.20.2.rc3-4-g4962aea3b-dirty] on 2020-02-11; FiPy with ESP32
Type "help()" for more information.
>>>

bzw.

ImportError: no module named '_onewire'
Pycom MicroPython 1.20.2.rc3 [v1.11-2037465] on 2020-02-05; FiPy with ESP32

Fehlt da noch was / ist noch etwas nicht upgedatet worden im GIT-Repo (Stand 2020-02-14, ca. 21h)?

Hi Clemens,

ich benutze auch ‘1.20.1.r1-0.7.0-vanilla-dragonfly-onewire’. Hab gerade noch mal neu gepullt, alles erased und neu geflasht, kriege aber den Fehler nicht. Wenn du magst überlegen wir Montag gemeinsam, was das sein könnte, am Wochenende übernehme ich keine Garantie ;)

Viele Grüße,
Diren

“Erase all” habe ich nicht gemacht, da auf dem FiPy vorher die 1.20.1.r1-0.7.0-vanilla-dragonfly-onewire drauf war. Habe den flash-Bereich des FiPys dann nur über das Windows-Tool gelöscht, was ja schon manchmal nicht gut ging. Vielleicht liegt es daran! Ok, versuche es nochmal mit “erase all” vorher! Alles weitere dann Montag! ;-)

Ich glaube nicht, dass es an der Firmware / Micropython von PyCom liegt. Ich hatte auch Probleme mit Exceptions, die in onewire.py bei einem CRC-Error entstanden. Als ich die nicht richtig abgefangen hatte, war mein System instabil und rebootete andauernd.
Siehe

Hier könnte es ähnlich sein

Hmm, @didilamken ich dachte @Diren hätte deine Änderungen schon im aktuellen code drinnen. Bei mir läuft es auch nicht instabil, sondern gar nicht … Leider keine Besserung mit “erase all” vorher, gleiche Fehlermeldung:

  File "lib/onewire.py", line 22, in reset
OneWireError:

Ok, in lib/onewire.py

    def reset(self, required=False):
        reset = _ow.reset(self.pin)
        if required and not reset:
            raise OneWireError
        return reset

Der versucht also ein reset, das kann passen, da ich gerade gar keine Sensoren angeschlossen habe! In der letzten Version lief der sketch auch durch ohne angeschlossene Sensoren, das wird es sein! Dann mal mit versuchen …

Wunderbar @Diren, mit angeschlossenen Sensoren läuft es! Ein Traum das Webinterface nun im Gegensatz zu vorher!! Kein einziger Totalabsturz, komplette Konfiguration läuft nun ohne erzwungenen restart! Man kann sogar zwischendurch sich mit dem “richtigen” WLAN verbinden, dort den beep sensor key erzeugen und wieder zum FiPy-AP reconnecten! Fantastisch!

In Osnabrück an der Uni war der Girl’s Day immer vor allem mit Arbeit verbunden, “In die Zukunft investieren”. Hier ist es aber ein echter Innovationsschub für BOB! ;-)) Endlich läuft das webinterface stabil! Ick freu’ mir!

Die Verbesserung in den Treibern ist wohl das Abfangen von Fehlern mit raise exception.
Vor Monaten wurden im Onewire-Treiber CRC-Fehler einfach ignoriert und es gab falsche Bits,die zu den merkwürdigen Messwert-Ausreissern führten, über die so lange diskutiert wurde.
Jetzt wird mit einer Exception auf CRC-Fehler reagiert. Wird die nicht sauber abgefangen, beendet das Programm und der Watchdog bootet neu. In den Messdaten auf dem Server bekommt man davon nichts mit, erst auf der seriellen Leitung sieht man etwas.

2 Likes

Hab auch mal versucht zu testen.
komme irgendwie nicht weiter.
Bei mir wird der AP nicht gestartet.
Den FiPy habe ich vorher über Command line mit dem Update tool gelöscht
Firmware:1.20.1.r1-0.7.0-vanilla-dragonfly-onewire
und
und die Firmware ist frisch von Git geladen. Die user_settings.json und default_Settings sind auch aus dem Git.
Überspielt habe ich mit Visual Studio und Pymakr Plugin.
Die RGB leuchtet erst einige sekunden gelb dann grün.
Über Serial kommt unter anderem folgendes

AP SSID: Moltebeere
Cause of restart: PWRON
switching to ap mode is now possible
Starting measurement setup...
WLan is enabled, trying to connect.
No WLan connection configured!
No WLan connection configured!
No WLan connection configured!
No network connection.
   DS18B20: Messung gestartet...
   DS18B20: 19.6 19.6 17.0 18.8 16.3 18.6  
{'weight_kg': -68312.0, 'p': 990.4699, 't': 22.26076, 'h': 49.43261}
stack: 896 out of 11264

danach laufen die Messungen.
getestt habe ich ebenfalls mit einem weiterem FiPy und
1.20.2.rc3-0.8.0-vanilla-squirrel
Auch habe ich es über den button mode Versucht aber dort kommt eine Fehlermeldung mit Programmabruch

Ne Idee was ich vergessen/Übersehen haben könnte?

1 Like

Habe mit der Platine von Didi getestet und da gibt es einen dezidierten button um in den AP-Modus zu wechseln.

Dann habe ich den Button Mode doch richtig herum verstanden true = Didi und false = Clemens ;-)

also false bricht ab.

OK Dann geht es mit deinem Layout noch nicht.

An welchen Pin hängt der Taster Bei Didi? an P2 kanns ja wegen der RGB nicht sein.
hatte vorhin pin3 mit Vorwiederstand aber ohne pullup/pulldown Wiederstände Versucht.

bin jetzt am überlegen, ob ich mir nen Taster und Wiederstände zusammenbastel oder ob ich den Button=false Mode nicht irgendwie zum laufen bekomme.

Also erstmal stand Git


dann nach den gefundenen ssid das hier.

image

Es ist der Button “Flash” ( braucht man bei Arduino-IDE zum Flaschen, braucht man nicht für MicroPython). bei Hiverize/FiPy für AP-Modus

Ahh, ok doch der P2 (RGB) aber auf GND gezogen. Ich hatte ihn auf 3V3 versucht.

Bug in main.py für Button Mode=false auch gefunden. Irgendwie hackt git bei meinem commit.

Pull requests ist jetzt händisch auf git raus

1 Like

https://github.com/Hiverize/FiPy/blob/master/default_settings.json

"general": {
    "general": {
        "button_ap_enabled": true,
        "button_ap_pin": "P2",

Die default_settings.json ist identisch mit der Didi-Version, in der “Clemens” ist "button_ap_enabled": false,

pullup / pulldown brauchst du nicht, wir haben die intern per Software aktiviert, etwas Draht könnte reichen.

Wie gesagt läuft jetzt bei mir auch mit

"general": {
"general": {
    "button_ap_enabled": false,
    "button_ap_pin": "P2",

mit dem Kabel oder dem Anlöten einer Leitung + Schalter würde ich hinbekommen aber andere die schon ein Workshop hatten sicher nicht. war mir nur unsicher mit der gleichzeitigen benutzung der RGB und des Einganges P2.

Das Problem, was ich jetzt noch vermute/habe habe ist ein fehlendes timeout des AP nach z.B. Stromausfall. aber dafür ist der wdt auf 30 min zuständig oder?

1 Like

Ich glaube das hatten wir bisher nicht wirklich berücksichtigt was nach einem Stromausfall passiert vs. nach einem reset. Andreas hatte mal versucht / überlegt über die restart cause eine Abzweigung zu realisierten:

Wenn per hardware reset, dann AP-Modus starten. Ansonsten (z.B. nach Stromausfall) hochfahren ohne in den AP zu gehen, fände ich sehr charmant, weiß nicht an was es dann gescheiterte ist oder nicht weiterverfolgt wurde.

Ich hab mal meine Router Daten angeben. Hatte ich bisher noch nicht gemacht.
WDT nach 30 Min scheint zu klappen
Wenn ich mir den Code so anschaue, ist auch nicht mehr drin, das der AP mode nach PWRON startet Er sartet aktuell nur, wenn er keine gültige WLan verbindung findet.
Die einzige Abfrage die den Boot status abfragt wird nur als Log ausgegeben.
Daher geht er jetzt natürlich nicht mehr in den AP-Mode. :roll_eyes:
Über die IP komme ich aus dem Netz leider auch nicht drauf wär natürlich Genial wenn das gehen würde ist aber sicherlich nicht mal so eben so umzuprogramieren. Da der Webserver und die Messung dann gleichzeitig laufen müßten

Idee: Nach Neustart nach Stromausfall startet der AP modus wenn ap_Button= false und wird nach 10 Min automatisch der FiPy widr dann über den WDT neugestartet. Die Box ständig aufzuschrauben wenn man was Ändern will oder muß.

oder schlagt ihr was besseres vor?

1 Like

So jetzt scheint es auch mit Clemens Platine nach power On zu klappen. Commit ist ebenfalls raus. Geht evtl. noch etwas schöner.

was ich jetzt noch vermisse ist eine Prüfung der Verbindung wärend der Übertragung falls das Wlan mal abreißt und auch die Verbindung zu Beep wird anscheinend noch nicht weiter überwacht oder neu gestartet.

Gruß Micha

1 Like

Danke fürs Testen und Mitcoden!!!

Tatsächlich ist es P2 und es überlappt mit der LED. Das ist ein bisschen unglücklich, vielleicht nutzen wir für zukünftige Versionen einen anderen Knopf/ Pin.
Ich hab das jetzt so gelöst, dass die LED die Farbe ändert, sobald der Start-Up-Prozess vorbei ist (von gelb auf grün). Danach wird der AP konfiguriert (nur konfiguriert, nicht in den Ap-mode gewechselt.) Ab diesem Zeitpunkt kann die LED nicht mehr angesteuert werden.

Ich habe jetzt nur mit Didis Platine getestet, vielleicht schließe ich gleich noch mal die von Clemens an.

Gute Idee, dann kommt man in den AP, aber nach Absturz kann trotzdem weiter gemessen werden

Stimmt, ich habe nie ohne Sensoren getestet, das sollte ich nachholen.

Puh, das freut mich!

Der Hauptzweck der Aktion war ja, dass das Webinterface stabiler wird.
@MKO Läuft das Webinterface bei dir?