[gelöst] Liste aller Geräte als Text/JSON von extern abfragen

Begonnen von drhirn, 13 Januar 2020, 15:09:45

Vorheriges Thema - Nächstes Thema

drhirn

Hallo,

ich würde mir gerne von FHEM eine Liste aller vorhandenen Geräte in einem Raum als JSON oder Text ausgeben lassen. Und zwar so, dass ich sie auf einem anderen Server verarbeiten kann. Der zweite Server müsste diese Anfrage also via wget/curl/etc. iniitieren und die Liste zurück bekommen. Habt ihr eine Idee, wie ich das lösen könnte?

Vielen Dank!
Stefan


DeeSPe

Das geht z.B. per jsonlist2 und http:
http://192.168.1.3:8083/fhem?cmd=jsonlist2%20.*&fwcsrf=csrf_0000000000000&XHR=1

Die 192.168.1.3 bitte mit eigener IP Adresse und die 0000000000000 mit eigenem CSRF Token ersetzen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

viegener

DeeSPe war schneller, dann packe ich nur noch den Link zur Commandref hinzu:

https://fhem.de/commandref_modular_DE.html#JsonList2

JsonList2 ist per http zugreifbar und nimmt auch eine dev spec (also z.B. einen Filter für einen Raum)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Otto123

Hi,
und ich pack noch das Kümmern um csrf Token dazu  8)
Du bekommst die Liste exakt wie im Web Interface:
https://github.com/heinz-otto/fhemcl
wget -O fhemcl.sh https://raw.githubusercontent.com/heinz-otto/fhemcl/master/fhemcl.sh
bash fhemcl.sh "http://192.168.1.3:8083" "jsonlist2 global"


Falls der andere Server ein anderes OS hat: geht auch mit Perl oder Powershell.

Gruß Otto
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

drhirn

#4
Ahhh, sehr gut! Genau, was ich brauche. Danke euch!

edit: Und falls es jemand nach mir braucht, hier eine komplette URL, wenn man nur ein bestimmtes Attribut von Geräten in einem bestimmten Raum braucht: https://192.168.1.1:8083/fhem?cmd=jsonlist2%20room=Raumname%20AttributName&fwcsrf=csrf_0000000000000&XHR=1

Otto123

Was mir jetzt noch unklar ist: Du bekommst doch so immer den kompletten html Text zurück? Du wolltest doch aber bloß JSON Text?
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

drhirn

#6
Ja. Das macht das &XHR=1. Oder hab ich dich jetzt falsch verstanden?

wget 'http://url:8083/fhem?cmd=jsonlist2%20room=Raum%20AttributName&fwcsrf=csrf_0000000000000&XHR=1' -O test.json

Otto123

#7
Ok da hast Du Recht. Wieder was gelernt :)

Edit:
Für die, die sich um den csrf_Token nicht kümmern wollen, habe ich mal noch die Ermittlung des Tokens mit wget gescriptet:
hosturl="http://localhost:8083"
token=$(wget -qO - --server-response "$hosturl/fhem?XHR=1" 2>&1 | awk '/X-FHEM-csrfToken/{print $2}')

Dann ginge das Beispiel von drhirn "ganz leise" so:
wget "$hosturl/fhem?cmd=jsonlist2%20room=Raum%20AttributName&fwcsrf=$token&XHR=1" -qO test.json

Gruß Otto
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