feat: Satelliten — ARIAs Augen & Haende in fremden Netzen (Info-/Gateway-Aussenposten)

Neuer eigenstaendiger Container satellite/ (RVS-Client, network_mode host), den
man in einem beliebigen Netz (Buero etc.) deployt. Gibt ARIA Zugriff auf dieses
Netz ohne Haupt-Stack davor.

- satellite/satellite.py: RVS-Client + Discovery (mDNS/Zeroconf, SSDP/UPnP+DIAL,
  ARP) + Steuerung (dial.launch fuer YouTube-auf-FireTV, wol, http) mit Guards
  (CONTROL_ENABLED + Allowlist + Logging, token-gated, keine offenen Ports).
  Periodisches Re-Announce (sat_hello im Heartbeat) fuer spaet joinende Bridge.
- satellite/: Dockerfile, requirements, docker-compose (host-net), .env.example
  (SATELLITE_LOCATION als Adresse), README.
- rvs: sat_hello/discover/devices/command/result whitelisted.
- bridge: Satelliten-Registry (sat_hello) + Future-Relay (_satellite_request) +
  /internal/satellite + /internal/satellite-list (Muster wie flux).
- brain: Tools satellite_list/devices/command + _dispatch_satellite + Seed-Regel.

Alle py_compile + node -c gruen. Kein APK-Rebuild noetig.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 23:22:30 +02:00
co-authored by Claude Opus 4.8
parent 28361ea97a
commit 071e38f464
12 changed files with 975 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
# ARIA Satellit 🛰️
Ein eigenständiger **Außenposten-Container** für ein fremdes Netz (Büro, Werkstatt,
Ferienwohnung …). Er verbindet sich als RVS-Client in Stefans Raum und gibt ARIA
**Augen und Hände in genau diesem Netz** — ohne dass der Haupt-Stack dort stehen muss.
- **Augen (Info):** entdeckt Geräte via **mDNS/Zeroconf** (Chromecast, AirPlay, Sonos,
Drucker, NAS …), **SSDP/UPnP + DIAL** (Smart-TVs, Fire TV) und der **ARP-Tabelle**
(rohe Hosts). Meldet ARIA ein Live-Inventar.
- **Hände (Steuerung):** **DIAL-App-Launch** (z.B. YouTube-Video auf dem Fire TV),
**Wake-on-LAN**, generisches **HTTP**. Nur wenn freigeschaltet (siehe Sicherheit).
## Deploy
```bash
cd satellite
cp .env.example .env # RVS-Zugang + SATELLITE_LOCATION eintragen
docker compose up -d --build
docker compose logs -f # "sat_hello gesendet" + "[scan] N Geraete"
```
`RVS_HOST/PORT/TLS/TOKEN` **identisch** zum Haupt-Stack (gleicher Raum, damit ARIA
den Satelliten erreicht). `SATELLITE_LOCATION` ist der Name, über den ARIA das Netz
anspricht („Büro").
> **`network_mode: host` ist Pflicht** (schon in der compose gesetzt): nur so sieht
> der Container die mDNS/SSDP-Broadcasts und die Geräte-IPs des LAN.
## So nutzt ARIA es
ARIA hat drei Brain-Tools:
- `satellite_list` — welche Netze/Satelliten sind online + was können sie.
- `satellite_devices(satellite)` — Inventar eines Netzes.
- `satellite_command(satellite, device, action, params)` — Aktion ausführen.
Beispiel „YouTube-Video auf dem Büro-Stick":
```
satellite_command(satellite="Büro", device="Fire TV",
action="dial.launch", params={"app":"YouTube","v":"<videoId>"})
```
## Sicherheit
Der Satellit scannt ein Netz **und** ist über einen Cloud-Relay erreichbar — deshalb:
- Reagiert **nur** auf den eigenen RVS-Raum (Token).
- **`CONTROL_ENABLED=false`** = reiner Info-Satellit (steuert nichts). Standard-sicher.
- Bei `true`: nur Aktionen aus **`CONTROL_ALLOWLIST`**, alles andere wird abgelehnt.
- Jede ausgeführte Aktion wird **geloggt**.
- Keine offenen Ports — reiner Client.
Empfehlung: in vertrauenswürdigen Netzen `CONTROL_ENABLED=true` mit enger Allowlist;
sonst `false` und nur beobachten.