Ich verwende monetan HTTPMOD um ein entsprechenden GET Aufruf zu machen -- werde aus der Duku nicht ganz schlau, wenn es auch um ein PUT geht.
Folgendes möchte ich gerne mit HTTPMOD umsetzten :
GET: curl --header 'Auth-Token: xxxxxx' http://../v2/configurations/EM_OperatingMode
PUT: curl -X PUT --data 'EM_OperatingMode=1' --header 'xxxxx' http://..../v2/configurations
Als Ergebnis bekomme ich ein {"EM_OperatingMode":"1"}
nun würde ich dies gerne mit einen HTTP MOD machen:
define Eco8_Mode HTTPMOD none 0
attr Eco8_Mode httpVersion 1.1
attr Eco8_Mode enableControlSet 1
attr Eco8_Mode extractAllJSON 1
attr Eco8_Mode event-on-change-reading .*
attr Eco8_Mode get01Header01 Auth-Token: ..................
attr Eco8_Mode get01Name EM_OperatingMode
attr Eco8_Mode getURL http://sb-56902:80/api/v2/configurations/EM_OperatingMode
attr Eco8_Mode requestHeader01 Auth-Token: 720036d7-eb9f-4aea-8913-ec281a6b99dd
attr Eco8_Mode showBody 1
attr Eco8_Mode showError 1
attr Eco8_Mode timeout 15
attr Eco8_Mode verbose 2
funktioniert wie erwartet !!
Nun der PUT Teil :
define Eco8_ModeSet HTTPMOD none 0
attr Eco8_ModeSet httpVersion 1.1
attr Eco8_ModeSet enableControlSet 0
attr Eco8_ModeSet extractAllJSON 1
attr Eco8_ModeSet event-on-change-reading .*
attr Eco8_ModeSet set01Method PUT
attr Eco8_ModeSet set01Header01 Auth-Token: .................
attr Eco8_ModeSet set01Name EM_OperatingMode
attr Eco8_ModeSet set01Data 'EM_OperatingMode=$val'
attr Eco8_ModeSet set01URL http://......./api/v2/configurations
attr Eco8_ModeSet showBody 1
attr Eco8_ModeSet showError 1
attr Eco8_ModeSet timeout 15
attr Eco8_ModeSet verbose 5
wenn ich nun dies Aufrude mit set Eco8_ModeSet EM_OperatingMode 2
so sehe ich im log folgendes :
2023.02.27 13:50:03 5: Eco8_ModeSet: set called with EM_OperatingMode 2
2023.02.27 13:50:03 5: Eco8_ModeSet: set found option EM_OperatingMode in attribute set01Name
2023.02.27 13:50:03 4: Eco8_ModeSet: set will now set EM_OperatingMode -> 2
2023.02.27 13:50:03 5: Eco8_ModeSet: AddToQueue adds type set01 to URL http://........./api/v2/configurations, data 'EM_OperatingMode=$val', header Auth-Token: .........., retry 0, initial queue len: 0
2023.02.27 13:50:03 5: Eco8_ModeSet: HandleSendQueue called from AddToSendQueue, qlen = 1
2023.02.27 13:50:03 5: Eco8_ModeSet: HandleSendQueue - call with HTTP METHOD: PUT
2023.02.27 13:50:03 4: Eco8_ModeSet: HandleSendQueue sends set01 with timeout 15 to http://.....api/v2/configurations,
data: 'EM_OperatingMode=2',
header: Auth-Token: ........
2023.02.27 13:50:03 5: Eco8_ModeSet: ReadCallback called from __ANON__
2023.02.27 13:50:03 4: Eco8_ModeSet: Read callback: request type was set01 retry 0,
header: HTTP/1.1 403 Forbidden
Date: Mon, 27 Feb 2023 12:50:03 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: close
Content-Encoding: gzip, body length 25
2023.02.27 13:50:03 5: Eco8_ModeSet: Read callback: body
{"error":"403 Forbidden"}
2023.02.27 13:50:03 4: Eco8_ModeSet: BodyDecode found no charset header (bodyDecode was set to auto)
2023.02.27 13:50:03 4: Eco8_ModeSet: extracted JSON values to internal
2023.02.27 13:50:03 5: Eco8_ModeSet: GetCookies is looking for Cookies
2023.02.27 13:50:03 5: Eco8_ModeSet: ExtractSid called, context set, num 01
2023.02.27 13:50:03 4: Eco8_ModeSet: checking for redirects, code=403, ignore=0
2023.02.27 13:50:03 4: Eco8_ModeSet: no redirects to handle
2023.02.27 13:50:03 5: Eco8_ModeSet: Read callback sets LAST_REQUEST to set01
2023.02.27 13:50:03 5: Eco8_ModeSet: CheckAuth decided no authentication required
geht nicht !!! Keine Ahnung ob dies jetzt ein vergleichbarer Aufruf wie mein curl war und wieso es nicht funktioniert ?
Puuuuh, ich sehe auf den ersten Blick nicht, was schief laufen könnte. Was für Headers sendet denn curl ("--verbose") mit? Hast du da mal geschaut, ob da eine etwas andere Anfrage rausgeht?
wie in einem anderen Thread zum gleichen Thema schon beschrieben: man könnte das Ganze auch einfach mit FHEM Bordmitteln aus den Httputils lösen, anstatt sich den Krampf mit HTTPMOD anzutun...