Sonos 🔍 Inventar (10 Geräte, alle S2) + zero-dep :1400-Helper

- mcp/sonos/sonos-inv.py: SSDP + ZoneGroupTopology-API, Seed-je-VLAN-Partition,
  --json / --verify. Kein MCP-Container (User-Entscheid), kein Daemon, stdlib-only.
- docs/sonos-inventar.md: Bestand + Migrationsklassen.
- Kernbefund: echter WLAN-Umzug = 6 Geräte (3× One SL + HT-Bond Arc/Amp/Sub);
  Schlafzimmer-Paar nur Switch-Port; Arbeitszimmer-Paar fertig. Alle S2 →
  :1400/wifictrl tot → Umzug via TP3-Cutover, nicht am Gerät.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 20:31:11 +02:00
parent 50870a251f
commit e2c2700252
3 changed files with 223 additions and 0 deletions

48
docs/sonos-inventar.md Normal file
View File

@@ -0,0 +1,48 @@
# Sonos-Inventar (live, 2026-06-17)
Erhoben zero-dep über die Sonos-HTTP-API (`:1400`) vom Mac (VLAN 1, `10.40.41.82`, en5)
mit `mcp/sonos/sonos-inv.py --seeds 10.40.40.199`. **Alle 10 Geräte S2** (SWGen=2).
Sonos hat **keine** API zum WLAN-Umstellen — Migration passiert am Netz, nicht am Gerät.
## Bestand (10 Sonos)
| IP | Modell (Nr.) | Zone | MAC | SW | Wifi | Eth | VLAN | Status |
|---|---|---|---|---|---|---|---|---|
| 10.40.40.199 | SYMFONISK Bookshelf (S21) | Arbeitszimmer (L) | `34:7E:5C:32:37:96` | 86.7 | 0 | 1 | 40 | ✅ wired (Omada P6) |
| 10.40.40.200 | SYMFONISK Bookshelf (S21) | Arbeitszimmer (R) | `34:7E:5C:32:33:B8` | 86.7 | 0 | 1 | 40 | ✅ wired |
| 10.40.41.193 | SYMFONISK Table lamp (S20) | Schlafzimmer (L) | `78:28:CA:80:2A:F6` | 86.7 | 0 | 1 | 1 | ⏳ **wired** → Port nach VLAN 40 |
| 10.40.41.194 | SYMFONISK Table lamp (S20) | Schlafzimmer (R) | `78:28:CA:82:16:C2` | 86.7 | 0 | 1 | 1 | ⏳ **wired** → Port nach VLAN 40 |
| 10.40.41.195 | Sonos One SL (S22) | Bad | `48:A6:B8:14:FE:D0` | 95.0 | 1 | 0 | 1 | ⏳ **WLAN** |
| 10.40.41.196 | Sonos One SL (S22) | Kinderzimmer | `48:A6:B8:16:38:AE` | 95.0 | 1 | 0 | 1 | ⏳ **WLAN** |
| 10.40.41.197 | Sonos One SL (S22) | Küche | `48:A6:B8:14:FE:F2` | 95.0 | 1 | 0 | 1 | ⏳ **WLAN** |
| 10.40.41.199 | **Sonos Arc (S19)** | Wohnzimmer (LF,RF) | `48:A6:B8:0B:63:10` | 95.0 | 1 | 0 | 1 | ⏳ **WLAN** — HT-Coordinator |
| 10.40.41.200 | **Sonos Amp (S16)** | Wohnzimmer (LR,RR) | `48:A6:B8:69:69:7B` | 95.0 | 1 | 0 | 1 | ⏳ **WLAN** — HT-Surrounds |
| 10.40.41.201 | **Sonos Sub** | Wohnzimmer (SW) | `94:9F:3E:49:59:EE` | 86.7 | 1 | 0 | 1 | ⏳ **WLAN** — HT-Sub |
Alle DHCP (Sonos kann kein statisches IP); VLAN-40-Paar hat dyn. Leases aus `dhcp-v40`.
## Migrations-Klassen
1. **Fertig (VLAN 40, wired):** Arbeitszimmer-Paar `.40.199/.200`.
2. **Wired, nur Port umhängen → VLAN 40:** Schlafzimmer-Table-lamp-Paar `.41.193/.194`
(Wifi=0, Eth=1). Kamen via ALLNET/FB-Uplink (nicht direkter Omada-Access-Port) →
**Switch-Port lokalisieren** (ALLNET MAC-Tabelle) und auf VLAN-40-Access setzen. = der „das schaff ich"-Teil.
3. **Echtes WLAN (der Schmerz) — 6 Geräte:**
- Standalone: Sonos One SL **Bad / Kinderzimmer / Küche**.
- **Home-Theater-Bond „Wohnzimmer": Arc + Amp + Sub** (Arc = Coordinator; Amp/Sub als
Satelliten an den Arc gebunden — beim Umzug zusammen behandeln).
→ Alle **S2** ⇒ `:1400/wifictrl` (Remote-WLAN-Aus) **nicht verfügbar**. Sauberer Weg =
**TP3-Cutover** (Media-SSID bzw. Per-MAC → VLAN 40); App-Re-Onboarding vermeidbar, wenn die
Media-SSID die Geräte beim FB-WLAN-Abschalten selbst übernimmt. Alternativ kurzzeitig verkabeln.
## Household-Partitionierung (Tooling-Gotcha)
ZoneGroupState ist **pro VLAN partitioniert** (Multicast quert VLANs nicht):
VLAN 40 sieht nur `.40.199/.200`, VLAN 1 sieht nur `.41.193–.201`. → Tool braucht **einen Seed
je Partition** (`10.40.40.199` **und** ein VLAN-1-Gerät; lokales SSDP deckt VLAN 1 automatisch ab).
## Werkzeug
`mcp/sonos/sonos-inv.py` (zero-dep, kein Daemon). Inventar:
```
./mcp/sonos/sonos-inv.py --seeds 10.40.40.199 # Tabelle
./mcp/sonos/sonos-inv.py --seeds 10.40.40.199 --json # maschinenlesbar
./mcp/sonos/sonos-inv.py --seeds 10.40.40.199 --verify 40 # Exit!=0 wenn ein Gerät nicht in VLAN 40
```