Hauptmenü

Reading über http

Begonnen von docb, 01 Oktober 2017, 13:54:32

Vorheriges Thema - Nächstes Thema

docb

Hallo zusammen,
ich kämpfe mich seit Stunden durch das Forum - ich will in einem bash-script den Wert des Readings box_ipExtern auslesen. Das direkt von der Fritzbox auszulesen klappt nicht (alle anderen Werte ja, aber genau das GetExternalIPAddress will nicht).
Daher dieser Umweg. Ich habe es so versucht, aber da bekomme ich die ganze Seite zurückgeliefert:

curl "http://IP:8083/fhem?cmd={ReadingsVal("Fritzbox","box_ipExtern", "0");;}&fwcsrf=csrf_123"

Kann mir jemand sagen wie ich da nur die IP rausbekomme?
Dankeschön und viele Grüße
doc
I love FHEM!

Ellert

Versuch mal

curl "http://IP:8083/fhem?cmd={ReadingsVal("Fritzbox","box_ipExtern", "0");;}&XHR=1&fwcsrf=csrf_123"

docb

#2
Hm. Leider nein, das liefert auch die ganze Seite zurück...

Ich habe jetzt nochmal rumgespielt, komme aber nicht weiter. Ich denke das liegt an den Sonderzeichen, z.B {
Aus verschiedenen Quellen habe ich mir mal was zusammegebastelt - aber ich bekomme einfach kein Ergebnis:
curl -G http://IP:8083 --data-urlencode "fhem?XHR=1&cmd={ReadingsVal('Fritzbox','box_ipExtern', '0');;&}&fwcsrf=csrf_123"

Wenn ich aber http://IP:8083/fhem?XHR=1&cmd={ReadingsVal(%22Fritzbox%22,%22box_ipExtern%22,%20%220%22);;}&XHR=1&fwcsrf=csrf_123
im Browser eingebe, bekomme ich die IP geliefert (und sonst nichts).

Es muss also an irgendeiner Kleinigkeit liegen, auf die ich Linux-Noob nicht komme  ::)
I love FHEM!

t0m

#3
Hi docb,

das ist jetzt keine HTTP-Lösung, aber du hast ja geschrieben, dass du nur ein Bash-Script brauchst. Ich habe jetzt mal das zusammengezimmert:


#!/bin/sh

(
   echo "open raspberrypi 7072"
   sleep 5
   echo '{ReadingsVal("GlobalMem", "state", 0)}'
   sleep 5
   echo "exit"
) | telnet > output.txt


Eventuell musst du via echo euch noch nen User und ein Password mitgeben!

Das liefert dann das Reading in der letzten Zeile von output.txt.


telnet> Trying xxx.xxx.xxx.xxx...
Connected to raspberrypi.
Escape character is '^]'.
<READING_VALUE>


Kannst du das gebrauchen?


Grüße
t0m

docb

Hi, danke, auch ein guter Ansatz. Der funktioniert auch. Nur wenn ich das ganze etwas zu kürzen versuche, klappt es nicht mehr.
'{ReadingsVal("Fritzbox","box_ipExtern", "0");;}' | nc -q 2 -w 1 xxx.xxx.xxx.xxx 7072
gibt mir zurück:
{ReadingsVal("Fritzbox","box_ipExtern", "0");;}: Befehl nicht gefunden.
Irgendwie habe ich kein Glück. Naja, solange keine Idee im Hinblick auf curl oder meine Kurzversion hier kommt, nehme ich deine t0m ;-)
I love FHEM!

t0m


Hi docb,

die curl-Sache habe ich hier nicht zum Laufen gekriegt. :( Aber deine Kurzform gefällt mir sehr gut. Das läuft auch, wenn du das mit echo an nc weitergibst.


echo '{ReadingsVal("Fritzbox","box_ipExtern", "0")}' | nc xxx.xxx.xxx.xxx 7072



Grüße
t0m



docb

tip top, danke. Naja, ich verstehe leider immer nur die Hälfte von dem was ich da mache und das nc habe ich mir mal für einen Zugriff auf die openvpn management konsole irgendwo abgeschaut. Läuft auch bei mir. Ich würde nur die -q 2 und -w 1 parameter drin lassen, das beendet den Aufruf, wenn die Verbindung nicht aufgebaut werden kann bzw. wartet nicht, bis die Verbindung getrennt wird.

Viele Grüße
doc
I love FHEM!

docb

Ich hasse das, wenn der Rechner gewinnt. Mit curl habe ich es immer noch nicht hinbekommen, aber immerhin mit wget. Ist, denke ich, immer noch schneller wie nc über telnet aber sicher langsamer als curl. Also wenn noch jemand zu curl eine Idee hat - sehr gerne.
Hier meine wget-Lösung in einem Bash-Script
EXT_IP="`wget  -qO- 'http://xxx.xxx.xxx.xxx:8083/fhem?XHR=1&cmd={ReadingsVal("Fritzbox","box_ipExtern", "0");;}&XHR=1&fwcsrf=csrf_123'`"
echo $EXT_IP


Viele Grüße
doc
I love FHEM!

t0m


Hi docb,

na perfekt. Die Parameter machen durchaus Sinn, also lass' sie drin. Allerdings kannte mein nc zumindest einen der Parameter nicht. Deswegen habe ich das gepostet, was ich auch lokal getestet habe.  ;)

Grüße
t0m

t0m

Zitat von: docb am 01 Oktober 2017, 20:01:55
Ich hasse das, wenn der Rechner gewinnt. Mit curl habe ich es immer noch nicht hinbekommen, aber immerhin mit wget. Ist, denke ich, immer noch schneller wie nc über telnet aber sicher langsamer als curl. Also wenn noch jemand zu curl eine Idee hat - sehr gerne.

Hi docb,

so - jetzt schlagen wir den Rechner 8) Feiertag und Regen: Hatte bissl Zeit zum Tüffteln. cURL hat Probleme mit den Klammern. Habe jetzt herausgefunden, dass man das mit --globoff abschalten kann.


curl --globoff "http://raspberrypi:8083/fhem?XHR=1&cmd={ReadingsVal('GlobalMem','state','0')}&fwcsrf=csrf_743139400227214"


Das läuft jetzt bei mir.

Jetzt hätte ich aber eine Frage an dich: Warum denkst du, dass wget langsamer als cURL ist? Und telnet nochmals langsamer als wget? Danke schon mal für die Antwort!

Grüße
t0m



docb

Moin,
sehr cool, danke! Auf meine Aussagen in Sachen "langsam" darfst du nicht so viel geben - bin kein Skript-Kiddie sondern eher fortgeschrittener Anfänger ;-) Also wget und curl dürften wohl gleich schnell sein, aber ich denke die telnet-lösung wird langsamer sein, weil eben ein zusätzlicher service benutzt wird. Es muss ja tatsächlich eine telnet verbindung aufgebaut werden, statt einfach nur eine vorhanden URL abzugreifen.
Viele Grüße
doc
I love FHEM!