NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
@sborg Okay verstanden.
P.S.
Das ist eine super Lösung. Ich bin ganz begeistert und werde meine bisherige Wetterstation nun durch diese Lösung ablösen. Ich freue mich schon auf den Rasenfeuchtemesser -
Wie stelle ich denn fest ob die Verbindung vom Script zur InfluxDB funktioniert?
Ich dachte ja dass das Script dann Werte in die DB schreibt selbst wenn der ioBroker offline ist. -
@rushmed Wenn hier Daten unter ....Info befüllt sind (alle Werte unter Punkt "4" in der WiKi):
- 24h + "Heute" im Viertelstundentakt
- 365 Tage einmalig pro Tag gegen 23:58 Uhr ("Mitternachtjobs")
- meteorologischer Sommer nur Juni - August
...und nein, ich schreibe nichts in die Influx. Das Skript ist zwar "bash", aber im Grunde auch nichts anderes wie ein Adapter (der halt dann unter Javascript läuft) von denen auch keiner direkt in die InfluxDB schreibt. Dies handelt alles der InfluxDB-Adapter. Sonst müsste sich der User selbst um bspw. die Retention Policy etc. kümmern oder ich muss das alles abbilden und konfigurierbar machen. Da blickt dann aber kaum noch jemand durch.
Da würde ich aber das Rad zum zweiten mal erfinden wollen...
Das geht einfacher per ioB-GUI -
@sborg Ah ok, da steht bei mir was drin.
-
@sborg
Ich habe die 2.11.1 Version laufen und nun auch den DP100 integriert. Es funktioniert fast alles: Es fehlen nur die DatenpunkteInfo.Temp_Aussen_24h_max und ..min
Wo kann der Fehler liegen? Die Wetterstation läuft schon ein paar Tage.
-
@martybr Liegt daran dass du noch keine 365 Tage loggst.
-
@rushmed Ich dachte, dass sind die Tageshöchst- oder Tagesmindesttemperaturen. Dann lasse ich das mal weitere 363 Tage laufen
-
@martybr Sorry, meine aussage bezog sich auf die DPs mit 365t.
Bei mir siehts so aus, ich hab aber vor Kurzem alle Daten zurückgesetzt.
Edit: Ich seh gerade, da stimmt was nicht mit den heutigen min-, max-Werten
-
@rushmed Vielleicht ist da ein Problem in dem Script. Welcher Version setzt du ein?
-
@martybr Beide Scripte sind aktuell.
-
@rushmed
Ich setze die 2.11.1 ein. Welche zwei Scripte setzt du ein? Auch das Statistik-Script? -
@martybr
wetterstation-statistik.js V1.0.1
wetterstation.sh V2.11.1 -
@rushmed
Ich habe nun auch das Statistik-Script in der aktuellen Version 1.0.1 installiert. Es liefert leider immer den FehlerFehler beim Lesen der InfluxDB: Invalid call
Hast du den String in
//InfluxDB abfragen (Regen +1min Startverzögerung wg. ev. Ungenauigkeit der Systemzeit des Wetterstation-Displays) sendTo('influxdb.'+INFLUXDB_INSTANZ, 'query', 'select * FROM "' + WET_DP + '.Aussentemperatur" WHERE time >= ' + (start *1000000) + ' AND time <= ' + (end *1000000) + '; select * FROM "' + WET_DP + '.Wind_max" WHERE time >= ' + (start *1000000) + ' AND time <= ' + (end *1000000) + '; select * FROM "' + WET_DP + '.Regen_Tag" WHERE time >= ' + ((start+72000) *1000000) + ' AND time <= ' + (end *1000000) , function (result) { //Anlegen der Arrays + befüllen mit den relevanten Daten if (result.error) { console.error('Fehler beim Lesen der InfluxDB: '+result.error); Statusmeldung('Fehler beim Lesen der InfluxDB: '+result.error); } else { //console.log('Rows: ' + JSON.stringify(result.result[2])); for (let i = 0; i < result.result[0].length; i++) { temps[i] = result.result[0][i].value; } for (let i = 0; i < result.result[1].length; i++) { wind[i] = result.result[1][i].value; } for (let i = 0; i < result.result[2].length; i++) { regen[i] = result.result[2][i].value; } }
auf InfluxDB V2 angepasst?
Edit:
Habe folgende Log-Einträge:javascript.0 2022-03-02 09:18:07.870 info Stop script script.js.Wetterstation.Statistik_Wetterstation javascript.0 2022-03-02 09:16:00.189 warn TypeError: Reduce of empty array with no initial value at Array.reduce (<anonymous>) at Object.cb (script.js.Wetterstation.Statistik_Wetterstation:741:43) at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5809:71) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-states-redis/lib/states/statesInRedisClient.js:322:37) at processImmediate (internal/timers.js:464:21) javascript.0 2022-03-02 09:16:00.185 warn States system pmessage io.messagebox.system.adapter.javascript.0 {"command":"query","message":{"result":[],"error":"Invalid call"},"from":"system.adapter.influxdb.0","callback":{"message":"select * FROM \"0_userdata.0.Wetterstation.Aussentemperatur\" WHERE time >= 1646089200000000000 AND time <= 1646175599000000000; select * FROM \"0_userdata.0.Wetterstation.Wind_max\" WHERE time >= 1646089200000000000 AND time <= 1646175599000000000; select * FROM \"0_userdata.0.Wetterstation.Regen_Tag\" WHERE time >= 1646089272000000000 AND time <= 1646175599000000000","id":1,"ack":true,"time":1646208960014},"_id":61369237} Reduce of empty array with no initial value javascript.0 2022-03-02 09:16:00.184 error script.js.Wetterstation.Statistik_Wetterstation: Fehler beim Lesen der InfluxDB: Invalid call influxdb.0 2022-03-02 09:16:00.158 error queries: Error: 3 Error happened while processing 3 queries influxdb.0 2022-03-02 09:16:00.158 warn Error in query " select * FROM "0_userdata.0.Wetterstation.Regen_Tag" WHERE time >= 1646089272000000000 AND time <= 1646175599000000000": HttpError: error @1:2-1:8: undefined identifier selecterror @1:11-1:15: undefined identifier FROMerror @1:55-1:60: undefined identifier WHEREerror @1:61-1:65: (v:A) => time is not Equatableerror @1:89-1:92: undefined identifier ANDerror @1:93-1:97: (v:A) => time is not Equatable influxdb.0 2022-03-02 09:16:00.151 warn Error in query " select * FROM "0_userdata.0.Wetterstation.Wind_max" WHERE time >= 1646089200000000000 AND time <= 1646175599000000000": HttpError: error @1:2-1:8: undefined identifier selecterror @1:11-1:15: undefined identifier FROMerror @1:54-1:59: undefined identifier WHEREerror @1:60-1:64: (v:A) => time is not Equatableerror @1:88-1:91: undefined identifier ANDerror @1:92-1:96: (v:A) => time is not Equatable influxdb.0 2022-03-02 09:16:00.141 warn Error in query "select * FROM "0_userdata.0.Wetterstation.Aussentemperatur" WHERE time >= 1646089200000000000 AND time <= 1646175599000000000": HttpError: error @1:1-1:7: undefined identifier selecterror @1:10-1:14: undefined identifier FROMerror @1:61-1:66: undefined identifier WHEREerror @1:67-1:71: (v:A) => time is not Equatableerror @1:95-1:98: undefined identifier ANDerror @1:99-1:103: (v:A) => time is not Equatable
-
Die 365Tage lassen wir mal außen vor, da muss man halt schon mindestens ein Jahr loggen
Da aber "Heute" und "letzte 24h" im 15 Minuten-Raster generiert werden, liegen diese spätestens zur nächsten vollen (00, 15, 30 oder 45) Viertelstunde vor.
"Heute" ist allerdings um Mitternacht ein Sonderfall, da bedingt durch die Usereinstellungen wie viel Datenpunkte im RAM gehalten werden sollen, es nicht sichergestellt ist, dass wirklich schlag 0:00 Uhr auch schon ein Wert der Außentemperatur vorliegt (für "letzte 24h" wird immer mal ein Wert vorliegen, notfalls steht dann halt "(null)" da). Es könnte dann also sein, dass bis zum nächsten Update um 0:15 Uhr oftmals kein Messwert vorliegt/angezeigt wird.
Deswegen wird, falls kein Min-/Max-Wert ermittelt werden konnte, einfach die aktuelle Außentemperatur angezeigt. Würde in dem Fall ja stimmen, denn wenn ich nur einen Messwert habe, stellt der Min-, Max- und Durchschnittstemperatur gleichermaßen dar. Erst wenn ich einen davon abweichenden Messwert erhalte sind die drei unterschiedlich.Lange Rede, kurzer Sinn. Das Fehlerbild zeigt eindeutig, das ihr keine Verbindung zur InfluxDB habt, deswegen sind die "24h" nur "(null)" (=kein Wert gelesen) und die Min-/Max-Temp identisch, da er auch hier nix aus der InfluxDB lesen konnte aber dann dafür die akt. Außentemperatur nutzt...
-
@sborg Das ist ja genau die Frage. Mit dem folgenden Code kann ich auf dem Influx-Server die Daten abrufen:
influx query 'from(bucket:"iobroker") |> range(start:-15m) |> filter(fn: (r) => r._measurement == "proxmox.0.node_pve.cpu")|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")'
Da bekomme ich auch Ergebnisse. Ich habe nun versucht, den Code im Statistik-Script anzupassen. Ich bekomme leider immer wieder Script Fehler:
//InfluxDB abfragen (Regen +1min Startverzögerung wg. ev. Ungenauigkeit der Systemzeit des Wetterstation-Displays) sendTo('influxdb.'+INFLUXDB_INSTANZ, 'query', ' FROM(bucket:"iobroker")' |> range(start:-1h) |> filter(fn: (r) => r["_measurement"] == WET_DP +".Aussentemperatur")|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")' + '; FROM(bucket:"iobroker")' |> range(start:-1h) |> filter(fn: (r) => r["_measurement"] == WET_DP +".Wind_max")|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")' + '; FROM(bucket:"iobroker")' |> range(start:-1h) |> filter(fn: (r) => r["_measurement"] == WET_DP +".Regen_Tag")|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")' , function (result) { //Anlegen der Arrays + befüllen mit den relevanten Daten if (result.error) { console.error('Fehler beim Lesen der InfluxDB: '+result.error); Statusmeldung('Fehler beim Lesen der InfluxDB: '+result.error); } else { //console.log('Rows: ' + JSON.stringify(result.result[2])); for (let i = 0; i < result.result[0].length; i++) { temps[i] = result.result[0][i].value; } for (let i = 0; i < result.result[1].length; i++) { wind[i] = result.result[1][i].value; } for (let i = 0; i < result.result[2].length; i++) { regen[i] = result.result[2][i].value; } }
Vielleicht kann mir hier ein Fachmann helfen?
-
Ich nutze InfluxDB 2.1.1.
In der Conf habe ich die Zugangsdaten zu meiner auf V1 gemappten DB eingetragen die ich auch für den Zugriff mit Grafana nutze.#InfluxDB-Konfiguration / ohne InfluxDB alles leer lassen #IP und Port der API [xxx.xxx.xxx.xxx:xxxxx] INFLUX_API=192.168.178.20:8086 #Name, User und Passwort der InfluxDB-Datenbank INFLUX_DB=ioBroker_db INFLUX_USER=USERNAME INFLUX_PASSWORD=PASSWORD
Reichen denn diese Zugangsdaten wirklich?
Um mit Grafana auf die gemappte DB zugreifen zu können muss zusätzlich:
eingestellt werden, wobei Value = Token MYTOKEN ist. -
@rushmed Ich habe es genauso gemacht. Die Datenbank habe ich auf V1 gemalt und
influx v1 dbrp list
hat das erfolgreiche Mapping gezeigt.
Setzt du das unveränderte Statistik-Script ein? -
@martybr ja
-
@rushmed Und es liefert Werte? Bei mir bricht es ab.
Ich habe keine Idee mehr -
@martybr Du hast Recht. Ich hab das voll übersehen. Die Werte sind noch von vor meine Umstellung auf Influx2.