Maintenance Mode

Der Maintenance Mode ermöglicht zunächst das Flashen der Firmware, falls die Software mal nicht läuft. Über einen definierten Button und dem Reset-Taster kommt man in diesen Modus.

Weitere denkbare Features:

  • Im- und Export von NVS-Einstellungen

  • Konfiguration der Hardware.
    Grundgedanke: Eine Firmware für alle.

Die erste Version vom Maintenance Mode läuft schon mal.

Welcher Button würde sich anbieten, um in den Maintenance Mode zu kommen?

Ich habe jetzt WAKEUP_BUTTON genommen. Aktuell hält man den Button, führt dann einen Reset aus und nach 3 Sekunden ist man im Maintenance Mode. Den Button müsste man konfigurierbar machen. Zum Beispiel über die initiale Einrichtung beim Wifi, Seriell oder sonstiges.

Falls jemand Ideen hat, raus damit :slight_smile:.

Das klingt aus meiner Sicht gut. Also der muss auf jeden Fall konfigurierbar sein und die Dauer auch. Und zwar deswegen, weil wenn man beispielsweise den ltc2954 verwendet, dann darf man den nicht zu lange drücken, weil sonst schaltet der ltc den ganzen ESPuino wieder „hart“ aus.
Man hätte dann den langen Tastendruck dann also doppelt belegt und muss dem Benutzer dann irgendwie ein Feedback geben, wenn er ihn erreicht hat. Ggf Neopixel oder Abspielen eines Audiofiles. Wobei das File dann nicht ins Spiffs dürfte, weil ich den Weg quasi verbaut habe und nicht nochmal das Flash-Layout ändern möchte.

@compactflash Wie siehst du das denn? Für dich käme das jetzt vermutlich ein bisschen zu spät, da du ja einen ESPuino vermutlich schon demletzt verteilt hast und damit auf die Widerstände am ltc keinen Einfluss mehr nehmen kannst. Aber vielleicht hast du ja Anmerkungen dazu.

Nein , kommt nicht zu spät . So eine Lösung hätte ich auch schon oft gebraucht , wenn ich mal wieder Mist gebaut habe . Da ich ja keine serielle Schnittstelle nach „draußen“ habe erspart das im Fehlerfall halt das Aufschrauben der Kiste . Wenn die Dauer konfigurierbar ist würde das sogar mit meinen aktuellen Kondensatorwerten passen .

soll sicher heißen die Reset-Taste des Boards muss gedrückt werden , weil der Reset per WebGui ja im Fehlerfall in der Regel nicht mehr möglich ist .

Ja, man benötigt einen Taster für Reset, welcher nach Außen geführt wird. Reicht ja auch, wenn man mit dem Zahnstocher drankommen würde.

Wenn man den definierten Button gedrückt hält, dann einen Reset ausführt und den definierten Button x Sekunden lang weiterhin gedrückt hält, landet man im Maintenance Mode.

Die Abfrage des Buttons erfolgt dann ganz am Anfang beim Starten. Sobald der Button nicht gedrückt ist, geht man sofort in den normalen Modus. D.h der normale Modus wird dadurch nicht spürbar verzögert.

@tuniii kannst Du kurz erklären was der Maintenance-Modus so machen soll?
Die Konfiguration der Pins, also Settings.h übers Web konfigurierbar machen?

Sorry finde hier keine Beschreibung…

Ist es eigentlich auch möglich, eine Recovery-App/Partition zu haben? Ich meine ich habe mal so etwas gelesen.
Bei 4 MB z.B. 1 MB Recovery-App und 3 MB Main-App.
OTA / Reset dann nur über die Recovery-App.
In der Main-App kann dann per Software (entweder Tastendruck bei Boot oder Webgui) die Recovery-App ausgewählt werden und es erfolgt ein automatischer Reboot.
Wenn die Recovery-App nur seriell geflasht werden kann, bekomme ich die auch nicht per OTA kaputt.
Der OTA flasht doch immer die gerade nicht aktive Partition und „schaltet“ dann um, oder?

@tueddy Habe es oben ergänzt.

@Christian Grundsätzlich gibt es diese Möglichkeit beim ESP32. Dafür gibt es die Partition Factory, allerdings kann das Arduino nicht out of the box und das Flash-Prozedere wäre damit deutlich komplizierter. Man müsste dann selbst über esptool mit sämtlichen Parametern flash und zudem noch den Arduino Core entsprechend anpassen. Für ein Hobby-Projekt dann doch etwas aufwändiger.

Genau, OTA schaltet immer zwischen beiden OTA-Partitionen um und ist daher eigentlich eine ziemliche Platzverschwendungen. Der Aufpreis für 16MB Flash ist allerdings so gering, dass es bei einem Hobby-Projekt nicht wirklich relevant ist. Man kann übrigens auch selbst den Flash von 4MB auf 16MB upgraden.

