Welche Ota Update Strategie habt Ihr bei ESP?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Vielen Dank fuer die Links. Dummerweise nutzen meine Sensoren einen ESP266-12F und leider gibt es dafuer die ESP32 interfaces nicht :wallbash:

    Ich habe mittlerweile

    Code
    ESP.getResetReason()

    gefunden welches einen String returned :-/ - ich haette eher einen enum oder int erwartet - und der returned - durch Tests verifiziert "Deep-Sleep Wake". Doku zu dem Interface habe ich bislang noch nicht gefunden :no_sad:

    Ich habe ueberlegt ob ich den Threadsubject auf ESP266 aendere - aber wir sind hier schon ziemlich OT denn das Thema ist Updatestrategie und die sollte eigentlich unabhaengig davon sein ob man einen ESP266 oder ESP32 nutzt.

  • denn das Thema ist Updatestrategie und die sollte eigentlich unabhaengig davon sein ob man einen ESP266 oder ESP32 nutzt.

    :thumbup::thumbup::thumbup::thumbup: auf jeden Fall!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Mit dem Code kann man sehr schoen SW maessig pruefen ob man aus dem DeepSleep geweckt wurde :)

    Code
    if (ESP.getResetReason() != "Deep-Sleep Wake" ) { // don't check for updates when restarted by deep sleep
        checkForUpdates();
      }
  • Finaler update:

    Heute habe ich den neuen Code der sich per OTA beim Booten ein neues Image holt auf meinen ESP Sensoren deployed. Damit ich sehe dass ein OTA Update stattfindet und alles OK ist habe ich noch ein paar Blinkcodes eingefuegt.

    Da ich noch die Polltime falsch hatte (1 Minute) konnte ich gleich mit den Sensoren testen ob OTA funktioniert: Den neuen Code auf den Webserver gestellt, alle 3 Sensoren restartet - und volia - alle blinkten OTA update und success :bravo2: . Im Grafana sehe ich auch dass sie jetzt nur noch alle 10 Minuten Daten liefern.

  • Nachtrag: Man koennte natuerlich auch das ESPNow Gateway einmal am Tag dem Sensor per ESPNow mitteilen ob ein SWUpdate verfuegbar ist und der Sensor faehrt dann sein WLAN hoch und zieht sich dann den Update. Stromtechnisch sollte das nicht ins Gewicht fallen solange nur ESPNow zum Check genutzt wird. SW maessig ist da dann aber schon gewisser Hirnschmalz notwendig.

    Wenn ich mal viel Zeit habe werde ich mir das mal ansehen. Das ist sicherlich interessant zu implementieren. Da die Updatefrequenz bei mir gering ist sehe ich aber erst einmal keinen dringenden Handlungsbedarf.

  • Signed Binarys

    soll welchen Sinn haben?

    Binary ist weder signed noch unsigned :conf: das ist schon per Definition falsch!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Binary ist weder signed noch unsigned :conf: das ist schon per Definition falsch!

    Nope. Ein binary kann sehr wohl signiert sein, da der Ersteller der Firmware selbst das Format bestimmen könnte.

    Signiert wird mit dem privaten Schlüssel, kontrolliert mit dem öffentlichen Schlüssel. (asymmetrische Verschlüsselung). Gleichzeitig kann auch der Inhalt gehasht werden, um nachträgliche Änderungen einer bereits signierten Firmware auszuschließen.

  • signiert

    oder mit Vorzeichen?

    ich sehe einen Unterschied zwischen signiert und signed!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • ich sehe einen Unterschied zwischen signiert und signed!

    Hat in der Informationstechnologie im Kontext der asymmetrischen Verschlüsselung dieselbe Bedeutung, sind nur zwei unterschiedliche Sprachen.

    Dass du darunter etwas anderes verstehen willst, ist mir schon klar, hat aber nichts mit dem Kontext zu tun und trägt auch nicht zur Frage bei.

    In gewissen Anwendungsfällen (Automotive) ist es Pflicht, die Firmware gegen Änderungen zu schützen und zu verhindern, dass nachträglich veränderte Firmware geflasht werden kann. Kann man auch kaufen: https://store.chipkin.com/articles/signed-firmware

    Für Spielzeugprojekte eher ungeeignet und hinderlich. Zum Lernen ist es aber eine hervorragende Sache.

  • Ich habe eben mal ein public und private .key File in das Verzeichnis meines OTA Codes kopiert und per Arduino gebaut.

    Im Arduino Log sehe ich u.A.

    Code
    Enabling binary signing
    ...
    Signed binary: /tmp/arduino_build_206389/BME280_espnow-sensorNode-ota.ino.bin.signed
    Legacy signed binary: /tmp/arduino_build_206389/BME280_espnow-sensorNode-ota.ino.bin.legacy_sig

    und ein neu generiertes BME280_espnow-sensorNode-ota.ino.generic.bin

    Lt der Doc sollte eigentlich ein bin.signed generiert werden :conf:

    Meine Produktivsensoren werde ich damit nicht befruchten. Aber die Tage teste ich mal was mit meinem Testsensor passiert wenn ich auf dem ein signed Image deploye und danach ein unsigned image. Letzteres sollte ja nicht mehr per OTA erfolgreich sein :)

  • Nachdem ich die keys entfernt habe, das vorherige bin in bin.signed renamed und neu generiert habe sehe ich

    Code
    -rw-r--r--  1 framp framp 328416 Aug 17 22:55 BME280_espnow-sensorNode-ota.ino.generic.bin
    -rw-r--r--  1 framp framp 366672 Aug 17 22:39 BME280_espnow-sensorNode-ota.ino.generic.bin.signed

    D.h. in bin.signed stecken mehr Bytes - wohl alles um den signed Kram zu handlen. Das teste ich heute aber nicht mehr. Sieht aber ganz vielversprechend aus.

  • Funktioniert wie erwartet :bravo2:

    Das Szenario war:

    EIn signed Image wurde per USB auf den ESP geflashed und der ESP gestartet. Danach wurde ein nicht gesigntes Image auf den Webserver kopiert. Dann der ESP neu gebootet und er hat festgestellt dass es ein neues Image zum Update gibt. Dann wurde per OTA das neue Image downloaded aber nicht installiert da die Signatur nicht stimmt bzw sogar fehlt :bravo2:

    War echt einfach die Images zu signen. Einfach private und public key ins Verzeichnis kopieren und mit Arduino das Image exportieren bzw das Image per USB flashen. Voilà :)

Jetzt mitmachen!

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