Seite 1 von 1
#PB_HTTP_Response auswerten
Verfasst: 26.12.2022 12:58
von Helmut_number_one
Ich habe ein Tasmota Relais bzw mehrere Tasmota Relais, das ich in einem PB Programm ansteuere, nur möchte ich, dass beim ersten Aufruf der Zustand des Relais erkannt wird.
Ich erhalte mit
Code: Alles auswählen
HttpRequest = HTTPRequest(#PB_HTTP_Get, URL$ +"/cm?cmnd=power4%20?)")
; Debug "StatusCode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
Debug "Response: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
dieses im Debugfenster
Ich nehme an es ist JSON .
Wie erhalte ich als Variable den Wert von "OFF" oder "ON" der nach dem Doppelpunkt kommt.
Ich habe einiges über JSON decodieren in der Hilfe gelesen, muß oder ist Das sehr aufwendig....?
Oder ist es doch einfacher
Re: #PB_HTTP_Response auswerten
Verfasst: 26.12.2022 14:05
von Sicro
Code: Alles auswählen
Define jsonCode$
Define json, jsonMember
jsonCode$ = ~"{\"POWER4\":\"OFF\"}"
json = ParseJSON(#PB_Any, jsonCode$)
If json
jsonMember = GetJSONMember(JSONValue(json), "POWER4")
If jsonMember
Debug GetJSONString(jsonMember)
EndIf
FreeJSON(json)
Else
Debug JSONErrorMessage()
EndIf
Re: #PB_HTTP_Response auswerten
Verfasst: 26.12.2022 14:06
von mk-soft
Sieht nach JSON aus
Code: Alles auswählen
Define sInput.s, Member, sValue.s
sInput = ~"{\"POWER4\":\"OFF\"}"
If ParseJSON(0, sInput)
Member = GetJSONMember(JSONValue(0), "POWER4")
If Member
sValue = GetJSONString(Member)
Debug sValue
EndIf
FreeJSON(0)
EndIf
Mit JSON tue ich mich auch noch schwer
Re: #PB_HTTP_Response auswerten
Verfasst: 26.12.2022 19:33
von Helmut_number_one
Prima, das funktioniert.
Wenn ich es in die Open Windows Routine packe, wird es dann mit Aufrufen der Event Routine in Ruhe gelassen oder wird die JSON Abfrage neu gestartet?
Das stelle ich jedenfalls fest, oder mache ich was in der Eventschleife falsch, dort frage ich
zB die ButtonImageID mit
Code: Alles auswählen
Select EventType()
Case #PB_EventType_LeftClick
SetGadgetAttribute(#Kind,#PB_Button_PressedImage, ImageID(#Imag_1))
Kind = GetGadgetState(#Kind)
If Kind =0
; Debug URL$+"cm?cmnd=power4%20off"
HttpRequest = HTTPRequest(#PB_HTTP_Get, URL$ +"/cm?cmnd=power4%20off")
; Debug "StatusCode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
;Debug "Response: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
EndIf
If Kind =1
HttpRequest = HTTPRequest(#PB_HTTP_Get, URL$+"/cm?cmnd=power4%20on")
; Debug "StatusCode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
; Debug "Response: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
EndIf
;MessageRequester("Information", "Button Image Name : #Kind")
EndSelect
Re: #PB_HTTP_Response auswerten
Verfasst: 27.12.2022 12:59
von Helmut_number_one
@sicro und @mk-soft
Bei den Shelly Geräten, Shelly ADD ON
Code: Alles auswählen
{
"id": 1,
"params": {
"humidity:100": {},
"temperature:100": {}
}
}
usw sehr nützlicher Code. Danke dafür.
Kann man(n) da gut gebrauchen.
JSON Antworten sind immer öfter zu finden.
Re: #PB_HTTP_Response auswerten
Verfasst: 28.12.2022 11:51
von Sicro
Helmut_number_one hat geschrieben: 26.12.2022 19:33
Wenn ich es in die Open Windows Routine packe, wird es dann mit Aufrufen der Event Routine in Ruhe gelassen oder wird die JSON Abfrage neu gestartet?
Das stelle ich jedenfalls fest, oder mache ich was in der Eventschleife falsch, dort frage ich
zB die ButtonImageID mit
Code: Alles auswählen
Select EventType()
Case #PB_EventType_LeftClick
SetGadgetAttribute(#Kind,#PB_Button_PressedImage, ImageID(#Imag_1))
...
EndSelect
Prüfst du vor
EventType() das betreffende Gadget mit
EventGadget()?
Das
SetGadgetAttribute() brauchst du nur einmal aufrufen, nachdem du das Gadget erstellt hast.