@tuniii Vielen Dank für die Bearbeitung im Eingangspost! Ich muss aber jetzt nochmal nachfragen:

Wann genau tritt der Fall „falls die Software mal nicht läuft.“ ein?
Ich habe schon oft Fälle gehabt wo ich einen Hardware-Reset durchführen musste (Karte falsch angelernt, Komme nicht aus dem BT-Modus raus, Audio stürzt ab usw.). Und das in einer Endlosschleife. Dafür habe den Reset-Tasterr nach draußen gelegt. Der Hardware Reset setzt den ESPuino in den Ausgangszustand zurück. Und zur Not neu hochladen über USB.
NVS Export/Import ist ja jetzt schon möglich über Web-UI. Einzig die Grundkonfiguration, also Pins festlegen und Funktionen kann ich mir jetzt vorstellen. Und das wäre eine feine Sache, eine Firmware!

Bitte nicht falsch verstehen, ich möchte nur verstehen wofür das gut sein soll, also wo bei Dir der Schuh klemmt.

Wenn ich einmal die Software installiert habe, dann möchte ich für ein Update nicht wieder an den PC gehen. Seriell ist bei mir auch nicht nach außen geführt.
Langfristig werde ich mir und auch anderen einen Update-Server bereitstellen, um zukünftige Updates dann über OTA zu machen. Falls jetzt ein Update einen Bug hat und dadurch der ESP in einer Dauer-Reset-Schleife hängt, dann muss ich oder andere doch wieder an den PC. Für mich als Embedded-Entwickler kein Problem, aber für einen Laien ist das eine große Herausforderung. Mit dem Maintenance Mode kann man in dem Fall das Gerät dann „retten“. Man möchte das Gerät ja nicht zum Hersteller einschicken :grin:.
Es gibt auch Fälle, wo das Gerät ein paar Wochen ohne Probleme läuft und auf einmal dann nicht mehr, weil sich das NVS zerschossen hat, da beim Power Off gerade etwas rausgeschrieben wurde und die Daten nun inkonsistent sind.

Der HW-Reset initialisiert ja nur die Hardware neu, aber dauerhaft heilen kann er die Software nicht.

Ich fände es super, wenn man Laien dieses tolle Projekt noch einfacher verfügbar machen könnte. Dazu gehört für mich, dass man die Firmware über das Internet updaten kann und die Hardware-Anbindung über Software konfiguriert. Der Maintenance Mode ist davon nur ein kleines Puzzlestück.

Das Projekt passt da ganz gut dazu, aber kennt ihr vielleicht auch schon: GitHub - Aircoookie/WLED: Control WS2812B and many more types of digital RGB LEDs with an ESP8266 or ESP32 over WiFi!

Die haben ein einheitliches Image, alles lässt sich über die Weboberfläche konfigurieren, es gibt sogar Apps dazu und Änderungen die Z.B. über die Fernbedienung gemacht werden, werden sofort mit der Oberfläche synchronisiert. Ich glaube OTA Update übers Internet ist auch dabei, da bin ich mir aber nicht sicher. Eine Entwicklungsumgebung ist selbst für das erstmalige Flashen hier nicht notwendig: Install WLED Binary - WLED Project

Vielleicht bringt deren Code ja die ein oder andere Inspiration :slight_smile:

1 „Gefällt mir“

Vielen Dank für den Link. Das Projekt sieht interessant aus. Inspirationen sind immer willkommen :slight_smile: .

Das genannte Feature haben wir bereits in einem anderen Projekt umgesetzt. Von dort könnte man eigentlich fast alles 1:1 übernehmen.

Im Prinzip läuft das so ab:

  1. Der Entwickler setzt einen Versions-Tag bei Github. Z.B. v1.0.3.

  2. Github Actions läuft dann automatisch los und baut die Software.

  3. Nach dem Bauen wird die Software als Release-Draft angelegt.

  4. Der Entwickler kann nun noch seine Release-Notes hinzufügen und das Release veröffentlichen.

  5. Sobald es veröffentlich ist greift ein hinterlegter Webhook und gibt dem Update-Server bescheid, dass er die neue Firmware holen kann.

  6. Der Benutzer bekommt dann auf seinem Gerät den Hinweis zur neuen Version und kann sein Gerät update.

Der Benutzer kann dabei zwischen Public- und Beta-Software entscheiden.

Letztendlich muss der Entwickler nur den Tag setzen und das Release veröffentlichen. Der Rest passiert automatisiert.

Sobald das mal etabliert ist, ist das eine wirklich feine Sache.

Es würde sich mehr um eine Integration und keine Neuentwicklung handeln. Aber Grundvorraussetzung wäre eine universelle Firmware und die Konfiguration über die Software. Man könnte auch eine Firmware pro Board + Konfiguration über Software anbieten.

Allerdings könnte man bei 16MB auch einfach alles zu einer Firmware zusammenfassen.

3 „Gefällt mir“