Zum Inhalt

ESP32 WebSerial Installation - Professionelle Vor-Ort-Lรถsung

Datum: 23. Oktober 2025
Methode: WebSerial API + USB-Kabel (Browser-basiert)
Zielgruppe: Servicetechniker bei Vor-Ort-Installation


๐ŸŽฏ Installationskonzept

Szenario: Professionelle Installation durch Servicetechniker

Servicetechniker bekommt Auftrag:
  โ””โ”€> "PV-Anlage in Wรผrzburg, neues Monitoring-Display installieren"

Vor Ort:
  โ”œโ”€> Wechselrichter lรคuft bereits (SMA, Kostal, etc.)
  โ”œโ”€> Techniker bringt mit:
  โ”‚   โ”œโ”€> Laptop (Chrome/Edge Browser)
  โ”‚   โ”œโ”€> ESP32 E-Paper Display (neu, ungeflasht)
  โ”‚   โ”œโ”€> USB-Kabel (USB-C oder Micro-USB)
  โ”‚   โ””โ”€> Netzteil fรผr ESP32
  โ”‚
  โ””โ”€> Installation dauert: 5-10 Minuten
      โ”œโ”€> 2 Min: ESP32 anschlieรŸen & flashen
      โ”œโ”€> 2 Min: Konfiguration eingeben
      โ”œโ”€> 1 Min: Test & Verifizierung
      โ””โ”€> 5 Min: Montage & Dokumentation

๐Ÿ”ง Technischer Workflow

Schritt 1: Portal รถffnen

Techniker รถffnet auf seinem Laptop:

https://solarlog.karma.organic/setup/install

Portal-Login mit Techniker-Account:

E-Mail: techniker@solarfirma.de
Passwort: ***********

Nach Login wird angezeigt:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๐Ÿ”ง Neues Gerรคt installieren                       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  Auftrag auswรคhlen (optional):                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ โฆฟ Neuer Kunde: Max Mustermann                โ”‚ โ”‚
โ”‚  โ”‚   Wรผrzburg, HauptstraรŸe 42                    โ”‚ โ”‚
โ”‚  โ”‚   PV-Anlage: SMA Sunny Boy 5.0                โ”‚ โ”‚
โ”‚  โ”‚   Installation geplant: 23.10.2025 14:00      โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚  โญ˜ Ohne Auftrag (Manuell)                          โ”‚
โ”‚                                                     โ”‚
โ”‚  [Weiter โ†’]                                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Schritt 2: ESP32 vorbereiten

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๐Ÿ“ฆ Gerรคt vorbereiten                              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  1. ESP32 E-Paper Display auspacken                โ”‚
โ”‚                                                     โ”‚
โ”‚  2. USB-Kabel an ESP32 anschlieรŸen                 โ”‚
โ”‚     (Noch NICHT an Laptop!)                        โ”‚
โ”‚                                                     โ”‚
โ”‚  3. Display-Typ bestรคtigen:                        โ”‚
โ”‚     โฆฟ LilyGO T5 4.7" (540ร—960)                     โ”‚
โ”‚     โญ˜ Waveshare 2.9" (296ร—128)                     โ”‚
โ”‚     โญ˜ Waveshare 4.2" (400ร—300)                     โ”‚
โ”‚     โญ˜ Custom (Manuell)                             โ”‚
โ”‚                                                     โ”‚
โ”‚  4. ESP32 jetzt per USB mit Laptop verbinden       โ”‚
โ”‚                                                     โ”‚
โ”‚  [Gerรคt ist angeschlossen โ†’]                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Techniker: - Klickt "Gerรคt ist angeschlossen" - Browser fragt: "solarlog.karma.organic mรถchte eine serielle Verbindung aufbauen" - Liste zeigt: "USB JTAG/serial debug unit (USB VID:PID 303A:1001)" - Techniker klickt "Verbinden"

Schritt 3: Firmware flashen

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  โšก Firmware installieren                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  Gerรคt erkannt:                                    โ”‚
โ”‚  โ€ข Chip: ESP32-S3                                  โ”‚
โ”‚  โ€ข MAC: A1:B2:C3:D4:E5:F6                         โ”‚
โ”‚  โ€ข Flash: 16 MB                                    โ”‚
โ”‚                                                     โ”‚
โ”‚  Firmware-Version:                                 โ”‚
โ”‚  โฆฟ Latest Stable (v1.2.5) - Empfohlen             โ”‚
โ”‚  โญ˜ Beta (v1.3.0-beta.2)                           โ”‚
โ”‚  โญ˜ Custom Upload                                   โ”‚
โ”‚                                                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚  [โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘] 75%          โ”‚  โ”‚
โ”‚  โ”‚  Lรถsche Flash...                            โ”‚  โ”‚
โ”‚  โ”‚  Schreibe Bootloader... โœ“                   โ”‚  โ”‚
โ”‚  โ”‚  Schreibe Partition Table... โœ“              โ”‚  โ”‚
โ”‚  โ”‚  Schreibe Firmware... (1.2 MB / 1.6 MB)     โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                     โ”‚
โ”‚  โฑ Geschรคtzte Zeit: 45 Sekunden                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Was passiert im Hintergrund:

// Portal verwendet esptool.js
import { ESPLoader, Transport } from 'esptool-js';

const firmware = await fetch('/api/v1/firmware/latest/esp32s3');
const blob = await firmware.blob();

const loader = new ESPLoader(transport);
await loader.main('bootloader', 0x1000);      // Bootloader
await loader.main('partition',  0x8000);       // Partition Table
await loader.main('firmware',   0x10000);      // Main Firmware
await loader.main('spiffs',     0x290000);     // File System

// WICHTIG: Konfiguration wird NACH dem Flashen eingegeben!
// ESP32 bootet erstmal mit Default-Config

Nach erfolgreichem Flash:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  โœ… Firmware erfolgreich installiert!              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  โ€ข Bootloader: โœ“                                   โ”‚
โ”‚  โ€ข Partition Table: โœ“                              โ”‚
โ”‚  โ€ข Firmware v1.2.5: โœ“                              โ”‚
โ”‚  โ€ข File System: โœ“                                  โ”‚
โ”‚                                                     โ”‚
โ”‚  Gerรคt wurde automatisch neu gestartet.            โ”‚
โ”‚                                                     โ”‚
โ”‚  [Weiter zur Konfiguration โ†’]                      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Schritt 4: WLAN-Konfiguration

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๐Ÿ“ก WLAN-Verbindung                                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  Option 1: Automatisch von Laptop รผbernehmen       โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Laptop ist verbunden mit:                     โ”‚ โ”‚
โ”‚  โ”‚ SSID: "PV-Anlage-Fritz7590"                   โ”‚ โ”‚
โ”‚  โ”‚                                                โ”‚ โ”‚
โ”‚  โ”‚ [โœ“] Dieses WLAN verwenden                     โ”‚ โ”‚
โ”‚  โ”‚     Passwort: [********************]          โ”‚ โ”‚
โ”‚  โ”‚     [Passwort anzeigen]                       โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                                     โ”‚
โ”‚  Option 2: Manuell eingeben                        โ”‚
โ”‚  SSID:     [_____________________________]         โ”‚
โ”‚  Passwort: [_____________________________]         โ”‚
โ”‚            [Passwort anzeigen]                     โ”‚
โ”‚                                                     โ”‚
โ”‚  [Verbindung testen โ†’]                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Test-Prozess:

// Portal sendet Config via USB Serial an ESP32
await serial.writeText(JSON.stringify({
  cmd: 'test_wifi',
  ssid: 'PV-Anlage-Fritz7590',
  password: '***************'
}));

// ESP32 versucht zu verbinden und antwortet:
const response = await serial.readLine();
// {"status": "ok", "ip": "192.168.178.42", "rssi": -52}

