Feinstaubwerte von Luftdaten.info
Moderator: Co-Administratoren
Re: Feinstaubwerte von Luftdaten.info
Ja, über die Option 'An eigene API senden'. Es entstehen hier aber wegen Serverauslastung gelegentlich Datenlücken. Daher wäre das lokale Abgreifen der Werte hierfür besser...
-
- Beiträge: 6
- Registriert: 04.01.2019, 15:54
Re: Feinstaubwerte von Luftdaten.info
Hallo capitaen_z,
da der Feinstaubsensor ab und an nicht erreichbar ist, hatte ich dieses Problem ebenfalls
Ich habe es dann so gelöst, dass ich die Länge des eingelesenen Strings ermittle.
integer Laenge = feinstaub_json.Length();
Ist der String größer als 100 zeichen, so lese ich die neuen Daten aus, ansonsten "behalte" ich die alten Werte.
Damit läuft das Skript stabil.
da der Feinstaubsensor ab und an nicht erreichbar ist, hatte ich dieses Problem ebenfalls
Ich habe es dann so gelöst, dass ich die Länge des eingelesenen Strings ermittle.
integer Laenge = feinstaub_json.Length();
Ist der String größer als 100 zeichen, so lese ich die neuen Daten aus, ansonsten "behalte" ich die alten Werte.
Damit läuft das Skript stabil.
-
- Beiträge: 6
- Registriert: 04.01.2019, 15:54
Re: Feinstaubwerte von Luftdaten.info
Hallo netspider,
ich habe dein Skript etwas erweitert.
Die Abfrage habe ich über das CUxD realisiert, und dann die Abfrage auf die Länge.
Zusätzlich merke ich mir die "alten" Werte, die dann verwendet werden wenn die Länge kleiner 100 ist.
ich habe dein Skript etwas erweitert.
Die Abfrage habe ich über das CUxD realisiert, und dann die Abfrage auf die Länge.
Zusätzlich merke ich mir die "alten" Werte, die dann verwendet werden wenn die Länge kleiner 100 ist.
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);
}
-
- Beiträge: 130
- Registriert: 05.07.2015, 19:34
- Wohnort: Hamburg
- Danksagung erhalten: 3 Mal
Re: Feinstaubwerte von Luftdaten.info
Danke für dein Script. Ich werde es vielleicht am Wochenende mal testen.
Man kann ja relativ leicht herausfinden ob die CCU/Raspberrymatic hängt, indem man den Sensor deaktiviert und das Script startet.
Zusätzlich habe ich mal gefragt, ob vielleicht eine HM-Erweiterung in der Firmware eingebaut werden könnte...
So ähnlich wie es beim Projekt EasyESP realisiert wurde.
VG
Leif
Man kann ja relativ leicht herausfinden ob die CCU/Raspberrymatic hängt, indem man den Sensor deaktiviert und das Script startet.
Zusätzlich habe ich mal gefragt, ob vielleicht eine HM-Erweiterung in der Firmware eingebaut werden könnte...
So ähnlich wie es beim Projekt EasyESP realisiert wurde.
VG
Leif
- Hoppla
- Beiträge: 341
- Registriert: 29.12.2018, 19:39
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Leipzsch
- Hat sich bedankt: 35 Mal
- Danksagung erhalten: 12 Mal
Re: Feinstaubwerte von Luftdaten.info
Hallo
Ich hab den Sensor auch schon über 1 Jahr laufen, hier bin ich aber absolute Anfängerin.
Ich suche bereits seit Tagen eine Anleitung, wie man derartige Skripte einbindet, damit die Werte unter Systemparameter sichtbar werden und auch als Ereignis weiter verwendet werden können, was gegebenenfalls noch über CuxD hinaus gebraucht wird.
Derzeit werden mir dort nur die Variablen angezeigt mit dem Zeitpunkt, wann ich sie angelegt habe.
Ich hab derzeit nicht mal einen Plan,WO ich nach WAS suchen soll.
Danke
Ich hab den Sensor auch schon über 1 Jahr laufen, hier bin ich aber absolute Anfängerin.
Ich suche bereits seit Tagen eine Anleitung, wie man derartige Skripte einbindet, damit die Werte unter Systemparameter sichtbar werden und auch als Ereignis weiter verwendet werden können, was gegebenenfalls noch über CuxD hinaus gebraucht wird.
Derzeit werden mir dort nur die Variablen angezeigt mit dem Zeitpunkt, wann ich sie angelegt habe.
Ich hab derzeit nicht mal einen Plan,WO ich nach WAS suchen soll.
Danke
-
- Beiträge: 130
- Registriert: 05.07.2015, 19:34
- Wohnort: Hamburg
- Danksagung erhalten: 3 Mal
Re: Feinstaubwerte von Luftdaten.info
Hallo zusammen,
ich habe jetzt das neue Script länge laufen gehabt und muss leider sagen, dass hiermit das hängen der Raspberrymatic NICHT behoben ist, wenn der Feinstaubsensor nicht erreichbar ist.
Raspberrymatic wartet auf den Feinstaubsensor und führt erst wieder Funktionen aus, wenn der Sensor seine Daten liefert!
Ich muss leider das Script wieder deaktivieren :-/
Gibt es nicht eine Möglichkeit das man ein Timeout setzen kann?
VG
Leif
ich habe jetzt das neue Script länge laufen gehabt und muss leider sagen, dass hiermit das hängen der Raspberrymatic NICHT behoben ist, wenn der Feinstaubsensor nicht erreichbar ist.
Raspberrymatic wartet auf den Feinstaubsensor und führt erst wieder Funktionen aus, wenn der Sensor seine Daten liefert!
Ich muss leider das Script wieder deaktivieren :-/
Gibt es nicht eine Möglichkeit das man ein Timeout setzen kann?
VG
Leif
-
- Beiträge: 173
- Registriert: 18.09.2015, 10:11
- Wohnort: Drolshagen
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 5 Mal
- Kontaktdaten:
Re: Feinstaubwerte von Luftdaten.info
wget kennt eine Timeout Option ...
Hilft vielleicht ?!
--timeout=seconds
Zusätzlich gibt es noch einen retry counter
--tries=number
Default Timeout ist bei wget 15 Minuten ... Ist etwas hoch....
Also vielleicht
--timeout=10 --tries=1
in den Aufruf packen ?!
Hilft vielleicht ?!
--timeout=seconds
Zusätzlich gibt es noch einen retry counter
--tries=number
Default Timeout ist bei wget 15 Minuten ... Ist etwas hoch....
Also vielleicht
--timeout=10 --tries=1
in den Aufruf packen ?!
Systemdaten: Raspberry Pi2 ( 84xHM, 14xHMIP, 3xLanGW, 34xHue)
Firmware: 3.51.6.20200420
Addons: XML-API, CUx-Daemon, E-Mail
Voice Assist: Amazon Echo/dot/spot/show(1/3/1/3) via ioBroker
Firmware: 3.51.6.20200420
Addons: XML-API, CUx-Daemon, E-Mail
Voice Assist: Amazon Echo/dot/spot/show(1/3/1/3) via ioBroker
-
- Beiträge: 130
- Registriert: 05.07.2015, 19:34
- Wohnort: Hamburg
- Danksagung erhalten: 3 Mal
Re: Feinstaubwerte von Luftdaten.info
Ich lagere jetzt langsam alles von der CCU bzw. Raspberrymatic auf den iobroker aus und habe jetzt keine Probleme mehr.
Kann/möchte es nicht mehr ausprobieren, aber trotzdem danke.
VG
Leif
Kann/möchte es nicht mehr ausprobieren, aber trotzdem danke.
VG
Leif