Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JS Problem Weather Script Air Quality :-(

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    JS Problem Weather Script Air Quality :-(

    This topic has been deleted. Only users with topic management privileges can see it.
    • Olli_M
      Olli_M last edited by Olli_M

      Hi zusammen,

      ich habe im Internet folgendes Script gefunden und hab den Entwickler schon angeschrieben aber der hat kein Iobroker mehr und kann sich schlecht den Fehler anschauen. Wahrscheinlich ist es nur eine Kleinigkeit... Es läuft über eine API:

      https://jb-smarthome.de/iobroker-aqi-in-echtzeit-mit-api

      leider gibt IO einen Fehler auf.

      2024-02-17 10:10:02.010	error	Error in callback: TypeError: Cannot read properties of undefined (reading 'v')
      
      javascript.0
      2024-02-17 10:10:02.011	error	at Object.<anonymous> (script.js.common.Balkon.AQI:73:43)
      
      javascript.0
      2024-02-17 10:10:02.011	error	at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2777:34)
      
      javascript.0
      2024-02-17 10:10:02.012	error	at listOnTimeout (node:internal/timers:569:17)
      
      javascript.0
      2024-02-17 10:10:02.012	error	at processTimers (node:internal/timers:512:7)
      

      Vielen Dank

      Homoran M 2 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @Olli_M last edited by Homoran

        @olli_m sagte in JS Problem 😞:

        ich habe im Internet folgendes Script gefunden

        dann stell es doch bitte hier in code-tags ein

        PS bitte aussagekräftigeren Threadtitel wählen.

        1 Reply Last reply Reply Quote 1
        • M
          MCU @Olli_M last edited by

          @olli_m Den Inhalt vom DP 0_userdata.0.Luftqualität.aqi-data reinstellen, in Code-Tags.

          Olli_M 1 Reply Last reply Reply Quote 0
          • Olli_M
            Olli_M @MCU last edited by Homoran

            @mcu

            {
              "status": "ok",
              "data": {
                "aqi": 42,
                "idx": -54835,
                "attributions": [
                  {
                    "url": "https://sensor.community/",
                    "name": "Citizen Science project sensor.community",
                    "station": "4903"
                  },
                  {
                    "url": "https://waqi.info/",
                    "name": "World Air Quality Index Project"
                  }
                ],
                "city": {
                  "geo": [
                    48.142,
                    11.616
                  ],
                  "name": "Rich...aße",
                  "url": "https://aqicn.org/station/@54835",
                  "location": "Richard-...7, Germany"
                },
                "dominentpol": "pm25",
                "iaqi": {
                  "pm10": {
                    "v": 11
                  },
                  "pm25": {
                    "v": 42
                  }
                },
                "time": {
                  "s": "2024-02-17 10:06:57",
                  "tz": "+01:00",
                  "v": 1708160817,
                  "iso": "2024-02-17T09:06:57Z"
                }
              }
            }
            

            MOD-EDIT: private Daten entfernt!

            Olli_M 1 Reply Last reply Reply Quote 0
            • Olli_M
              Olli_M @Olli_M last edited by

              @olli_m

              Hier noch das JS Script:

              // Datenpunkte anlegen (einmalig)
              createState("0_userdata.0.Luftqualität.aqi-data", "", {name: 'AQI-Data',  type: 'string'});
              createState("0_userdata.0.Luftqualität.status", "", {name: 'Status', role: 'indicator.connected', type: 'string'});
              createState("0_userdata.0.Luftqualität.aqi", "", {name: 'AQI',  type: 'string'});
              createState("0_userdata.0.Luftqualität.url", "", {name: 'URL',  type: 'string'});
              createState("0_userdata.0.Luftqualität.url-name", "", {name: 'URL-Name',  type: 'string'});
              createState("0_userdata.0.Luftqualität.url-quelle", "", {name: 'URL-Quelle',  type: 'string'});
              createState("0_userdata.0.Luftqualität.url-quelle-name", "", {name: 'URL-Quelle-Name',  type: 'string'});
              createState("0_userdata.0.Luftqualität.city-geo-latitude", "", {name: 'City-Geo-Latitude',  type: 'number'});
              createState("0_userdata.0.Luftqualität.city-geo-longitude", "", {name: 'City-Geo-Longitude',  type: 'number'});
              createState("0_userdata.0.Luftqualität.city-name", "", {name: 'City-Name',  type: 'string'});
              createState("0_userdata.0.Luftqualität.city-url", "", {name: 'City-URL',  type: 'string'});
              createState("0_userdata.0.Luftqualität.dominentpol", "", {name: 'Dominentpol',  type: 'string'});
              createState("0_userdata.0.Luftqualität.iaqi-humidity", "", {name: 'Humidity',  type: 'number'});
              createState("0_userdata.0.Luftqualität.iaqi-no2", "", {name: 'Nitrogen-Dioxide',  type: 'number'});
              createState("0_userdata.0.Luftqualität.iaqi-o3", "", {name: 'Ozone',  type: 'number'});
              createState("0_userdata.0.Luftqualität.iaqi-p", "", {name: 'Pressure',  type: 'number'});
              createState("0_userdata.0.Luftqualität.iaqi-pm10", "", {name: 'Particulates-PM10',  type: 'number'});
              createState("0_userdata.0.Luftqualität.iaqi-t", "", {name: 'Temperature',  type: 'number'});
              createState("0_userdata.0.Luftqualität.iaqi-w", "", {name: 'Wind',  type: 'number'});
              createState("0_userdata.0.Luftqualität.iaqi-wg", "", {name: 'Wind-Speed',  type: 'number'});
              createState("0_userdata.0.Luftqualität.iaqi-time", "", {name: 'Timestamp',  type: 'string'});
              createState("0_userdata.0.Luftqualität.debug-sync", "", {name: 'Debug-Sync',  type: 'string'});
              var result;
              var Status, obj;
              var AQI;
              var URL;
              var URLName, URLQuelle, URLQuelleName, CityGeoLatitude, CityGeoLongitude, CityName, CityURL;
              var Dominentpol, iaqiHumidity, iaqiNo2, iaqiO3, iaqiP, iaqiPm10, iaqiT, iaqiW, iaqiWg, dTime;
              var resultIAQ;
              var debugSync;
              schedule("*/5 * * * *", async function () {
                try {
                  require("request")('https://api.waqi.info/feed/@6215/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', async function (error, response, result) {
                    setState("0_userdata.0.Luftqualität.aqi-data", result, true);
                    console.log(result);
                  }).on("error", function (e) {console.error(e);});
                } catch (e) { console.error(e); }
                  getAqiData();
              });
              function getAqiData() {
              //Verarbeiten des JSON-Arrays
                  setTimeout(function() {
                  // Code, der erst nach 2 Sekunden ausgeführt wird
                  resultIAQ = getState("0_userdata.0.Luftqualität.aqi-data").val;
                      //Der try ist wichtig damit der Adapter nicht abschmiert bei einem Fehler - hiermit parsen wir die JSON in ein Object
                      try {obj = JSON.parse(resultIAQ);
                      } catch (e) {
                              console.error('Cannot parse:');
                              return;
                      }
                      // Objektvariablen
                      Status          = obj.status;
                      AQI             = obj.data.aqi;
                      URL             = obj.data.attributions[0].url;
                      URLName         = obj.data.attributions[0].name;
                      URLQuelle       = obj.data.attributions[1].url;
                      URLQuelleName   = obj.data.attributions[1].name;
                      CityGeoLatitude = obj.data.city.geo[0];
                      CityGeoLongitude= obj.data.city.geo[1];
                      CityName        = obj.data.city.name;
                      CityURL         = obj.data.city.url;
                      Dominentpol     = obj.data.dominentpol;
                      iaqiHumidity    = obj.data.iaqi.h.v;
                      iaqiNo2         = obj.data.iaqi.no2.v;
                      iaqiO3          = obj.data.iaqi.o3.v;
                      iaqiP           = obj.data.iaqi.p.v;
                      iaqiPm10        = obj.data.iaqi.pm10.v;
                      iaqiT           = obj.data.iaqi.t.v;
                      iaqiW           = obj.data.iaqi.w.v;
                      iaqiWg          = obj.data.iaqi.wg.v;
                      dTime           = obj.data.time.s;
                      debugSync       = obj.data.debug.sync;
                      // Temporäre Variablen
                      AQI = parseFloat(AQI);
                      AQI = AQI.toFixed(0);
                      // Datenpunkte werden mit Inhalt gefüllt
                      setState('0_userdata.0.Luftqualität.status', (Status));
                      setState('0_userdata.0.Luftqualität.aqi', (AQI));
                      setState('0_userdata.0.Luftqualität.url', (URL));
                      setState('0_userdata.0.Luftqualität.url-name', (URLName));
                      setState('0_userdata.0.Luftqualität.url-quelle', (URLQuelle));
                      setState('0_userdata.0.Luftqualität.url-quelle-name', (URLQuelleName));
                      setState('0_userdata.0.Luftqualität.city-geo-latitude', (CityGeoLatitude));
                      setState('0_userdata.0.Luftqualität.city-geo-longitude', (CityGeoLongitude));
                      setState('0_userdata.0.Luftqualität.city-name', (CityName));
                      setState('0_userdata.0.Luftqualität.city-url', (CityURL));
                      setState('0_userdata.0.Luftqualität.dominentpol', (Dominentpol));
                      setState('0_userdata.0.Luftqualität.iaqi-humidity', (iaqiHumidity));
                      setState('0_userdata.0.Luftqualität.iaqi-no2', (iaqiNo2));
                      setState('0_userdata.0.Luftqualität.iaqi-o3', (iaqiO3));
                      setState('0_userdata.0.Luftqualität.iaqi-p', (iaqiP));
                      setState('0_userdata.0.Luftqualität.iaqi-pm10', (iaqiPm10));
                      setState('0_userdata.0.Luftqualität.iaqi-t', (iaqiT));
                      setState('0_userdata.0.Luftqualität.iaqi-w', (iaqiW));
                      setState('0_userdata.0.Luftqualität.iaqi-wg', (iaqiWg));
                      setState('0_userdata.0.Luftqualität.iaqi-time', (dTime));                
                      setState('0_userdata.0.Luftqualität.debug-sync', (debugSync));
                  }, 2000);
              };
              
              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Olli_M last edited by paul53

                @olli_m
                Von den Objekt-Attributen in Zeilen 64 bis 71 gibt es offenbar nur das in Zeile 68.
                Die anderen habe ich nicht angeschaut.

                Olli_M 1 Reply Last reply Reply Quote 0
                • Olli_M
                  Olli_M @paul53 last edited by

                  @paul53

                  und das heisst einfach auslöschen die Zeilen?

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Olli_M last edited by paul53

                    @olli_m sagte: das heisst einfach auslöschen die Zeilen?

                    Nein: Skript mit den tatsächlich erhältlichen Daten neu schreiben.

                    EDIT:

                    const url = 'https://api.waqi.info/feed/A54835/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
                    const path = '0_userdata.0.Luftqualitaet.';
                    const idAqi = path + 'aqi';
                    const idPm10 = path + 'pm10';
                    const idPm25 = path + 'pm25';
                    
                    createState(idAqi, 0, {name: 'AQI', type: 'number', role: 'value', read: true, write: false});
                    createState(idPm10, 0, {name: 'PM10', type: 'number', role: 'value', read: true, write: false});
                    createState(idPm25, 0, {name: 'PM2.5', type: 'number', role: 'value', read: true, write: false});
                    
                    schedule('*/5 * * * *', function() {
                        request(url, function(error, response, result) {
                            if(!error && result) {
                                const obj = JSON.parse(result);
                                if(obj.status == 'ok') {
                                    const data = obj.data;
                                    setState(idAqi, data.aqi, true);
                                    setState(idPm10, data.iaqi.pm10.v, true);
                                    setState(idPm25, data.iaqi.pm25.v, true);
                                }
                            }
                        });
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • M
                      MCU last edited by

                      @olli_m So es wie aussieht hat es in dem Bereich ein Datenübertragungsproblem gegeben. Ich vermute, dass die Daten bald wieder gemeldet werden, ansonsten musst du eine andere Station in der Nähe suchen.

                      581a64e6-e54c-430e-80b6-7da035399654-image.png

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      983
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      299
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo