[gelöst] Reading-Wert mit http auslesen

Begonnen von saxandl, 03 Februar 2020, 17:23:17

Vorheriges Thema - Nächstes Thema

jw9

Zitat von: saxandl am 04 Februar 2020, 10:16:32
meine Lösung sieht so aus:

http://192.168.1.81:8083/fhem?XHR=1&cmd=%7BReadingsVal("WetterSooss","dewPoint",0)%7D

Ich hole mal diesen Thread aus der Versenkung hervor.

"cmd=" erlaubt ja im Prinzip, beliebigen Code auszuführen. Sowas sollte man (wenn überhaupt) nur im Admin-Interface erlauben.

Gibt es denn nicht die Möglichkeit, ein Reading mit "get=" oder so ähnlich auszulesen?

Otto123

wie der Befehl heißt ist doch egal. FHEMWEB ist ein nun mal Admininterface, wenn Du was anderes willst musst Du ein Userinterface bauen.
Es gibt auch Geräte die Werte per get liefern, steht aber dann auch bloß hinter cmd= :)
cmd= Erlaubt FHEM Kommandos auszuführen, deine "Kritik" geht in Richtung: In dem Beispiel wird PerlCode ausgeführt. PerlCode ist aber ein normales FHEM Kommando. Man kann im FHEMWEB die Ausführung von Kommandos einschränken.
Alles nachzulesen in der Doku :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

jw9

Danke für die schönen Worte...

Wie baue ich nun ein "Userinterface" das es erlaubt ein Reading auszulesen ohne dass man beliebigen (Perl-)Code ausführen kann?

Hast Du mal ein Beispiel? Oder einen Link zum relevanten Teil der Doku?

Otto123

Hier in dem Thread ging es darum, von irgendwo ein reading über HTTP auszulesen. Wenn Du nicht willst, dass es über die default Webschnittstelle von FHEM geht, musst Du diese isolieren und eine anderen, sicheren Prozess vorschalten, der dann die Kommandos prüft und nur bestimmte Dinge ausführt.
Eine Möglichkeit dazu ist auch ein extra dafür aufbereitetes FHEMWEB
In FHEM enthalten ist die Möglichkeit zur Einschränkung mit allowed https://fhem.de/commandref_DE.html#allowed
Du kannst ein Reading auch ohne Perlcode über den list oder Json2List Befehl auslesen. Ein komplettes Device lässt sich auch über XmlList auslesen und weiterverarbeiten.
Es gibt gefühlt tausend "Userinterfaces" - die vor allem Daten präsentieren.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

jw9

Zitat von: Otto123 am 02 März 2022, 09:24:46
Hier in dem Thread ging es darum, von irgendwo ein reading über HTTP auszulesen.
Eben! irgendwo! Wer bitte will die Ausführung von beliebigem Code (und damit zB die Betätigung des Türöffners) von irgendwo zulassen?

ZitatWenn Du nicht willst, dass es über die default Webschnittstelle von FHEM geht, musst Du diese isolieren und eine anderen, sicheren Prozess vorschalten, der dann die Kommandos prüft und nur bestimmte Dinge ausführt.
Genau dahin zielte meine Frage: wie macht man das, ohne ein Scheunentor aufzureissen?

Zitat
Eine Möglichkeit dazu ist auch ein extra dafür aufbereitetes FHEMWEB
In FHEM enthalten ist die Möglichkeit zur Einschränkung mit allowed https://fhem.de/commandref_DE.html#allowed
Ja, so weit war ich schon. Aber bei "allowed" sind lediglich "get" und "set" beschrieben. Ein passendes FHEMWEB, das auf "get,set" eingeschränkt ist, habe ich auch. Das war aber nicht die Frage

Die Frage war: wie lautet die URL, um (ohne Perl-Code) ein Reading abzuholen? Das ist doch die Kernfrage des Threads...

Um diese URL zu nennen muss man doch keinen Nebenkriegsschauplatz eines weiteren Userinterfaces eröffnen. Ich gehe mal stark davon aus, dass sich an der URL allenfalls die Port-Nummer ändert, wenn man statt des Admin-FHEMWEB ein eingeschränktes FHEMWEB addressiert...

ZitatDu kannst ein Reading auch ohne Perlcode über den list
Nun habe ich "list" bei "allowedCommands" hinzugefügt. Bekomme aber bei

