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

Code: Alles auswählen

{"POWER4":"OFF"} 
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": {
    "temperature:101": {}
  }
}

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.