Ergebnis:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  โœ… WLAN-Verbindung erfolgreich!                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  โ€ข SSID: PV-Anlage-Fritz7590                       โ”‚
โ”‚  โ€ข IP-Adresse: 192.168.178.42                      โ”‚
โ”‚  โ€ข Signalstรคrke: -52 dBm (Ausgezeichnet)           โ”‚
โ”‚                                                     โ”‚
โ”‚  [Weiter zur Inverter-Suche โ†’]                     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Schritt 5: Inverter-Erkennung

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  โšก Wechselrichter finden                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  [๐Ÿ” Automatisch suchen]                           โ”‚
โ”‚                                                     โ”‚
โ”‚  โณ Scanne lokales Netzwerk...                     โ”‚
โ”‚  โ€ข 192.168.178.1-254 (254 Hosts)                  โ”‚
โ”‚  โ€ข Modbus Port 502                                 โ”‚
โ”‚  โ€ข HTTP Ports 80, 8080, 8081                       โ”‚
โ”‚                                                     โ”‚
โ”‚  โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 45% (115/254)           โ”‚
โ”‚                                                     โ”‚
โ”‚  Gefunden:                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ โœ“ SMA Sunny Boy 5.0                           โ”‚ โ”‚
โ”‚  โ”‚   192.168.178.50                              โ”‚ โ”‚
โ”‚  โ”‚   Modbus Unit ID: 3                           โ”‚ โ”‚
โ”‚  โ”‚   Aktuell: 3.8 kW                             โ”‚ โ”‚
โ”‚  โ”‚   Seriennummer: 1234567890                    โ”‚ โ”‚
โ”‚  โ”‚   [Auswรคhlen]                                 โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                                     โ”‚
โ”‚  Oder manuell eingeben:                            โ”‚
โ”‚  Hersteller: [SMA          โ–ผ]                      โ”‚
โ”‚  Modell:     [Sunny Boy 5.0โ–ผ]                      โ”‚
โ”‚  IP:         [192.168.178.50]                      โ”‚
โ”‚  Port:       [502          ] (Modbus TCP)          โ”‚
โ”‚  Unit ID:    [3            ]                       โ”‚
โ”‚                                                     โ”‚
โ”‚  [Verbindung testen]                               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Scan lรคuft รผber ESP32:

// Portal sendet Scan-Befehl via USB
await serial.writeText(JSON.stringify({cmd: 'scan_inverters'}));

// ESP32 scannt Netzwerk und sendet Ergebnisse zurรผck
// {"found": [{
//   "type": "SMA",
//   "ip": "192.168.178.50",
//   "modbus_unit": 3,
//   "serial": "1234567890",
//   "current_power": 3842
// }]}

Test-Verbindung:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  โœ… Wechselrichter gefunden!                       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  Verbindungstest erfolgreich:                      โ”‚
โ”‚  โ€ข Hersteller: SMA                                 โ”‚
โ”‚  โ€ข Modell: Sunny Boy 5.0                           โ”‚
โ”‚  โ€ข Seriennummer: 1234567890                        โ”‚
โ”‚  โ€ข Firmware: 3.20.12.R                             โ”‚
โ”‚  โ€ข Status: Producing                               โ”‚
โ”‚  โ€ข AC Leistung: 3.84 kW                            โ”‚
โ”‚  โ€ข DC Spannung: 385 V                              โ”‚
โ”‚  โ€ข Temperatur: 42ยฐC                                โ”‚
โ”‚                                                     โ”‚
โ”‚  [Weiter zur Portal-Registrierung โ†’]               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Schritt 6: Portal-Registrierung

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๐ŸŒ Portal-Verbindung                              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  Gerรคte-Informationen:                             โ”‚
โ”‚  โ€ข MAC-Adresse: A1:B2:C3:D4:E5:F6                 โ”‚
โ”‚  โ€ข Firmware: v1.2.5                                โ”‚
โ”‚  โ€ข Display: LilyGO T5 4.7"                         โ”‚
โ”‚                                                     โ”‚
โ”‚  Kunde zuordnen:                                   โ”‚
โ”‚  โฆฟ Max Mustermann (aus Auftrag)                   โ”‚
โ”‚  โญ˜ Anderer Kunde                                   โ”‚
โ”‚                                                     โ”‚
โ”‚  Standort-Details:                                 โ”‚
โ”‚  Name:     [HauptstraรŸe 42, Wรผrzburg         ]     โ”‚
โ”‚  Notizen:  [PV-Anlage Sรผddach, 7.5 kWp      ]     โ”‚
โ”‚            [Installiert am 23.10.2025        ]     โ”‚
โ”‚                                                     โ”‚
โ”‚  Einstellungen:                                    โ”‚
โ”‚  Display Update:  [30 Sekunden โ–ผ]                  โ”‚
โ”‚  API Upload:      [60 Sekunden โ–ผ]                  โ”‚
โ”‚  Zeitzone:        [Europe/Berlin โ–ผ]                โ”‚
โ”‚                                                     โ”‚
โ”‚  [Gerรคt registrieren & aktivieren]                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Was passiert:

// 1. Portal registriert Gerรคt in Datenbank
const device = await fetch('/api/v1/devices/register', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${technicianToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    mac_address: 'A1:B2:C3:D4:E5:F6',
    model: 'LilyGO T5 4.7"',
    firmware_version: 'v1.2.5',
    customer_id: 42,  // Max Mustermann
    inverter_config: {
      type: 'SMA',
      model: 'Sunny Boy 5.0',
      ip: '192.168.178.50',
      port: 502,
      modbus_unit_id: 3
    }
  })
});

// 2. Portal generiert Device-Token
const response = await device.json();
// {
//   "device_id": 123,
//   "device_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
//   "mqtt_credentials": {...}
// }

// 3. Portal sendet komplette Config via USB an ESP32
await serial.writeText(JSON.stringify({
  cmd: 'save_config',
  config: {
    wifi: {
      ssid: 'PV-Anlage-Fritz7590',
      password: '***************'
    },
    portal: {
      url: 'https://solarlog-api.karma.organic',
      device_id: 123,
      device_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
    },
    inverter: {
      type: 'SMA',
      ip: '192.168.178.50',
      port: 502,
      modbus_unit_id: 3
    },
    intervals: {
      display_update: 30,
      api_upload: 60
    },
    timezone: 'Europe/Berlin'
  }
}));

// 4. ESP32 speichert in Flash und bestรคtigt
const ack = await serial.readLine();
// {"status": "ok", "config_saved": true}

Schritt 7: Finalisierung

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  โœ… Installation abgeschlossen!                    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  Gerรคt-ID: #123                                    โ”‚
โ”‚  Kunde: Max Mustermann                             โ”‚
โ”‚  Standort: HauptstraรŸe 42, Wรผrzburg                โ”‚
โ”‚                                                     โ”‚
โ”‚  Konfiguration gespeichert:                        โ”‚
โ”‚  โœ“ WLAN: PV-Anlage-Fritz7590                       โ”‚
โ”‚  โœ“ Inverter: SMA Sunny Boy 5.0 @ 192.168.178.50   โ”‚
โ”‚  โœ“ Portal: Registriert & authentifiziert           โ”‚
โ”‚  โœ“ Display: Konfiguriert & getestet               โ”‚
โ”‚                                                     โ”‚
โ”‚  Nรคchste Schritte:                                 โ”‚
โ”‚  1. USB-Kabel entfernen                            โ”‚
โ”‚  2. ESP32 mit Netzteil verbinden                   โ”‚
โ”‚  3. Display zeigt nach ~10 Sek erste Daten         โ”‚
โ”‚  4. Gerรคt an gewรผnschter Stelle montieren          โ”‚
โ”‚                                                     โ”‚
โ”‚  [Live-Ansicht รถffnen] [Installation dokumentieren]โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Techniker: 1. Trennt USB-Kabel 2. SchlieรŸt ESP32 an 5V-Netzteil an 3. Display bootet und zeigt nach 10 Sekunden:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  SolarLog                     โ”‚
โ”‚  ๐Ÿ”„ Starte...                 โ”‚
โ”‚                                โ”‚
โ”‚  โœ“ WLAN verbunden             โ”‚
โ”‚  โœ“ Portal verbunden           โ”‚
โ”‚  โœ“ Inverter verbunden         โ”‚
โ”‚                                โ”‚
โ”‚  โณ Lade Daten...             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โฌ‡ Nach 5 Sekunden โฌ‡

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Max Mustermann               โ”‚
โ”‚  SMA Sunny Boy 5.0            โ”‚
โ”‚                                โ”‚
โ”‚  โšก AKTUELL    3.8 kW         โ”‚
โ”‚  โ˜€๏ธ HEUTE     28.5 kWh        โ”‚
โ”‚  ๐Ÿ“Š GESAMT    12.45 MWh       โ”‚
โ”‚                                โ”‚
โ”‚  ๐Ÿ“ก Online    โ”โ”โ”โ” 95%        โ”‚
โ”‚  ๐Ÿ• 14:23    23.10.2025       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Schritt 8: Live-Verifikation im Portal

Techniker รถffnet im Browser:

https://solarlog.karma.organic/devices/123

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๐ŸŸข Gerรคt #123 - ONLINE                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                     โ”‚
โ”‚  ๐Ÿ“ Standort: HauptstraรŸe 42, Wรผrzburg             โ”‚
โ”‚  ๐Ÿ‘ค Kunde: Max Mustermann                          โ”‚
โ”‚  ๐Ÿ“… Installiert: 23.10.2025 14:23                  โ”‚
โ”‚  ๐Ÿ‘ท Techniker: techniker@solarfirma.de             โ”‚
โ”‚                                                     โ”‚
โ”‚  โšก Aktuelle Daten:                                โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Leistung:        3.84 kW                      โ”‚ โ”‚
โ”‚  โ”‚ Heute:          28.5 kWh                      โ”‚ โ”‚
โ”‚  โ”‚ Gesamt:      12.45 MWh                        โ”‚ โ”‚
โ”‚  โ”‚ Temperatur:      42ยฐC                         โ”‚ โ”‚
โ”‚  โ”‚ Status:      Producing                        โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                                     โ”‚
โ”‚  ๐Ÿ“Š Datenรผbertragung:                              โ”‚
โ”‚  โ€ข Letzte รœbertragung: vor 12 Sekunden            โ”‚
โ”‚  โ€ข Intervall: 60 Sekunden                         โ”‚
โ”‚  โ€ข Erfolgsrate: 100% (5/5)                        โ”‚
โ”‚                                                     โ”‚
โ”‚  ๐Ÿ“ก Verbindung:                                    โ”‚
โ”‚  โ€ข WLAN: -52 dBm (Ausgezeichnet)                  โ”‚
โ”‚  โ€ข Uptime: 2 Minuten                              โ”‚
โ”‚  โ€ข Firmware: v1.2.5                               โ”‚
โ”‚                                                     โ”‚
โ”‚  [๐Ÿ“ท Screenshot anfordern] [โš™๏ธ Einstellungen]     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โœ… Installation erfolgreich abgeschlossen!