https://192.168.1.13:8083/fhem?XHR=1&list=\"SMA_Energymeter Saldo_Wirkleistung\"
nur das MOTD angezeigt...

Es macht auch keinen Unterschied, ob ich Leerzeichen, Punkt oder %20 zum Abtrennen verwende.

Es macht auch keinen Unterschied, ob es einfache, doppelte oder gequotete Anführungszeichen sind. Auch %22 0der %27 helfen nicht weiter.

Und nein, es scheitert nicht am CSRF-Token. Die Abfrage mittels Perl-Code funktioniert.

Oh, und "list SMA_Energymeter Saldo_Wirkleistung" funktioniert auch in der FHEMWEB-Eingabezeile nicht.

Ich sehe ja ein, dass diese Frage offensichtlich so einfach ist, dass es unter der Würde der Erleuchteten liegt, den korrekten Aufbau der URL zu nennen. Aber vielleicht kann sich ja doch mal jemand herablassen, diese Frage zu beantworten oder einen Link auf Doku/wiki/wasauchimmer zu posten...

Zitat
Es gibt gefühlt tausend "Userinterfaces" - die vor allem Daten präsentieren.
Für den Anfang würde mir eine einzige URL ausreichen ;-)

Otto123

Mein lokales Beispiel für die url in der linux Kommandozeile
wget -qO - 'http://192.168.56.83:8083/fhem?cmd=list%20global%20version&fwcsrf=csrf_612476752047024&XHR=1'
url encoding wäre der gesuchte Begriff https://www.urlencoder.org/
ZitatOh, und "list SMA_Energymeter Saldo_Wirkleistung" funktioniert auch in der FHEMWEB-Eingabezeile nicht.
Abgesehen von möglichen Schreibfehlern - eventuell so? ;)
list SMA_Energymeter Saldo_Wirkleistung
Zitat von: jw9 am 02 März 2022, 13:44:11
Für den Anfang würde mir eine einzige URL ausreichen ;-)
Bitte sehr https://forum.fhem.de/index.php?topic=22520.0

Es gibt keinen Grund als Pirat ausfallend zu werden. Die Kernfrage des Threads wurde gelöst, hat der TE zumindest geschrieben. :)
Und außer, dass Du mit jedem Post etwas mehr rummotzt, hast Du noch nicht gesagt was Du eigentlich willst. Ich kann Dir nicht weiter helfen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

jw9

Zitat von: Otto123 am 02 März 2022, 14:51:58
Mein lokales Beispiel für die url in der linux Kommandozeile
wget -qO - 'http://192.168.56.83:8083/fhem?cmd=list%20global%20version&fwcsrf=csrf_612476752047024&XHR=1'
cmd=?

War das nicht das Ding, mit dem beliebiger Perl-Code ausführbar ist?

Genau das ausführen von beliebigem Code sollte eben nicht möglich sein!

Bitte lies die Beiträge, auf die Du antwortest!

Zitat
url encoding wäre der gesuchte Begriff https://www.urlencoder.org/
URL encoding? Echt jetzt?

War das nicht das Zeug mit %20, %22 und %27?

Bitte LIES die Beiträge, auf die Du antwortest!

Zitat
Abgesehen von möglichen Schreibfehlern - eventuell so? ;)
list SMA_Energymeter Saldo_Wirkleistung
Könntest Du bitte hervorheben, wo genau mein Schreibfehler ist?

Sowohl das was ich geschrieben habe, als auch das was Du hier geschrieben hast, ergibt beides 9eb16c33e814bd3f5ab117e5f4881cc442b38da5281ef5a1797bd9b84e3ed94d als sha256sum (mit abschliessendem LF).  Das sollten wir unbedingt dem CERT melden: immerhin haben wir es gerade geschafft, eine sha256-Kollision zu erzeugen!

Bitte LIES die Beiträge, auf die Du antwortest!

Zitat
Bitte sehr https://forum.fhem.de/index.php?topic=22520.0
??

Was bitte hat das Thema hier mit einem RSS-Feed zu tun?

Gefragt war nach einer URL. Idealerweise ohne komplette Scheunentore aufzumachen.

Bitte LIES... ach, ich geb's auf...

ZitatDie Kernfrage des Threads wurde gelöst, hat der TE zumindest geschrieben. :)
Die dargebotene Lösung ist für die Praxis untauglich, da sie riesige Scheunentore öffnet.

