Seite 1 von 1

Variable per JSON einlesen und auf Plausibilität überprüfen

Verfasst: 03.05.2019, 13:15
von nuiler
Ich möchte eine Variable per JSON befüllen.

Anbei die JSON-Ausgabe der Seite

Code: Alles auswählen

{"modultyp":"PULSECOUNTER","vars":[{"name":"0","homematic_name":"w_counter_ip","desc":"ip des pulsecounters","type":"string","unit":"","value":"192.168.178.56"},{"name":"11","homematic_name":"w_counter_1","desc":"w_counter_1","type":"number","unit":"KWh","value":0.00},{"name":"12","homematic_name":"w_power_1","desc":"w_power_1","type":"number","unit":"KW","value":0.001},{"name":"13","homematic_name":"w_counter_2","desc":"w_counter_2","type":"number","unit":"KWh","value":0.00},{"name":"14","homematic_name":"w_power_2","desc":"w_power_2","type":"number","unit":"KW","value":0.001},{"name":"15","homematic_name":"w_counter_3","desc":"w_counter_3","type":"number","unit":"KWh","value":0.00},{"name":"16","homematic_name":"w_power_3","desc":"w_power_3","type":"number","unit":"KW","value":0.006},{"name":"17","homematic_name":"w_counter_4","desc":"w_counter_4","type":"number","unit":"m3","value":[b]1.92[/b]},{"name":"18","homematic_name":"w_power_4","desc":"w_power_4","type":"number","unit":"m3/h","value":0.000}],"Systeminfo":{"MAC-Adresse":"5c:cf:7f:c5:f5:e8","Homematic_CCU_ip":"192.168.178.55","WLAN_ssid":"www.nuiler.de","WLAN_Signal_dBm":-46,"sec_seit_reset":180739,"zeitpunkt":"2019.05.08/12:10:28","firmware":"wiffi_counter_30"}}

Anbei mein bisheriger Script, den ich aus verschieden zusammenkopiert. Die Variablen sind bisher noch kunterbunt, da ich bisher och teste.

Code: Alles auswählen

var temp = dom.GetObject('w_counter_4').Value();
WriteLine(temp);

var url = "http://192.168.178.56/?json:";

!hier ist die Abfrage mit system.Exec
        string stdout;
        string stderr;
        system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
        !WriteLine(stdout);
        string wetter_xml = stdout;
        WriteLine(wetter_xml);

integer pm10_position = wetter_xml.Find("w_counter_4");
WriteLine(pm10_position);
string pm10_value = wetter_xml.Substr((pm10_position+70), 4);
WriteLine(pm10_value);
Das Problem ist wenn sich der Wert nun in der Anzahl der Stellen ändert wird ja dieser abgeschnitten.
Kann ich auch filtern zwischen value + }


Kann ich später diese Variable auf Plausibilität überprüfen, d.h. sie darf sich nur einen bestimmten Wert ändern?

Re: Variable per JSON einlesen und auf Plausibilität überprüfen

Verfasst: 16.08.2019, 16:04
von Nucom AG
Ich würde dir Empfehlen, einen Regex zu verwenden um es zu extrahieren. Falls das zu komplizier ist, würde ich den String splitten.

Wenn du die Zeile beim "," Splittest kriegst du ein Array:

[0]{"name":"17"
[1]"homematic_name":"w_counter_4"
[2]"desc":"w_counter_4"
[3]"type":"number"
[4]"unit":"m3"
[5]"value":1.92}

So wäre dein Arraywert immer im [5].

Dann müsste man natürlich den Wert noch durch ein ":" splitten, und die Abschliessende Klammer entfernen }

Code: Alles auswählen

!CODE nicht getestet
string json = '{"name":"17","homematic_name":"w_counter_4","desc":"w_counter_4","type":"number","unit":"m3","value":1.92}';
string valueraw = json.StrValueByIndex(",", 5) !Das 5. Element aus dem JSON string, wenn es durch , getrennt ist
string valueraw = valueraw.StrValueByIndex(":", 1") !Das Element zwsichen value, und Wert aufteilen., damit der Wert mit abschl. Klammer bleibt
string value = valueraw.Replace("}", "") !Abschliessende Klammer durch nichts ersetzen
MfG

Fabian

Re: Variable per JSON einlesen und auf Plausibilität überprüfen

Verfasst: 16.08.2019, 17:01
von Black
auf einer Raspberrymatic gibt auch JQ direkt als JSON parser... da kannman sich die Umwege über das StringGedöns sparen

Black