Hallo,
ich versuche an eine API per HTTPMOD Daten zu senden.
Die API kann ich er CURL ansprechen
curl -X 'POST' \
'https://demo.grocy.info/api/chores/1/execute' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"tracked_time": "2021-08-29T19:41:39.824Z",
"done_by": 0
}'
Kann mir vielleicht jemand sagen, wie ich das mit HTTPMOD machen kann?
Gruß
guenni
Man muss nicht jeden URL-Aufruf mit HTTPMOD machen, oft reichen dafür viel einfachere in FHEM vorhandene Lösungen, zum Beispiel GetFileFromURL() oder HttpUtils_NonblockingGet()
Danke,
schaue ich mir mal an. Wenn Fragen sind melde ich mich.
Ich habe mir mal GetFileFromURL() oder HttpUtils_NonblockingGet() angeschaut.
Leider bin ich ein totaler Anfänger in dem Bereich. Bei HTTPMOD habe ich zumindest ein GET hinbekommen.
Mit POST habe ich meine Probleme.
Hat vielleicht noch jemand einen Tipp?
my $param = {
url => "https://demo.grocy.info/api/chores/1/execute",
method => "POST",
timeout => 5,
callback => sub() {},
header => "Content-Type: application/json"."\r\n"."accept: application/json",
data => { "tracked_time": "2021-08-29T19:41:39.824Z", "done_by": 0 }
};
HttpUtils_NonblockingGet($param);
Hallo Zusammen,
Ich schnappe mir mal diesen Threat, da ich vor einem ähnlichen Problem stehe. Ich möchte zwischen zwei entfernten FHEM Installationen, einen Dummy schalten. Hierfür habe ich eine API Schnittstelle via reverse Proxy usw. gebaut. Das Ganze funktioniert einwandfrei, ich kann nun über eine URL in der u.g. Form einen Dummy aus dem Internet heraus schalten.
https://user:password@api.fhemurl.de/fhem?cmd=set%20api_switch%20on&XHR=1 (https://user:password@api.fhemurl.de/fhem?cmd=set%20api_switch%20on&XHR=1)
Ich scheitere nun am Syntax für einen entsprechenden HttpUtils_NonblockingGet Aufruf aus FHEM.
api_dummy:.* {
{ HttpUtils_NonblockingGet ({ url=> "https://user:password@api.fhemurl.de/fhem?cmd=set%20api_switch%20on&XHR=1"})}
}
Fhem stört sich hier an dem @ zwischen url und Passwort
Ein weiterer Versuch:
api_dummy:.*
my $param = {
url => "api.fhemurl.de/fhem",
user => "user",
pwd => "password,
method => "GET",
timeout => 5,
callback => sub() {},
header => "Content-Type: application/json"."\r\n"."accept: application/json",
data => { "?cmd=set%20api_switch%20on&XHR=1": 0 }
};
HttpUtils_NonblockingGet($param);
bringt zwar keine Fehlermeldung, funktioniert aber auch nicht. :)
Ich würde mich über einen kleinen "Schubs" in die richtige Richtung freuen.
Ich scheitere nun am Syntax für einen entsprechenden HttpUtils_NonblockingGet Aufruf aus FHEM.
api_dummy:.* {
{ HttpUtils_NonblockingGet ({ url=> "https://user:password@api.fhemurl.de/fhem?cmd=set%20api_switch%20on&XHR=1"})}
}
Fhem stört sich hier an dem @ zwischen url und Passwort
Entweder die Hochkommata ersetzen:
api_dummy:.* {
{ HttpUtils_NonblockingGet ({ url=> 'https://user:password@api.fhemurl.de/fhem?cmd=set%20api_switch%20on&XHR=1'})}
}
Oder das @ escapen
api_dummy:.* {
{ HttpUtils_NonblockingGet ({ url=> "https://user:password\@api.fhemurl.de/fhem?cmd=set%20api_switch%20on&XHR=1"})}
}
Vielen Dank :D geht wunderbar. Hab mir schon gedacht, das es nur eine Kleinigkeit sein kann.
Noch eine Frage, wie würde ich denn in den API Aufruf eine Variable einbauen?
api_dummy:.* {
my $z1 = urlEncode(ReadingsVal ("api_dummy","state",""));
{ HttpUtils_NonblockingGet ({ url=> 'https://user:password@api.fhemurl.de/fhem?cmd=set%20api_switch%20'.$z1'&XHR=1'})}
}
Zitat von: Borkk am 15 Dezember 2021, 08:02:47
Noch eine Frage, wie würde ich denn in den API Aufruf eine Variable einbauen?
Ich kaufen ein Punkt ;)
Für den String concat brauchst Du davor und danach einen Punkt.
HttpUtils_NonblockingGet ({ url=> 'https://user:password@api.fhemurl.de/fhem?cmd=set%20api_switch%20'.$z1.'&XHR=1'})
Manchmal sind es die kleinen Dinge die einen glücklich machen 8) :D
Danke !!!
Der Vollständigkeit halber für alle die hier mitlesen. Der korrekte Aufruf sieht dann wie folgt aus.
api_dummy:.* {
my $z1 = urlEncode(Value ("api_dummy"));
{ HttpUtils_NonblockingGet ({ url=> 'https://user:password@api.fhemurl.de/fhem?cmd=set%20api_switch%20'.$z1.'&XHR=1'})}
}
nochmal Danke an JudgeDredd für die schnelle Hilfe.