Techniker: - Macht Foto vom Display (Dokumentation) - Notiert Gerรคte-ID (#123) im Installationsprotokoll - Montiert Display an gewรผnschter Stelle - Gibt Kunde Zugang zum Portal


๐Ÿ”’ Sicherheitskonzept

Device-Token-Generierung

# backend/app/api/v1/devices.py

@router.post("/register")
async def register_device(
    data: DeviceRegistrationRequest,
    current_user: User = Depends(get_current_technician)  # Nur Techniker!
):
    """
    Registriert neues ESP32-Gerรคt.
    Nur von Techniker-Accounts aufrufbar.
    """

    # 1. Prรผfe ob MAC-Adresse eindeutig
    existing = await get_device_by_mac(data.mac_address)
    if existing:
        raise HTTPException(409, "Device already registered")

    # 2. Generiere Device-Token (256-bit)
    device_token = secrets.token_urlsafe(32)
    device_token_hash = hashlib.sha256(device_token.encode()).hexdigest()

    # 3. Erstelle Device in Datenbank
    device = Device(
        mac_address=data.mac_address,
        device_token_hash=device_token_hash,
        firmware_version=data.firmware_version,
        model=data.model,
        customer_id=data.customer_id,
        inverter_config=data.inverter_config,
        installed_by=current_user.id,
        installed_at=datetime.utcnow()
    )
    db.add(device)
    await db.commit()

    # 4. Generiere MQTT-Credentials (optional)
    mqtt_creds = {
        "broker": "mqtt.solarlog.io",
        "port": 8883,
        "username": f"device_{device.id}",
        "password": secrets.token_urlsafe(16)
    }

    # 5. Rรผckgabe (Token nur EINMAL!)
    return {
        "device_id": device.id,
        "device_token": device_token,  # Klartext, nur hier!
        "mqtt_credentials": mqtt_creds
    }

Authentifizierung im Betrieb

# ESP32 sendet bei jedem API-Call:
headers = {
    "Authorization": f"Bearer {device_token}",
    "X-Device-MAC": mac_address
}

# Backend validiert:
@router.post("/devices/{device_id}/data")
async def receive_data(
    device_id: int,
    data: ProductionDataUpload,
    device: Device = Depends(authenticate_device)
):
    # Device-Token wurde bereits in Middleware validiert
    # Nur valide Gerรคte kommen hier an
    ...

๐Ÿ“ฆ Hardware-Paket fรผr Techniker

Standard-Installations-Kit

Im Koffer:

1ร— ESP32 E-Paper Display (vakuumversiegelt)
1ร— USB-Kabel (USB-C oder Micro-USB, je nach ESP32-Modell)
1ร— 5V/2A USB-Netzteil (EU-Stecker)
1ร— Montagematerial (Schrauben, Dรผbel, Klebestreifen)
1ร— Anleitung (QR-Code zum Portal-Setup)
1ร— Installationsprotokoll (Papier, zum Ausfรผllen)

Auf dem Laptop:

Chrome oder Edge Browser (aktuell)
Lesezeichen: https://solarlog.karma.organic/setup/install
Techniker-Login gespeichert

Optional:

Multimeter (WLAN-Signalstรคrke messen)
Ethernet-Adapter (fรผr Laptop ohne WLAN)
Powerbank (falls keine Steckdose verfรผgbar)


๐Ÿš€ Vorteile dieser Lรถsung

โœ… Fรผr Techniker

  • Schnell: 2-3 Minuten reine Setup-Zeit
  • Einfach: Ein klarer Workflow, keine Verzweigungen
  • Zuverlรคssig: USB = keine WLAN-Probleme wรคhrend Installation
  • Dokumentiert: Automatische Protokollierung im Portal
  • Support: Bei Problemen โ†’ Portal zeigt Debug-Infos

โœ… Fรผr Firma

  • Professionalitรคt: Kein "Benutzer muss selber machen"
  • Kontrolle: Nur Techniker kรถnnen Gerรคte registrieren
  • Qualitรคt: Jede Installation wird getestet
  • Support-Reduzierung: Weniger Fehlerquellen
  • Skalierbar: Techniker kรถnnen 10+ Gerรคte/Tag installieren

โœ… Fรผr Endkunden

  • Einfach: Kunde muss nichts machen
  • Sicher: Keine WLAN-Passwรถrter selbst eingeben
  • Funktioniert: Techniker testet vor Ort
  • Support: Bei Problemen kontaktiert Kunde Firma, nicht Hersteller

๐Ÿ”ง Entwicklungsaufwand

Phase 1: Portal-WebSerial-Tool (1 Woche)

// frontend-web/src/pages/SetupFlash.tsx

- USB Serial Connection Handler
- esptool.js Integration
- Firmware Download & Flash
- Config Generator & Upload
- Live-Test & Verification
- Installation Documentation

Phase 2: Backend Device-Management (3-4 Tage)

# backend/app/api/v1/devices.py

- POST /devices/register (Techniker-Only)
- POST /devices/{id}/data (Device-Token Auth)
- POST /devices/{id}/heartbeat
- GET  /devices/{id}/logs
- GET  /devices/{id}/screenshot (optional)

Phase 3: ESP32 Firmware (1-1.5 Wochen)

// esp32-firmware/src/

- USB Serial Command Interface
- WiFi Test & Connect
- Inverter Scan & Connect
- Config Storage (SPIFFS/NVS)
- Display Manager
- Portal Client (HTTPS)
- Error Handling & Recovery

Phase 4: Testing & Dokumentation (3-4 Tage)

  • End-to-End Tests
  • Techniker-Schulung
  • Video-Tutorial
  • Troubleshooting-Guide

GESAMT: 3-4 Wochen Entwicklung


๐Ÿ“Š Kostenanalyse

Entwicklungskosten (einmalig)

Entwickler:     20 Tage ร— 500 EUR = 10.000 EUR
Tester:          5 Tage ร— 400 EUR =  2.000 EUR
Dokumentation:   3 Tage ร— 350 EUR =  1.050 EUR
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
GESAMT:                             13.050 EUR

Pro-Gerรคt-Kosten

Hardware:
โ”œโ”€ ESP32-S3 + Display:  35 EUR
โ”œโ”€ Gehรคuse:              8 EUR
โ”œโ”€ Netzteil:             4 EUR
โ””โ”€ Verpackung:           2 EUR
                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
                        49 EUR/Gerรคt

Installation (Techniker):
โ””โ”€ 10 Min ร— 60 EUR/Std = 10 EUR/Gerรคt

Cloud (monatlich):
โ””โ”€ 12 MB ร— 0.01 EUR    = 0.12 EUR/Gerรคt/Monat
                         1.44 EUR/Gerรคt/Jahr

Break-Even bei 100 Gerรคten

Entwicklung:        13.050 EUR
Hardware (100ร—):     4.900 EUR
Installation (100ร—): 1.000 EUR
Cloud (Jahr 1):        144 EUR
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
GESAMT:             19.094 EUR

Pro Gerรคt:             191 EUR
Verkaufspreis:         299 EUR (empfohlen)
Gewinn pro Gerรคt:      108 EUR
Break-Even:           ~175 Gerรคte

๐Ÿ”ฎ Zukunftserweiterungen

Phase 2 Features

Remote-Updates:

Techniker muss nicht mehr vor Ort
ESP32 lรคdt neue Firmware vom Portal (OTA)
Automatische Updates nachts
Rollback bei Fehler

Ferndiagnose:

Portal โ†’ ESP32: "Sende Screenshot"
ESP32 โ†’ Portal: PNG-Bild vom Display
Techniker sieht exakt was Kunde sieht

Bulk-Installation:

Techniker flasht 10 Gerรคte parallel
Jedes Gerรคt bekommt QR-Code
Vor Ort nur noch QR-Code scannen โ†’ Fertig

Offline-Modus:

ESP32 funktioniert ohne Internet
Lokales Dashboard im WLAN
Automatische Sync wenn Internet wieder da


โœ… Checkliste fรผr Go-Live

  • Portal-Tool entwickelt & getestet
  • Backend API implementiert
  • ESP32 Firmware funktionsfรคhig
  • 5 Test-Installationen durchgefรผhrt
  • Techniker-Schulung absolviert
  • Video-Tutorial erstellt
  • Support-Dokumentation fertig
  • Fehlerbehebungs-Guide vorhanden
  • Hardware-Kits fรผr 3 Techniker gepackt
  • Go-Live mit Pilot-Kunden

Geschรคtzte Zeit bis Go-Live: 6-8 Wochen