Der Satellit kann Android-Geraete im LAN erkennen und die Agent-APK ausrollen, statt sie von Hand aufs Geraet zu kopieren. - satellite.py: adb.devices/connect/install/shell. _apk_fetch laedt die APK per HTTP (gecached in /data/apk, sha256 optional) statt sie durchs RVS zu schicken — der RVS ist ein BROADCAST-Relay (jede base64-APK ginge an alle Clients, und das Satelliten-max_size liegt bei 8 MB). adb.install ist selbstheilend (connect -> install -r) und uebersetzt die typischen Fehler in klare Ansagen (unauthorized, Signatur-Mismatch, Speicher voll). Imports lokal in den Funktionen (Hausmuster). - Discovery: mDNS-Typen _amzn-wplay/_adb-tls-connect/_androidtvremote2, _mdns_kind -> firetv/android-adb/androidtv, plus _enrich_adb (TCP-Probe 5555) -> adbCapable. - Dockerfile: adb; compose: HOME=/data (ADB-Key persistent, sonst fragt das Geraet nach jedem Rebuild neu) + ANDROID_ADB_SERVER_PORT=5038 (Host-Kollision). - .env.example: neue Aktionen + Warnung, dass die Allowlist den Code-Default ueberschreibt (sonst lehnt ein bestehender Satellit adb.* ab). - Brain: adb.* in der satellite_command-Beschreibung; WICHTIG Timeout 200s fuer adb.*/ssh.exec — der Bridge-Default von 20s haette jede Installation abgewuergt. - Diagnostic: sat_command (Browser->RVS) und sat_result (RVS->Browser) gab es bisher GAR NICHT; beide ergaenzt. 📦-Button je ADB-faehigem Geraet + Rollout- Modal mit Status/Log, ADB-Tag in der Geraeteliste. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
87 lines
5.4 KiB
Bash
87 lines
5.4 KiB
Bash
# ─── ARIA Satellit — Konfiguration ──────────────────────────────────
|
|
# Kopiere diese Datei nach .env und passe sie an.
|
|
|
|
# RVS-Zugang (identisch zum Haupt-Stack — gleicher Raum/Token, damit ARIA
|
|
# diesen Satelliten erreicht). Werte aus der Haupt-.env / vom generate-token.sh.
|
|
RVS_HOST=rvs.example.de
|
|
RVS_PORT=443
|
|
RVS_TLS=true
|
|
RVS_TLS_FALLBACK=true # bei TLS-Fehlschlag einmal auf ws:// zurueckfallen
|
|
RVS_TOKEN=
|
|
# RVS_SNI: nur noetig, wenn RVS_HOST eine IP ist (Satellit im selben Netz wie der
|
|
# RVS, direkt auf die interne IP). Dann hier den Zertifikats-/Hostnamen angeben,
|
|
# damit der TLS-Handshake (SNI) passt. Sonst leer lassen.
|
|
# RVS_HOST=10.0.0.2
|
|
# RVS_SNI=example.com
|
|
RVS_SNI=
|
|
|
|
# ─── Identitaet / Adresse dieses Satelliten ────────────────────────
|
|
# SATELLITE_ID = technisch eindeutig (a-z0-9-_), Default = Hostname-Slug.
|
|
# SATELLITE_LOCATION = menschlicher Name, so spricht ARIA das Netz an ("Buero").
|
|
# Mehrere Satelliten koennen im selben RVS-Raum haengen — die Location
|
|
# unterscheidet sie ("Buero", "Zuhause", "Werkstatt").
|
|
SATELLITE_ID=buero
|
|
SATELLITE_LOCATION=Büro
|
|
|
|
# ─── Steuerung (Sicherheit!) ───────────────────────────────────────
|
|
# CONTROL_ENABLED=false → reiner Info-/Beobachtungs-Satellit (entdeckt & meldet
|
|
# nur, steuert nichts). Sicherste Basis.
|
|
# CONTROL_ENABLED=true → darf Geraete steuern (nur Aktionen aus der Allowlist).
|
|
CONTROL_ENABLED=true
|
|
# Erlaubte Steuer-Aktionen (kommagetrennt). Alles andere wird abgelehnt.
|
|
# dial.launch App-Launch via DIAL (z.B. YouTube-Video auf Fire TV / Smart-TV)
|
|
# wol Wake-on-LAN (Geraet per MAC aufwecken)
|
|
# http.get generischer HTTP-GET (z.B. lokale IoT-Webhooks, Statusseiten)
|
|
# http.post generischer HTTP-POST
|
|
# snmp.get einzelner SNMP-Wert (params: ip, oid)
|
|
# snmp.walk SNMP-Teilbaum (params: ip, oid)
|
|
# snmp.printer Drucker-Fuellstaende (Tinte/Toner) aus der Printer-MIB (params: ip)
|
|
# snmp.ports Switch/Router-Interfaces: aktive/freie Ports (params: ip)
|
|
# snmp.info Modell/Seriennummer/Firmware-Version (params: ip)
|
|
# fritzbox.info FritzBox: Verbindung/Datenrate/externe IP (TR-064, braucht Login)
|
|
# fritzbox.hosts FritzBox: verbundene Geraete (TR-064, braucht Login)
|
|
# ssh.exec Kommando per SSH ausfuehren (params: ip, cmd; Auth aus Creds 'ssh')
|
|
# adb.install APK auf ein Android-Geraet/Fire TV ausrollen (params: ip, url)
|
|
# adb.connect ADB-Verbindung aufbauen (params: ip)
|
|
# adb.devices verbundene ADB-Geraete auflisten
|
|
# adb.shell Shell-Kommando auf dem Android-Geraet (params: ip, cmd)
|
|
# ACHTUNG: Diese Liste ueberschreibt den Code-Default. Wird eine neue Aktion
|
|
# ergaenzt, MUSS sie hier nachgetragen werden — sonst lehnt der Satellit sie ab.
|
|
CONTROL_ALLOWLIST=dial.launch,wol,http.get,snmp.get,snmp.walk,snmp.printer,snmp.ports,snmp.info,fritzbox.info,fritzbox.hosts,ssh.exec,adb.devices,adb.connect,adb.install,adb.shell
|
|
|
|
# ─── ADB / Android-Rollout (optional) ──────────────────────────────
|
|
# Fire TV Sticks & Android-Geraete im LAN: APK ausrollen ohne Datei-Kopieren.
|
|
# Voraussetzung am Geraet: ADB-Debugging AN (Fire TV: Einstellungen > Mein Fire TV
|
|
# > Entwickleroptionen > ADB-Debugging) und den Dialog "USB-Debugging zulassen?"
|
|
# einmalig bestaetigen (Haken "Immer erlauben").
|
|
ADB_PORT=5555
|
|
ADB_TIMEOUT_SEC=180 # install dauert 30-60s, grosszuegig lassen
|
|
APK_CACHE_DIR=/data/apk # heruntergeladene APKs (1x laden, N Geraete)
|
|
|
|
# ─── Credential-Store (optional) ───────────────────────────────────
|
|
# Pro Geraet koennen im Diagnostic Zugangsdaten hinterlegt werden (SNMP-Community/
|
|
# v3, HTTP-Basic, FritzBox-Login). Der Satellit speichert sie VERSCHLUESSELT im
|
|
# Bind-Volume ./data. Der Schluessel wird beim ersten Start automatisch erzeugt
|
|
# (./data/creds.key) — oder hier fest vorgeben (Fernet-Key, base64):
|
|
# CREDS_KEY=
|
|
|
|
# ─── SNMP (optional) ───────────────────────────────────────────────
|
|
# Defaults fuer die snmp.*-Aktionen; pro Request per params ueberschreibbar.
|
|
SNMP_COMMUNITY=public # Drucker/Switches antworten meist auf 'public'
|
|
SNMP_VERSION=2c # 1 | 2c
|
|
SNMP_TIMEOUT_SEC=5
|
|
# Discovery-Anreicherung: jedes entdeckte Geraet wird beim Scan kurz per SNMP
|
|
# nach Name/Beschreibung/Standort/Uptime gefragt (Switches, Router, APs, NAS ...).
|
|
SNMP_DISCOVERY=true
|
|
SNMP_DISCOVERY_CONCURRENCY=16 # parallele SNMP-Abfragen pro Scan
|
|
SNMP_DISCOVERY_TIMEOUT=2 # Timeout je Geraet (s) — Nicht-SNMP-Hosts fallen schnell raus
|
|
|
|
# ─── HTTP (optional) ───────────────────────────────────────────────
|
|
HTTP_TIMEOUT_SEC=10 # Timeout fuer http.get/http.post
|
|
HTTP_MAX_CHARS=20000 # Default-Body-Ausschnitt (offset/max_chars pro Request)
|
|
|
|
# ─── Discovery-Tuning (optional) ───────────────────────────────────
|
|
SCAN_INTERVAL_SEC=300 # Hintergrund-Rescan-Intervall
|
|
DISCOVER_TIMEOUT_SEC=6 # Dauer eines Sweeps (mDNS + SSDP)
|
|
DEVICE_CACHE_TTL_SEC=120 # wie lange ein Inventar als "frisch" gilt
|