Skip to content

machine node Deployment

mariuste edited this page May 20, 2026 · 2 revisions

Deployment & Betrieb: Machine Node

Machine Nodes sind eigenständige Embedded-Geräte (ESP32-S3) ohne Betriebssystem. Das komplette Verhalten steckt in der Firmware-Binary — kein Docker, kein Linux, keine Registry.

Flottengröße: ~30 Nodes. Manuelles Flashen ist bei dieser Anzahl auf Dauer ausgeschlossen. OTA ist Betriebsvoraussetzung — der Weg dorthin ist zweiphasig.


OTA-Phasen

Phase OTA-Mechanismus Status
Phase 1 ArduinoOTA — Entwickler pusht direkt per espota auf einzelne Nodes 🔄 Aktuell
Phase 2 Manifest-Server — Nodes ziehen selbstständig neue Firmware vom Server 📋 Geplant

Phase 1 ist identisch zum OTA-Stack der RFID-Boxen und sofort einsatzbereit. Phase 2 kommt, wenn die Flotte wächst und manuelles Node-für-Node-Update nicht mehr praktikabel ist.


Phase 1: ArduinoOTA (aktuell)

Mac (VS Code + PlatformIO) → pio run -e lathe_01_ota --target upload → Node via espota
  1. Entwickler editiert Firmware in VS Code (PlatformIO-Projekt firmware/projects/MachineNode_legacy/).
  2. Environment auswählen und OTA-Upload starten: pio run -e lathe_01_ota --target upload
  3. PlatformIO baut die Binary und überträgt sie per espota direkt auf den Node.
  4. Node flasht sich selbst und startet neu — kein USB, kein physischer Zugang nötig.

Für einen initialen Flash (neues Gerät oder Fallback) per USB:

pio run -e lathe_01_usb --target upload

Phase 2: Manifest-Server-OTA (geplant)

Wenn manuelles Node-für-Node-Update nicht mehr skaliert, übernimmt ein selbst-initiierter Pull-Mechanismus:

git push → GitHub Actions → .bin-Artefakte → Manifest-Server → Nodes (OTA selbst-initiiert)
  1. Push auf main triggert GitHub Actions: baut .bin-Dateien für alle Environments.
  2. CI legt Binaries + manifest.json auf einem einfachen HTTP-Server (nginx im LXC auf Proxmox).
  3. Jeder Node prüft beim Boot und periodisch den Manifest-Server auf neue Versionen.
  4. Update verfügbar → Node lädt Binary, verifiziert SHA256, flasht sich selbst, startet neu.

Manifest-Struktur (Vorschau)

/ota/
  manifest.json
  stable/
    esp32s3/v1.4.bin
    esp32s3/v1.4.sha256
  beta/
    esp32s3/v1.5-rc1.bin
{
  "stable": {
    "esp32s3": { "version": "1.4", "url": "/ota/stable/esp32s3/v1.4.bin", "sha256": "abc123..." }
  }
}

Rollout-Strategie bei 30 Nodes

Schritt Kanal Umfang Wartezeit
1 canary 1–2 Testnodes 24 h
2 beta 5–10 Nodes 48 h
3 stable restliche Flotte automatisch

Rollback

  • Phase 1: Altes Environment erneut per espota aufspielen.
  • Phase 2 (Soft): Manifest-Server zeigt wieder alte Version als stable → Nodes updaten sich zurück.
  • Hard-Rollback: USB-Flash vor Ort — < 5 Minuten pro Gerät.

ESP32-S3 unterstützt native OTA-Partitionen (2× ~7 MB bei 16 MB Flash) — kein selbstgebauter Bootloader nötig.


Gerätekonfiguration

Jeder Node hat ein eigenes PlatformIO-Environment in platformio.ini. Maschinenname, Machine-ID, OTA-Hostname und Auth-Typ sind versioniert im Repo — kein Spezialwissen auf dem Gerät selbst.

[pair_lathe_01]
extends = auth_permanent
build_flags =
    ${auth_permanent.build_flags}
    -DMACHINE_NAME=\"lathe\"
    -DMACHINE_ID=\"lathe-01\"
    -DOTA_HOSTNAME=\"lathe-01\"

[env:lathe_01_usb]
extends = pair_lathe_01

[env:lathe_01_ota]
extends = pair_lathe_01
upload_protocol = espota
upload_port = lathe-01.local

Secrets (WLAN-Passwort, Service-Token, Server-Hostname) kommen aus platformio.secrets.ini — gitignoriert, pro Entwicklermaschine manuell anlegen.


Geräteaustausch

Ziel: Neuer Node in < 10 Minuten wieder produktiv.

  1. Neue Hardware (ESP32-S3-WROOM-1-N16R8) per USB anschließen.
  2. Passendes Environment wählen und flashen: pio run -e lathe_01_usb --target upload
  3. Ab da ist der Node im Netz und updatebar per ArduinoOTA (Phase 1) bzw. selbstständig per Manifest (Phase 2).

Spare-Hardware vorhalten: 3–5 vorbereitete ESP32-S3-Boards im Schrank — nur flashen, Stecker umstecken, fertig.


Versionstracking / Flottenüberblick

Jeder Node meldet seine aktuelle Firmware-Version bei jedem API-Heartbeat an die easyVerwaltung. Damit ist der Update-Status der gesamten Flotte jederzeit in der Verwaltungsoberfläche sichtbar — ohne separates Fleet-Management-Tool.


Serveradresse: Hostname statt IP

; platformio.secrets.ini
server_ip = dashboard.intern

Server-Wechsel erfordert keinen Reflash der 30 Nodes — nur DNS anpassen.


Verknüpfte Seiten

Clone this wiki locally