9.5 KiB
Übergabe — Session 2026-08-23 (bis in den 24. hinein)
Einstieg: diese Datei, dann
teilprojekte.md. Zustand am Netz: stabil und aufgeräumt. Nichts steht halb offen, keine Config-Transaktion gelaufen,s9ist vollständig zurückgebaut, alle Shellys erreichbar.
Was diese Session war
Begonnen mit TP17.3 (der Shelly-Regression), geendet bei einer Umstrukturierung der Router-Konten.
Fünf Commits: d245d10, e8f7f80, 0a7f2e2, 2f18319, e9a5b36.
| ✅ TP17.3 gelöst | Ursache eco_mode bewiesen, s23 (Dimmer-Flackern) und s26 (Doppeldruck) repariert. |
✅ eco_mode flottenweit aus |
13 Geräte umgestellt, null Fehler. 22/22 erreichbare Shellys auf false. |
| ❌ TP17.1 verworfen | Der Zigbee-Weg wurde vollständig bewiesen — und damit auch, dass das Ziel mit ihm nicht erreichbar ist. |
| ✅ Passwort-Rotation Etappe 1 | Dedizierte Service-Accounts ha + nautobot auf allen vier MikroTik. |
🔴 Womit die nächste Session anfangen sollte
⚠️ ÜBERHOLT am 2026-08-24 (User-Entscheid): die Rotation ist nicht der Sessionstart. Sie ist zu TP30 — Credential-Rotation geworden, einem Sammel-TP, der gegen Projektende gebündelt abgearbeitet wird — Begründung: es kommen weitere Passwörter hinzu, und der teure Teil sind die Konsumenten (HA-Re-Auth, Stack-Redeploy), den man nicht mehrfach zahlen will. Der Inhalt unten bleibt sachlich gültig und steht jetzt in TP30.
Passwort-Rotation, Etappe 2. Die Vorarbeit steht komplett, der Rest ist die einzige Sache mit
echter Dringlichkeit — das admin-Passwort ist zweimal in ein Transkript geraten (22.08. und, durch
meinen eigenen Enumerationsfehler, nochmal am 23.08.; derselbe Wert, da alle vier Geräte ihn teilen).
Was Etappe 2 verlangt, in dieser Reihenfolge:
- Nautobot auf den
nautobot-User umstellen —NAUTOBOT_ROUTEROS_USERNAME/PASSWORDim Stackdocs/nas-vlan20/stacks/210-nautobot.yml(gitignored), dann Portainer-Redeploy auf der DS923. ⚠️ Beim Redeploy die Healthcheck-/mem_limit-Zeilen nicht verlieren — siehe CLAUDE.md-Gotcha, der Stack hat am 17.08. zweimal die DS923 abgeräumt. Abnahme: ein GC-Backup-Lauf, der durchgeht. - HA: die vier
mikrotik-Integrationen (.99.1,.99.2,.99.11,.99.12) aufhabringen. 🔴supports_reconfigure: false— nicht skriptbar. Entfernen-und-neu-Anlegen wäre skriptbar (ha_set_integration domain="mikrotik"), riskiert aber die 40device_tracker-Entities. Sie heißen nach MAC (device_tracker.10_20_ba_fa_f5_40), kämen also identisch zurück — aber nur, wenn die alten Registry-Einträge vorher weg sind, sonst hängt HA ein_2an. Dieselbe Falle wie beim Shelly-Rename. - Erst danach
adminrotieren. Dann berührt es nur noch~/.secrets/credentials.envund~/.claude.json(+ MikroMCP-Neustart) — die Repo-Skripte ziehen automatisch nach.
Was dafür schon fertig ist
Auf allen vier Geräten angelegt und abgenommen (vorher existierte dort nur admin/full):
| Gruppe | Policy | User |
|---|---|---|
grp-ha |
read,api,rest-api,test |
ha |
grp-nautobot |
ssh,read,write,test,sensitive |
nautobot |
Passwörter: MIKROTIK_HA_PASS / MIKROTIK_NAUTOBOT_PASS in ~/.secrets/credentials.env.
🎯 Der Export von nautobot ist byte-identisch zu dem von admin (391/56/87/87 Zeilen) —
die GC-Compliance driftet beim Umstellen nicht. Das war das Hauptrisiko und ist geprüft.
/user wird von keiner ComplianceRule abgedeckt, die Konten erzeugen selbst keinen Drift.
Danach, mit Vorsicht
- C2 — IoT-PSK rotieren. Der Hebel ist
/interface wifi security multi-passphrase(group/passphrase/vlan-id/expires), auf dem Core verifiziert vorhanden, Tabelle noch leer. 🔴 Zuerstmulti-passphrasegegen WPA3/SAE testen — auf einer Wegwerf-SSID, nie andirtyvader-iot.sec-iotfährtwpa2-psk,wpa3-psk; trägt multi-passphrase SAE nicht, sperrt man 26 IoT-Geräte auf einmal aus, inklusive Nuki und NSPanel. Danach: 23 Shellys per Skript (der erprobte Anker-Pfad inmigrate.py._migrate_one), 3 Geräte von Hand —.249SONOFF NSPanel Pro (Touchscreen),.244Nuki Bridge (App),.227SwitchBot Floor Lamp (App). ⚠️s1/s2/s3sind ausgesteckt und kommen im Dezember mit dem alten PSK zurück. ⚠️ CAPsMAN: eine Profiländerung wirkt erst nachremote-cap provisionfür beide APs. - D — TP17.2 Shelly-Gerätepasswort, an C2 gekoppelt (ein Reboot statt zwei). Werkzeug ist fertig
(
migrate.py cmd_auth, Digest-Fallback in_rpc). 🔴 Der Aufwand ist HA, nichtSetAuth: je Gerät ein Re-Auth-Flow, 23-mal. Erst an EINEM Gerät messen (Vorschlags15 technik_pve, −36 dBm). - TP25 Fund F (5:05-Takt IoT) und die Entscheidung 5 GHz auf 20 MHz.
- 5-GHz-Umfeldscan vor dem Einbau der zwei neuen APs.
Die Entscheidung des Tages: warum TP17.1 gestorben ist
Der Pilot hat den Zigbee-Weg technisch vollständig bewiesen — s9 lief auf PowerStripZB, trat
ZHA bei, ein Zigbee-Befehl schaltete das physische Relais, kein Broadcast-Sturm.
Christophs Einwand hat ihn trotzdem gekippt: „zigbee sollte die antwort auf die vielen radios auf -iot geben. nutzt aber wenig wenn man das wifi nicht abdrehen kann bzw. es nicht mehr aktivieren kann ohne reset." Und die Messung stützt ihn:
- Das Gerät bleibt WLAN-Client — Zigbee kommt zusätzlich, nicht statt.
- Der Funkgewinn ist klein: die 12 Gen4 sind 12 von 26 IoT-Clients, bewegen aber je nur ~150–200 KB rx / 0,6–3 MB tx in sechs Stunden.
- Der Preis wäre dauerhaft: die Zigbee-Firmware hat keinen AP, Shelly macht kein Zigbee-OTA,
Shelly.InstallAltbraucht IP. WLAN aus = nie wieder Update, kein Rückweg, bei 10 Unterputz-Modulen.
Der Weg ist nicht gescheitert, das Ziel war mit ihm nicht erreichbar. Das Runbook bleibt als
Wissensspeicher; einziger Restposten ist der Frühindikator (Shelly.CheckForUpdate auf einen
…MT/Thread-alt-Eintrag beobachten).
Zwei Messungen, die vorherige Annahmen widerlegen
1. eco_mode aus hebt die Sendeleistung NICHT an. Ich hatte das als Airtime-Risiko notiert, das
TP25 berührt. Gemessen am Manager, vorher/nachher: 13 geänderte Geräte im Mittel −0,9 dB, bei einer
Kontrollgruppe von 13 unveränderten mit +0,0 dB und derselben Streuung (±2 dB). Rauschen.
⇒ Die TP17-Aussage, eco_mode senke „den CPU-Takt und die WLAN-Sendeleistung", stimmt nur zur
Hälfte. Der Takt-Teil ist durch das Dimmer-Flackern bewiesen; der Rest ist nicht messbar.
2. restart_required auf 14 Shellys war ein Fehlalarm. Der Reboot von s26 mit Config-Vergleich
davor/danach ergab identische Configs. Das Bit ist sticky und stand für keine abweichende
Konfiguration. Nicht erneut untersuchen — drei Wege (169 RPC-Methoden, Config-Diff über die
Gruppengrenze, Gerätelog) sind zu Ende gegangen, alle negativ.
Zahlen und Fallen, die man nicht neu erheben muss
dirtyvader-iot: 26–27 Clients, alle auf EINEM VAP (cap-wifi4-virtual1, ap1). Davon 23 Shellys und 3 Fremde:.249NSPanel Pro,.244Nuki Bridge,.227SwitchBot Floor Lamp.s4 kueche_mikrowelleist wieder online (war den ganzen Tag als offline geführt) — und ist Gen3, war also nie TP17.1-Kandidat. Bleibt der Härtefall bei −96 dBm (Geräte-Sicht).- 🔴 HA- und Repo-Nummerierung der Shellys weichen ab — HA:
s10 = schlafzi/teststecker, Inventory:s10 = bad_sonos; ebensos17. Immer über MAC/IP zuordnen, nie über die s-Nummer. - 🔴
migrate.py _resolvefällt ohne Argument auf den alten VLAN1-Sweep10.40.41.180-250zurück. Explizite Bereiche übergeben oderSHELLY_SWEEPsetzen. - 🔵
inventory/bf.csvführts12noch auf10.40.41.219(live10.40.30.219). - ⚠️ Nach jedem Shelly-Firmwarewechsel den AP prüfen — der Rückflash von
s9zog einen offenen AP hoch (ap.enable=true, is_open=true). Abgeschaltet und mit dem IoT-PSK abgesichert. - 🔒
wifi-securityist als ComplianceRule grün, aber NICHT deploybar — die Passphrasen stehen als<<REDACTED>>im Template. Ist-Stand immer per REST vom Gerät lesen (GET http://10.40.99.1/rest/interface/wifi/security), nie auswlan-psks.env.
Der Firmware-Mechanismus der Shelly Gen4 (falls er je wieder gebraucht wird)
Zwei-Slot-Modell über drei undokumentierte RPCs, aus dem UI-JavaScript des Geräts extrahiert:
Shelly.InstallAlt {app, stage} lädt in den inaktiven Slot und rebootet hinein · Shelly.SetAlternative {name} schaltet um (auf unseren Modellen nicht vorhanden) · Shelly.ListAlternatives (404 auf
beiden Builds). Die Shelly-Support-Seite beschreibt einen Modus-Umschalter mit 5-Sekunden-Knopf —
das gilt für unsere Modelle nicht.
Neue und geänderte Dokumente
tp17.1-shelly-gen4-funkmigration-runbook.md— Kopf trägt jetzt „VERWORFEN"; enthält den kartierten Mechanismus, das 2,4-GHz-Bild und die ZHA-Sturmzähler mit Baselineteilprojekte.md— TP17.1 verworfen, TP17.2 aktiviert, TP17.3 erledigt, PSK-Follow-up um Radius-Befund und Etappe 1 ergänztCLAUDE.md— 🔴 empfahl bis gestern aktivsshpass -pals Reboot-Weg, jetztsshpass -emcp/shelly/migrate.py— neueseco-Kommando (mit Retry je Gerät und Fehlerliste)