Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. [Linux Shell-Skript] WLAN-Wetterstation

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Linux Shell-Skript] WLAN-Wetterstation

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Matt77CHE @SBorg last edited by

      @sborg

      also bei ps -aux etc gibt er mir nichts aus - also gar nichts;

      der Befehl sudo service stop wetterstation gibt aus: stop: unrecognized service ;

      der Befehl wie in der Anleitung: sudo systemctl stop wetterstation funktioniert;

      bekomme jedoch noch immer keine Daten....

      Latzi 1 Reply Last reply Reply Quote 0
      • M
        Matt77CHE @Latzi last edited by

        @latzi
        ich habe die IP Adresse vom ioBroker angegeben: 192.168.1.245
        Beim Port dann 1080

        SBorg 1 Reply Last reply Reply Quote 0
        • Latzi
          Latzi @Matt77CHE last edited by

          @matt77che sagte in [Linux Shell-Skript] WLAN-Wetterstation:

          der Befehl wie in der Anleitung: sudo systemctl stop wetterstation funktioniert;

          damit ist das service gestoppt; sudo systemctl start wetterstation

          1 Reply Last reply Reply Quote 0
          • SBorg
            SBorg Forum Testing Most Active @Matt77CHE last edited by

            @matt77che Sorry, habe mich verleiten lassen, muss nicht "service" sondern "systemctl" lauten, aber egal, er läuft nicht.

            @matt77che sagte in [Linux Shell-Skript] WLAN-Wetterstation:

            192.168.1.245

            ...und das ist auch die IP von dem Rechner auf dem das Skript läuft, also "Skript-Rechner" = "ioB-Rechner" (was so Ok ist, aber das Display schickt halt die Daten genau dahin und dann muss auch dort das Skript laufen)

            1 Reply Last reply Reply Quote 0
            • M
              Matt77CHE last edited by

              oook - ihr habt mich auf die Spur gebracht.....!

              Ich bekomme nun bei --debug alle Daten angezeigt!

              • lag daran (danke SBorg für den Wink mit dem Zaunpfahl), dass ich bei der Wetterstation die IP 192.168.1.244 (die vom Proxmox) angeben musste - und nicht die vom ioBroker (192.168.1.245) - da das Skript auf der 244 installiert ist obwohl es da im Ordner iobroker liegt.. (der iobroker ist in einem Container in Proxmox).

              jetzt habe ich zwar die Daten beim Debug - aber noch nicht im iobroker.....

              da_Woody 1 Reply Last reply Reply Quote 0
              • M
                Matt77CHE last edited by

                halt!

                Sie sind Drin!!!

                HERZLICHEN DANK euch für die Hilfe!!

                Gruss
                Matt

                1 Reply Last reply Reply Quote 0
                • da_Woody
                  da_Woody @Matt77CHE last edited by

                  @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...

                  SBorg 1 Reply Last reply Reply Quote 0
                  • SBorg
                    SBorg Forum Testing Most Active @da_Woody last edited by

                    @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 🙂

                    da_Woody 1 Reply Last reply Reply Quote 0
                    • da_Woody
                      da_Woody @SBorg last edited by

                      @sborg noe.png 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...

                      1 Reply Last reply Reply Quote 0
                      • T
                        tege0 last edited by

                        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

                        SBorg 1 Reply Last reply Reply Quote 0
                        • SBorg
                          SBorg Forum Testing Most Active @tege0 last edited by

                          @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.

                          1 Reply Last reply Reply Quote 1
                          • Negalein
                            Negalein Global Moderator last edited by

                            @SBorg

                            f6108b5d-a783-487f-a80a-e01681bbab20-image.png

                            javascript.0.Wetterstation.Regen_Jahr ist nicht vom 1.1. bis 31.12.?
                            Muss ich dann javascript.0.Wetterstation.Regen_Jahr_kumuliert nehmen?

                            SBorg 1 Reply Last reply Reply Quote 0
                            • SBorg
                              SBorg Forum Testing Most Active @Negalein last edited by

                              @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).

                              1 Reply Last reply Reply Quote 1
                              • Nashra
                                Nashra Most Active Forum Testing last edited by

                                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
                                

                                wetterstatistik2.PNG

                                H 1 Reply Last reply Reply Quote 0
                                • H
                                  halsi82 @Nashra last edited by

                                  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.97

                                  Ich 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:
                                  0d44e8cd-8dc0-4f80-94f4-fac48c1cfb06-image.png

                                  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
                                  
                                  H 1 Reply Last reply Reply Quote 0
                                  • H
                                    halsi82 @halsi82 last edited by

                                    IT IS WORKING NOW!!!

                                    Hab den Außensensor angelernt und es ging sofort. Jetzt passt der String auch zusammen!

                                    Danke - alles gelöst.

                                    SBorg 1 Reply Last reply Reply Quote 0
                                    • SBorg
                                      SBorg Forum Testing Most Active @halsi82 last edited by

                                      @halsi82

                                      🙂


                                      @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?
                                      Bild 0.png

                                      Dein aktueller 2022er-01 Datenpunkt muss eigentlich vom Skript generiert so aussehen:
                                      Bild 1.png Bild 2.png Bild 3.png

                                      Wichtig sind hier bei #1 und #17 die eckigen Klammern.
                                      Dann sollte zumindest mit folgender Version aktuell der Januar (s.o.) angezeigt werden:

                                      
                                      // @liv-in-sky 4.10.2021 11:45
                                      //forum: https://forum.iobroker.net/topic/38286/vis-tabelle-f%C3%BCr-wlan-wetterstation
                                      
                                      
                                      const dataInputPath="0_userdata.0.Statistik.Wetter.Data";  //SEHR WICHTIG !!!!!!!!!
                                      const inhaltFarbe="black";
                                      const inhaltHintergrund="lightgray";
                                      const monatFarbe="white";
                                      const hintergrund="gray";
                                      const htmlFarbTableBorderColor="black";
                                      const abstandZelle=6;
                                      const htmlRahmenLinien="all";
                                      const htmlSchriftgroessehtmlSchriftart=""; //nicht verwendbar!
                                      const htmlFarbFelderschrift="red";         //nicht verwendbar!
                                      const htmlSchriftgroesse="13px";
                                      const htmlSchriftart="Ubuntu-Light";       //"monospace" oder z.b. "Helvetica"
                                      const weite="auto";                        //oder "500px"
                                      let myTable="table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                                           "; font-family:"+htmlSchriftart+";\"";
                                                           
                                      const varData={ 
                                                    Tiefstwert:       { einheit:"°C",   name:"Minimum Temperatur"},
                                                    Hoechstwert:      { einheit:"°C",   name:"Maximum Temperatur"}, 
                                                    Temp_Durchschnitt:{ einheit:"°C",   name:"Durchschnittstemperatur"},
                                                    Max_Windboe:      { einheit:'km/h', name:"Max Windböe"},
                                                    Max_Regenmenge:   { einheit:'l/m2', name:"Max. Regen/Tag"},
                                                    Regenmenge_Monat: { einheit:'l/m2', name:"Regen"},
                                                    sehr_kalte_Tage:  { einheit:"",     name:"Sehr kalte Tage (Min. unter -10°C)"},
                                                    Eistage:          { einheit:"",     name:"Eistage (Max. unter 0°C)"},
                                                    Frost_Tage:       { einheit:"",     name:"Frosttage (Min. unter 0°C)"},
                                                    kalte_Tage:       { einheit:"",     name:"Kalte Tage (Max. unter 10°C)"},
                                                    warme_Tage:       { einheit:"",     name:"Warme Tage (über 20°C)"},
                                                    Sommertage:       { einheit:"",     name:"Sommertage (über 25°C)"},
                                                    heisse_Tage:      { einheit:"",     name:'Heiße Tage (über 30°C)'}
                                      }  
                                      
                                      const monate =["JANUAR","FEBRUAR","MÄRZ","APRIL","MAI","JUNI","JULI","AUGUST","SEPTEMBER","OKTOBER","NOVEMBER","DEZEMBER"];
                                      
                                      
                                      //--------------------------nix mehr ändern ab hier--------------------------------------
                                      let myObj;
                                      let myArrAll=[]
                                      let myArrErstellt=[]
                                      let tableContent;
                                      let monWahlVIS;
                                      let lastThree;
                                      //----------------------------------------------------------------------------------------
                                      function dataStuff(){
                                      let myArrAll=[]
                                      let mySelector=dataInputPath+'.*.*'
                                      $(mySelector).each(function(id, i) {
                                       let ida=id.split("."); let lang=ida.length; let jahri=lang-2; let moni=lang-1;
                                       let obj2 = { jahr: ida[jahri]};
                                       let obj3 = { monat: ida[moni]};
                                       let formathelp=getState(id).val
                                       let helper;
                                       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);}
                                      
                                       helper={ ...helper, ...obj2, ...obj3}
                                       myArrAll.push(JSON.stringify(helper))
                                      });
                                      //log(myArrAll)
                                      tableContent = ""  
                                      myObj=JSON.parse("["+myArrAll.toString()+"]")
                                      
                                      if (lastThree==0) {
                                      //KOPFZEILE
                                      let choseMonth=monate[monWahlVIS-1]
                                      let choseMonthArr=choseMonth.split('')
                                      let test=""
                                      for (let i=0;i<choseMonthArr.length;i++){
                                       // log(choseMonthArr[i])
                                        test=test+choseMonthArr[i]+`
                                        `    
                                      }
                                      
                                      //log(test)
                                      //tableContent+='<td  class=\"test-klein\"  rowspan=\"14\"\">'+choseMonth+'</td><td>Wetterwerte</td>'
                                      tableContent+='<td class=\"myWetterStation\" width=\"25px\"  style=\"color:'+monatFarbe+';font-size:26px; background-color:'+hintergrund+' ; vertical-align:middle; text-align:center \"   rowspan=\"14\"\">'+test+'</td><td style=\"color:'+monatFarbe+'; background-color:'+hintergrund+'"\>Jahreswerte</td>'
                                      for (let i=0;i<myObj.length;i++) {
                                        if(parseInt(myObj[i].monat)==monWahlVIS){
                                      tableContent += '<td style=\"color:'+monatFarbe+'; background-color:'+hintergrund+'"\ align=center>'  + myObj[i].jahr+'</td>'}
                                      }; tableContent="<tr style=\"font-weight\:bold\">"+tableContent+"</tr>"
                                      //RESTZEILEN
                                      for(var index in varData){
                                        tableContent+='<td style=\"color:'+inhaltFarbe+'; background-color:'+inhaltHintergrund+'\">'+varData[index].name+'</td>'
                                        for (let i=0;i<myObj.length;i++) {
                                           if(myObj[i].monat==monWahlVIS){
                                             tableContent += '<td style=\"color:'+inhaltFarbe+'; background-color:'+inhaltHintergrund+'\" align=right>' + myObj[i][index] + ' '+ varData[index].einheit+'</td>'}
                                                                         }; tableContent="<tr>"+tableContent+"</tr>"
                                      
                                      }
                                      } //lastThree
                                      else {
                                      //log(myObj[0].monat)
                                         myObj.sort(function (alpha, beta) {
                                                  if (parseInt(alpha.monat) > parseInt(beta.monat))
                                                      return 1;
                                                   if (parseInt(beta.monat) > parseInt(alpha.monat))
                                                      return -1;
                                                   return 0;});
                                               //    log(myObj[0].monat)
                                      
                                      //KOPFZEILE LASTTHREE
                                      
                                      let choseJahr=lastThree.toString()//formatDate(getDateObject((new Date().getTime())), "JJJJ")//monate[monWahlVIS-1]
                                      let choseMonthArr=choseJahr.split('')
                                      let test=""
                                      for (let i=0;i<choseMonthArr.length;i++){
                                       // log(choseMonthArr[i])
                                        test=test+choseMonthArr[i]+`
                                        `    
                                      }
                                      
                                      //log(test)
                                      //tableContent+='<td  class=\"test-klein\"  rowspan=\"14\"\">'+choseMonth+'</td><td>Wetterwerte</td>'
                                      tableContent+='<td class=\"myWetterStation\" width=\"25px\"  style=\"color:'+monatFarbe+';font-size:26px; background-color:'+hintergrund+' ; vertical-align:middle; text-align:center \"   rowspan=\"14\"\">'+test+'</td><td style=\"color:'+monatFarbe+'; background-color:'+hintergrund+'"\>Wetterwerte</td>'
                                      
                                      for (let i=0;i<myObj.length;i++) {
                                        
                                        if( parseInt(myObj[i].jahr)==parseInt(choseJahr) ){ //&& (parseInt(myObj[i].monat)==parseInt(monWahlVIS) || parseInt(myObj[i].monat)==parseInt(monWahlVIS)-1 || parseInt(myObj[i].monat)==parseInt(monWahlVIS)-2)){
                                      tableContent += '<td style=\"color:'+monatFarbe+'; background-color:'+hintergrund+'"\ align=center>'  + monate[parseInt(myObj[i].monat)-1]+'</td>';}
                                      }; tableContent="<tr style=\"font-weight\:bold\">"+tableContent+"</tr>"
                                      //RESTZEILEN
                                      for(var index in varData){
                                        tableContent+='<td style=\"color:'+inhaltFarbe+'; background-color:'+inhaltHintergrund+'\">'+varData[index].name+'</td>'
                                        for (let i=0;i<myObj.length;i++) {
                                         if( parseInt(myObj[i].jahr)==parseInt(choseJahr) ){ //&& (parseInt(myObj[i].monat)==parseInt(monWahlVIS) || parseInt(myObj[i].monat)==parseInt(monWahlVIS)-1 || parseInt(myObj[i].monat)==parseInt(monWahlVIS)-2)){
                                             tableContent += '<td style=\"color:'+inhaltFarbe+'; background-color:'+inhaltHintergrund+'\" align=right>' + myObj[i][index] + ' '+ varData[index].einheit+'</td>'}
                                                                         }; tableContent="<tr>"+tableContent+"</tr>"
                                      
                                      }
                                      
                                      
                                      }
                                      
                                      tableContent = '<'+myTable+' ><tbody>'+tableContent+'</tbody></table >'
                                      //log(tableContent)
                                      
                                      setState("javascript." + instance + ".Wetterstation.MonthlyDaten",tableContent)
                                      }
                                      
                                      //--------------------------------------------------------------------------------------------------
                                      async function main() {
                                        if (!(await existsStateAsync("javascript." + instance + ".Wetterstation.MonthlyDaten"))) {
                                            await createStateAsync("Wetterstation.MonthlyDaten", "leer", {type: "string", name: "MonthlyDaten", role: "value", read: true, write: true, } ); }
                                        if (!(await existsStateAsync("javascript." + instance + ".Wetterstation.MonatAuswahl"))) {
                                            await createStateAsync("Wetterstation.MonatAuswahl", 10, {type: "number", name: "MonatAuswahl", role: "value", read: true, write: true, } ); } 
                                        if (!(await existsStateAsync("javascript." + instance + ".Wetterstation.AuswahlJahr"))) {
                                            await createStateAsync("Wetterstation.AuswahlJahr", 0, {type: "number", name: "AuswahlJahr", role: "value", read: true, write: true, } ); } 
                                        lastThree = (await getStateAsync("javascript." + instance + ".Wetterstation.AuswahlJahr")).val //? lastThree=true : lastThree=false;  
                                             
                                        monWahlVIS=((await getStateAsync("javascript." + instance + ".Wetterstation.MonatAuswahl")).val ) 
                                        dataStuff(); 
                                      }
                                      
                                      //-----------------------------------------------------------------------------------------------------
                                      main()
                                      
                                      on({id: "javascript." + instance + ".Wetterstation.MonatAuswahl", change: "any"}, async function (obj) {
                                        main()
                                      });
                                      
                                      on({id: "javascript." + instance + ".Wetterstation.AuswahlJahr", change: "any"}, async function (obj) {
                                        main()
                                      });
                                      
                                      schedule('*/30 * * * *', function() { 
                                        let MonatTmp = parseInt(formatDate(getDateObject((new Date().getTime())), "MM"));
                                        if (MonatTmp>1) { MonatTmp--; } //Patch 
                                        setState("javascript." + instance + ".Wetterstation.MonatAuswahl", MonatTmp) ;
                                        setStateDelayed("javascript." + instance + ".Wetterstation.AuswahlJahr", parseInt(formatDate(getDateObject((new Date().getTime())), "JJJJ")),10000) ;
                                      });
                                      
                                      
                                      

                                      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
                                      1 Reply Last reply Reply Quote 0
                                      • Nashra
                                        Nashra Most Active Forum Testing last edited by Nashra

                                        @SBorg
                                        die Klammern sind drin
                                        statistik-1.PNG
                                        statistik-2.PNG

                                        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)
                                        
                                        SBorg 1 Reply Last reply Reply Quote 0
                                        • SBorg
                                          SBorg Forum Testing Most Active @Nashra last edited by

                                          @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 😉

                                          1 Reply Last reply Reply Quote 0
                                          • Nashra
                                            Nashra Most Active Forum Testing last edited by

                                            Hallo @SBorg, alles so gemacht wie beschrieben aber beim starten des Skripts immer ERROR-Meldung.

                                            SBorg 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            498
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            linux shell-script wetterstation wlan-wetterstation
                                            142
                                            5473
                                            3261211
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo