← Terug naar projecten

Veilig en schaalbaar IoT OTA update system met HawkBit

Een veilig end-to-end OTA update system met HawkBit, target updater, OTA manager, buildproces voor update packages en een device fleet simulator.

Veilig en schaalbaar IoT OTA update system met HawkBit

Achtergrond

Ik heb een end-to-end veilig Over-the-Air (OTA) software update system gebouwd voor remote devices, met de open-source platformsoftware hawkBit als basis.

De hawkBit server is productiegereed. De bijbehorende ontwikkeling omvat de updater service op het target device, de OTA Manager en een custom build system voor OTA update packages. Voor het testen van het complete systeem heb ik ook een target device simulator gebouwd. Die kan een grote device fleet simuleren en bewust update errors, timeouts en andere problemen injecteren.

Dit was een zelfstandig project dat ik van ontwerp tot implementatie en test heb uitgewerkt.


Introductie

Dit project implementeert een veilig Over-the-Air software update system voor devices met HawkBit.

Belangrijke componenten:

  • Target Updater Service: een lichte service op het target device die periodiek updates controleert bij de HawkBit server, nieuwe versies downloadt en veilig installeert.
  • HawkBit Management: een service voor het beheren van het updateproces en integratie met het klantsysteem, onder andere voor:
    • aanmaken van targets in HawkBit op basis van data uit het klantsysteem
    • monitoren van updatevoortgang en device health

Voordelen:

  • veilige en betrouwbare updates via internet
  • centraal beheer en controle
  • schaalbaar voor grote device deployments
  • integratie met bestaande klantsystemen

Het systeem zorgt ervoor dat software updates efficient en veilig kunnen worden uitgerold, waardoor functionaliteit en security van devices doorlopend verbeterd kunnen worden.


Eclipse HawkBit in het kort

Eclipse hawkBit is een software update framework voor IoT devices. Het maakt het mogelijk om updates naar edge devices, controllers en gateways via internet te beheren en uit te rollen. Het ondersteunt verschillende protocollen, roll-outs en packagevormen. Meer informatie staat op de officiele website en in de GitHub repository.

Voor communicatie met target devices wordt de HawkBit Direct Device Integration REST API gebruikt.


Systeemoverzicht

Componenten

  • OTA packages: zipbestanden met updatebestanden
  • Browser: voor configuratie, setup, upload van OTA packages en monitoring van updates
  • HawkBit server: een Docker instance van HawkBit
  • Distribution packages: een package kan een of meer OTA packages bevatten
  • Target device: device waarop de update wordt geinstalleerd en waarop een updater service via de DDI REST API met HawkBit communiceert
  • OTA Manager: custom service die een Customer Client System via de Management REST API koppelt aan HawkBit

HawkBit Direct Device Integration REST API

De HawkBit Direct Device Integration (DDI) REST API is bedoeld voor communicatie tussen devices en de hawkBit update server. Belangrijke punten:

  1. Controller Identification: in DDI wordt een target device geidentificeerd met een controllerId. De term controller verwijst naar de service of client die op het device draait.
  2. State Machine Mapping: DDI gebruikt een eigen state machine en statusberichten, zodat bestaande devices goed ondersteund kunnen worden.
  3. Feedback Messages: devices kunnen status, downloadvoortgang en resultaten zoals SUCCESS of FAILURE terugmelden.
  4. Artifact Download: DDI kan aangeven wanneer artifacts voor een update gedownload worden.

Kort gezegd maakt de DDI REST API betrouwbare communicatie mogelijk tussen devices en update server, ook voor constrained edge devices.

De DDI REST API documentatie staat hier: https://eclipse.dev/hawkbit/apis/ddi_api/


De updater service

De updater service is verantwoordelijk voor software updates op het target. Updates worden door HawkBit aangeboden via distribution packages. Die packages kunnen updates bevatten voor Docker containers, Python scripts, executables en andere bestanden.

De updater service is geschreven in Python 3 en is daardoor platformonafhankelijk. Python-versies vanaf 3.6 tot de nieuwste versie zijn ondersteund en getest. De updater draait als background service. Via HawkBit kan ook de updater service zelf bijgewerkt worden.


OTA Manager

De OTA Manager gebruikt de HawkBit Management REST API om met HawkBit en de gekoppelde targets te communiceren. De OTA Manager kan als interface dienen naar het klantsysteem.

De communicatie kan bidirectioneel zijn:

  • health- en statusdata van targets doorgeven aan het klantsysteem
  • HawkBit voorzien van targetdata uit het klantsysteem, zodat targets niet handmatig aangemaakt hoeven te worden

Met alle benodigde data kunnen configuratiebestanden (ota.ini) voor targets gegenereerd worden, inclusief targetId en token voor toegang tot HawkBit. Dit is klant-specifiek maatwerk.

HawkBit Management REST API

De HawkBit Management REST API is bedoeld voor beheer en monitoring van software updates. Belangrijke functies:

  1. Doel: CRUD-operaties voor provisioning van targets en software repository content.
  2. Functionaliteit: aanmaken, lezen, wijzigen en verwijderen van targetinformatie en softwaregerelateerde objecten zoals distribution sets.
  3. Monitoring: updateprocessen kunnen via HTTP/HTTPS gevolgd worden.
  4. Access control: de API ondersteunt permissies, rollen, authenticatie en autorisatie.
  5. Versioning: HawkBit bewaakt backwards compatibility van API-interfaces.

De Management REST API documentatie staat hier: https://eclipse.dev/hawkbit/apis/management_api/


Target device simulator

De target device simulator simuleert meerdere target devices. Elk target device draait in zijn eigen thread. Hiermee kan de performance en robuustheid van een HawkBit server getest worden.

Het daadwerkelijk installeren van Docker containers wordt niet gesimuleerd, omdat alle target threads op dezelfde machine draaien. Non-Docker OTA packages met scripts of executables worden wel ondersteund.