NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
@Nashra Nutzt du aktuell wieder das "Original" von liv-in-sky (die dürfte nach der Umstellung des Datenformates aktuell so nicht mehr laufen) oder die modifizierte Version?
Dein aktueller 2022er-01 Datenpunkt muss eigentlich vom Skript generiert so aussehen:
Wichtig sind hier bei #1 und #17 die eckigen Klammern.
Dann sollte zumindest mit folgender Version aktuell der Januar (s.o.) angezeigt werden:
Dann müsstest du alle bisherigen Monatseinträge kontrollieren ob die nach demselben Schema angelegt sind.
Es wird zwar temporär funktionieren wenn du die Klammern einfach löschst, dass ist aber keine dauerhafte Lösung:
- du wirst den Fehler jeden Monat bekommen
- du kannst dann in einem Jahr keine Vorjahreswerte einlesen
-
@SBorg
die Klammern sind drin
aber das Skript habe ich verglichen, ist die alte Version.
Nehme das von dir jetzt.Beim Start von deinem Skript kommt
17:17:44.965 error javascript.0 (377) script.js.Wetter.Statistik-Tabelle-LivInSky: SyntaxError: Unexpected token : in JSON at position 12 17:17:44.965 error javascript.0 (377) at script.js.Wetter.Statistik-Tabelle-LivInSky:59:56 17:17:44.965 error javascript.0 (377) at dataStuff (script.js.Wetter.Statistik-Tabelle-LivInSky:51:15) 17:17:44.966 error javascript.0 (377) at main (script.js.Wetter.Statistik-Tabelle-LivInSky:157:3)
-
@nashra sagte in [Linux Shell-Skript] WLAN-Wetterstation:
SyntaxError: Unexpected token : in JSON at position 12
Da meckert er den ":" in einem JSON-Datensatz an. Sieht nach einem (oder mehreren) inkonsistenten Datensatz/sätze aus.
Schau mal so ab Zeile ~#55 nach:if (typeof(formathelp)=="object") {helper=getState(id).val[0];} else if (typeof(formathelp)=="string") { helper=getState(id).val; helper=JSON.parse(helper.substring(1, (getState(id).val).length-1)); } else {helper=JSON.parse(getState(id).val);} console.log(helper); helper={ ...helper, ...obj2, ...obj3}
und füge da den Befehl
console.log(helper);
wie oben zu sehen ein. Dann sollten in der Console und Log bis zu 16 Meldungen (wir hatten IMHO so Sep. 2020 angefangen) auftauchen. Die müssen alle dem Schema nach sein:script.js.common._wo_das_Skript_liegt_._wie_es_heißt_: {'Tiefstwert':-3.38,'Hoechstwert':12.5,'Temp_Durchschnitt':2.86,'Max_Windboe':40.39,'Max_Regenmenge':29.8,'Regenmenge_Monat':68.8,'warme_Tage':0,'Sommertage':0,'heisse_Tage':0,'Frost_Tage':13,'kalte_Tage':27,'Eistage':0,'sehr_kalte_Tage':0}
Wichtig dabei ist, dass der Datensatz mit {} beginnt/endet. Zur Kontrolle genügt dann auch noch der Blick auf den
ersten Messwert nach dem Muster 'Messwertbezeichnung':Messwert, (brauchst also nicht alle Werte kontrollieren, es genügt die reine Syntax. Ist der erste in der Syntax soweit korrekt, sind es die anderen diesen Datensatzes auch).
Sollte das alles korrekt sein, muss eigentlich einer/mehrere der Datenpunkte im falschen Format ("string/json") angelegt sein....und nicht vergessen den "console.log..."-Befehl wieder zu löschen, sonst hast du jede Menge Meldungen im Log
-
Hallo @SBorg, alles so gemacht wie beschrieben aber beim starten des Skripts immer ERROR-Meldung.
-
@nashra Ok, dann kann es eigentlich nur noch am Format liegen und er erkennt es nicht korrekt.
Nochmal wie oben, anstelle von
console.log(helper);
nun aberconsole.log(typeof(formathelp));
Da sollte nun eigentlich so ~12x "object" kommen und die letzten x-mal (zumindest mindestens der letzte) "string" ?btw: ioB auf Linux oder Windows und stable oder latest? (me ist auf Linux und latest unterwegs)
Muss ja irgendeinen Grund haben warum es gerade offenbar nur bei dir nicht lüppt -
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@nashra Ok, dann kann es eigentlich nur noch am Format liegen und er erkennt es nicht korrekt.
Nochmal wie oben, anstelle von
console.log(helper);
nun aberconsole.log(typeof(formathelp));
Da sollte nun eigentlich so ~12x "object" kommen und die letzten x-mal (zumindest mindestens der letzte) "string" ?btw: ioB auf Linux oder Windows und stable oder latest? (me ist auf Linux und latest unterwegs)
Muss ja irgendeinen Grund haben warum es gerade offenbar nur bei dir nicht lüpptMoin, Linux mit
Admin 5.2.3
JS 5.2.13
Node.js v14.18.2
NPM 6.14.15
Hosts 3.3.22javascript.0 377 2022-02-05 11:01:30.065 info Stop script script.js.Wetter.Statistik-Tabelle-LivInSky javascript.0 377 2022-02-05 11:01:25.477 error at main (script.js.Wetter.Statistik-Tabelle-LivInSky:158:3) javascript.0 377 2022-02-05 11:01:25.477 error at dataStuff (script.js.Wetter.Statistik-Tabelle-LivInSky:50:15) javascript.0 377 2022-02-05 11:01:25.477 error at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:819:29) javascript.0 377 2022-02-05 11:01:25.477 error at script.js.Wetter.Statistik-Tabelle-LivInSky:58:56 javascript.0 377 2022-02-05 11:01:25.477 error at JSON.parse (<anonymous>) javascript.0 377 2022-02-05 11:01:25.477 error script.js.Wetter.Statistik-Tabelle-LivInSky: SyntaxError: Unexpected token : in JSON at position 12 javascript.0 377 2022-02-05 11:01:25.468 info script.js.Wetter.Statistik-Tabelle-LivInSky: registered 2 subscriptions and 1 schedule javascript.0 377 2022-02-05 11:01:25.448 info Start javascript script.js.Wetter.Statistik-Tabelle-LivInSky
Nachtrag:
habe die eckigen Klammern mal entfernt im json und das alte Skript
gestartet, Daten werden angezeigt.Nachtrag2:
ist mir gerade erst aufgefallen, der Januar hat 31 Tage aber in der Anzeige
steht "kalte_Tage": 52, -
@nashra Hmm, ok, dann eben anders...
Neues JS, egal wo und wie es heißt mit folgendem Inhalt:
let t="0_userdata.0.Statistik.Wetter.Data.2022.01"; let wert=getState(t).val; let test=JSON.parse(wert.substring(1, wert.length-1)); console.log(typeof(t)); console.log(wert); console.log(test);
Bei #1 ggf. den Pfad anpassen, die Daten aber bitte vom Januar 2022 belassen (gerne aber auch mal mit bspw. Juni 2021 gegenchecken).
Erwarteter Output für 01.2022 wäre:string [{"Tiefstwert": ... }] {'Tiefstwert': ... }
Wichtig sind nur "string" (Juni 21 sollte hier "object" liefern), dass die eckigen Klammern entfallen und
"
durch'
ersetzt wurde.Ich kann leider bei mir nichts simulieren, denn dazu müsste ich wissen was der Fehler ist. Dann könnte ich ihn aber auch gleich beseitigen...
@nashra sagte in [Linux Shell-Skript] WLAN-Wetterstation:
ist mir gerade erst aufgefallen, der Januar hat 31 Tage aber in der Anzeige
steht "kalte_Tage": 52,Ich weiß nicht wie lange schon und warum überhaupt, aber das Problem scheint älter. Da es nicht immer auftritt ist es wohl ein Timing-Problem. Teil 1 läuft noch während Teil 2 schon was von Teil 1 möchte...
Geändert habe ich es bereits, muss aber bis zum nächsten 1. warten ob es auch funktioniert. -
Also folgendes
15:44:39.706 error javascript.0 (115229) script.js.Wetter.Test: SyntaxError: Unexpected token ] in JSON at position 327 15:44:39.706 error javascript.0 (115229) at script.js.Wetter.Test:3:15 15:44:39.706 error javascript.0 (115229) at script.js.Wetter.Test:9:3
ändere ich den Pfad auf 2020.01 kommt dies
15:48:17.997 info javascript.0 (115229) Start javascript script.js.Wetter.Test 15:48:18.011 info javascript.0 (115229) script.js.Wetter.Test: string 15:48:18.011 info javascript.0 (115229) script.js.Wetter.Test: [ { "Tiefstwert": -1.77, "Hoechstwert": 12.27, "Temp_Durchschnitt": 2.95, "Max_Windboe": 40.39, "Max_Regenmenge": 22.3, "Regenmenge_Monat": 165.6, "warme_Tage": 0, "Sommertage": 0, "heisse_Tage": 0, "Frost_Tage": 10, "kalte_Tage": 26, "Eistage": 0, "sehr_kalte_Tage": 0 } ] 15:48:18.011 info javascript.0 (115229) script.js.Wetter.Test: {'Tiefstwert':-1.77,'Hoechstwert':12.27,'Temp_Durchschnitt':2.95,'Max_Windboe':40.39,'Max_Regenmenge':22.3,'Regenmenge_Monat':165.6,'warme_Tage':0,'Sommertage':0,'heisse_Tage':0,'Frost_Tage':10,'kalte_Tage':26,'Eistage':0,'sehr_kalte_Tage':0} 15:48:18.011 info javascript.0 (115229) script.js.Wetter.Test: registered 0 subscriptions and 0 schedules
sorry aber das kapier ich nicht
-
@nashra Immerhin kommen wir der Sache näher. Ich glaube der mag bei dir "JSON.parse" nicht...
Kommentiere mal #3 aus (
//
voranstellen)://let test=...
Geht dann zumindest teilweise der Januar 22? Müsste eine "NaN / undefined" Meldung kommen da er "test" nun nicht mehr kennt.
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@nashra Immerhin kommen wir der Sache näher. Ich glaube der mag bei dir "JSON.parse" nicht...
Kommentiere mal #3 aus (
//
voranstellen)://let test=...
Geht dann zumindest teilweise der Januar 22? Müsste eine "NaN / undefined" Meldung kommen da er "test" nun nicht mehr kennt.
16:27:05.629 info javascript.0 (115229) Start javascript script.js.Wetter.Test 16:27:05.631 info javascript.0 (115229) script.js.Wetter.Test: string 16:27:05.631 info javascript.0 (115229) script.js.Wetter.Test: [ { "Tiefstwert": -4.77, "Hoechstwert": 14.88, "Temp_Durchschnitt": 4.58, "Max_Windboe": 38.46, "Max_Regenmenge": 12.9, "Regenmenge_Monat": 145.3, "warme_Tage": 0, "Sommertage": 0, "heisse_Tage": 0, "Frost_Tage": 13, "kalte_Tage": 52, "Eistage": 0, "sehr_kalte_Tage": 0 } ] 16:27:05.632 info javascript.0 (115229) script.js.Wetter.Test: registered 0 subscriptions and 0 schedules 16:27:05.632 error javascript.0 (115229) script.js.Wetter.Test: ReferenceError: test is not defined 16:27:05.632 error javascript.0 (115229) at script.js.Wetter.Test:7:13 16:27:05.632 error javascript.0 (115229) at script.js.Wetter.Test:9:3
-
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
let test=wert.join());
16:40:20.426 info javascript.0 (115229) Start javascript script.js.Wetter.Test 16:40:20.432 error javascript.0 (115229) script.js.Wetter.Test compile failed: at script.js.Wetter.Test:3
-
@nashra Mist, eine Klammer zu viel...
let test=wert.join();
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@nashra Mist, eine Klammer zu viel...
let test=wert.join();
16:43:33.321 info javascript.0 (115229) Start javascript script.js.Wetter.Test 16:43:33.345 info javascript.0 (115229) script.js.Wetter.Test: registered 0 subscriptions and 0 schedules 16:43:33.347 error javascript.0 (115229) script.js.Wetter.Test: TypeError: wert.join is not a function 16:43:33.347 error javascript.0 (115229) at script.js.Wetter.Test:3:15 16:43:33.347 error javascript.0 (115229) at script.js.Wetter.Test:9:3
-
@nashra Keine Ahnung was bei dir schief läuft...
Muss ich mir im stillen Kämmerlein paar Gedanken dazu machen. Melde mich dann so am 30. Februar wiederAls Q&D nimm halt aktuell die alte Version und lösche die
[]
heraus (sind ja auch wieder schnell eingefügt ). -
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@nashra Keine Ahnung was bei dir schief läuft...
Muss ich mir im stillen Kämmerlein paar Gedanken dazu machen. Melde mich dann so am 30. Februar wiederAm 31. würde mir eher passen
Als Q&D nimm halt aktuell die alte Version und lösche die
[]
heraus (sind ja auch wieder schnell eingefügt ).Ok, mache ich, Danke erstmal
-
Moin @SBorg
bei mir funktioniert auf einmal die Übertragung an Wetter.com nicht mehr.
In der conf ist die ID und Passwort eingetragen aber der DP steht auf false.
Von Hand auf true geändert aber beim nächsten aktualisieren geht er wieder auf false.
Aufgefallen ist mir dies als ich bei Wetter.com meine Station überprüfen wollte
und dort "Wetterdaten sind noch nicht vorhanden" angezeigt wurde. Wie lange
das jetzt schon so ist kann ich nicht genau sagen, aber es hatte mal funktioniert. -
@nashra +1
-
@nashra Moin, moin. So ca. 2-3 Tage. War kurz vor dem Wochenende tot. Hat wohl keiner bei denen gemerkt, und beim letzten Ausfall haben sie übers WE auch nichts gefixt. Geht vermutlich morgen dann irgendwann wieder.
Einfach abwarten und bis zum 31. Februar Tee trinken -
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Einfach abwarten und bis zum 31. Februar Tee trinken
Nix Tee, lieber lecker Bierchen