- Mitglied seit
- 17 Okt 2007
- Beiträge
- 15
- Punkte für Reaktionen
- 0
- Punkte
- 1
Hallo,
ich versuche mitel (micro-) python von einem Raspberry pico per TR-064 auf die Fritzbox zu zu greifen. Teile des Zugrifs klappen schon ganz gut, aber der Aufruf mittels lua/sid klappt nicht.
Hintergrund: Eigendlich möchte ich über einen TR-064-Zugriff das Gastnetz ein- und ausschalten. Ich möchte aber erst einmal zu testen, ob ich einen grundsätzlichen Zugriff überhaupt hinbekomme und die grundsätzliche Kommunikation via TR_064 zu lernen. Da ich kein Beispiel für micropython gefunden habe, habe ich versucht ein Beispiel aus der c't nachzubauen (Artikel aus c't 19/23, Listing zu den darin verwendeten Scripten hier fbsec.py und hier fbgetmacaddr.py ) Diese Beispiele sind zwar bash-Skripte, haben für mich aber den Vorteil, dass dir Kommunikation durch die curl-Aufrufe und darin enthaltenenn Body/Envelope-Daten und Header halbwegs nachvollziehbar ist. Darüber hinaus ist das Zugriffsverfahren mittels Secret statt gespeichertem Passwort gut geeignet, für das was ich vorhabe. Die Kommunikation mittels TR-64 klappt (nach einigem Rumprobieren und mit der Hilfe von Peter-Pawn) grundsätzlich anscheinend schon, nur der finale Abruf der Daten mittels lua/sid klappt nicht.
Hier der Auszug aus dem verwendeten Code, der nicht funktioniert - der gesamte Code ist als Datei angehängt :
Der oben aufgeführte code gibt kein Ergebnis, bzw der Ergebnisstring "response" bleibt leer - Ergebnis wie folgt:
Der aufgeführte lua-Wert ist der, der aus dem vorhergehenden TR-064-Aufruf extrahiert wurde - Bei Bedarf füge ich die Ergebnisse der vorhergehenden TR-064-Aufrufe gerne bei.
Hier der Teil aus dem bash-Script den ich versuche nachzubilden (ergänzt um echo-Befehle um die Details des Aufruf und der lua/sid zu sehen (das Bashskipt funktioniert und gibt die gewünschten Werte in "r" zurück):
Was ich erfolglos probiert habe:
- keine Angabe eines Length Headers => gibt Fehler "411 Length Required"
- angabe eines Header > 0 => gibt gar kein ergebnis; das Programm scheint nach dem request-Aufruf abzubrechen
- verwenden von get => kein ergebnis; Antwort String ist leer
Meine Erwartung wäre, dass der letzte Aufruf mittels sid/lua einen String mit Daten zurückgibt, so wie im bash-script - was aber nicht geschieht.
Hat jemand eine Idee, woran es liegen könnte? - bin für jede Hilfe dankbar ...
ich versuche mitel (micro-) python von einem Raspberry pico per TR-064 auf die Fritzbox zu zu greifen. Teile des Zugrifs klappen schon ganz gut, aber der Aufruf mittels lua/sid klappt nicht.
Hintergrund: Eigendlich möchte ich über einen TR-064-Zugriff das Gastnetz ein- und ausschalten. Ich möchte aber erst einmal zu testen, ob ich einen grundsätzlichen Zugriff überhaupt hinbekomme und die grundsätzliche Kommunikation via TR_064 zu lernen. Da ich kein Beispiel für micropython gefunden habe, habe ich versucht ein Beispiel aus der c't nachzubauen (Artikel aus c't 19/23, Listing zu den darin verwendeten Scripten hier fbsec.py und hier fbgetmacaddr.py ) Diese Beispiele sind zwar bash-Skripte, haben für mich aber den Vorteil, dass dir Kommunikation durch die curl-Aufrufe und darin enthaltenenn Body/Envelope-Daten und Header halbwegs nachvollziehbar ist. Darüber hinaus ist das Zugriffsverfahren mittels Secret statt gespeichertem Passwort gut geeignet, für das was ich vorhabe. Die Kommunikation mittels TR-64 klappt (nach einigem Rumprobieren und mit der Hilfe von Peter-Pawn) grundsätzlich anscheinend schon, nur der finale Abruf der Daten mittels lua/sid klappt nicht.
Hier der Auszug aus dem verwendeten Code, der nicht funktioniert - der gesamte Code ist als Datei angehängt :
Python:
# request MAC-List with lua
FBluaControl ='/devicehostlist.lua?sid='
url = FBhost_https + FBPort + FBluaControl + FBlua
print("post url=",url)
response = requests.post(url, headers={'Content-Length': '0'})
print('response.text=', response.text)
Der oben aufgeführte code gibt kein Ergebnis, bzw der Ergebnisstring "response" bleibt leer - Ergebnis wie folgt:
Code:
WLAN-Verbindung ok
FBlua= 2734670666a717b4
post url= https://fritz.box:49443/devicehostlist.lua?sid=2734670666a717b4
response.text=
Hier der Teil aus dem bash-Script den ich versuche nachzubilden (ergänzt um echo-Befehle um die Details des Aufruf und der lua/sid zu sehen (das Bashskipt funktioniert und gibt die gewünschten Werte in "r" zurück):
Bash:
FBlua=$(xmlstarlet sel -t -v //NewX_AVM-DE_HostListPath <<<${r})
echo "FBLUA "${FBlua}
r=$(curl -s -k -m 5 "${FBhost}${FBlua}")
echo "curl -s -k -m 5 ${FBhost}${FBlua}"
Was ich erfolglos probiert habe:
- keine Angabe eines Length Headers => gibt Fehler "411 Length Required"
- angabe eines Header > 0 => gibt gar kein ergebnis; das Programm scheint nach dem request-Aufruf abzubrechen
- verwenden von get => kein ergebnis; Antwort String ist leer
Meine Erwartung wäre, dass der letzte Aufruf mittels sid/lua einen String mit Daten zurückgibt, so wie im bash-script - was aber nicht geschieht.
Hat jemand eine Idee, woran es liegen könnte? - bin für jede Hilfe dankbar ...