feat(satellite): SNMP-Aktionen (snmp.get/walk/printer) — Drucker-Tinte zuverlaessig
HTML-Scrapen der Drucker-Statusseite ist fragil (grosse Seite, Werte teils in JS/Grafik). SNMP/Printer-MIB liefert die Fuellstaende als saubere Zahlen. - Dockerfile: net-snmp-CLI (Paket 'snmp') installiert. - satellite.py: Aktionen snmp.get / snmp.walk (generisch, params ip+oid) und snmp.printer (Komfort: liest prtMarkerSupplies aus der Printer-MIB und rechnet je Patrone name+level+max+percent). net-snmp via subprocess, numerische OIDs (keine MIB-Files noetig), -t2 -r1 + Timeout = schnell scheitern statt haengen. RFC-Sonderwerte (-1/-2 unbekannt, -3 vorhanden) behandelt. - CONTROL_ALLOWLIST-Default + .env.example um snmp.* erweitert, SNMP_*-Envs dokumentiert. - agent.py + seed_rules.py: satellite_command-Tool + Drucker-Beispiel — snmp. printer ist jetzt der BEVORZUGTE Weg fuer Tinte, http.get nur Fallback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+6
-1
@@ -1220,8 +1220,13 @@ 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, "
|
||||
"'snmp.printer' (params={'ip':'<drucker-ip>'}) — BEVORZUGT fuer Drucker-"
|
||||
"Tinte/Toner: liest die Fuellstaende zuverlaessig als Prozent aus der "
|
||||
"Printer-MIB (kein HTML-Scrapen). 'snmp.get'/'snmp.walk' "
|
||||
"(params={'ip':'...','oid':'...','community':'public'}) fuer beliebige "
|
||||
"SNMP-Werte. "
|
||||
"'http.get'/'http.post' (params={'url':'...'}) fuer lokale Webhooks UND "
|
||||
"um Geraete-Statusseiten zu lesen (Drucker-Tinte, NAS ...). Bei grossen "
|
||||
"um Geraete-Statusseiten zu lesen (Fallback fuer 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 "
|
||||
|
||||
@@ -492,14 +492,14 @@ SEED_RULES: List[dict] = [
|
||||
" 3. `satellite_command(...)` — Aktion ausfuehren.\n"
|
||||
"\n"
|
||||
"Beispiel 'Patronenstand vom Drucker zuhause': satellite_list -> Satellit im "
|
||||
"Heimnetz online? -> satellite_command(satellite='<Heim>', action='http.get', "
|
||||
"params={'url':'http://<drucker-ip>/general/status.html', "
|
||||
"'contains':['ink','toner','cyan','magenta','yellow','black','%']}) -> aus den "
|
||||
"gefilterten Zeilen die Fuellstaende (BK/C/M/Y) vorlesen. Der contains-Filter "
|
||||
"holt nur die relevanten Zeilen aus einer grossen Statusseite (sonst wird der "
|
||||
"Body bei max_chars, Default 20000, abgeschnitten). Kommt nichts Brauchbares: "
|
||||
"andere Statuspfade probieren (/general/information.html?kind=item, SNMP-UI) "
|
||||
"oder offset erhoehen. NICHT aus dem Gedaechtnis raten.\n"
|
||||
"Heimnetz online? -> BEVORZUGT satellite_command(satellite='<Heim>', "
|
||||
"action='snmp.printer', params={'ip':'<drucker-ip>'}) -> liefert supplies mit "
|
||||
"name + percent je Patrone (BK/C/M/Y), zuverlaessig aus der Printer-MIB. "
|
||||
"NUR falls SNMP nichts liefert, als Fallback die HTML-Statusseite: "
|
||||
"action='http.get', params={'url':'http://<drucker-ip>/general/status.html', "
|
||||
"'contains':['ink','toner','cyan','magenta','yellow','black','%']} — der "
|
||||
"contains-Filter zieht die relevanten Zeilen (sonst wird der Body bei "
|
||||
"max_chars, Default 20000, abgeschnitten). NICHT aus dem Gedaechtnis raten.\n"
|
||||
"\n"
|
||||
"Beispiel 'spiel YouTube-Video auf dem Buero-Stick':\n"
|
||||
" satellite_command(satellite='Buero', device='Fire TV', "
|
||||
|
||||
Reference in New Issue
Block a user