NEWS
JS Problem Weather Script Air Quality :-(
-
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
-
@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.
-
@olli_m Den Inhalt vom DP
0_userdata.0.Luftqualität.aqi-data
reinstellen, in Code-Tags. -
{ "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!
-
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); };
-
@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. -
und das heisst einfach auslöschen die Zeilen?
-
@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); } } }); });
-
@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.