JSON-API: Access denied nach erfolgreichem Login
hubertusschauerte opened this issue · 6 comments
Hallo zusammen,
ich versuche im Augenblick über die JSON-API auf die Debmatic auf einem Raspberry Pi 3b, 1GB von einer anderen Linuxmaschinemit mit folgendem Bash-Script
session_id=$(curl -s -X POST http://rpi3b1gb/api/homematic.cgi -d '{"method":"Session.login", "params": {"username":"Admin","password":"XyzXyz"}}' | python3 -c "import sys, json; print(json.load(sys.stdin)['result'])")
printf "\n\nsession_id = $session_id\n\n"
sleep 1
curl -X POST http://rpi3b1gb/api/homematic.cgi -d '{"method":"Room.getAll", "params": {"session_id":"$session_id"}}'
sleep 1
curl -s -X POST http://rpi3b1gb/api/homematic.cgi -d '{"method":"Session.logout", "params": {"session_id":"$session_id"}}'
printf "\n\nsession_id = $session_id\n\n"
exit
zuzugreifen. Die Privilegstufe der Funktion "Room.getAll" ist "GUEST", eingeloggt bin ich als "Admin". Trotzdem erhalte ich wie bei allen anderen Funktionen folgendes Ergebnis:
session_id = K09EriiE4t
{
"version": "1.1",
"result": null,
"error": {
"name": "JSONRPCError",
"code": 400,
"message": "access denied ("GUEST" needed 0)"
}
}
{"version": "1.1","result": true,"error": null}
session_id = K09EriiE4t
Ich vermute, dass das Problem vor dem Monitor sitzt, finde aber im Augenblick keinen weiteren Hebel mehr.
Mit freundlichen Grüßen
Dr. Hubertus Schauerte
Der Parameter lautet session_id und nicht nur session_id.
Und bevor die Frage kommt, warum man darauf kommt, dass mit führendem Underscore zu machen: Das ist Teil der CCU Software von eQ-3 und die Wege in Leer sind manchmal leider nicht nachvollziehbar.
Hallo Herr Reinert,
Danke für die prompte Antwort. Mit dem (GET-) Aufruf "http://rpi3b1gb/api/homematic.cgi" bekomme ich eine Liste mit den Interfacefunktionen wobei hier der Parameter "session_id" mit führendem und nachfolgendem Underscore versehen ist. Das ist in dem Bashscript genauso, ansonsten würde vermutlich der login und der Logout auch nicht funktionieren. Beim Kopieren und Einfügen hier bei GitHub sind die aber verlorengegangene?!
Ändere ich was an dem Parameternamen, kommt sofort der Fehler 200.
Hardcopy vom Text oben (Unterstriche zeigt der dargestellte Text anscheinend nicht):
Unterstriche zeigt der Text bei GitHub offensichtlich nicht :-(
Mit freundlichen Grüßen
Dr. Hubertus Schauerte
Ich würde davon abraten hier Passwörter zu veröffentlichen 😉
Danke für den Hinweis, typischer Copy & Paste, war in Version 1 nicht so -:(
In dem Fall habe ich keine direkte Idee. Die Anfrage dürfte im Homematic Forum insgesamt besser aufgehoben sein, das ist nichts debmatic spezifisches, die JSON Schnittstelle ist 1:1 identisch zu der in der CCU3.
Fehler hat sich geklärt, die Zwischenvariable "$session_id" wurde durch falsches Quoting im Skript nicht aufgelöst, sondern der String "$session_id" wurde übergeben. So funktioniert der Aufruf jetzt:
curl -X POST http://rpi3b1gb/api/homematic.cgi -d '{"method":"Room.getAll", "params": {"session_id":"'$session_id'"}}'
( " ' $session_id ' " }}')
in der "gestreckten" Fassung leichter zu erkennen.