Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Luftdate.info per Skript einlesen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Luftdate.info per Skript einlesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
38 Beiträge 18 Kommentatoren 8.9k Aufrufe 8 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    pix
    schrieb am zuletzt editiert von
    #28

    Hallo,

    die Daten des eigenen Sensors und fremder Geräte lassen sich auch über Apollon77's neuen iobroker.ham - Adapter einlesen.

    Folgt diesem Link: viewtopic.php?f=36&t=14972&p=156438#p156438

    Gruß

    Pix

    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

    1 Antwort Letzte Antwort
    0
    • umbmU Offline
      umbmU Offline
      umbm
      schrieb am zuletzt editiert von
      #29

      Es gibt inzwischen einen Adapter.

      Da ich kein Doppelposting machen möchte, bitte hier lesen

      viewtopic.php?f=8&t=9865&p=157989#p157989

      1 Antwort Letzte Antwort
      0
      • SegwayS Offline
        SegwayS Offline
        Segway
        schrieb am zuletzt editiert von
        #30

        Wahrscheinlich völlig falsche Widgets genommen - aber egal :-) mir gefällts - DANKE pix

        1043_bildschirmfoto_2018-08-09_um_18.12.33.png

        Gruß Dirk
        Intel Proxmox Cluster (3x NUC) mit Debian & Proxmox / IoB als VM unter Debian / 60+ Adapter installiert

        1 Antwort Letzte Antwort
        0
        • SegwayS Offline
          SegwayS Offline
          Segway
          schrieb am zuletzt editiert von
          #31

          Anmerkung:

          Im Log finde ich immer folgende Meldungen - da wird die verbindung zur DB verloren:

          javascript.0	2018-08-12 10:56:16.427	warn	Reconnection to DB.
          javascript.0	2018-08-12 10:56:16.404	warn	Reconnection to DB.
          host.RaPi03-FHEM-Prod	2018-08-12 10:55:15.029	info	instance system.adapter.luftdaten.0 terminated with code 0 (OK)
          luftdaten.0	2018-08-12 10:55:04.376	info	starting. Version 0.0.6 in /opt/iobroker/node_modules/iobroker.luftdaten, node: v6.14.3
          

          Ist das richtig so ?

          Gruß Dirk
          Intel Proxmox Cluster (3x NUC) mit Debian & Proxmox / IoB als VM unter Debian / 60+ Adapter installiert

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            schittl
            schrieb am zuletzt editiert von
            #32

            Hallo pix,

            erstmal vielen Dank für das geniale Skript. Wie immer von Dir super Arbeit. Ich habe nur ein kleines Problem. Falls der Sensor nicht erreichbar ist, bekomme ich folgenden Fehler und JS startet sich immer neu. Kann man das irgendwie umgehen?

            ! javascript.0 2018-08-13 11:28:36.350 error at Socket.emit (events.js:188:7)
            ! javascript.0 2018-08-13 11:28:36.350 error at emitOne (events.js:96:13)
            ! javascript.0 2018-08-13 11:28:36.350 error at Socket.socketErrorListener (_http_client.js:310:9)
            ! javascript.0 2018-08-13 11:28:36.350 error at ClientRequest.emit (events.js:188:7)
            ! javascript.0 2018-08-13 11:28:36.350 error at emitOne (events.js:96:13)
            ! javascript.0 2018-08-13 11:28:36.350 error at Request.onRequestError (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:878:8)
            ! javascript.0 2018-08-13 11:28:36.350 error at Request.emit (events.js:188:7)
            ! javascript.0 2018-08-13 11:28:36.350 error at emitOne (events.js:96:13)
            ! javascript.0 2018-08-13 11:28:36.350 error at self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:186:22)
            ! javascript.0 2018-08-13 11:28:36.350 error at Request._callback (script.js.XSkripte.Luftdaten:613:47)
            ! javascript.0 2018-08-13 11:28:36.350 error TypeError: Cannot read property 'statusCode' of undefined
            ! javascript.0 2018-08-13 11:28:36.349 error uncaught exception: Cannot read property 'statusCode' of undefined

            Mein Skript sieht aktuell so aus (Auszug):

            ! ````
            try {
            request(options, function (error, response, body) {
            if (!error && response.statusCode == 200) { // kein Fehler, Inhalt in body
            var p1, p2, note;
            var json = JSON.parse(body);
            if (logging) log('body: ' + body);

                        if (logging) log('JSON: ' + JSON.stringify(json));
                        setState(pfad + 'json', JSON.stringify(json));
            
                        if (json[0].sensor.id.toString() !== undefined) {
                        .....
            

            ! ````

            Aktuell scheint die Seite gar nicht mehr zu gehen. Kommt gar nix zurück…

            Danke Dir und vg

            Falk

            HW: Lenovo M920q (Proxmox, ioBroker, RaspMatic & Z2M), QNAP (Docker, Influx), Arduino Mega 2560 R3 (I2C DS18B20 + LED)

            SW: CT IoBroker, VM RaspMatic(v3.79.6.20241122)

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              piForscher
              schrieb am zuletzt editiert von
              #33

              Hallo,
              weil es mit luftdaten.de einige Schwierigkeiten gab und dort auch nur Feinstaubwerte abrufbar sind,
              habe ich weiter gesucht und beim UBA schöne Luftqualitätsdaten gefunden - allerdings keine API.
              Aber auf Anfrage hat man mir sehr gut geholfen und ich habe jetzt das Script von Pix ein wenig umgebaut.
              Ist noch ziemlich roh, aber es funktioniert bisher.
              Es ist ein Schritt vorher erforderlich:
              Im Browser den Request absetzen, um die gewünschte Station abzufragen (das habe ich nicht automatisiert, weil der Befehl alle Stationen abfragt, somit ziemlich lange braucht und ich den Server nicht nerven will...)
              Die Antwort enthält 'stations' und dort kann man die gewünschte Station suchen und dann die zugehörige ID.
              Dabei hilft die Karte unter https://www.umweltbundesamt.de/daten/luft/luftdaten/luftqualitaet.

              /* Luftdaten
              -
              Liest Daten eines Luftdaten-Sensors
              von https://www.umweltbundesamt.de/api aus
              -
              https://www.umweltbundesamt.de/api/air_data/v2/xxx
              Request all stations (to find the station code for your region):
              https://www.umweltbundesamt.de/api/air_data/v2/meta/json?use=airquality&date_from=2019-01-01&date_to=2019-01-01&time_from=1&time_to=2
              -
              todo: Optin
              -
              20.09.2019 erstellt auf Vorlage von von Pix
              */
              
              
              var sensorid = "633";
              
              var logging       = false;
              var instanz       = 'javascript.' + instance + '.';
              var pfad          = 'Luftdaten.' + sensorid + '.';
              var cronStr       = "14,29,44,59 * * * *";
              //var cronStr       = "* * * * *";
              
              function createStates () {
              
              // Allgemein   
                  createState(pfad + 'json', {
                      name: 'JSON',
                      desc: 'JSON Ausgabe',
                      type: 'string',
                      role: 'json'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'json erstellt');
                  });
              
                  createState(pfad + 'sensor_id', {
                      name: 'ID',
                      desc: 'ID-Nummer des Sensors',
                      type: 'string',
                      role: 'text'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'sensor_id erstellt');
                  });
                  
                  createState(pfad + 'sensor_type', {
                      name: 'Typ',
                      desc: 'Type des Sensors',
                      type: 'string',
                      role: 'text'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'sensor_type erstellt');
                  });
              
                  createState(pfad + 'location', {
                      name: 'Ort',
                      desc: 'Location des Sensors',
                      type: 'string',
                      role: 'text'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'location erstellt');
                  });
                  
                  createState(pfad + 'lat', {
                      name: 'Latitude',
                      desc: 'Geographische Lage des Sensors - Breite',
                      type: 'number',
                      unit: '°',
                      role: 'val'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'latitude erstellt');
                  });
                  
                  createState(pfad + 'lon', {
                      name: 'Longitude',
                      desc: 'Geographische Lage des Sensors - Länge',
                      type: 'number',
                      unit: '°',
                      role: 'val'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'longitude erstellt');
                  });
                  
                  createState(pfad + 'country', {
                      name: 'Country Code',
                      desc: 'Geographische Lage des Sensors - Landeskürzel',
                      type: 'string',
                      role: 'text'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'country erstellt');
                  });
                  
                  createState(pfad + 'Messung.timestamp', {
                      name: 'Zeitstempel',
                      desc: 'Zeitstempel der Messung',
                      type: 'string',
                      role: 'text'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'timestamp erstellt');
                  });
                  
                  createState(pfad + 'Messung.PM10', {
                      name: 'PM10',
                      desc: 'Messung PM10',
                      type: 'number',
                      role: 'val',
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'Messung.PM10 erstellt');
                  });
              
                  createState(pfad + 'Messung.O3', {
                      name: 'O3',
                      desc: 'Messung O3',
                      type: 'number',
                      role: 'val',
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'Messung.O3 erstellt');
                  });
              
                  createState(pfad + 'Messung.NO2', {
                      name: 'NO2',
                      desc: 'Messung NO2',
                      type: 'number',
                      role: 'val',
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'Messung.NO2 erstellt');
                  });
              
                  createState(pfad + 'forceRefresh', {
                      name: 'aktualisieren',
                      desc: 'Werte neu einlesen',
                      type: 'boolean',
                      def:  false,
                      role: 'indicator'
                  }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'forceRefresh erstellt');
                  });
              }
              
              
              function readData() {
                  var Today, Now, DateString;
                  var request = require('request');
                  Today = new Date();
                  DateString = Today.getFullYear() + '-' + (Today.getMonth()+1) + '-' + (Today.getDate()-1);
                  Now = Today.getHours();
                  var url= 'https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=' + DateString + '&date_to=' + DateString + '&time_from=1' + '&time_to=' + (Now-1) + '&station=' + sensorid;
                  //log(url);
                  var options = {
                      url: 'https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=' + DateString + '&date_to=' + DateString + '&time_from=1' + '&time_to=' + (Now-1) + '&station=' + sensorid,
                      headers: {
                          'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
                      }
                  };  
                  try {
                      request(options, function (error, response, body) {
                          if (!error && response.statusCode == 200) {              // kein Fehler, Inhalt in body
                              var p1, p2;
                              var json = JSON.parse(body);
                              var Station = json.data[sensorid];
                              var allPropertyNames = Object.keys(Station);
                              setState(pfad + 'json',JSON.stringify(json.data));
                              if (logging) {
                                  for (var j=0; j<allPropertyNames.length; j++) {
                                      var name = allPropertyNames[j];
                                      var value = Station[name];
                                      log('name: ' + name + '; value: ' + value);
                                  }
                              }
                              //log(allPropertyNames.length);
                              //Use only the last entry, because this is the latest: that's what we want to add
                              name = allPropertyNames[allPropertyNames.length-1];
                              value = Station[name];
              
                              if (logging) {
                                  //log('JSON: ' + JSON.stringify(json.data));
                                  //log('Station: ' + JSON.stringify(Station));
                                  //log('JSON: ' + JSON.stringify(json.indices.data));
                                  log(name + 'value[0]: ' + value[0]);
                                  log(name + 'value[1]: ' + value[1]);
                                  log(name + 'value[2]: ' + value[2]);
                                  log(name + 'value[3]: ' + value[3]);
                                  log(name + 'value[4]: ' + value[4]);
                                  log(name + 'value[5]: ' + value[5]);
                                  log(name + 'value[6]: ' + value[6]);
                                  //var xx = value[3][0];
                                  //log(xx);
                              }
                              var PM10,O3, NO2;
                              for (var count=3; count<value.length; count++) {
                                  //log(parseInt(value[count][0]));
                                  //log(value.length);
                                  switch(parseInt(value[count][0])) {
                                      case 1:
                                          // PM10
                                          PM10 = value[count][1];
                                          //log('PM10: ' + PM10);
                                          setState(pfad + 'Messung.PM10', parseFloat(PM10),true);
                                          break;
                                      case 3:
                                              // O3
                                              O3 = value[count][1];
                                              //log('O3: ' + O3);
                                              setState(pfad + 'Messung.O3', parseFloat(O3),true);
                                              break;
                                          case 5:
                                              // NO2
                                              NO2 = value[count][1];
                                              //log('NO2: ' + NO2);
                                              setState(pfad + 'Messung.NO2', parseFloat(NO2),true);
                                              break;
                                          default:
                                              // code block
                                  } 
                              }
                /*
                              setState(pfad + 'sensor_id', json[0].sensor.id.toString());
                              setState(pfad + 'sensor_type', json[0].sensor.sensor_type.name + ' by ' + json[0].sensor.sensor_type.manufacturer);
                              
                              setState(pfad + 'location', json[0].location.id.toString());
                              setState(pfad + 'lat', parseFloat(json[0].location.latitude));
                              setState(pfad + 'lon', parseFloat(json[0].location.longitude));
                              setState(pfad + 'country', json[0].location.country);
                              
                              setState(pfad + 'Messung.timestamp', json[0].timestamp);
                              p1 = json[0].sensordatavalues[0].value;
                              p2 = json[0].sensordatavalues[1].value;
                              
                              setState(pfad + 'Messung.P1', parseFloat(p1));
                              setState(pfad + 'Messung.P2', parseFloat(p2));
                              */
                          } else {
                              log("StatusCode = "+response.statusCode);
                              log(error,'error');                               // Error beim Einlesen
                          }
                      });
                      log('Luftdaten aktualisiert');
                  } catch (e) {
                      log('Fehler (try) Luftdaten.info: ' + e, 'error');
                  }
              }
              
              // regelmässige Wiederholungen
              schedule(cronStr, readData);
              
              // einmaliger Start bei Skriptstart
              createStates();
              setTimeout(readData, 1500);
              
              // Start beim Setzen auf true
              on(instanz + pfad + 'forceRefresh', function (obj) {
                  if (!obj.state.ack && obj.state.val) readData();
              });
              

              –----------------------------------

              44 HM-Geräte mit CCU2

              iobroker auf MSI Ubuntu, Raspi2 und RaspiB.


              HomoranH 1 Antwort Letzte Antwort
              0
              • P piForscher

                Hallo,
                weil es mit luftdaten.de einige Schwierigkeiten gab und dort auch nur Feinstaubwerte abrufbar sind,
                habe ich weiter gesucht und beim UBA schöne Luftqualitätsdaten gefunden - allerdings keine API.
                Aber auf Anfrage hat man mir sehr gut geholfen und ich habe jetzt das Script von Pix ein wenig umgebaut.
                Ist noch ziemlich roh, aber es funktioniert bisher.
                Es ist ein Schritt vorher erforderlich:
                Im Browser den Request absetzen, um die gewünschte Station abzufragen (das habe ich nicht automatisiert, weil der Befehl alle Stationen abfragt, somit ziemlich lange braucht und ich den Server nicht nerven will...)
                Die Antwort enthält 'stations' und dort kann man die gewünschte Station suchen und dann die zugehörige ID.
                Dabei hilft die Karte unter https://www.umweltbundesamt.de/daten/luft/luftdaten/luftqualitaet.

                /* Luftdaten
                -
                Liest Daten eines Luftdaten-Sensors
                von https://www.umweltbundesamt.de/api aus
                -
                https://www.umweltbundesamt.de/api/air_data/v2/xxx
                Request all stations (to find the station code for your region):
                https://www.umweltbundesamt.de/api/air_data/v2/meta/json?use=airquality&date_from=2019-01-01&date_to=2019-01-01&time_from=1&time_to=2
                -
                todo: Optin
                -
                20.09.2019 erstellt auf Vorlage von von Pix
                */
                
                
                var sensorid = "633";
                
                var logging       = false;
                var instanz       = 'javascript.' + instance + '.';
                var pfad          = 'Luftdaten.' + sensorid + '.';
                var cronStr       = "14,29,44,59 * * * *";
                //var cronStr       = "* * * * *";
                
                function createStates () {
                
                // Allgemein   
                    createState(pfad + 'json', {
                        name: 'JSON',
                        desc: 'JSON Ausgabe',
                        type: 'string',
                        role: 'json'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'json erstellt');
                    });
                
                    createState(pfad + 'sensor_id', {
                        name: 'ID',
                        desc: 'ID-Nummer des Sensors',
                        type: 'string',
                        role: 'text'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'sensor_id erstellt');
                    });
                    
                    createState(pfad + 'sensor_type', {
                        name: 'Typ',
                        desc: 'Type des Sensors',
                        type: 'string',
                        role: 'text'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'sensor_type erstellt');
                    });
                
                    createState(pfad + 'location', {
                        name: 'Ort',
                        desc: 'Location des Sensors',
                        type: 'string',
                        role: 'text'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'location erstellt');
                    });
                    
                    createState(pfad + 'lat', {
                        name: 'Latitude',
                        desc: 'Geographische Lage des Sensors - Breite',
                        type: 'number',
                        unit: '°',
                        role: 'val'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'latitude erstellt');
                    });
                    
                    createState(pfad + 'lon', {
                        name: 'Longitude',
                        desc: 'Geographische Lage des Sensors - Länge',
                        type: 'number',
                        unit: '°',
                        role: 'val'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'longitude erstellt');
                    });
                    
                    createState(pfad + 'country', {
                        name: 'Country Code',
                        desc: 'Geographische Lage des Sensors - Landeskürzel',
                        type: 'string',
                        role: 'text'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'country erstellt');
                    });
                    
                    createState(pfad + 'Messung.timestamp', {
                        name: 'Zeitstempel',
                        desc: 'Zeitstempel der Messung',
                        type: 'string',
                        role: 'text'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'timestamp erstellt');
                    });
                    
                    createState(pfad + 'Messung.PM10', {
                        name: 'PM10',
                        desc: 'Messung PM10',
                        type: 'number',
                        role: 'val',
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'Messung.PM10 erstellt');
                    });
                
                    createState(pfad + 'Messung.O3', {
                        name: 'O3',
                        desc: 'Messung O3',
                        type: 'number',
                        role: 'val',
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'Messung.O3 erstellt');
                    });
                
                    createState(pfad + 'Messung.NO2', {
                        name: 'NO2',
                        desc: 'Messung NO2',
                        type: 'number',
                        role: 'val',
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'Messung.NO2 erstellt');
                    });
                
                    createState(pfad + 'forceRefresh', {
                        name: 'aktualisieren',
                        desc: 'Werte neu einlesen',
                        type: 'boolean',
                        def:  false,
                        role: 'indicator'
                    }, function () {
                        if (logging) log('Objekt ' + instanz + pfad + 'forceRefresh erstellt');
                    });
                }
                
                
                function readData() {
                    var Today, Now, DateString;
                    var request = require('request');
                    Today = new Date();
                    DateString = Today.getFullYear() + '-' + (Today.getMonth()+1) + '-' + (Today.getDate()-1);
                    Now = Today.getHours();
                    var url= 'https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=' + DateString + '&date_to=' + DateString + '&time_from=1' + '&time_to=' + (Now-1) + '&station=' + sensorid;
                    //log(url);
                    var options = {
                        url: 'https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=' + DateString + '&date_to=' + DateString + '&time_from=1' + '&time_to=' + (Now-1) + '&station=' + sensorid,
                        headers: {
                            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
                        }
                    };  
                    try {
                        request(options, function (error, response, body) {
                            if (!error && response.statusCode == 200) {              // kein Fehler, Inhalt in body
                                var p1, p2;
                                var json = JSON.parse(body);
                                var Station = json.data[sensorid];
                                var allPropertyNames = Object.keys(Station);
                                setState(pfad + 'json',JSON.stringify(json.data));
                                if (logging) {
                                    for (var j=0; j<allPropertyNames.length; j++) {
                                        var name = allPropertyNames[j];
                                        var value = Station[name];
                                        log('name: ' + name + '; value: ' + value);
                                    }
                                }
                                //log(allPropertyNames.length);
                                //Use only the last entry, because this is the latest: that's what we want to add
                                name = allPropertyNames[allPropertyNames.length-1];
                                value = Station[name];
                
                                if (logging) {
                                    //log('JSON: ' + JSON.stringify(json.data));
                                    //log('Station: ' + JSON.stringify(Station));
                                    //log('JSON: ' + JSON.stringify(json.indices.data));
                                    log(name + 'value[0]: ' + value[0]);
                                    log(name + 'value[1]: ' + value[1]);
                                    log(name + 'value[2]: ' + value[2]);
                                    log(name + 'value[3]: ' + value[3]);
                                    log(name + 'value[4]: ' + value[4]);
                                    log(name + 'value[5]: ' + value[5]);
                                    log(name + 'value[6]: ' + value[6]);
                                    //var xx = value[3][0];
                                    //log(xx);
                                }
                                var PM10,O3, NO2;
                                for (var count=3; count<value.length; count++) {
                                    //log(parseInt(value[count][0]));
                                    //log(value.length);
                                    switch(parseInt(value[count][0])) {
                                        case 1:
                                            // PM10
                                            PM10 = value[count][1];
                                            //log('PM10: ' + PM10);
                                            setState(pfad + 'Messung.PM10', parseFloat(PM10),true);
                                            break;
                                        case 3:
                                                // O3
                                                O3 = value[count][1];
                                                //log('O3: ' + O3);
                                                setState(pfad + 'Messung.O3', parseFloat(O3),true);
                                                break;
                                            case 5:
                                                // NO2
                                                NO2 = value[count][1];
                                                //log('NO2: ' + NO2);
                                                setState(pfad + 'Messung.NO2', parseFloat(NO2),true);
                                                break;
                                            default:
                                                // code block
                                    } 
                                }
                  /*
                                setState(pfad + 'sensor_id', json[0].sensor.id.toString());
                                setState(pfad + 'sensor_type', json[0].sensor.sensor_type.name + ' by ' + json[0].sensor.sensor_type.manufacturer);
                                
                                setState(pfad + 'location', json[0].location.id.toString());
                                setState(pfad + 'lat', parseFloat(json[0].location.latitude));
                                setState(pfad + 'lon', parseFloat(json[0].location.longitude));
                                setState(pfad + 'country', json[0].location.country);
                                
                                setState(pfad + 'Messung.timestamp', json[0].timestamp);
                                p1 = json[0].sensordatavalues[0].value;
                                p2 = json[0].sensordatavalues[1].value;
                                
                                setState(pfad + 'Messung.P1', parseFloat(p1));
                                setState(pfad + 'Messung.P2', parseFloat(p2));
                                */
                            } else {
                                log("StatusCode = "+response.statusCode);
                                log(error,'error');                               // Error beim Einlesen
                            }
                        });
                        log('Luftdaten aktualisiert');
                    } catch (e) {
                        log('Fehler (try) Luftdaten.info: ' + e, 'error');
                    }
                }
                
                // regelmässige Wiederholungen
                schedule(cronStr, readData);
                
                // einmaliger Start bei Skriptstart
                createStates();
                setTimeout(readData, 1500);
                
                // Start beim Setzen auf true
                on(instanz + pfad + 'forceRefresh', function (obj) {
                    if (!obj.state.ack && obj.state.val) readData();
                });
                
                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #34

                @piForscher
                ich verstehe nicht allzuviel vom Skripten, bekomme mit deinem Skript zwar (manchmal) Ergebnisse, die passen aber nicht zu anderen Ergebnissen.

                Zum einen wird z.B. das Ozon auf einmal nicht aktualisiert

                Zum anderen passen die UBA-Werte nicht zu denen des LANUV, die IMHO die gleiche Station nutzen. Kann mich da aber auch täuschen.

                Habe mich dann als Nicht-Skripter zum einen versucht durch dein Skript zu wühlen, zum anderen auf der Website des UBA mehr Informationen zu bekommen.

                Einen Hinweis auf die API finde ich gar nicht - und die Werte die auf deren Karten angezeigt werden entsprechen nicht denen, die das Skript auswirft.

                Der URL, den du zusammenbaust enthält Datum von und bis.
                Warum addierst du bei dem Monat einen drauf?
                geht das im Dezember überhaupt?
                und im Tag ziehst du einen ab.

                Im Url.log steht seltsamerweise der 12. als Monat aber der gestrige Tag.

                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                1 Antwort Letzte Antwort
                0
                • K Offline
                  K Offline
                  klassisch
                  Most Active
                  schrieb am zuletzt editiert von
                  #35

                  Und wie kommt es zu den vielen Werten beginnend von 00:00 Uhr bis zur (aktuellen Stunde - 1) auch wenn man die von .. bis Zeiten auf die letzte Stnde beschränkt.
                  Bitte nicht falsch verstehen, ich will nicht schimpfen, sondern das Skript nutzen. Denn ich halte das für eine sehr gute Idee.
                  Die Luftdaten-Leute setzen den SDS011 Sensor ein, der über 70% rel. Feuchte nicht spezifiziert ist und dann meiner Beobachtung nach recht hohe Werte anzeigt. Diese Werte werden aber nicht unterdrückt, sondern fleißig weiter gesendet und für bare Münze genommen. Das macht die Messungen und die Daten aber meiner Meinung nach in letzter Konsequenz wertlos.
                  Ich nehm an, daß die offiziellen Stationen für dem optischen Vermessen qualifiziert trocknen. Deshalb bin ich in Ergänzung zu den eigenen Messungen noch an den offiziellen Messungen interessiert.

                  1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    piForscher
                    schrieb am zuletzt editiert von
                    #36

                    Hallo,
                    die API vom UBA ist hier beschrieben: https://www.umweltbundesamt.de/daten/luft/luftdaten/doc
                    Zusätzlich hatte ich von einem sehr netten UBA-Mitarbeiter diese Beispiele bekommen:
                    Luftportal_API.pdf
                    Das hatte mir geholfen, das Script soweit zusammenzubasteln.
                    Und dann war ich auch erstmal happy - die Daten habe ich nicht verifiziert.
                    Fühlt euch frei, das Script zu verbessern :-)

                    –----------------------------------

                    44 HM-Geräte mit CCU2

                    iobroker auf MSI Ubuntu, Raspi2 und RaspiB.


                    1 Antwort Letzte Antwort
                    1
                    • P pix

                      Hallo,

                      stelle mal wieder ne Parsing-Lösung vor :-D

                      Diesmal gehts um die Daten des Projektes http://luftdaten.info. Es geht um DIY-Feinstaubsensoren. Noch habe ich keinen gebaut, aber vielleicht komme ich noch dazu. Bis dahin nutze ich die Daten eines Nachbarn.

                      Zuerst sie auf der Karte nach, wo in deiner Nähe ein Sensor ist.

                      http://deutschland.maps.luftdaten.info/#6/51.165/10.455 261_bildschirmfoto_2017-07-10_um_14.25.51.jpg
                      Nehme als Beispiel mal diesen Sensor 3877 in Freiburg.

                      Dann das Skript anpassen (Sensor ID)

                      ! ````
                      /* Luftdaten
                      ! Liest Daten eines Feinstaub-Sensors
                      von luftdaten.info aus
                      ! http://api.luftdaten.info/v1/sensor/####/
                      ! todo: Optin
                      ! 05.06.2017 erstellt von Pix
                      10.07.2017 Code angepasst nach Fehler
                      */
                      ! var sensorid = "3877";
                      ! var logging = false;
                      var instanz = 'javascript.' + instance + '.';
                      var pfad = 'Luftdaten.' + sensorid + '.';
                      var cronStr = "14,29,44,59 * * * *";
                      ! function createStates () {
                      ! // Allgemein
                      createState(pfad + 'json', {
                      name: 'JSON',
                      desc: 'JSON Ausgabe',
                      type: 'string',
                      role: 'json'
                      }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'json erstellt');
                      });
                      ! createState(pfad + 'sensor_id', {
                      name: 'ID',
                      desc: 'ID-Nummer des Sensors',
                      type: 'string',
                      role: 'text'
                      }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'sensor_id erstellt');
                      });

                      createState(pfad + 'sensor_type', {
                          name: 'Typ',
                          desc: 'Type des Sensors',
                          type: 'string',
                          role: 'text'
                      }, function () {
                          if (logging) log('Objekt ' + instanz + pfad + 'sensor_type erstellt');
                      });
                      

                      ! createState(pfad + 'location', {
                      name: 'Ort',
                      desc: 'Location des Sensors',
                      type: 'string',
                      role: 'text'
                      }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'location erstellt');
                      });

                      createState(pfad + 'lat', {
                          name: 'Latitude',
                          desc: 'Geographische Lage des Sensors - Breite',
                          type: 'number',
                          unit: '°',
                          role: 'val'
                      }, function () {
                          if (logging) log('Objekt ' + instanz + pfad + 'latitude erstellt');
                      });
                      
                      createState(pfad + 'lon', {
                          name: 'Longitude',
                          desc: 'Geographische Lage des Sensors - Länge',
                          type: 'number',
                          unit: '°',
                          role: 'val'
                      }, function () {
                          if (logging) log('Objekt ' + instanz + pfad + 'longitude erstellt');
                      });
                      
                      createState(pfad + 'country', {
                          name: 'Country Code',
                          desc: 'Geographische Lage des Sensors - Landeskürzel',
                          type: 'string',
                          role: 'text'
                      }, function () {
                          if (logging) log('Objekt ' + instanz + pfad + 'country erstellt');
                      });
                      
                      createState(pfad + 'Messung.timestamp', {
                          name: 'Zeitstempel',
                          desc: 'Zeitstempel der Messung',
                          type: 'string',
                          role: 'text'
                      }, function () {
                          if (logging) log('Objekt ' + instanz + pfad + 'timestamp erstellt');
                      });
                      
                      createState(pfad + 'Messung.P1', {
                          name: 'P1',
                          desc: 'Messung P1',
                          type: 'number',
                          role: 'val',
                          custom: {
                              "influxdb.0": {
                              "enabled": true,
                              "changesOnly": true,
                              "debounce": "",
                              "retention": 63072000
                              }
                          }
                      }, function () {
                          if (logging) log('Objekt ' + instanz + pfad + 'Messung.P1 erstellt');
                      });
                      

                      ! createState(pfad + 'Messung.P2', {
                      name: 'P2',
                      desc: 'Messung P2',
                      type: 'number',
                      role: 'val',
                      custom: {
                      "influxdb.0": {
                      "enabled": true,
                      "changesOnly": true,
                      "debounce": "",
                      "retention": 63072000
                      }
                      }
                      }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'Messung.P2 erstellt');
                      });
                      ! createState(pfad + 'forceRefresh', {
                      name: 'aktualisieren',
                      desc: 'Werte neu einlesen',
                      type: 'boolean',
                      def: false,
                      role: 'indicator'
                      }, function () {
                      if (logging) log('Objekt ' + instanz + pfad + 'forceRefresh erstellt');
                      });
                      }
                      ! function readData() {
                      var request = require('request');
                      var options = {
                      url: 'http://api.luftdaten.info/v1/sensor/' + sensorid + '/',
                      headers: {
                      'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
                      }
                      };
                      try {
                      request(options, function (error, response, body) {
                      if (!error && response.statusCode == 200) { // kein Fehler, Inhalt in body
                      var p1, p2;
                      var json = JSON.parse(body);
                      if (logging) log('JSON: ' + JSON.stringify(json));
                      setState(pfad + 'json', JSON.stringify(json));

                                  setState(pfad + 'sensor_id', json[0].sensor.id.toString());
                                  setState(pfad + 'sensor_type', json[0].sensor.sensor_type.name + ' by ' + json[0].sensor.sensor_type.manufacturer);
                      
                                  setState(pfad + 'location', json[0].location.id.toString());
                                  setState(pfad + 'lat', parseFloat(json[0].location.latitude));
                                  setState(pfad + 'lon', parseFloat(json[0].location.longitude));
                                  setState(pfad + 'country', json[0].location.country);
                      
                                  setState(pfad + 'Messung.timestamp', json[0].timestamp);
                                  p1 = json[0].sensordatavalues[0].value;
                                  p2 = json[0].sensordatavalues[1].value;
                      
                                  setState(pfad + 'Messung.P1', parseFloat(p1));
                                  setState(pfad + 'Messung.P2', parseFloat(p2));
                      
                              } else {
                                  log("StatusCode = "+response.statusCode);
                                  log(error,'error');                               // Error beim Einlesen
                              }
                          });
                          log('Luftdaten aktualisiert');
                      } catch (e) {
                          log('Fehler (try) Luftdaten.info: ' + e, 'error');
                      }
                      

                      }

                      ! // regelmässige Wiederholungen
                      schedule(cronStr, readData);
                      ! // einmaliger Start bei Skriptstart
                      createStates();
                      setTimeout(readData, 1500);
                      ! // Start beim Setzen auf true
                      on(instanz + pfad + 'forceRefresh', function (obj) {
                      if (!obj.state.ack && obj.state.val) readData();
                      });
                      ! ````

                      Sieht im Objektbrowser dann so aus:
                      261_bildschirmfoto_2017-07-10_um_14.32.09.jpg

                      Und in VIS dann so:
                      261_bildschirmfoto_2017-07-10_um_14.36.47.png

                      Das Skript sieht gleich vor, die Messwerte in die InfluxDB zu schieben. Bitte bei Nichtgebrauch diesen Teil löschen.

                      Gruß

                      Pix

                      PS: Irgendwie habe ich den Eindruck, ich habe das hier schon mal vorgestellt. Aber meine Suche spuckte nix aus … :shock:

                      S Offline
                      S Offline
                      Silence1599
                      schrieb am zuletzt editiert von
                      #37

                      @pix Ich finde die Ansicht der Karte super. Wie bekommst du es hin, dass die Banner der Webseite nicht angezeigt werden ?

                      HomoranH 1 Antwort Letzte Antwort
                      0
                      • S Silence1599

                        @pix Ich finde die Ansicht der Karte super. Wie bekommst du es hin, dass die Banner der Webseite nicht angezeigt werden ?

                        HomoranH Nicht stören
                        HomoranH Nicht stören
                        Homoran
                        Global Moderator Administrators
                        schrieb am zuletzt editiert von
                        #38

                        @silence1599 Du weisst schon, dass der referenzierte Beitrag 8 Jahre alt idt?

                        Da hat sich mittlerweile garantiert einiges geändert.

                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        836

                        Online

                        32.4k

                        Benutzer

                        81.5k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe