Json aus HTTP Request verarbeiten

Hallo zusammen,
ich brauche mal Unterstützung in Sachen Lua.
Ich kann per API auf meine PV-Anlage und möchte die aktuelle Leistung nutzen um Rückschluss auf den Dämmerungsstatus ziehen.

mein Script


--[[
%% properties
%% globals
--]]

local http = net.HTTPClient()

function call(url)
  http:request(url,
    {
      options = {method = 'GET' },
      success = function(response)
        fibaro:debug(response.data)
        --fibaro:debug("\n\n")
              end,
      error = function(errorcode) fibaro:debug("error=" .. errorcode) end
    })
end
call("http://192.168.1.163/R3EMSAPP_REAL.ems?file=ESSRealtimeStatus.json")

bringt mir im Debug folgendes Ergebnis:

[DEBUG] 22:37:08: {
[DEBUG] 22:37:08: “ESSRealtimeStatus”:{
[DEBUG] 22:37:08: “ColecTm”:“20180807223706”,
[DEBUG] 22:37:08: “PowerOutletPw”:“0”,
[DEBUG] 22:37:08: “GridPw”:0.06,
[DEBUG] 22:37:08: “UnitPrice”:0.00,
[DEBUG] 22:37:08: “ConsPw”:0.76,
[DEBUG] 22:37:08: “BtSoc”:57,
[DEBUG] 22:37:08: “PcsPw”:701.00,
[DEBUG] 22:37:08: “AbsPcsPw”:0.70,
[DEBUG] 22:37:08: “PvPw”:0.00,
[DEBUG] 22:37:08: “GridStusCd”:“0”,
[DEBUG] 22:37:08: “BtStusCd”:“0”,
[DEBUG] 22:37:08: “BtPw”:0.75,
[DEBUG] 22:37:08: “OperStusCd”:“0”,
[DEBUG] 22:37:08: “EmsOpMode”:“0”,
[DEBUG] 22:37:08: “RankPer”:0,
[DEBUG] 22:37:08: “ErrorCnt”:0
[DEBUG] 22:37:08: }
[DEBUG] 22:37:08: }

wie extrahiere ich jetzt hieraus jetzt Werte aus den einzelnen Variablen.
Kann mir hier bitte jemand helfen - komm an meine Grenzen… :frowning:

Danke

Gruß
forsty

Hallo,

versuch mal nachdem du

fibaro:debug(response.data)

machst das hier:

result_json = json.decode(response.data);
for key, value in pairs(result_json) do
fibaro:debug(key);
fibaro:debug(value);
end

das hier könnte auch klappen bin mir aber gerade nicht hundert Prozent sicher:

result_json = json.decode(response.data);
fibaro:debug(result_json->ColecTm);

sag aber so oder so bescheid ob es klappt damit der nächste die richtige Antwort hat

Hallo Nico,
danke für Deine Untersützung.
leider bringt keines den gesünchten Erfolg.

Variante 1
[DEBUG] 20:13:40: ESSRealtimeStatus
[DEBUG] 20:13:40: table: 0x9a44518

Variante 2
[DEBUG] 20:15:30: [1;31m2018-08-08 20:15:30.113727 [ fatal] Unknown exception: /opt/fibaro/scenes/89.lua:21: unexpected symbol near ‘>’

Wenn Du noch eine Idee hast - gerne her damit…

Hallo,

gerade erst gesehen das alles unterhalb von ESSRealtimeStatus ist, das lässt sich hier mega schlecht erkennen. Kannst du die komplette Json Datei mal bei https://pastebin.com/ hochladen und hier posten dann kann man ich das testen ;).

Versuch aber erst ob du mit

result_json = json.decode(response.data);
fibaro:debug(result_json->ESSRealtimeStatus->ColecTm);

auf die werte zugreifen kannst :wink:

guck mal hier:
https://pastebin.com/49eSD4tc

Es gibt noch ein Problem:
[DEBUG] 20:41:42: [1;31m2018-08-08 20:41:42.365262 [ fatal] Unknown exception: /opt/fibaro/scenes/89.lua:20: unexpected symbol near ‘>’

Hey,

geht:

--[[
%% properties
%% events
%% globals
--]]

your_json = '{ "ESSRealtimeStatus":{ "ColecTm":"20180808204157", "PowerOutletPw":"0","GridPw":0.05,"UnitPrice":0.00,"ConsPw":1.06,"BtSoc":83,"PcsPw":1013.00,"AbsPcsPw":1.01,"PvPw":0.10,"GridStusCd":"0","BtStusCd":"0","BtPw":1.01,"OperStusCd":"0","EmsOpMode":"0","RankPer":0,"ErrorCnt":0}}';

fibaro:debug(your_json);

result_json = json.decode(your_json);
for key, value in pairs(result_json['ESSRealtimeStatus']) do
  	fibaro:debug('Key: '..key..' Value: '..value..'')

end

Hi Nico,
perfekt!!!
Vielen, vielen Dank für Deine Hilfe!

Hiermit komme ich weiter! Ich kann jetzt auf Werte und Wettersensor der PV zurückgreifen und daran einige Abhängigkeiten festmachen…
Es spricht ja nichts da gegen, sich die Variablen minütlich neu zu laden…

Coole Sachen - Danke nochmal.

Gruß