Pico W, automatisch neustarten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    Ich habe einen Raspberry Pi pico W.

    An dem befinden sich mehrere Temperatursensoren. Die Werte werden mir mittels Webserver in HTML angezeigt.

    Ich sag mal, alle paar Tage, ist der Pico nicht mehr via Webserver zu erreichen.

    Kurz stromlos gemacht, dann ist er wieder da.

    Gibt es eine Methode in Micropython, den Pico W, z.B. einmal am Tag automatisch neu zu starten?

    Danke.

  • Moinsen,

    Eine Ursache könnte das übermäßige Füllen des RAMs sein, verwendest du GC in deinem Programm ?
    Ansonsten kannst du einen Timer im Sinne einer Aufaddierung einer Zeitspannung zur Uptime nutzen, um dann via machine. soft_reset() einen Re-boot auslöst. Diese UPTIME läßt sich via RTC und utime.loacaltime() ermitteln. Man erfasst die erste Zeit, die mit dem Programmstart erfasst / ausgelesen werden kann, und schafft sich dann ein Funktion, die bei erreichen einer T+X Zeit dann einen Neustart ausführt.

    Franky

  • Gibt es eine Methode in Micropython, den Pico W, z.B. einmal am Tag automatisch neu zu starten?

    Ja, mit einem Timer und machine.reset könnte man das machen. Aber wenn das Problem eher auftritt, bringt einem der Timer nichts, der dann wahrscheinlich nicht ausgeführt wird.

    Code
    import machine
    
    machine.Timer(period=86_400_000, mode=Timer.ONE_SHOT, callback=machine.reset)

    Möglicherweise ist die Zahl zu groß. Einfach mal testen, ob es überhaupt funktioniert.

    Das ist aber nur ein Workaround und löst nicht das eigentliche Problem.

    Ich würde eher den Watchdog einsetzen. Wenn die Methode feed() nicht innerhalb der angegebenen Zeit aufgerufen wird, so wird ein Reset ausgeführt. Da dein Programm irgendwas in einer Hauptschleife macht (sensor-werte übertragen), kannst du dort watchdog.feed() aufrufen.


    Beispiel mit einem Intervall von 10 Sekunden. Der Watchdog macht einen Reset, sobald nach 20 Sekunden die Methode feed() nicht aufgerufen worden ist.

    Würde z.B. ein Sensor spinnen und eine Exception auslösen oder mehr als 20 Sekunden benötigen, um den Wert zu liefern, dann läuft der Code in der While-True Schleife nicht weiter und der Watchdog macht dann einen Reset, da er nicht mehr gefüttert wird.

  • Moinsen,

    @DeaD_EyE ist das nicht destruktiv ?
    Die Frage der Ursache ist durchaus berechtigt. Dennoch wenn ist das WLAN via SPI beim PICO W angebunden, damit falls ein Verbindungsabriss entstehen würde, also die Kommunikation via SPI nicht für den Sensor benötigt wird, dann hängt der PICO W in einer Endlos-Reboot Schleife, bis die Verbindung via Startbedingung ( Counter zur Anforderung einer Verbindungsherstellung ) network.ist_connected() erfüllt ist.
    Keine Ahnung was der Code macht, welches Ziel der TO beabsichtigt, nur wenn das eine fortlaufende Meßwertaufnahme sein soll, dann kreiselt das PICO im Reboot, bis auch die Verbding zum WLAN AP wieder besteht.
    Sollte dann nicht der Watchdog, so wie du es beschreibst, gezielt auf das Sensor-Interface gelegt werden, und nicht allgemein auf irgendwas reagieren ?

    Franky

  • DeaD_EyE ist das nicht destruktiv ?

    Ja, ist es, aber manchmal ist genau das die Anforderung. Den Trick habe ich von jemandem gelernt, der mal bei Bosh Rexroth Controller designt hat.


    Sollte dann nicht der Watchdog, so wie du es beschreibst, gezielt auf das Sensor-Interface gelegt werden, und nicht allgemein auf irgendwas reagieren ?

    Der Watchdog sollte am besten dort "gefüttert" werden, wo in einem Intervall etwas abgefragt wird.
    Da jedes Programm etwas anders ist, kann man keine generelle Aussage darüber treffen.

    Die Hauptschleife wäre ein guter Ort.

    Wenn man z.B. vermutet, dass der Sensor einen Timeout bekommt, dann reicht es schon aus, wenn ein Statement später der Watchdog gefüttert wird. Durch den zuvor blockierenden Funktionsaufruf, kann der Watchdog nicht gefüttert werden, was dann dazu führt, dass ein Reset (ohne Rücksicht auf Verluste) durchgeführt wird.

    Das behebt nicht das eigentliche Sensor-Problem, falls es mit Hardware zu tun hat. Wenn es aber z.B. ein Softwarebug im SDK, Micropython oder in einer der externen Abhängigkeiten ist, der nur bei langer Laufzeit auftritt, kann der Reset helfen. Software ist niemals Bugfrei und damit hat man auf allen Ebenen zu kämpfen.

  • Sorry das ich mich jetzt erst melde,

    muss in der Klammer von "watchdog.feed()" etwas eingefügt werden?

  • Beitrag von Bluhminga (5. März 2023 um 11:23)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Hallo,

    danke für die TOP Antworten!

    Ich frage via HTML Sensordaten ab. Also wenn ich die IP des PicoW eingebe, werden die Sensordaten einmalig abgefragt und in HTML dargestellt.

    Kommt keine Abfrage, löst watchdog aus.

    Hier mal der Code.

    WebServerSensor.py, boot.py

    Wo sollte der Watchdog eingesetzt werden?

    Wenn ich die Sensordaten in eine Datenbank einpflege, ist es einfach. Aber hier komme ich nicht drauf.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!