Umweltbundesamt Luftdaten (60_airquality.pm) Ersetzt durch 60_uba.pm & 60_bfs.pm

Begonnen von Markus M., 07 März 2017, 19:31:30

Vorheriges Thema - Nächstes Thema

KölnSolar

Sagen wir mal so: wenn ich sage ich kümmere mich, dann tue ich das auch.  :-X Florian scheint mehr im GitHub unterwegs zu sein.
Und wenn er sich meldet, dass er auf absehbare Zeit nichts macht, dann würde ich es mir noch etwas näher ansehen. Hab aber genügend andere Baustellen.  :(

Ich fand schon toll, dass ich die allgemeine Hysterie zu NOx nicht durch unsere nahe einer der viel befahrensten Autobahnen liegende Messstation bestätigt bekam.  ;D
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Florian_GT

Hallo zusammen,

Ja ist fast so wie früher. Eine erste beta läuft schon und ich plane das Release für kommende Woche.

Gruß Florian

Gesendet von meinem MI 9 mit Tapatalk

FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Markus M.

#122
Ich bin auch gerade dabei mir das anzusehen - habe aber beschlossen aufzugeben.
Es kommt wirklich  nicht oft vor dass ich das Bedürfnis verspüre einem API Architekten weh zu tun, aber das hier ist definitiv so ein Fall...
Alles komplett verkorkst und schlecht maschinenlesbar, die IDs der Stationen müssen in der Definition wahrscheinlich geändert werden da die Abfrage davon so lange braucht, dass sie nicht mal 1x pro FHEM Neustart zumutbar ist. :(

Vielleicht kannst die Get Abfrage der Stationen ja brauchen:
sub uba_GetStations($) {
  my ($hash) = @_;
  my $name = $hash->{NAME};

  my $dateymd = strftime("%Y-%m-%d", localtime());
  my($err,$data) = HttpUtils_BlockingGet({
  url => 'https://www.umweltbundesamt.de/api/air_data/v2/meta/json?use=airquality&date_from='.$dateymd.'&date_to='.$dateymd.'&time_from=1&time_to=24',
  noshutdown => 1,
  timeout => 20,
  });
  return $err if($err);

  my $json = eval { JSON->new->utf8(0)->decode($data) };
  if($@)
  {
    Log3 $name, 2, "$name: json evaluation error ".$@;
    return $@;
  }

  my @stations = ();
  foreach my $stationnumber ( keys (%{$json->{stations}})){
    my $station;
    $station->{number} = $json->{stations}->{$stationnumber}[0];
    $station->{id} = $json->{stations}->{$stationnumber}[1];
    $station->{name} = encode_utf8($json->{stations}->{$stationnumber}[2]);
    $station->{city} = $json->{stations}->{$stationnumber}[3];
    $station->{type} = $json->{stations}->{$stationnumber}[15].' '.$json->{stations}->{$stationnumber}[16];
    push( @stations, $station );
  }
  my $ret = '';
  @stations = sort { $a->{number} <=> $b->{number} } @stations;
  foreach my $station (@stations){
    $ret .= $station->{id}."\t<b>-> ".$station->{number}." <-</b>\t".$station->{name}." (".$station->{type}.")\n"
  }
  return $ret;
}
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Florian_GT

Hallo zusammen,

ich hatte zunächst die CSV Schnittstelle verwendet, die Verarbeitung ist aber nicht so schön gewesen. Die JSON Schnittstellendokumentation ist eher so ulala, nicht ganz vollständig, und einige dinge sind nicht korrekt. Ich habe das jetzt durch Reversing soweit geklärt und das holen der Daten geht schon mal.

Die airquality JSON Schnittstelle ist performant. Diese verwende ich nun.

Hier eine kleine Preview:
2020.01.20 01:48:01.968 5: -------------------------------
2020.01.20 01:48:01.968 5: x Array Key: 2020-01-19 15:00:00
2020.01.20 01:48:01.969 5: x Array Dump: $VAR1 = [
          '2020-01-19 16:00:00',
          0,
          0,
          [
            3,
            52,
            0,
            '0.867'
          ],
          [
            5,
            12,
            0,
            '0.600'
          ],
          [
            1,
            11,
            0,
            '0.550'
          ]
        ];

2020.01.20 01:48:01.969 5: 0 DateTime: 2020-01-19 16:00:00
2020.01.20 01:48:01.969 5: 1 Luftqualitaetsindex: 0
2020.01.20 01:48:01.969 5: 1 Luftqualitaetsindex_name: sehr gut
2020.01.20 01:48:01.969 5: 2 Unbekannt: 0
2020.01.20 01:48:01.969 5: x dataset_size: 6
2020.01.20 01:48:01.970 5: 3 0 component: 3
2020.01.20 01:48:01.970 5: 3 0 component_name: O3
2020.01.20 01:48:01.970 5: 3 1 data: 52
2020.01.20 01:48:01.970 5: 4 0 component: 5
2020.01.20 01:48:01.970 5: 4 0 component_name: NO2
2020.01.20 01:48:01.970 5: 4 1 data: 12
2020.01.20 01:48:01.971 5: 5 0 component: 1
2020.01.20 01:48:01.971 5: 5 0 component_name: PM10
2020.01.20 01:48:01.971 5: 5 1 data: 11


Mir fehlt jetzt noch der Teil, indem ich die Daten passend als Reading übergebe. Außerdem muss ich mir nochmal anschauen, von wann bis wann Daten geladen werden sollen. Es soll möglichst wenig Traffic bei dem UBA anfallen. Die meisten Module laden einfach 24 Stunden, dass geht hier aber deutlich besser, wenn z.B. alle Datensätze aktuell sind, genügt es Daten ab dem Zeitpunkt der letzten Zeitpunkte der Datensätze zu laden.
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Florian_GT

Hallo zusammen,

ich habe die neue Version unter https://github.com/fhem/uba/tree/development veröffentlicht. Ich würde mich sehr freuen, wenn der eine oder andere die neue Version einmal testen könnte.
Zum testen könnt ihr gerne https://raw.githubusercontent.com/fhem/uba/development/controls_uba.txt einbinden, solltet später aber wieder master setzen um bei der Stable Version zu bleiben.

Danke und Gruß Florian
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Gisbert

Hallo Florian,

ich hab jetzt das update gefahren.

Wenn ich in meinem Device "get update" drücke, dann erhalte ich folgenden log-Eintrag:
2020.01.25 09:10:01 3: Getting UBA data from URL: https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=2019-12-26&time_from=08&date_to=2020-01-25&time_to=09&station=DENW079&lang=de
2020.01.25 09:10:01 3: UBA: Done loading all data


Ich erhalte aber keine Readings in meinem Device, an dem ich seit Monaten nichts verändert habe.

Hier das raw-Format:
defmod Luftdaten uba DENW079
attr Luftdaten comment Leverkusen Gustav-Heinemann-Straße (DENW355) hat nur NO2
attr Luftdaten daysToImport 30
attr Luftdaten group Wetter
attr Luftdaten icon time_eco_mode
attr Luftdaten room Weather
attr Luftdaten stateFormat Feinstaub PM10 µg/m³<br>Ozon O3 µg/m³<br>NO<span style="vertical-align: -4px;; font-size: 80%;;">2</span> NO2 µg/m³
attr Luftdaten userReadings Zeitstempel24 {substr(ReadingsTimestamp($name,'NO2',''),0,16)}


und ein list:
Internals:
   CFGFN      ./FHEM/WetterdatenSensorenInternet.cfg
   DEF        DENW079
   FUUID      5d96fd25-f33f-e986-bfa3-58b5b489a5a7c773
   NAME       Luftdaten
   NOTIFYDEV  global,Lufdaten
   NR         496
   NTFY_ORDER 50-Lufdaten
   STATE      Feinstaub PM10 µg/m³<br>Ozon O3 µg/m³<br>NO<span style="vertical-align: -4px; font-size: 80%;">2</span> NO2 µg/m³
   TYPE       uba
   READINGS:
     2020-01-25 09:10:01   Quellenangabe   Umweltbundesamt mit Daten der Messnetze der Länder und des Bundes
     2020-01-25 09:10:01   Zeitstempel24   
     2020-01-25 09:10:01   state           done
   helper:
     INTERVAL   3600
     STATION    DENW079
     initial_lastupdate 1577347200
     bm:
       FHEM::uba::Get:
         cnt        6
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        25.01. 09:10:01
         max        0.00467705726623535
         tot        0.00497293472290039
         mAr:
           HASH(0x5631d3a38840)
           Lufdaten
           data
       FHEM::uba::Notify:
         cnt        4
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        25.01. 09:14:59
         max        0.000133991241455078
         tot        0.000381946563720703
         mAr:
           HASH(0x5631d3a38840)
           HASH(0x5631cbb70e10)
Attributes:
   comment    Leverkusen Gustav-Heinemann-Straße (DENW355) hat nur NO2
   daysToImport 30
   group      Wetter
   icon       time_eco_mode
   room       Weather
   stateFormat Feinstaub PM10 µg/m³<br>Ozon O3 µg/m³<br>NO<span style="vertical-align: -4px; font-size: 80%;">2</span> NO2 µg/m³
   userReadings Zeitstempel24 {substr(ReadingsTimestamp($name,'NO2',''),0,16)}


Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

KölnSolar

Gisbert war schneller,

Hi Florian,
kopiert und
define Umwelt uba DENW059
tut leider nicht
2020.01.25 09:19:42 3: Getting UBA data from URL: https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=2020-01-24&time_from=08&date_to=2020-01-25&time_to=09&station=DENW059&lang=de
2020.01.25 09:19:43 5: JSON data: $VAR1 = {
          'count' => 0,
          'indices' => {
                         'data' => {
                                     'station id' => {
                                                       'date start' => {
                                                                         '2' => 'data incomplete',
                                                                         '1' => 'total index',
                                                                         '3' => [
                                                                                  'component id',
                                                                                  'value',
                                                                                  'index',
                                                                                  'y-value'
                                                                                ]
                                                                       },
                                                       'date start (CET)' => [
                                                                               'date end (CET)'
                                                                             ]
                                                     }
                                   }
                       },
          'data' => {},
          'request' => {
                         'date_from' => '2020-01-24',
                         'index' => 'code',
                         'lang' => 'de',
                         'time_to' => '09:00:00',
                         'datetime_to' => '2020-01-25 08:00:00',
                         'datetime_from' => '2020-01-24 07:00:00',
                         'date_to' => '2020-01-25',
                         'station' => '059',
                         'time_from' => '08:00:00'
                       }
        };

2020.01.25 09:19:43 3: UBA: Done loading all data


Warum machst Du ein komplett neues Modul und änderst in airquality nicht nur die Datensammlung ?

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Gisbert

Hallo Florian,

wenn ich folgendes in den Browser kopiere und losschicke:
https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=2019-12-26&time_from=08&date_to=2020-01-25&time_to=09&station=DENW079&lang=de
bekomme ich:
{"request":{"station":"079","date_from":"2019-12-26","date_to":"2020-01-25","time_from":"08:00:00","time_to":"09:00:00","lang":"de","index":"code","datetime_from":"2019-12-26 07:00:00","datetime_to":"2020-01-25 08:00:00"},"data":{},"indices":{"data":{"station id":{"date start (CET)":["date end (CET)"],"date start":{"1":"total index","2":"data incomplete","3":["component id","value","index","y-value"]}}}},"count":0}

D.h. es kommt eine Antwort, aber ohne Daten.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

CoolTux

Eure Stations ID sieht seltsam aus. Ich hatte bei meinem Codereview gerade das selbe Problem.
Sucht mal in der Commandref die URL für die Stationen. Dann Eure Station suchen auf der Seite und wenn Ihr die habt ganz unten bei Export CSV mit der Maus auf den Button Export CSV gehen. Ihr solltet dann die URL sehen wo Ihr auch die StationsID raus bekommt. Bei mir ist es die 71
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Gisbert

Die StationsID müsste aber richtig sein, siehe Anhang, DENW079.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

CoolTux

Gib bei Dir mal die 1397 ein. Also in der Detailübersicht auf modify und dann die Nummer da raus und die 1397 rein. Danach ein get machen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Gisbert

Zitat von: CoolTux am 25 Januar 2020, 10:03:52
Gib bei Dir mal die 1397 ein. Also in der Detailübersicht auf modify und dann die Nummer da raus und die 1397 rein. Danach ein get machen
Grübel ???
Meinst du die Definition, also so?
defmod Luftdaten uba 1397
Nach einem get bekomme ich nur NO2, aber nicht die anderen Paramter, die an der Station verfügbar sind.
Wie kommst du auf 1397?

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

CoolTux

Lese Dir bitte einmal die Commandref zum neuen Modul durch und befolge die Anweisungen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Gisbert

Ok, hab's jetzt gefunden, die StatationsID steht in der URL, wenn man mit dem Curser "drüber fährt".
1397: Leverkusen Gustav-Heinemann-Strasse - DENW355
1134: Leverkusen-Manfort - DENW079
Soweit so gut.

Ich hatte die ID 1397 eingetragen und ein get durchgeführt.
Diese Station liefert aber nur NO2, die auch in einer log-Datei "Luftqualitaet-2020-01.log" gespeichert wurden.
Da es sich um die falsche Station handelte, habe ich die Daten aus der log-Datei gelöscht.

Wenn ich jetzt ein get versuche, dann erhalte ich weder bei der Station 1397 noch bei der Station 1134 Daten und auch keine Einträge in der log-Datei.
Da läuft anscheinend noch etwas nicht rund.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Gisbert

Ich nochmal - jetzt läuft's :-)
Ich hab die Readings gelöscht (deletereading ...), dann ein get durchgeführt.
Jetzt sind alle Daten im log-file vorhanden und die aktuellen Werte werden als Readings im Device angezeigt.

@Florian,
das Attribut daysToImport steht auf 30 (Tagen).
In welchen Intervall lädt das Modul neue Daten ein?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY