Re: Feinstaubwerte von Luftdaten.info
Verfasst: 02.01.2019, 22:19
Kann man das nicht sogar direkt auf der Sensor Konfigurations Seite einstellen?
Heimautomation mit ELV HomeMatic und FHZ Funk-Hauszentralen
https://homematic-forum.de/forum/
Code: Alles auswählen
! Die IP des lokalen Feinstaubsensors
var url = "http://[IP-Adresse]/data.json";
! Abfrage der JSON-API mit system.Exec
! Original
!string stdout;
!string stderr;
!system.Exec("wget -q -O - '"#url#"'",&stderr,&stdout);
!string feinstaub_json = stderr;
! Abfrage der JSON-API mit CUxD
! Neu, verbesserte Variante
dom.GetObject("CUxD.CUX2801006:3.CMD_SETS").State("wget -q --keep-session-cookies --save-cookies cookies.txt -O- '"#url#"'");
dom.GetObject("CUxD.CUX2801006:3.CMD_QUERY_RET").State(1);
string feinstaub_json = dom.GetObject("CUxD.CUX2801006:3.CMD_RETS").State();
WriteLine(feinstaub_json);
! Ausgabe der RAW JSON Nachricht
!WriteLine(feinstaub_json);
! Ermitteln der Laenge
integer Laenge = feinstaub_json.Length();
!WriteLine(Laenge);
! Alte Werte merken
var tmp_pm10_value = dom.GetObject("Feinstaub_PM10").Value();
var tmp_pm25_value = dom.GetObject("Feinstaub_PM2_5").Value();
var tmp_temp_value = dom.GetObject("Feinstaub_Temperatur").Value();
var tmp_hum_value = dom.GetObject("Feinstaub_Feuchte").Value();
! dom.GetObject("Feinstaub_PM10").State(pm10_value);
! dom.GetObject("Feinstaub_PM2_5").State(pm25_value);
! dom.GetObject("Feinstaub_Temperatur").State(temp_value);
! dom.GetObject("Feinstaub_Feuchte").State(hum_value);
if (Laenge > 100)
{
! Test-Ausgabe
!{"software_version": "NRZ-2017-099", "age":"33", "sensordatavalues":[{"value_type":"SDS_P1","value":"6.62"},
!{"value_type":"SDS_P2","value":"5.25"},{"value_type":"temperature","value":"33.80"},
!{"value_type":"humidity","value":"65.70"},{"value_type":"samples","value":"986786"},
!{"value_type":"min_micro","value":"236"},{"value_type":"max_micro","value":"815138"},
!{"value_type":"signal","value":"-88"}]}
integer pm10_position = feinstaub_json.Find("SDS_P1");
integer pm25_position = feinstaub_json.Find("SDS_P2");
integer temp_position = feinstaub_json.Find("temperature");
integer hum_position = feinstaub_json.Find("humidity");
!WriteLine(pm10_position);
!WriteLine(pm25_position);
!WriteLine(temp_position);
!WriteLine(hum_position);
! PM10 hat Position 17
! PM2.5 hat Position 17
! Temperatur hat Position 22
! Feuchte hat Position 19
string pm10_value = feinstaub_json.Substr((pm10_position+17), 5);
string pm25_value = feinstaub_json.Substr((pm25_position+17), 5);
string temp_value = feinstaub_json.Substr((temp_position+22), 5);
string hum_value = feinstaub_json.Substr((hum_position+19), 5);
! Ausgabe des aktuellen Wertes
!WriteLine(pm10_value);
!WriteLine(pm25_value);
!WriteLine(temp_value);
!WriteLine(hum_value);
!Wenn Feinstaub Werte kleiner als 10 sind
integer pm10_zeichen_position = pm10_value.Find('"');
integer pm25_zeichen_position = pm25_value.Find('"');
integer temp_zeichen_position = temp_value.Find('"');
integer hum_zeichen_position = hum_value.Find('"');
!WriteLine(pm10_zeichen_position);
!WriteLine(pm25_zeichen_position);
!WriteLine(temp_zeichen_position);
!WriteLine(hum_zeichen_position);
if (pm10_zeichen_position==4) {pm10_value = pm10_value.Substr((pm10_zeichen_position)-4, 4);}
if (pm25_zeichen_position==4) {pm25_value = pm25_value.Substr((pm25_zeichen_position)-4, 4);}
if (temp_zeichen_position==4) {temp_value = temp_value.Substr((temp_zeichen_position)-4, 4);}
if (hum_zeichen_position==4) {hum_value = hum_value.Substr((hum_zeichen_position)-4, 4);}
! Ausgabe der geparsten Werte
!WriteLine(pm10_value);
!WriteLine(pm25_value);
!WriteLine(temp_value);
!WriteLine(hum_value);
!Feinstaubwert in die Variable eintragen
dom.GetObject("Feinstaub_PM10").State(pm10_value);
dom.GetObject("Feinstaub_PM2_5").State(pm25_value);
dom.GetObject("Feinstaub_Temperatur").State(temp_value);
dom.GetObject("Feinstaub_Feuchte").State(hum_value);
}
else
{
!alte Feinstaubwerte in die Variable eintragen
dom.GetObject("Feinstaub_PM10").State(tmp_pm10_value);
dom.GetObject("Feinstaub_PM2_5").State(tmp_pm25_value);
dom.GetObject("Feinstaub_Temperatur").State(tmp_temp_value);
dom.GetObject("Feinstaub_Feuchte").State(tmp_hum_value);
}