-
Notifications
You must be signed in to change notification settings - Fork 779
compress all HTML files #3568
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
compress all HTML files #3568
Conversation
@SybexX Macht das für dich so Sinn? |
Habe es gerade mit firefox und Microsoft Edge ausprobiert, alles läuft top. Das Update hat etwa 2 Minuten gedauert, vorher waren es immer über 3 Minuten. |
@caco3 Da das Update die normalen Dateien von der SD nicht löscht, habe ich beim Testen leider einige Konflikte nicht bemerkt. |
oh, danke, daran habe ich nicht gedacht. wir könnren die html files auch drin lassen, dann hätten wir auch einen fallback, wenn ein browser zickt. dafür wäre halt das update wieder grösser/langsamer |
@caco3 Das war auch mein Gedanke, jedoch hat es auch Nachteile, wie man sieht^^ |
Das Problem mit file_server.html habe ich folgend gelöst:
somit wird file_server.html gar nicht mehr gebraucht https://github.com/jomjol/AI-on-the-edge-device/actions/runs/13462525449/artifacts/2632027390 |
Ich sehe noch ein weiteres Problem: |
Es wird immer überprüft, ob eine .gz Datei vorhanden ist, wenn nicht, wird die normale verwendet. |
@caco3 Wie wollen wir da weiter vorgehen? |
Ich wäre dafür, dass wir das Wenn es Ausnahmen braucht, sollten wir verstehen, wieso sie nötig sind. Es gibt bereits eine funktion, um das Verzeichnis zu löschen, aber ich habe noch nicht geschaut, wann der aufgerufen wird:
|
Ich glaube Sie wird nie ausgeführt, es wird immer nur die davor ("update") verwendet. |
@SybexX Ich habe deinen branch ( In #3583 habe ich mal aktiviert, dass bei einem Update das HTML-Verzeichnis gelöscht wird. Soweit ich sehen kann, brauchen wir nun nur noch die gz files. |
um das ausschließen zu können, müsste man das löschen dann eventuell hier einfügen https://github.com/jomjol/AI-on-the-edge-device/blob/main/code/components/jomjol_fileserver_ota/server_file.cpp#L1028
|
das würde aber auch nur einfach die HTML-Dateien löschen, für die es eine ZIP-Datei gibt! |
die html.zip werden eigentlich mit der anderen Funktion Kopiert/Entpackt https://github.com/jomjol/AI-on-the-edge-device/blob/main/code/components/jomjol_fileserver_ota/server_file.cpp#L1054 die https://github.com/jomjol/AI-on-the-edge-device/blob/main/code/components/jomjol_fileserver_ota/server_file.cpp#L914 macht glabe ich nur die update.zip (eine Datei die eine firmware beinhaltet) |
Neuer Ansatz:
|
Was sagst du zu:
oder
|
Was ist der Vorteil von deinem Ansatz? Bei deinem ersten Ansatz sehe ich die Schwierigkeit feststellen zu können, ob das System normal startet. Das macht es ja auch mit fehlendem html Verzeichnis. Das Ziel sollte zu sein, die heisse Phase so kurz zu halten wie möglich. Die heisse Phase ist diejenige, in welcher ein Crash/Neustart zu einem nicht-funktionierenden Gerät führt.
Versuch doch bitte mal meinen Ansatz, ich habs bereits implementiert. |
ja, hast Recht. Mein Gedanke, mit dem späteren Löschen der alten html Dateien war, dass ja bei einigen Leuten, aus welchen Grund auch immer, beim Kopieren was schief gelaufen ist und sie ja dadurch boot loops bekommen haben. Und da war ja das Problem nicht, dass die Datei/Dateien fehlte/n, sondern das sie falsch Kopiert wurde/n (korrupt war). |
Sry, habs vergessen zu puschen, ist jetzt in #3584 |
Liegt das nicht eher an einem Problem mit der SD-Karte?
|
Ich vermutte, dass dies auftritt, wenn der ESP32 zB. während des Updates ein Bild macht oder anderweitig noch auf die SD zugreift. Deshalb habe ich in meinen privaten fork den Aufruf der Updatefunktion direkt nach den Initialisieren der SD und des PSRAMs gepackt und erst dann wird die Kamera, Wlan und co. Initialisiert. |
Zudem müsste man eventuell noch den normalen Ablauf vor dem Update beenden/stoppen, um sicherzustellen, dass beim Kopieren der zip, keine anderweitigen Zugegriffe auf die SD stattfinden. |
Das Update wird doch ganz früh im main durchgeführt: https://github.com/jomjol/AI-on-the-edge-device/blob/main/code/main/main.cpp#L394 Somit ist gewährleistet, dass der flow erst nach dem update durchgeführt wird. Aber ich gebe dir recht, es würde Sinn machen, das Update so früh wie möglich zu machen. Falls wir dazu kein PSRAM brauchen (bi nicht sicher), könnten wir es hier machen: https://github.com/jomjol/AI-on-the-edge-device/blob/main/code/main/main.cpp#L257 |
Ich glaube PSRAM wird nicht benötigt, die SD verwendet ja nvs_flash und miniz den ROM, daher müsste es keine Probleme geben. |
Scheint zu klappen. Schaus dir doch bitte auch mal noch an: #3584 |
bei mir hat er die htmls nicht gelöscht, zudem hat die Kamera während des Updates ein Bild gemacht und nach dem Neustart kam ein boot loop mit dem Fehler "I BOD: Brownout detector was triggered" (AI-on-the-edge-device__update__3584_merge_(1c8fd54).zip). Nach dem ich den ESP32 dann kurzeitig stromlos machte, startete er wieder normal. |
Hmm, das ist merkwürdig. Hattest Du das vorher noch nie? Komisch ist auch, dass der erwähnte commit (1c8fd54) gar nicht Teil des branches (https://github.com/jomjol/AI-on-the-edge-device/tree/refs/heads/remove-HTML-directory-on-update2) ist... Ich habe gerade jeweils 2 updates auf meinen produktiven devices gemacht mit 57d1f7b. Lief jeweils ohne sichtbare Probleme und der Ordner wurde sauber ersetzt. Hinweis: Die Änderungen kommen erst nachdem zweiten update zum zug (das update erfolgt mit der alten firmware). |
Dies Probleme habe ich ab und an, wenn während des Updates die Runde startet, meistens findet er jedoch dann die SD(0x00000008) oder Kamera(0x00000004) nicht mehr. |
Beim dritten Versuch kam "I (6446) MAIN: Reset reason: Brownout", selbst das stromlos machen hat nichts gebracht. |
vieleicht liegt es an diesen zwei Stellen:
ändere es mal in:
|
Habe die Änderungen mal gemacht und gemerkt das RenameFile() ja nur für Dateien(Ordner werden nicht berücksichtigt^^) ist. Daher habe ich jetzt eine neue Funktion "RenameFolder()" hinzugefügt, damit funktioniert es bei mir ohne boot loops. Habe zig mal die Firmware hin und her geflasht, ohne Probleme, jedoch habe ich immer drauf geachtet, dass der Start einer Runde nicht in die Update Phase fällt.
|
Jep,
cool!
Bist Du dir wirklich sicher, dass die Runde mal während dem Update gestartet hat? Zuerst kommt (via xTaskCreate(&task_do_Update_ZIP, "task_do_Update_ZIP", configMINIMAL_STACK_SIZE * 35, NULL, tskIDLE_PRIORITY+1, NULL);
while(1) { // wait until reboot within task_do_Update_ZIP
vTaskDelay(1000 / portTICK_PERIOD_MS);
} Er bleibt also nach dem Task-Start im Und erst viel später in xTaskCreatePinnedToCore(&task_autodoFlow,...); |
Ich meine die Phase währen des Hochladens der zip Datei, da wird die Runde ganz normal durchgeführt und natürlich zeitgleich auf die SD zugegriffen, um das Bild darauf zu speichern. Und ab und an entsteht da ein Fehler, der zu boot loops führt. |
D.h., Du hast crashes während dem Upload? Grundsätzlich greift die Runde ja nur lesend auf die SD-Karte zu, da wird kein Bild gespeichert (ausser Du hast das Speichern der ROIs aktiviert). Du hast von Brownouts gesprochen. Könnte es sein, dass deine Speisung ungenügend ist? Wenn auf die SD-Karte geschrieben wird und gleichzeitig die Kamera angesteuert wird, braucht das vermutlich eher mehr Strom als normal. Die Runde während dem Upload zu unterbrechen ist wohl eher schwierig. Bei einer laufenden Runde müsste der Upload verzögert werden. Das müssten wir am ehesten in Javascript machen, indem wir den status abfragen (polling) und erst nach Ende der Runde den Upload starten. |
Ich würde sagen, die zip wird falsch auf die SD gepackt(korrupt) und dann passiert ein Fehler beim entpacken, der zu boot loops führt. Ich werde das nächste mal, wenn es passiert(eigentlich sehr sehr selten), die zip auf der SD mal am PC prüfen. Zumindest muß ich dann die Firmware nochmal mit Platformio auf den ESP32 neu drauf flaschen, damit er wieder funktioniert. |
ja, teste das doch mal. Ich habe so wirklich noch nie ein Gerät gebrickt. |
könnte aber etwas dauern, den wie gesagt, es passiert zum Glück nur äußerst selten. |
Sollen wir es mal so mergen? Ich habe eine funktionierende Library gefunden, um die MD5-summe einer Datei zu berechnen. Nun müsste das nur noch sinnvoll eingebaut werden. Wir sollten das aber in einem separaten PR machen. |
Es funktioniert ja bei dir und auch bei mir, so wie es soll, daher spricht ja eigentlich nichts dagegen es zu mergen. |
eventuell könnte man auch die Funktion die bei miniz verfügbar ist verwenden "mzip_ulong mzip_crc32(mzip_ulong crc, const mzip_uint8 *ptr, size_t buf_len)" |
Serverseitig ist es bereits implementiert: #3590 |
ich habe mal die setup.html überarbeitet, damit man die kleinen Dateien (explain_1.html bis explain_7.html) nicht mehr braucht. https://github.com/jomjol/AI-on-the-edge-device/tree/rework_setup_html |
This is a continuation of #3538
css
,js
,jpg
,png
,svg
andmap
files in the html folder. This speeds the Web UI serving up.