-
Notifications
You must be signed in to change notification settings - Fork 1
machine node Deployment
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.
| 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.
Mac (VS Code + PlatformIO) → pio run -e lathe_01_ota --target upload → Node via espota
- Entwickler editiert Firmware in VS Code (PlatformIO-Projekt
firmware/projects/MachineNode_legacy/). - Environment auswählen und OTA-Upload starten:
pio run -e lathe_01_ota --target upload - PlatformIO baut die Binary und überträgt sie per
espotadirekt auf den Node. - 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
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)
- Push auf
maintriggert GitHub Actions: baut.bin-Dateien für alle Environments. - CI legt Binaries +
manifest.jsonauf einem einfachen HTTP-Server (nginx im LXC auf Proxmox). - Jeder Node prüft beim Boot und periodisch den Manifest-Server auf neue Versionen.
- Update verfügbar → Node lädt Binary, verifiziert SHA256, flasht sich selbst, startet neu.
/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..." }
}
}| Schritt | Kanal | Umfang | Wartezeit |
|---|---|---|---|
| 1 | canary |
1–2 Testnodes | 24 h |
| 2 | beta |
5–10 Nodes | 48 h |
| 3 | stable |
restliche Flotte | automatisch |
-
Phase 1: Altes Environment erneut per
espotaaufspielen. -
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.
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.localSecrets (WLAN-Passwort, Service-Token, Server-Hostname) kommen aus platformio.secrets.ini — gitignoriert, pro Entwicklermaschine manuell anlegen.
Ziel: Neuer Node in < 10 Minuten wieder produktiv.
- Neue Hardware (ESP32-S3-WROOM-1-N16R8) per USB anschließen.
- Passendes Environment wählen und flashen:
pio run -e lathe_01_usb --target upload - 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.
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.
; platformio.secrets.ini
server_ip = dashboard.internServer-Wechsel erfordert keinen Reflash der 30 Nodes — nur DNS anpassen.