NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
halt!
Sie sind Drin!!!
HERZLICHEN DANK euch für die Hilfe!!
Gruss
Matt -
@matt77che sagte in [Linux Shell-Skript] WLAN-Wetterstation:
die IP 192.168.1.244 (die vom Proxmox) angeben musste - und nicht die vom ioBroker (192.168.1.245)
eigentlich jetzt egal, funzt ja, aber du hast 2 verschiedene IPs vom ioBroker?
nein, nicht egal... du hast das direkt im knoten und nicht in deinem ioB container installiert?
ob das so gut ist... -
@da_woody sagte in [Linux Shell-Skript] WLAN-Wetterstation:
ob das so gut ist...
Du stellst dir die Frage wahrscheinlich nicht selbst, aber es lesen ja auch andere still mit.
Da ich pauschal nix böses will oder mache, ist es nicht sooo schlimm.......aber, wenn ich wollte (gerade wenn man wie fast üblich als root unterwegs ist), oder man direkt von GitHub installiert und mein Account wäre dort gehackt, kann der Angreifer dadurch volle Kontrolle über den Knoten erlangen. Dann stehen ihm/ihr/es what ever auch die Türen zu den Containern offen...
Merke: nie, niemals, nimmr als root arbeiten und soviel es geht "kapseln" (auf diverse Maschinen aufteilen). Dann wird es sehr schwer etwas zu kompromittieren
-
@sborg die frage stell ich mir sicher nicht!
als root unterwegs? na hoffentlich bekommt das keiner mit!
ich meinte damit eigentlich nur, wie man auf den trichter kommt, dein script nicht in der ioB VM/container zu insten... -
Hallo zusammen,
ich habe die Installation via Docker gemacht, gibt es hierzu auch updates oder ähnliches?
Wie laufen die Updates über docker ab?
Container recreate mit drope the last image?
/opt/wetterstation ist ja aufgelagert also sollten die Einstellungen und Daten doch bleiben oder?Danke
-
@tege0 Ich kenne mich mit Docker nahezu Null aus. Da es aber ebenfalls in einem Verzeichnis liegt müsste die Standard-Updateroutine ebenfalls greifen:
- wetterstation.sh, wetterstation.sub und ws_updater.sh ersetzen
- dann die Änderungen in der *.conf mittels
./ws_updater.sh --patch
im Installationsverzeichnis durchführen
Wichtig ist lediglich die wetterstation.conf, da hier deine ganzen Einstellungen liegen. Es wird zwar standardmäßig vorher ein Backup angelegt, wenn man aber ganz sicher gehen will, legt man selbst vorher irgendwo eine Kopie ab.
-
javascript.0.Wetterstation.Regen_Jahr
ist nicht vom 1.1. bis 31.12.?
Muss ich dannjavascript.0.Wetterstation.Regen_Jahr_kumuliert
nehmen? -
@negalein Ja. Da addiere ich einfach die ev. täglichen Regenmengen auf.
"Regen_Jahr" liefert die Station (IMO ist die 4000er aktuell die einzige die es liefert). -
Das hatte ich leider heute Morgen...
Heute 01:03 error javascript.0 at Object.main (script.js.Wetter.Statistik-Wetterstation:139:10) Heute 01:03 error javascript.0 at VorJahr (script.js.Wetter.Statistik-Wetterstation:355:67) Heute 01:03 error javascript.0 TypeError: Cannot read property 'Tiefstwert' of undefined
-
Hallo Zusammen
Skript installiert. GW1000 läuft und hängt im Netz.
IOBROKER IP ist die 10.0.50.111 mit dem Port 8087
IP des Linux Hosts (läuft als Linux Container auf Proxmox) - 10.0.50.98
IP des GW1100A - 10.0.50.97Ich dachte das Gateway wird unterstützt laut GitHub & Wiki.
Habe mir nur das Gateway in Kombination mit dem 7in1 Sensor gekauft. Aktuell habe ich nur das Gateway in Betrieb - den Außensensor mache ich morgen oder übermorgen.
Trotzdem kriege ich es irgendwie nicht hin. Hab es sowohl mit EcoWitt als auch mit WunderGround probiert. Hier der Output mit ECOWITT.
Gateway Einstellungen:
Debug Output:
WLAN-Wetterstation V2.11.0 - (c)2019-2021 by SBorg Config-Version: V2.11.0 Sub-Version : V2.11.0 'bc' installiert: [✓] 'jq' installiert: [✓] 'nc' in der Openbsd-Variante installiert: [✓] 'netcat' in Openbsd-Variante aktiv, alles korrekt [✓] Connection to 10.0.50.111 8087 port [tcp/*] succeeded! Messwerteblock: Nicht alle Werte werden unterstützt (abhängig vom Modell der Wetterstation und dem verwendeten Protokoll)! Temperatur Innen : °C Temperatur Aussen : °C Taupunkt : °C Gefühlte Temperatur : °C Luftfeuchte Innen : % Luftfeuchte Aussen : % Windgeschwindkeit : km/h Windböengeschwindkeit : km/h max. Windböe : km/h Windrichtung : ° Windrichtung : Luftdruck absolut : hPa Luftdruck relativ : hPa Regenrate : mm/h Regenstatus : Regen seit Regenbeginn : mm Regen Stunde : mm Regen Tag : mm Regen Woche : mm Regen Monat : mm Regen Jahr : mm Regen Gesamt : mm Sonnenstrahlung : W/m² UV-Index : Zeitstempel : Firmware : Batteriestand: : Gateway-Modell : Zusatzsensoren: Datenstring für ioBroker: DATA von Wetterstation: PASSKEY=xxxxxx&stationtype=GW1100A_V2.0.9&dateutc=2022-02-01+18:18:53&tempinf=74.8&humidityin=47&baromrelin=29.060&baromabsin=29.060&freq=868M&model=GW1100A Debug VAR: Installationsverzeichnis: /home/weather IPP: 10.0.50.111:8087 WS_PORT: 1080 WS_POLL: 30 PRE_DP: javascript.0.Wetterstation WEB: HTTP WS_PROT: Ecowitt DP40/50/60/70/100/200/250/300: 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 WH31: 0 Script-Version: V2.11.0 Config-Version: V2.11.0 Sub-Version: V2.11.0 Kommunikationsfehler!
wetterstation.conf
### Settings V2.11.0 ----------------------------------------------------------- #Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte debug=false #Verhalten bei Kommunikationsfehler [true/false] / default: false / Soll der Datenpunkt automatisch resettet werden? RESET_KOMFEHLER=true #Logging einschalten [true/false] / default: false / schreibt die Datenstrings der Station in eine Datei logging=false #ioBroker-IP und Port der Simple-Restful-API [xxx.xxx.xxx.xxx:xxxxx] IPP=10.0.50.111:8087 #Protokoll der Wetterstation [1/2/9] / 1=Wunderground ; 2=Ecowitt ; 9=Sainlogic Profi / default: 2 WS_PROTOKOLL=2 #Anzahl der vorhandenen Zusatzsensoren / default: 0 ANZAHL_WH31=0 ANZAHL_DP40=0 ANZAHL_DP50=0 ANZAHL_DP60=0 ANZAHL_DP70=0 ANZAHL_DP100=0 ANZAHL_DP200=0 ANZAHL_DP250=0 ANZAHL_DP300=0 #Protokoll (HTTP oder HTTPS) / default: HTTP WEB=HTTP #User-Authentifizierung falls benutzt; sonst leer lassen AUTH_USER= AUTH_PASS= #Port der Wetterstation WS_PORT=1080 #Pollintervall der Wetterstation in Sekunden (minimal 16 Sekunden) WS_POLL=30 #Name/ID der Wetterstation WS_ID=xxxxxx #wo sollen die Datenobjekte abgelegt werden PRE_DP=javascript.0.Wetterstation #InfluxDB-Konfiguration / ohne InfluxDB alles leer lassen #IP und Port der API [xxx.xxx.xxx.xxx:xxxxx] INFLUX_API= #Name, User und Passwort der InfluxDB-Datenbank INFLUX_DB= INFLUX_USER= INFLUX_PASSWORD= #letztes Regenereignis als [DATUM], [UNIX]-Timestamp oder [DIFF]erenz ("vor xx Tagen") # DATUM = 28.04.2020 13:12 # UNIX = 1588074964 # DIFF = gerade eben / vor einer Stunde / vor 23 Stunden / vor einem Tag / vor 12 Tagen LAST_RAIN=DIFF #Text-Format für Datenpunkte "Sonnenschein_[Tag|Woche|Monat|Jahr]_Text" # zweistellig wird ggf. mit einer führenden "0" aufgefüllt # d = Tag(e) 0...n ein- und mehrstellig / h = Stunden 0...n ein- oder mehrstellig # hh = Stunden zweistellig (00...23) / mm = Minuten zweistellig (00...59) / ss = Sekunden zweistellig (00...59) # # Beispiel: 68 Stunden, 2 Minuten und 15 Sekunden # # Auswahl | Ausgabe im Datenpunkt # ---------------------------------------------------------------------------- # [0] = h Std. mm Min. ss Sek. | 68 Std. 02 Min. 15 Sek. # [1] = h:mm | 68:02 # [2] = d Tag/e h Std. | 2 Tage 20 Std. # [3] = d Tag/e, h Std, m Min | 2 Tage, 20 Std, 2 Min (Anzeige Tage erst bei >0) SONNENSCHEIN_TXTFORMAT=3 #Daten an Wetter.com senden (leer lassen falls nicht gewünscht)? WETTERCOM_ID= WETTERCOM_PW= ############################################################################################# ### openSenseMap - Einstellungen (nur nötig falls openSenseMap benutzt werden soll) ### ### ### ### Für die Registrierung muss "openSenseMap" auf "false" eingestellt sein! ### ### Erst wenn auch Sensoren angelegt wurden, darf auf "true" umgestellt werden! ### ############################################################################################# #openSenseMap aktivieren [true/false] / default: false openSenseMap=false #SenseBox-User senseBox_USER= #SenseBox-Password senseBox_PWD= #ID der senseBox (24-stellig) senseBox_ID= #Security-Token der Box BOX_TOKEN= ### Die restlichen Einstellungen für OpenSenseMap werden vom System generiert/benutzt ###### ### Änderungen sind hier nicht nötig, außer man weiß ganz genau was man tut! ############### #Sensor-IDs (wird automatisch anhand der Sensoren erzeugt) SENSEBOX_IDSENSOR=() #Sensor-Bezeichnung (Reihenfolge muss zur Sensor-ID identisch sein!) SENSEBOX_IDNAME=("Temperatur" "Luftfeuchte" "Luftdruck relativ" "Luftdruck absolut" "Taupunkt" "gefühlte Temperatur" "Sonnenstrahlung" "Windgeschwindigkeit" "Windrichtung" "UV-Index" "Regenrate") #Messwertezuordnung (Reihenfolge muss zur Sensor-ID identisch sein!) SENSEBOX_IDMESSWERT=(1 5 10 9 2 3 16 6 8 17 11) #Sensorendefinitionen ICONS=(osem-thermometer osem-humidity osem-barometer osem-barometer osem-thermometer osem-thermometer osem-brightness osem-particulate-matter osem-particulate-matter osem-brightness osem-umbrella) UNITS=('°C' '%H' 'hPa' 'hPa' '°C' '°C' 'W/m²' 'km/h' '°' 'Index' 'mm/h') ############################################################################################# ### openSenseMap - Ende der Einstellungen ############################################# ############################################################################################# ############################################################################################# ### Windy - Einstellungen (nur nötig falls Windy benutzt werden soll) ### ############################################################################################# #Windy aktivieren [true/false] / default: false use_windy=false #Windy API-Key windy_APIKey= #Station [number: 0 - 2147483647] / default: 0 windy_Station= #Name der Station [Text] windy_Name= #Latitude/Breitengrad der Station windy_Latitude= #Longitude/Längengrad der Station windy_Longitude= #Elevation/Höhe ÜNN windy_Elevation= #Montagehöhe Temperatursensor über Boden windy_Tempheight= #Montagehöhe Windsensor über Boden windy_Windheight= ############################################################################################# ### Windy - Ende der Einstellungen #################################################### ############################################################################################# ### Ende Usereinstellungen ###EoF
-
IT IS WORKING NOW!!!
Hab den Außensensor angelernt und es ging sofort. Jetzt passt der String auch zusammen!
Danke - alles gelöst.
-
@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.