alexreinert/debmatic

JSON-API: Access denied nach erfolgreichem Login

Closed 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?!

Bildschirmfoto 2023-08-17 um 15 00 03

Ändere ich was an dem Parameternamen, kommt sofort der Fehler 200.

Hardcopy vom Text oben (Unterstriche zeigt der dargestellte Text anscheinend nicht):
Bildschirmfoto 2023-08-17 um 15 04 36

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.