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

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
nuiler
Beiträge: 207
Registriert: 15.04.2012, 11:07
Wohnort: Ostalbkreis / Deutschland

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

Beitrag von nuiler » 03.05.2019, 13:15

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?
Zuletzt geändert von alchy am 21.08.2019, 22:45, insgesamt 3-mal geändert.
Grund: Code in Codetags posten
www.nuiler.de
Raspberrymatic 3.57.4.20210320 rpi3

Nucom AG
Beiträge: 33
Registriert: 15.04.2019, 14:52
Hat sich bedankt: 4 Mal
Danksagung erhalten: 4 Mal

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

Beitrag von Nucom AG » 16.08.2019, 16:04

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

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

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

Beitrag von Black » 16.08.2019, 17:01

auf einer Raspberrymatic gibt auch JQ direkt als JSON parser... da kannman sich die Umwege über das StringGedöns sparen

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“