Ich befürchte, das (und die mögliche Tragweite) ist dem TE noch nicht wirklich klar geworden...

Schade, dass hier Security-Basics offensichtlich mit Füssen getreten werden...

ZitatUnd außer, dass Du mit jedem Post etwas mehr rummotzt, hast Du noch nicht gesagt was Du eigentlich willst.
Sag mal, liest Du eigentlich die Beiträge auf die Du antwortest?

Die Frage ist eigentlich einfach: Wie sieht die URL aus, mit der man ein Reading lesen kann ohne die Ausführung von beliebigem Perl-Code zuzulassen. Diese Frage wurde bislang in diesem Thread nicht beantwortet. Stattdessen eröffnest Du im Oberlehrer-Ton Nebenkriegsschauplätze bis hin zu RSS-Feeds... Muss das sein?

Wenn Du die gestellte Frage nicht verstehst, dann überlass es doch jemand anderem, darauf zu antworten...

Und wenn man die Frage zum X-ten mal wiederholt, wird einem auch noch vorgeworfen, dass man ausfallend wird. Den eigenen Oberlehrerhaften Ton bemerkt man dabei selbstverständlich nicht...

Ich stelle fest, dass es ganz offensichtlich nicht möglich ist, ein Reading über eine URL auszulesen ohne riesige Scheunentore aufzureissen...

Schade. Sei's, drum.

frank

statt meckern, besser commandref lesen. ;)
list SMA_Energymeter r:Saldo_Wirkleistung
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

jw9

Zitat von: frank am 02 März 2022, 20:25:48
statt meckern, besser commandref lesen. ;)
list SMA_Energymeter r:Saldo_Wirkleistung
Und als URL? Ohne "cmd="?

Otto123

Du wolltest einen Link zu einem Userinterface, zugegeben ist RSS kein besonders Modernes aber es liefert Dir eine URL mit einem Reading - wenn Du willst als Bild -
Das Dir der Link jetzt nicht gefällt tut mir leid.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frank

Zitat von: jw9 am 02 März 2022, 21:38:38
Und als URL? Ohne "cmd="?
warum schaust du nicht in die developer tools vom browser?
in den tools die netzwerktools anklicken, oder auch die javascript console, und dann in der fhem-cmd-line den befehl deiner wahl ausführen.
da siehst du genau welche url das frontend nutzt. 
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

jw9

Zitat von: Otto123 am 02 März 2022, 23:11:17
Du wolltest einen Link zu einem Userinterface
Nein. Das "Userinterface" hast Du ins Spiel gebracht. Und nicht umsonst habe ich dieses Wort in meiner Antwort auch in Anführungszeichen (%22) gesetzt...

Ich wollte eine URL.

Also etwas wie https://123.45.67.89:1234/fhem?GetReading=Foo.Bar

oder so ähnlich.

Nebenbei bemerkt: der ursprüngliche TO hatte ebenfalls nach einer URL gefragt. Und auch dem ursprünglichen TO hast Du alles mögliche um die Ohren geschmissen, nur nicht das wonach gefragt wurde (nämlich eine URL). Schlussendlich hat der TO selbst seine Lösung gepostet, die allerdings den Nachteil eines riesigen Scheunentores hat.

Danke für die Unterhaltung...

Otto123

Ok vielleicht mal ganz direkt, ohne Schnörkel und Hilfe: Was Du fragst und willst gibt es meines Wissens so nicht.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ak323

Zitat von: Otto123 am 03 März 2022, 09:11:48
Ok vielleicht mal ganz direkt, ohne Schnörkel und Hilfe: Was Du fragst und willst gibt es meines Wissens so nicht.

Nicht Dein Ernst ?
So was Simples soll es bei FHEM nicht geben ????

-> kein Wunder, daß alle mit dem grottigen default UserInterface aus den 1990igern zufrieden sind ....
RaspberryPi 2 im 19" Rack mit 16x2 i2c LCD, FHEM, diverse HomeMatic, 1-Wire (8x DS18B20, 3x DS2408, 2x DS2413, 5x DS2401, DS2423 ATTiny) über DS9490R#, Waterkotte Ai1QE (WWPR) Wärmepumpe über Modbus, WH1080 über Signalduino, 433MHz Funksteckdosen, WiFi RGBWW via Tasmota, ...