NEWS
[gelöst] Luftdaten-Adapter mit Timeout
-
Moin
Ich habe ein Problem mit dem Luftdaten-Adapter. Starte ich den neu, läuft alles super für ein paar Stunden. Und im Laufe der Zeit kommt dann immer ein Timeout-Fehler, obwohl die Rohdaten in der JSON Datei aktuell und auch erreichbar sind.
luftdaten.1 2020-06-18 07:45:18.785 info (23036) Terminated (NO_ERROR): Without reason luftdaten.1 2020-06-18 07:45:13.341 warn (23036) Error: ESOCKETTIMEDOUT luftdaten.1 2020-06-18 07:45:08.755 info (23036) starting. Version 0.0.15 in /opt/iobroker/node_modules/iobroker.luftdaten, node: v10.20.1, js-controller: 3.1.4 luftdaten.1 2020-06-18 07:30:18.821 info (9728) Terminated (NO_ERROR): Without reason luftdaten.1 2020-06-18 07:30:13.378 warn (9728) Error: ESOCKETTIMEDOUT luftdaten.1 2020-06-18 07:30:08.801 info (9728) starting. Version 0.0.15 in /opt/iobroker/node_modules/iobroker.luftdaten, node: v10.20.1, js-controller: 3.1.4 luftdaten.1 2020-06-18 07:15:19.026 info (29175) Terminated (NO_ERROR): Without reason luftdaten.1 2020-06-18 07:15:13.588 warn (29175) Error: ESOCKETTIMEDOUT luftdaten.1 2020-06-18 07:15:09.006 info (29175) starting. Version 0.0.15 in /opt/iobroker/node_modules/iobroker.luftdaten, node: v10.20.1, js-controller: 3.1.4
Hat jemand eine Idee woran das liegt?
Dank & Gruß
DanielSystemdata Bitte Ausfüllen Hardwaresystem: NUCi3 Arbeitsspeicher: 8GB Festplattenart: SSD Betriebssystem: Ubuntu Node-Version: 10.20.1 Nodejs-Version: 10.20.1 NPM-Version: 6.14.4 Installationsart: Skript Image genutzt: Nein Ort/Name der Imagedatei: Link -
Kann mich da nur anschließen. Seitdem ich mein System auf die aktuellen Versionen gebracht habe, bekomme ich auch nur noch die folgende Meldung :
020-08-15 17:39:11.013 warn (3844) Error: ESOCKETTIMEDOUT
Habe mal versucht, die Daten direkt auszulesen, da bekomme ich auch den Fehler obwohl die WebSite sofort antwortet:
var url = 'https://data.sensor.community/airrohr/v1/sensor/4106/'; log(url,'info'); request(url, function(err, stat, body) { if(err) console.warn('Error: ' + err); else if(body) { log('*** READ ***',LogLevel); var sensor = JSON.parse(body); }
Scheint ein generelles Node.js-Problem zu sein und damit bin ich mit meinem Latein am Ende
Gruß, Ralf
-
@RK62 @ratte-rizzo
node ist aber schön sauber installiert?lsb_release -a && whoami && which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
-
@Thomas-Braun Davon gehe ich aus. Ich habe das aktuelle Docker-Image von Buanet laufen. Andere Websites werden auch ohne jegliche Probleme ausgelesen. Hat sich da ggf. was im Securityumfeld / Zertifikaten getan dass die Website ggf. nicht mehr ausgelesen werden kann?
root@iobroker:/opt/iobroker# lsb_release -a && whoami && which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 10 (buster) Release: 10 Codename: buster root /usr/bin/nodejs v12.18.3 /usr/bin/node v12.18.3 /usr/bin/npm sudo: Hostname iobroker kann nicht aufgelöst werden: Der Name oder der Dienst ist nicht bekannt 6.14.6 nodejs: Installiert: 12.18.3-1nodesource1 Installationskandidat: 12.18.3-1nodesource1 Versionstabelle: *** 12.18.3-1nodesource1 100 100 /var/lib/dpkg/status
-
@Thomas-Braun bei mir ist auch alles sauber (außer, dass ich auf v10 laufe und nicht v12)
-
zur Info, Habe da einen Issue eröffnet:
https://github.com/klein0r/ioBroker.luftdaten/issues/44Übrigens lese ich die Werte jetzt mit dem Parser und einem kleinen Javascript aus. Bei Interesse melden.
Gruß Ralf
-
@rk62 Hi Ralf!
Hier auch RalfIch wollte dich fragen, ob du mir dein Script zum Luftdaten Adapter Problem mit den Timeouts senden könntest bzw. hier rein stellen? Achja, evtl. kannst du auch noch den Code oder einen Screenshot für den Parser mitschicken!
Besten Dank! und Grüße Ralf
-
@spikenbg Anbei meine Lösung via Parser & Script.
Bin mir aber nicht sicher ob das noch notwendig ist, der Luftdaten-Adapter wurde ja mittlerweile renoviert.Gruß, Ralf
EINSTELLUNG PARSER
SCRIPT FÜR AUSWERTUNG
/* ===================================================================== Ermittelt die aktuellen Luftdaten 15.08.2020 R.Krüger --- 14.03.2021 R.Krüger --- Luftqualitätsbewertung aufgenommen ===================================================================== */ const jsH = 'esk.Luftdaten'; const LogLevel = 'info'; const ParserState = 'parser.0.Luftdaten'; // Benötigte States anlegen createState(jsH+'.SDS_P1', { name: 'SDS_P1', role: 'value.ppm', type: 'number', unit: "µg/m³", write: false}); createState(jsH+'.SDS_P2', { name: 'SDS_P2', role: 'value.ppm', type: 'number', unit: "µg/m³", write: false}); createState(jsH+'.Station', { name: 'StationsID', role: 'Info', type: 'number', write: false}); createState(jsH+'.TimeStamp',{ name: 'TimeStamp', role: 'Timestamp', type: 'string', write: false}); createState(jsH+'.Qualität', { name: 'Luft-Qualität', role: 'esk.value', type: 'string', write: false}); // Luftinfo JSON aus Parser auslesen function GetLuftInfo() { // ====================================================================================== var Luftdaten = getState(ParserState).val; var j = JSON.parse(Luftdaten); // Station ermitteln var l = j[0].sensor.id; setState(jsH+'.Station', String(l)); // Zeit ermitteln let d0 = esk_convertUTCDateToLocalDate(new Date(j[0].timestamp)); var d01 = esk_formatdate(d0); setState(jsH+'.TimeStamp', d01); l += '|'+j[0].timestamp+'|'+d01; // Werte ermitteln for (var i = 0; i <= 1; i++) { // log('Value: '+ j[0].sensordatavalues[i].value_type+'='+j[0].sensordatavalues[i].value, LogLevel); l += '|'+ j[0].sensordatavalues[i].value_type+'='+j[0].sensordatavalues[i].value; switch (j[0].sensordatavalues[i].value_type) { case 'P1': var vP1 = parseFloat(j[0].sensordatavalues[i].value); setState(jsH+'.SDS_P1', vP1); break; case 'P2': var vP2 = parseFloat(j[0].sensordatavalues[i].value); setState(jsH+'.SDS_P2', vP2); break; } } // Qualität bewerten if (vP1 < 10 && vP2 < 10) var vLQ = 'top' else if (vP1 < 30 && vP2 < 20) vLQ = 'gut' else if (vP1 < 50 && vP2 < 30) vLQ = 'mittel' else vLQ = 'schlecht'; setState(jsH+'.Qualität', vLQ); l += '|'+vLQ; log(l, LogLevel) // ====================================================================================== } // Umrechnung UTC-Zeit auf lokale Zeit function esk_convertUTCDateToLocalDate(pDate, pFormat = 'DD.MM.YY hh:mm') { // --------------------------------------------------------------------- var newDate = new Date(pDate.getTime() + pDate.getTimezoneOffset()*60*1000); var offset = pDate.getTimezoneOffset()/60; var hours = pDate.getHours(); newDate.setHours(hours - offset); return newDate; // --------------------------------------------------------------------- } // Formatieren Datum als String function esk_formatdate(pDate) { // --------------------------------------------------------------------- return ("0" + pDate.getDate()).slice(-2) + "." + ("0" +(pDate.getMonth()+1)).slice(-2) + "." + ("0" + pDate.getFullYear()).slice(-2) + " " + ("0" + pDate.getHours()).slice(-2) + ":" + ("0" + pDate.getMinutes()).slice(-2); // --------------------------------------------------------------------- } // Einmal sofort ausführen GetLuftInfo(); // Bei jeder Parser-Aktualisierung ausführen on({id: ParserState, change: "any"}, function (obj) { GetLuftInfo(); });
-
@rk62 Ui, Danke dir! Hab es erst jetzt gerade gelesen.. Bau ich gleich um!
Beste Grüße Ralf
-
Bei mir kommt immer noch sporadisch diese Fehlermeldung
2021-11-15 19:40:16.719 error timeout of 10000ms exceeded
obwohl ich die aktuelle Version des Adapters 1.0.3 einsetze.
-
Moin @stefanh-0
Also das ist meiner Interpretation nach ganz normal und kann vorkommen, wenn der Sensor nur ein schwaches WLAN Signal empfängt. Ist bei mir häufig so.
In einer vorherigen Version des Adapter hat sich der Adapter jedoch aufgehängt und konnte nach dem Timeout nicht erneut gestartet werden, war also bis zur manuellen de- und reaktivierung komplett lahmgelegt. Das letzte Update hat das behoben.
Die Fehlermeldung gab es vorher auch schon und jetzt immer noch. Und sie erscheint mir sinnvoll.
Grüße
Daniel -
Moin Stefan-0,
danke für deine Infos und dass ich nun weiss das es kein Bug sondern ein Feature ist.
Ich frage mich natürlich, was die Meldung mir sagen soll und was ich tun könnte.
Eine Meldung in Dauerschleife immer wieder auszugeben, mach meines Erachtens nicht wirklich Sinn.
Wäre schön, wenn der User in der Adapter-Config selbst entscheiden könnte, ob er diese Meldung auf Dauer haben will. Ansonsten läuft man Gefahr, wenn dies alle Adapter so machen würden, dass man irgendwann bei den Fehlermeldungen den Überblick verliert. Ich persöhnlich versuche mein Log eigentlich möglichst immer sauber zu halten.
Grüße Stefan