{"id":398,"date":"2021-06-09T19:26:58","date_gmt":"2021-06-09T17:26:58","guid":{"rendered":"https:\/\/www.iot-embedded.de\/iot-2021\/?p=398"},"modified":"2021-06-09T19:27:31","modified_gmt":"2021-06-09T17:27:31","slug":"over-the-air-updates-fuer-den-esp8266","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2021\/beverage-monitoring\/over-the-air-updates-fuer-den-esp8266\/","title":{"rendered":"Over-The-Air Updates f\u00fcr den ESP8266"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"ota-updates-f\u00fcr-den-esp8266\">Over-The-Air Updates f\u00fcr den ESP8266<\/h1>\n\n\n\n<p>In diesem Blogeintrag m\u00f6chten wir gerne ein \u00dcberblick \u00fcber den momentanen Stand der Update Funktion unserer Mikrocontroller geben. Die technischen Details gibt es in weiteren Beitr\u00e4gen, hier gibt es erst einmal eine Architektur \u00dcbersicht und ein bisschen Background um Gr\u00fcnde, und Herangehensweise zu verstehen.<\/p>\n\n\n\n<p>F\u00fcr unser Projekt brauchen wir verschiedene Sensoren, welche an einen ESP8266 angeschlossen werden. Die gemessenen Daten werden hierbei per MQTT Protokoll versendet.<\/p>\n\n\n\n<p>Ein gro\u00dfer Vorteil von der Balena Cloud ist deren Funktion durch Container Files laufende Services auf einzelnen Raspberry Pis zu aktualisieren. Gegeben ein Pi wird als Plattform f\u00fcr ein Backend oder auch als Sensor benutzt, so kann die laufende Applikation mit Hilfe von Balena bei Bedarf aktualisiert werden.<\/p>\n\n\n\n<p>Der ESP8266 ist ein Mikrocontroller und kann kurz gesagt nicht in gleicher Weise in die Balena Cloud mit eingebunden werden. Um dennoch mit Hilfe der Balena Cloud die Logik welche auf dem ESP8266 ausgef\u00fchrt aktualisieren zu k\u00f6nnen m\u00fcssen wir ein bisschen kreativer werden.<\/p>\n\n\n\n<p>Eine m\u00f6gliche Herangehensweise w\u00e4re das Nutzen von Over-The-Air (OTA) Updates. Hier wird dem ESP8266 eine neue Applikation \u00fcber das Netzwerk bereitgestellt, welche von dem Mikrocontroller geladen und gespeichert wird. Nach dem Schreiben auf den Speicher des Mikrocontrollers startet dieser neu und l\u00e4dt die aktualisierte Version.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>+------------+\n| ESP8266 V1 | -- Update --+\n+------------+             |\n1) load file                |\n2) save file                |\n3) reboot                  |\n+------------+             |\n| ESP8266 V2 | &lt;-----------+\n+------------+<\/code><\/pre>\n\n\n\n<p>Momentan nutzen wir das Arduino \u201cFramework\u201d zum Programmieren des ESP8266. Mit dessen Hilfe k\u00f6nnen wir bequem alle ben\u00f6tigten Sensoren auslesen, sowie auch eine MQTT Verbindung aufbauen. Wie in der <a href=\"https:\/\/arduino-esp8266.readthedocs.io\/en\/latest\/ota_updates\/readme.html#http-server\">Dokumentation<\/a> beschrieben werden OTA Updates auch unterst\u00fctzt.<\/p>\n\n\n\n<p>Das Arduino Framework bietet verschiedene OTA M\u00f6glichkeiten:<\/p>\n\n\n\n<ul><li>OTA mit der Arduino IDE Normalerweise wird der ESP per Serial Port (ESP und Computer sind per USB verbunden) mit der Applikation bespielt (geflasht). Die Applikation liegt hierbei in kompilierter Form als bin\u00e4re Datei vor. Ein OTA Update per Arduino IDE Updates ben\u00f6tigt eine ge\u00f6ffnete Arduino IDE, in welcher per Hand anstatt des Serial Ports ein Netzwerk Port ausgew\u00e4hlt wird. =&gt; Nicht wirklich automatisierbar.<\/li><li>OTA \u00fcber den Webbrowser Hier stellt der ESP selbst ein Webserver bereit, welcher per Browser aufgerufen werden kann, und die bin\u00e4re Datei mit neuer Logik hochgeladen werden kann. =&gt; Nur schwer automatisierbar.<\/li><li>OTA \u00fcber einen HTTP Server Hier fragt der Server einen dritten HTTP Server an, welcher die bin\u00e4re Datei \u00fcbertr\u00e4gt. =&gt; Gut automatisierbar.<\/li><\/ul>\n\n\n\n<p>F\u00fcr eine Integration mit der Balena Cloud sollte OTA \u00fcber einen HTTP Server genutzt werden. Der HTTP Server und die bin\u00e4re Datei sollten via Balena Cloud deployed werden, und ein Event triggern, welche den einzelnen ESPs signalisiert, dass ein Update notwendig ist.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>+----------+  Update Artefakt  +---------+ \/ Deployed\n| ESP8266  | &lt;---------------- | Update  | | durch\n+----------+                   | Server  | | Balena\n    |                          +---------+ \\ Cloud\n    | Trigger  +---------+          |\n    | Update   |  MQTT   |          |\n    +--------- | Broker  |----------+\n               +---------+<\/code><\/pre>\n\n\n\n<p>Hierbei sind allerdings einige Sicherheitsaspekte zu beachten:<\/p>\n\n\n\n<ul><li>Kommunikation zwischen ESP und Update Server sollte verschl\u00fcsselt sein, um zu verhindern das die bin\u00e4re Datei unserer Applikation abgefangen und analysiert werden kann, da in ihr Informationen wie die SSID und dass Passwort des lokalen Netzwerkes beinhaltet sind. Sowohl Update Server als auch ESP sollten \u00fcber TLS kommunizieren. Ein ESP muss validieren k\u00f6nnen, ob der Update Server vertrauensw\u00fcrdig ist, w\u00e4hrend der Update Server validieren muss, dass der ESP vertrauensw\u00fcrdig ist.<\/li><li>Die bin\u00e4re Form sollte eine valide Signatur beinhalten, welche versichert, dass dieses Update unserer Herkunft entspringt. Dies sollte verhindern das fremder, m\u00f6glicherweise, b\u00f6swilliger Code auf dem Mikrocontroller ausgef\u00fchrt wird.<\/li><li>Falls das Update Event auf, welches ein ESP reagiert durch beispielsweise Subscriben auf ein MQTT Topic realisiert wird, so muss sichergestellt werden, dass dieses Event nur durch eine Entit\u00e4t erfolgt, welcher wir trauen, d.h. der MQTT Broker bedarf einer m\u00f6glichen Authentifizierung von Clients.<\/li><\/ul>\n\n\n\n<p>Die Sicherheitsaspekte werden wir noch genauer in weiteren Beitr\u00e4gen beleuchten, jedoch zu Beginn erst einmal einen funktionierenden Prototyp erstellen, mit welchem wir weiterarbeiten k\u00f6nnen, denn wie sich sp\u00e4ter noch herausstellen wird ist Sicherheit gar nicht so einfach.<\/p>\n\n\n\n<p>Das war es vorerst zur Architektur und unseren Anforderungen. In den n\u00e4chsten Beitr\u00e4gen stellen wir verschiedene Entwicklungsumgebung f\u00fcr das Entwickeln von Logik f\u00fcr den ESP8266 vor, wobei alle sich auf das Arduino Framework beziehen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over-The-Air Updates f\u00fcr den ESP8266 In diesem Blogeintrag m\u00f6chten wir gerne ein \u00dcberblick \u00fcber den momentanen Stand der Update Funktion unserer Mikrocontroller geben. Die technischen Details gibt es in weiteren Beitr\u00e4gen, hier gibt es erst einmal eine Architektur \u00dcbersicht und<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/398"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/comments?post=398"}],"version-history":[{"count":1,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/398\/revisions"}],"predecessor-version":[{"id":399,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/398\/revisions\/399"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/media?parent=398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/categories?post=398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/tags?post=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}