Ein zweiter fw_update waehrend eines laufenden Downloads setzte s_error auf "busy". Da ota_task() nur bei leerem Fehlerfeld auf "download" zurueckfaellt, wurde ein spaeter gescheiterter Transfer danach als "busy" gemeldet statt als "download". Die Abweisung hat kein eigenes Ergebnis - sie wird der API mit 409 gemeldet, last_ota_error bleibt beim Ergebnis des laufenden bzw. letzten Updates. Dazu die Doku auf das am EVK gemessene Verhalten korrigiert: stirbt die Gegenstelle mitten im Download, haengt der Lesevorgang rund sieben Minuten in einem TCP-Timeout und bricht ohne Range-Resume ab. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
7.5 KiB
7.5 KiB
Hardware-Checkliste (EVK)
Konsole: tools/monitor.sh /dev/cu.<port> (115200 8N1). Flashen: tools/flash.sh evk <port>.
Licht (Plan 1, Task 11)
- Nach dem Boot blendet warmweiß 100 % in 0,5 s ein
rgb 255 0 0→ nur Rot,rgb 0 255 0→ nur Grün,rgb 0 0 255→ nur Blauct 2700→ nur Warmweiß,ct 6500→ nur Kaltweiß,ct 4000→ Mischungbri 1sichtbar sehr dunkel,bri 100hell;bri 1 3000→ gleichmäßig wirkender Fadeoff 2000→ blendet mit aktueller Farbe aus;on 2000→ blendet einrgb 255 0 0dannct 3000 2000→ erst dunkel, dann weiß (Moduswechsel)blink 3→ 3× Blinken, danach alter Zustand;pulse on/pulse off- Kein sichtbares Flackern bei konstanten Werten (5 kHz)
Persistenz und Boot (Plan 1, Task 12)
pob last: Farbe setzen, 4 s warten, Strom aus/an → gleicher Zustand, mit Fadepob off: Strom aus/an → bleibt aus;on→ letzte Farbepob onbei ausgeschaltetem Licht: Strom aus/an → anfade 2000 2000bleibt nach Reboot erhalten (state)- 5× Strom an/aus mit jeweils < 5 s Laufzeit → 3× Blinken, danach Defaults (
state) (erneut zu prüfen: der vorgelagerte Recovery-Scan aus Plan 3 verschiebt jeden Boot um bis zu ~3 s, das Timing der 5-Sekunden-Grenze ist damit nicht mehr das von Plan 1) - Normaler Boot nach > 5 s Laufzeit → kein Werksreset (erneut zu prüfen, gleicher Grund: Recovery-Scan verschiebt die Boot-Zeitrechnung)
- Watchdog:
wdtest→ Neustart nach ca. 20–40 s (erste Ablaufzeit löst IRQ aus, Reset beim zweiten Ablauf) — getestet 2026-09-11 mite19ee98: Neustart nach 40,4 s - Getestet am 2026-09-11 mit Firmware
7502f4fam EVK (MAC 28-6D-CD-5C-68-1F)
Netzwerk & REST (Plan 2)
- Mit Build-Credentials: Boot →
netzeigtmode=staund eine IP, RSSI plausibel (−30 … −90) — 2026-09-12 dns-sd -B _ninlight._tcpfindetninlight-<mac4>,dns-sd -Lzeigt TXT type/fw/mac/name — 2026-09-12- Bruno: alle Device-Requests wirken sichtbar,
Get Statespiegelt den Zustand — 2026-09-12 - Ungültiger Body (
{"brightness":0}) → 400,system/settingsohne Token → 401 — 2026-09-12 bri 30per REST ({"brightness":30}) oder Konsolebri 30, dann sofortRebootper REST → nach dem Boot 30 % (Flush) — 2026-09-12- Werksreset → AP
ninlight-<mac4>sichtbar, Lampe pulsiert, Beitritt mitninlight— 2026-09-12 - Onboarding mit falschem Passwort →
system/infozeigtwifi.error = "auth", AP bleibt — 2026-09-12 - Onboarding korrekt →
202, Lampe verbindet, Pulsieren stoppt, AP nach 60 s weg — 2026-09-12 - Router aus > 5 min → AP erscheint (
mode=apsta); Router an → Verbindung, AP nach 10 s weg - Namensänderung per REST → TXT
name=aktualisiert (dns-sd -L) — 2026-09-12 auth_allan →GET device/stateohne Token 401, mit Token 200 — 2026-09-12- Onboarding-Tests: Build ohne
NINLIGHT_WIFI_SSIDinconfig.local.cmake— 2026-09-12 - C1:
curl -d '[[[[[[[[[[[[[[[[[[[[' http://<ip>:3333/api/v1/device/state→ 400, Lampe läuft unverändert weiter (kein Absturz/Reboot) — 2026-09-12 - C2: Onboarding ok, 60 s warten, dann Reboot und Router-Neustart → AP
ninlight-<mac4>darf nicht wiederkommen (Scan am Mac) — 2026-09-12 (Reboot geprüft, Router-Neustart offen)
OTA und Recovery (Plan 3)
- OTA: Update über
fw_updateläuft durch, danach meldetsystem/infodie neue Version — 2026-09-12 (0.3.0 → 0.3.1 → 0.3.2) - OTA: Image eines anderen Gerätetyps wird sofort abgelehnt (
last_ota_error=device_mismatch), kein Reset, Lampe läuft mit der alten Firmware weiter — 2026-09-12 (Ablehnung nach ~4,5 s, Uptime lief durch) - OTA: Image mit verfälschtem Byte wird abgelehnt (
last_ota_error=hashodercrc), kein Reset — 2026-09-12 (crc, kein Reset) - OTA: HTTP-Server während des Downloads abschalten → Lampe bleibt über REST erreichbar und schaltbar, weist weitere
fw_updatemit409ab, und beendet den Versuch mitlast_ota_error = download— 2026-09-12 (dauerte ~7 min, kein Range-Resume; siehe README) - OTA: kurzer WLAN-Aussetzer während des Downloads (Verbindung kurz kappen und wiederherstellen) → Download wird fortgesetzt, kein sofortiger
download-Fehler - Recovery: Lampe zieht beim Booten das Image von der Station
ninlight-recovery, Konsole zeigt Scan-, Join- und Fetch-Meldungen - Recovery: ohne Station verlängert sich der Boot um höchstens ~3 s, Konsole loggt das Scan-Ergebnis (gefunden/nichts gefunden/Scan fehlgeschlagen) — 2026-09-12 (
scan done after 1500 ms, 7 AP(s), danach normaler WLAN-Start) - Recovery: Gegenstelle bleibt verbunden, sendet aber keine Daten mehr (nicht: ein langsamer, aber laufender Download) → nach Ablauf der Zeitobergrenze bedient die Firmware den Watchdog nicht mehr, Chip startet neu statt hängen zu bleiben
- Einstellungen bleiben über ein OTA hinweg erhalten (WLAN, Name, Fade-Zeiten) — 2026-09-12 (Name, Fade 1200/800, pob, Lichtzustand)
- Zweiter
fw_updatemit gültigem Image direkt nach einer Ablehnung, ohne zwischenzeitlichen Reboot → läuft durch,system/infomeldet danach die neue Version — 2026-09-12 (erst nach dem SHA256-Kontext-Fix) - Lampe bleibt während und nach einer Ablehnung über REST erreichbar:
system/infounddevice/stateantworten beide weiterhin mit 200 — 2026-09-12 (system/info und device/state je 200) - Lichtverhalten über ein OTA hinweg (Spec §8.2, ein Update ist kein Stromausfall): einmal mit
power_on_behaviour = off, einmal= on— die Lampe ist nach dem Update jeweils in demselben Zustand (an/aus, Farbe/Helligkeit), in dem sie vor dem Update war — 2026-09-12 (pob=off + Licht an → blieb an; pob=on + Licht aus → blieb aus) system/info.fw_versionnach einem OTA stimmt mit der Version im Trailer des geflashten Images überein (Trailer-Version z.B. mittools/mkimageprüfen) — 2026-09-12- Recovery im echten Rettungsfall: Lampe ohne gültige WLAN-Konfiguration bzw. im Onboarding-AP findet die Station, zieht das Image und startet mit der neuen Firmware
- Rettungsstation nach erfolgreicher Recovery angelassen lassen, Lampe neu booten lassen → kein erneutes Flashen (Version stimmt bereits überein) und kein Werksreset (Power-Cycle-Zähler wurde vor dem Recovery-Versuch gelöscht)
- OTA im AP-/Fallback-Modus (
mode=apsta, kein Router erreichbar) und mitauth_all = true→ Update läuft durch wie im normalensta-Modus
Für den echten Flottenbau NINLIGHT_RECOVERY_PASSWORD und NINLIGHT_TOKEN in config.local.cmake setzen — die Defaults sind nur fürs EVK gedacht.
Später (Lampen)
- SM2135EH: Standby-Bit bei allen Kanälen 0 prüfen (Spec §4; alte Firmware setzte es praktisch nie)
- E27 Color (SM2135EH): RGB und WY getrennt, Ströme plausibel (nicht zu heiß)
- E27 CW: Gegenphase CW sichtbar flackerfrei
- G95: Pinbelegung WW=PB15/CW=PB13 prüfen
- Farbtemperaturbereiche aller Varianten
Offene Beobachtung aus der EVK-Session vom 2026-09-12
Beim Test mit dem verfälschten Image meldete lwIP einmalig
Assertion "pbuf_free: p->ref > 0" failed at line 747 in pbuf.c (10:29:23). Die Lampe lief
unbeeinträchtigt weiter und meldete korrekt last_ota_error=crc. Bei den Läufen mit fremdem
Gerätetyp und bei den erfolgreichen Updates trat die Meldung nicht auf. Ursache noch nicht
geklärt — in einem Build ohne Assertions wäre das ein doppeltes Freigeben eines Netzwerkpuffers.
Vor dem Einsatz auf echten Lampen reproduzieren und aufklären.