NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
@SBorg
Heute Morgen folgender Fehler im Log2023-07-01 01:03:00.081 - error: javascript.0 (433) Error in callback: TypeError: VorJahr.substring is not a function 2023-07-01 01:03:00.081 - error: javascript.0 (433) at VorJahr (script.js.Wetter.Statistik-WS:415:38) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at Object.main (script.js.Wetter.Statistik-WS:156:4) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1606:34) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 2023-07-01 01:03:00.082 - error: javascript.0 (433) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at listOnTimeout (node:internal/timers:569:17) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at processTimers (node:internal/timers:512:7)
In der Statistik-Anzeige ist soweit alles ok
-
@nashra said in [Linux Shell-Skript] WLAN-Wetterstation:
@SBorg
Heute Morgen folgender Fehler im Log2023-07-01 01:03:00.081 - error: javascript.0 (433) Error in callback: TypeError: VorJahr.substring is not a function 2023-07-01 01:03:00.081 - error: javascript.0 (433) at VorJahr (script.js.Wetter.Statistik-WS:415:38) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at Object.main (script.js.Wetter.Statistik-WS:156:4) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1606:34) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 2023-07-01 01:03:00.082 - error: javascript.0 (433) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at listOnTimeout (node:internal/timers:569:17) 2023-07-01 01:03:00.082 - error: javascript.0 (433) at processTimers (node:internal/timers:512:7)
In der Statistik-Anzeige ist soweit alles ok
Mein modifizierter Code lief diesmal ohne Probleme
2023-07-01 01:03:00.028 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: [{'Tiefstwert':6.7,'Hoechstwert':37,'Temp_Durchschnitt':21,'Max_Windboee':42.11,'Max_Regenmenge':22,'Regenmenge_Monat':54.9,'warme_Tage':29,'Sommertage':23,'heisse_Tage':8,'Frost_Tage':0,'kalte_Tage':0,'Eistage':0,'sehr_kalte_Tage':0}] 2023-07-01 01:03:00.029 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Tiefstwert--> 6.7 2023-07-01 01:03:00.029 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Hoechstwert--> 37 2023-07-01 01:03:00.030 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Temp_Durchschnitt--> 21 2023-07-01 01:03:00.030 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Max_Windboee--> 42.11 2023-07-01 01:03:00.030 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Max_Regenmenge--> 22 2023-07-01 01:03:00.030 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Regenmenge_Monat--> 54.9 2023-07-01 01:03:00.031 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_warme_Tage--> 29 2023-07-01 01:03:00.031 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Sommertage--> 23 2023-07-01 01:03:00.031 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_heisse_Tage--> 8 2023-07-01 01:03:00.031 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Frost_Tage--> 0 2023-07-01 01:03:00.031 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_kalte_Tage--> 0 2023-07-01 01:03:00.032 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_Eistage--> 0 2023-07-01 01:03:00.048 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: .Vorjahres_sehr_kalte_Tage--> 0 2023-07-01 01:03:00.049 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: Auswertung durchgeführt... 2023-07-01 01:03:00.230 - info: javascript.0 (1421438) script.js.common.wetter.Wetterstation_Statistik: Ausführung zum Monatsersten beendet...
let zeitstempel = new Date(); let datum = new Date(zeitstempel.getFullYear(),zeitstempel.getMonth(),zeitstempel.getDate()); let monatsdatenpunkt = '.Data.'+ (datum.getFullYear()-1) +'.'+pad(datum.getMonth()+1); if (existsState(PRE_DP+monatsdatenpunkt)) { //der einfache Weg: wir haben schon Daten vom Vorjahr... let VorJahr = getState(PRE_DP+monatsdatenpunkt).val; VorJahr = JSON.parse(VorJahr); // Daten vom Vorjahr durchiterieren und Datenpunkte befüllen console.log (VorJahr); VorJahr.forEach(obj => { Object.keys(obj).forEach(key => { console.log ('.Vorjahres_' + key + '--> ' + obj[key]); // fix für Datenpunktname let setkey = key; if (key == 'Temp_Durchschnitt') setkey = "Temperatur_Durchschnitt"; setState(PRE_DP+'.Vorjahres_Monat.' +setkey, obj[key], true); }); });
-
@nashra Der Fehler bezieht sich/macht sich bemerkbar auch auf den VorJahres_Monat. Hier wirst du so aktuell keine Daten vom Juli 2022 haben, sondern irgendwo Daten von April oder Mai 2022 (Zeitstempel 01-05-2023 oä):
@_all_Statistiker
Fix für Juli:- neues JS mit folgendem Inhalt anlegen, ausführen, stoppen (kann danach gelöscht werden)
const PRE_DP='0_userdata.0.Statistik.Wetter'; //Speicherort der Statistikdaten const monatsdatenpunkt='.Data.2022.07'; //.Data.Jahr.Monat let VorJahr = getState(PRE_DP+monatsdatenpunkt).val; VorJahr = JSON.parse(VorJahr); // Daten vom Vorjahr durchiterieren und Datenpunkte befüllen console.log (VorJahr); VorJahr.forEach(obj => { Object.keys(obj).forEach(key => { console.log ('.Vorjahres_' + key + '--> ' + obj[key]); // fix für Datenpunktname let setkey = key; if (key == 'Temp_Durchschnitt') setkey = "Temperatur_Durchschnitt"; setState(PRE_DP+'.Vorjahres_Monat.' +setkey, obj[key], true); }); });
(sollte einiges an Ausgabe produzieren), danach sind die Juli 2022 (sofern man Daten hatte) Werte vorhanden.
-
@boronsbruder Asche auf mein Haupt
Schon vor Juni geändert, lief dann im Juni und Juli durch, da ich es selbst aber aktiv nicht nutze kpl. vergessen...
An alle Statistiker:
Neue Version V2.0.3 des Statistik-Scriptes auf GitHub verfügbar.
Am einfachsten wie immer den Konfigurationsblock per C&P sichern, Skript kpl. ersetzen und den Konfig-Block wieder mittels C&P zurückschreiben. -
also für die noch-nicht-fitten Statistiker, diesen Bereich sichern?
// *** User-Einstellungen ********************************************************************************************************************************** const WET_DP='0_userdata.0.Wetterstation'; // wo liegen die Datenpunkte mit den Daten der Wetterstation [default: 0_userdata.0.Wetterstation] const INFLUXDB_INSTANZ='0'; // unter welcher Instanz läuft die InfluxDB [default: 0] const INFLUXDB_BUCKET='ioBroker'; // Name des zu benutzenden Buckets const PRE_DP='0_userdata.0.Statistik.Wetter'; // wo sollen die Statistikwerte abgelegt werden. Nur unter "0_userdata" oder "javascript" möglich! let REKORDWERTE_AUSGABEFORMAT="[WERT] im [MONAT] [JAHR]"; /* Wie soll die Ausgabe der Rekordwerte formatiert werden (Template-Vorlage)? [WERT] = Messwert (zB. '22.42' bei Temperatur, '12' bei Tagen) [TAG] = Tag (0-31) [MONAT] = Monatsname (Januar, Februar,..., Dezember) [MONAT_ZAHL]= Monat als Zahl (01-12) [MONAT_KURZ]= Monatsname kurz (Jan, Feb,..., Dez) [JAHR] = Jahreszahl vierstellig (2020) Die 'Units' wie bspw. "°C" oder "Tage" werden direkt aus dem Datenpunkt ergänzt. [default: [WERT] im [MONAT] [JAHR] ] erzeugt als Beispiel im DP die Ausgabe: "22.42 °C im Juni 2020" */ const ZEITPLAN = "3 1 * * *"; // wann soll die Statistik erstellt werden (Minuten Stunde * * *) [default 1:03 Uhr] // *** ENDE User-Einstellungen *****************************************************************************************************************************
dann neues Script einfügen und den User-Einstellungs-Bereich wieder einfügen?
-
@negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
coming soon ...
cool
World of WarcraftNicht ganz
Wer demnächst Beta testen will, kann schon mal https://github.com/SBorg2014/WLAN-Wetterstation/wiki/Installation-WeatherObservationsWebsite-(optional)
und könnte mir vor dem anlegen der Site einen Auszug schicken was da bei "My Sites" steht:
...und wie man sieht, "WOW" kommt nicht von mir (hätte ich aber auch genauso abgekürzt ) -
@tritor Im Grunde ja. In deinem Fall (wenn man die Defaults nutzt) einfach den Inhalt des kpl. Scripts löschen (CTRL-A und dann "Entf" drucken) das neue Script mittels (CTRL-A und CTRL-C) in die Zwischenablage kopieren und mittels CTRL-V in das leere Script im ioBroker einfügen. Dann brauchst du nur in dem Einstellungsblock dein Bucket von "Wetter" wieder auf "ioBroker" ändern, speichern und wieder starten.
-
Hätte noch ein Problem mit Regeninfos:
Es hatte gestern geregnet und habe es aber nicht angezeigt bekommen. Werder als Status noch als Regenrate/hhier die Screenshots:
letzte Regenmenge wurde angezeigt,
Bei den RegenDPs aber nicht:
Woran kann das liegen?
-
@tritor Liegt leider an der Station. Deren "Woche" beginnt dummerweise Sonntags, nicht wie bei uns üblich Montags. Also resetten die Sonntags um Mitternacht die Werte. Da kann ich dann leider auch nichts mehr auslesen...
Die Werte sind nicht verloren, nur landet der "Sontags-Regen" dann in der aktuellen Woche, die dann aber auch leider Samstagd endet...
-
@sborg
ok - ist halt so.
Aber dann sollte dich Regen_Total irgendeienn Wert annehmen - oder bzw. während des Regens sollte dich die Regenrate sich ändern. Die blieb aber immer auf 0. -
@tritor Das mit "Regen_Total" liegt auch an der Station (wurde bei mir mit irgendeinem FW-Upgrade eingeführt), denn der Wert kommt auch so von der Station (und einige liefern diesen nicht).
Die Regenrate sollte sich aber ändern. Ich habe zwar aktuell keinen Regen, aber das hat gestern bei mir funktioniert. Bei Regenrate > 0 meldet Alexa bei mir "Es hat angefangen zu regnen" und das vermeldete sie gestern Abend
...und noch mal eben nachgeschaut, jepp, da war ein Regenereignis (ist also [leider] so kein prinzipielles Problem):
Funktionierte dies bisher bei dir bzw. hast du eine Regenrate-Anzeige auf deinem Display? Nutzt du WU- oder Ecowitt-Protokoll?
Du kannst auch mal den Service stoppen (systemctl stop wetterstation
) und dann im Installationsverzeichnis stehend ein./wetterstation.sh --data
ausführen. Dann sieht man was die Station tatsächlich liefert (wenn du ihn hier posten willst ruhig die StationID und Passwort x-en, brauche ich nicht )
Service wieder starten nicht vergessen:systemctl start wetterstation
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
und könnte mir vor dem anlegen der Site einen Auszug schicken was da bei "My Sites" steht:
was genau benötigst du da?
-
Hier die Daten. Übertragen sollten sie werden, aber kommt nix von Wetterstation.
Ich prüf mal die Außenstation. Eventuell hat der Regensensor ein Problem.iobroker@ioBroker-prox:~$ ./wetterstation.sh --data Connection to 192.168.10.161 8087 port [tcp/*] succeeded! Warte maximal 56 Sekunden auf Datenpaket der Wetterstation... Listening on 0.0.0.0 9080 Connection received on 192.168.10.188 26636 PASSKEY=XXXXXXXXXXXXXXXXXX&stationtype=EasyWeatherV1.6.5&dateutc=2023-07-02+13:01:02&tempinf=76.5&humidityin=51&baromrelin=29.844&baromabsin=29.144&tempf=75.4&humidity=55&winddir=317&winddir_avg10m=329&windspeedmph=10.3&windspdmph_avg10m=4.7&windgustmph=13.6&maxdailygust=18.3&rainratein=0.000&eventrainin=0.000&hourlyrainin=0.000&dailyrainin=0.000&weeklyrainin=0.000&monthlyrainin=0.000&yearlyrainin=15.571&solarradiation=1015.51&uv=9&soilmoisture1=41&soilmoisture2=28&soilmoisture3=17&soilmoisture4=18&soilmoisture5=50&wh65batt=0&wh25batt=0&soilbatt1=1.3&soilbatt2=1.3&soilbatt3=1.3&soilbatt4=1.2&soilbatt5=1.3&freq=868M&model=HP1000SE-PRO_Pro_V1.9.0
-
@negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
was genau benötigst du da?
Danke, sehe ich schon auf deiner Hardcopy (es ging um den Link-Text neben "Home").
-
@tritor Ok, Regenrate ist da vorhanden. Du kannst, sofern du an den Wettermast kommst, auch paar mal die Wippe des Regensenors bewegen, dann sollte sich aktuell etwas ändern.
...und "Regen_total" macht deine Station tatsächlich nicht.
-
Hallo in die Runde!
Kurze Frage: bekomme ich die Sache auch mit einer ioBroker-Installation zum laufen, die sich in einem Docker-Container auf einer Synology befindet? (Eine Suche im Thread nach den Begriffen "docker" oder "Synology" hat mir nicht weitergeholfen...) Ich habe mit diesem Setup schon viele, viele Stunden Frustration erlebt und wenn ich von Anfang as weiß, dass es nicht (einfach) geht, lasse ich besser die Finger davon...Update: sorry, hatte zu früh gefragt und inzwischen die Infos zu Docker gefunden. Werde es versuchen…
-
@sebhoff Erwarte da aber nicht all zu viel Hilfe für Docker. Ich weiß zwar, dass es ein paar am laufen haben, selbst kann ich da aber kaum helfen (ich nutze Proxmox).
-
Neue Beta-Version des Wetterstation WLAN-Skriptes auf GitHub V3.2.0
(Beta-Releases lassen sich nicht! über den ws_updater.sh installieren, nur die *.conf lässt sich mit dem ws_updater.beta ggf. patchen [s.u.])
- + Support für WeatherObservationsWebsite (WOW)
Wie immer zu finden im GitHub
Update-Routine:
- wetterstation.sh, wetterstation.sub und ws_updater.beta (muss "ausführbar" sein
chmod +x ws_updater.beta
) ersetzen bzw. kopieren - wetterstation.js muss ebenfalls im JavaScript-Adapter ersetzt und einmalig ausgeführt werden (neuer Datenpunkt .Info.WOW); bei aktivierter Rest-API wird der Datenpunkt automatisch im ioB angelegt (1)
./ws_updater.beta --patch
im Installationsverzeichnis ausführen und ev. Hinweise beachten- nun mittels
[sudo] systemctl restart wetterstation
den Service neu starten
(1) es empfiehlt sich danach den Simple-API-Adapter neu zu starten (entweder per WebIF oder einfach
iob restart simple-api.0
)
Aktuell ist dies noch eine halbfertige Beta. Sie funktioniert (oder sollte, bei mir rennt sie seit ca. 14 Tagen problemlos) soweit fehlerfrei, allerdings mangels Zeit meinerseits wird aktuell nur Temperatur, Taupunkt und Luftfeuchte übertragen. Technisch sind die restlichen kein Problem, aber es kostet halt doch Zeit wie jetzt bspw. beim Luftdruck noch zusätzlich den hPa in "Inch of Mercury" umzurechnen... (Jepp, habe ich vorher auch noch nie gehört )
Einstellungen des Accounts lt. WiKi (Update von heute) beachten!
-
@sborg Vielen Dank! Ich habe mich inzwischen dazu entschieden, die Sache auf einem älteren Raspberry Zero laufen zu lassen, der friedlich auf der Synology liegt und dort nicht stört. Nach meinen bisherigen Erfahrungen ist das sicher die schmerzlosere Variante...
Läuft auch schon alles ganz gut - bin beeindruckt vom Funktionsumfang und der Dokumentation! Einziger Knackpunkt scheint zur Zeit folgendes zu sein:/home/wetter/wetterstation/wetterstation.sub: line 725: printf: `%d Std, %d Min': not a valid identifier /home/wetter/wetterstation/wetterstation.sub: line 725: printf: `%d Std, %d Min': not a valid identifier /home/wetter/wetterstation/wetterstation.sub: line 725: printf: `%d Std, %d Min': not a valid identifier /home/wetter/wetterstation/wetterstation.sub: line 725: printf: `%d Std, %d Min': not a valid identifier
Das wird dann wohl auch der Grund für folgende Log-Einträge sein:
simple-api.0 2023-07-11 08:16:07.275 info State value to set for "0_userdata.0.Wetterstation.Info.Sonnenschein_Jahr" has to be type "number" but received type "string" simple-api.0 2023-07-11 08:16:07.274 info State value to set for "0_userdata.0.Wetterstation.Info.Sonnenschein_Monat" has to be type "number" but received type "string" simple-api.0 2023-07-11 08:16:07.274 info State value to set for "0_userdata.0.Wetterstation.Info.Sonnenschein_Woche" has to be type "number" but received type "string" simple-api.0 2023-07-11 08:16:07.273 info State value to set for "0_userdata.0.Wetterstation.Info.Sonnenschein_Tag" has to be type "number" but received type "string"
Ich gehe davon aus, dass ich da nicht der Erste mit bin und werde nun suchen...
-
@sebhoff Wir sind auch mittlerweile im 4. Jahr der Entwicklung
...und ja, die Log-Einträge kommen durch den Fehler. Der Fehler kommt mir auch bekannt vor, kann mich nur gerade selbst nicht erinnern was es damals war. Es dürfte zumindest kein Fehler von dir sein. Er kann da die Sonnenscheindauer nicht korrekt berechnen (die sollte allerdings bei einer frischen Installation dann zumindest "0" sein...)
Hast du mal das Skript gestoppt und neu gestartet?
systemctl stop wetterstation
paar Sekunden wartensystemctl start wetterstation