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>
54 lines
2.2 KiB
Markdown
54 lines
2.2 KiB
Markdown
# 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.
|