fix(satellite): http.get liefert ganze Statusseiten + contains-Filter, kein Scan-Overhead

ARIA erreichte den Drucker per Satellit, bekam aber nur die ersten 2000
Zeichen (r.text[:2000]) — die Tintenbalken stehen weiter unten und fielen
weg; ein Offset-Versuch wurde ignoriert (nicht unterstuetzt). Zudem lief vor
JEDEM sat_command ein voller LAN-Scan, auch fuer http.get, das die URL direkt
nutzt -> sehr lange Antwortzeiten.

_do_http:
- Body-Limit env-konfigurierbar (HTTP_MAX_CHARS Default 20000, harter Deckel
  HTTP_MAX_CHARS_HARD 200000) statt fixer 2000.
- params.offset + params.max_chars zum Paginieren.
- params.contains (String/Liste): nur Zeilen mit einem der Begriffe -> zieht
  aus einer grossen Statusseite gezielt die Tintenwerte, ohne Paging.
- Antwort meldet total_chars/returned_chars/offset/truncated/filtered.
- HTTP_TIMEOUT_SEC (Default 10s) statt fixer 6s.

sat_command: LAN-Scan nur noch bei dial.launch oder wenn ein device-Ref
mitkommt; http.get/http.post/wol nutzen die gecachte Liste -> deutlich schneller.

agent.py + seed_rules.py: satellite_command-Tool + Drucker-Beispiel um
contains/offset/max_chars ergaenzt, damit ARIA den Filter nutzt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-19 12:09:52 +02:00
co-authored by Claude Opus 4.8
parent 512e24bb6f
commit 5b952812ee
3 changed files with 77 additions and 7 deletions
+9 -2
View File
@@ -1220,8 +1220,15 @@ META_TOOLS = [
"Beispiel YouTube-Video auf Fire TV: action='dial.launch', "
"device='Fire TV', params={'app':'YouTube','v':'<videoId>'}. Weitere "
"Aktionen: 'wol' (params={'mac':'...'}) zum Aufwecken, "
"'http.get'/'http.post' (params={'url':'...'}) fuer lokale Webhooks. "
"Geht nur, wenn der Satellit Steuerung erlaubt (siehe satellite_list)."
"'http.get'/'http.post' (params={'url':'...'}) fuer lokale Webhooks UND "
"um Geraete-Statusseiten zu lesen (Drucker-Tinte, NAS ...). Bei grossen "
"Seiten NICHT blind paginieren: setze params['contains'] (String oder "
"Liste) — dann kommen nur Zeilen zurueck, die einen der Begriffe enthalten "
"(z.B. contains=['ink','toner','cyan','magenta','yellow','black','%'] fuer "
"Tinte). Zusaetzlich moeglich: params['offset'] und params['max_chars'] "
"(Default 20000). Die Antwort meldet total_chars + truncated, damit Du "
"siehst, ob noch mehr da ist. Geht nur, wenn der Satellit Steuerung "
"erlaubt (siehe satellite_list)."
),
"parameters": {
"type": "object",