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
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
DeeSPe war schneller, dann packe ich nur noch den Link zur Commandref hinzu:
https://fhem.de/commandref_modular_DE.html#JsonList2 (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)
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
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
Was mir jetzt noch unklar ist: Du bekommst doch so immer den kompletten html Text zurück? Du wolltest doch aber bloß JSON Text?
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
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 (https://wiki.fhem.de/wiki/CsrfToken-HowTo) 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