NEWS
Netatmo Crawler Durchschnittswerte errechnen [Script]
-
Hallo zusammen,
ich bin auf Facebook auf einen netten Herren gestoßen, der mir geholfen hat ein JavaScript zu schreiben, welches Durchschnittswerte für den Netatmo-Crawler-Adapter errechnet. Das möchte ich euch nicht vorenthalten!
Folgende Einstellungen sind möglich:
-Zeile 2: Hier kann man den gesuchten Wert einstellen wie z.B. temperature, oder humidity.-Zeile 3: Hier kann ein Datenpunkt angegeben werden, in den der errechnete Durchschnittswert geschrieben wird.
-Zeile 4: Hier kommt die Einheit rein.
-Zeile 5: Hier können Stationen ausgeklammert werden. Wenn man z.B. 10 Stationen mit dem Adapter "crawlt", jedoch nur die ersten 3 für z.B. die Temperatur verwenden möchte dann tragt man das so ein: [1,1,1,0,0,0,0,0,0,0].
-Zeile 6: Hier kann noch eine Zeit in Minuten eingetragen werden, nach welcher der Adapter die ausgewählten Daten ignoriert. Das ist gut, damit alte Werte nicht den Durschnitt "versauen".
Ich selbst habe mit JavaScript kaum Erfahrungen und kann daher eher keinen Support bieten, denke aber dennoch, dass das hier der ein oder andere User gebrauchen könnte.
Freue mich über euer Feedback!
Hier das Script:
//Netatmo Abruf und Durchschnittberechnung (Wert wird nur verwendet wenn aktuell) var selVal = $('netatmo-crawler.0.stationData.*.temperature');//Pfad zum Messwert der Stationen var idAvgVal = '0_userdata.0.*Datenpunkt*';//Datenpunkt wo der Durchschnittswert hin gespeichert wird var unit = "°C"; var arrFilter=[1,1,1,1,1,1,1,1,1,1];//Station manuell deaktivieren: 0=deaktiviert, 1=aktiviert var maxDelay = 30;//Minuten //############################## Ab hier nichts mehr ändern ################################ var idAlive = 'system.adapter.netatmo-crawler.0.alive'; var i, ii, j, k, l, jetzt, diff, val, unreachSta, avgVal; var arrStaName, arrVal, arrUpdate; on({id:idAlive, val:false}, function(obj){ setTimeout(function(){//Verzögerter Funktionsaufruf um sicher Daten zu haben f_getValues(); },1000); }); f_getValues(); function f_getValues(){ arrVal=[]; arrUpdate=[]; arrStaName=[]; val=[]; unreachSta=[]; jetzt = new Date().getTime(); selVal.each(function (id, i) { if(getObject(id).common.name.indexOf("lastUpdated") == -1){//Werte ii=Math.floor(i/2); arrVal[ii]=getState(id).val; arrStaName[ii]=getObject(id).common.name.substring(12); }else if(getObject(id).common.name.indexOf("lastUpdated") == 14){//Update ii=Math.floor(i/2); arrUpdate[ii]=getState(id).val; }//end if });//end each j=0; k=0; for(i=0;i<arrVal.length;i++){ diff=jetzt-arrUpdate[i]; if(diff < maxDelay * 60 * 1000 && arrFilter[i] == 1){ val[j] = arrVal[i]; j++; }else{ unreachSta[k] = arrStaName[i]; k++ }//end if }//end for log("Gültige Werte: " + val); log("Offline Stationen (älter "+ maxDelay +" Minuten) oder abgewählte Stationen: " + unreachSta); avgVal=0; for(l=0;l<val.length;l++){ avgVal += val[l]; } avgVal = Math.round((avgVal / val.length) * 100)/100; log("Durchschnittswert aus " + val.length + " Werten = "+ avgVal + unit); setState(idAvgVal, avgVal, true); }//end function
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden