Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Datenpunkt für JSON

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.0k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Datenpunkt für JSON

Scheduled Pinned Locked Moved JavaScript
22 Posts 3 Posters 2.0k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Kail

    @paul53
    Über das Script sollen Werte aus Datenpunkten von DasWetter gesammelt werden.

    paul53P Offline
    paul53P Offline
    paul53
    wrote on last edited by paul53
    #11

    @kail sagte: aus Datenpunkten

    Z.B. so:

    const ids = [id1, id2, id3];
    const arr = [];
    
    for(let i = 0; i < ids.length; i++) {
        let state = getState(ids[i]);
        let obj = {
            time: formatDate(state.lc, 'hh:mm:ss'),
            value: state.val
        };
        arr.push(obj);
    }
    
    setState(idJSON, JSON.stringify(arr), true);
    

    Es wird noch ein Trigger benötigt.

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    K 1 Reply Last reply
    0
    • paul53P paul53

      @kail sagte: aus Datenpunkten

      Z.B. so:

      const ids = [id1, id2, id3];
      const arr = [];
      
      for(let i = 0; i < ids.length; i++) {
          let state = getState(ids[i]);
          let obj = {
              time: formatDate(state.lc, 'hh:mm:ss'),
              value: state.val
          };
          arr.push(obj);
      }
      
      setState(idJSON, JSON.stringify(arr), true);
      

      Es wird noch ein Trigger benötigt.

      K Offline
      K Offline
      Kail
      wrote on last edited by
      #12

      @paul53
      Danke für Deinen Support.
      Die Anzahl der Datenpunkte ist 24
      const i_max = 24
      Kann die id des Datenpunktes auch zusammensetzt sein, original für den ersten wäre:

      daswetter.0.NextHours.Location_1.Day_1.Hour_1.rain_value
      

      Die variable Lösung wäre mit i, wobei i dann mit 1 anfangen müsste.

      daswetter.0.NextHours.Location_1.Day_1.Hour_  + i + .rain_value
      
      paul53P 2 Replies Last reply
      0
      • K Kail

        @paul53
        Danke für Deinen Support.
        Die Anzahl der Datenpunkte ist 24
        const i_max = 24
        Kann die id des Datenpunktes auch zusammensetzt sein, original für den ersten wäre:

        daswetter.0.NextHours.Location_1.Day_1.Hour_1.rain_value
        

        Die variable Lösung wäre mit i, wobei i dann mit 1 anfangen müsste.

        daswetter.0.NextHours.Location_1.Day_1.Hour_  + i + .rain_value
        
        paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #13

        @kail sagte: wobei i dann mit 1 anfangen müsste.

        Stunden fangen mit 1 an?

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Reply Last reply
        0
        • K Kail

          @paul53
          Danke für Deinen Support.
          Die Anzahl der Datenpunkte ist 24
          const i_max = 24
          Kann die id des Datenpunktes auch zusammensetzt sein, original für den ersten wäre:

          daswetter.0.NextHours.Location_1.Day_1.Hour_1.rain_value
          

          Die variable Lösung wäre mit i, wobei i dann mit 1 anfangen müsste.

          daswetter.0.NextHours.Location_1.Day_1.Hour_  + i + .rain_value
          
          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #14

          @kail sagte: Kann die id des Datenpunktes auch zusammensetzt sein

          const path = 'daswetter.0.NextHours.Location_1.Day_1.Hour_';
          const arr = [];
           
          for(let i = 1; i <= 24; i++) {
              let state = getState(path + i + '.rain_value');
              let obj = {
                  time: formatDate(state.lc, 'hh:mm:ss'),
                  value: state.val
              };
              arr.push(obj);
          }
           
          setState(idJSON, JSON.stringify(arr), true);
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          K 1 Reply Last reply
          0
          • paul53P paul53

            @kail sagte: Kann die id des Datenpunktes auch zusammensetzt sein

            const path = 'daswetter.0.NextHours.Location_1.Day_1.Hour_';
            const arr = [];
             
            for(let i = 1; i <= 24; i++) {
                let state = getState(path + i + '.rain_value');
                let obj = {
                    time: formatDate(state.lc, 'hh:mm:ss'),
                    value: state.val
                };
                arr.push(obj);
            }
             
            setState(idJSON, JSON.stringify(arr), true);
            
            K Offline
            K Offline
            Kail
            wrote on last edited by
            #15

            Guten Morgen Paul,
            Dein Script habe ich ein wenig ergänzt. Würdest Du bitte einmal schauen, ob es JS konform ist.
            Die Abfrage der Wetterdaten wird alle 15 Minuten durchgeführt. Welche art des Triggers bietet sich da an?
            Danke und Grüße

            const idJSON = '0_userdata.0.Visualisierung.Niederschlag'/*Niederschlag*/;
            const path = 'daswetter.0.NextHours.Location_1.Day_1.';
            const arr = [];
             
            for(let i = 0; i <= 24; i++) {
                if (i == 0) {
                    var state = getState(path + 'current.rain_value');
                    var date = new Date(state.ts);
                } else {
                    state = getState(path + 'Hour_' + i + '.rain_value');
                    date = new Date(state.ts);
                    date.setHours(date.getHours() + i);
                };
                let obj = {
                    time: formatDate(date, 'YYYY-MM-DD hh:mm:ss'),
                    value: state.val
                };
                arr.push(obj);
            }
             
            setState(idJSON, JSON.stringify(arr), true);
            
            paul53P 1 Reply Last reply
            0
            • K Kail

              Guten Morgen Paul,
              Dein Script habe ich ein wenig ergänzt. Würdest Du bitte einmal schauen, ob es JS konform ist.
              Die Abfrage der Wetterdaten wird alle 15 Minuten durchgeführt. Welche art des Triggers bietet sich da an?
              Danke und Grüße

              const idJSON = '0_userdata.0.Visualisierung.Niederschlag'/*Niederschlag*/;
              const path = 'daswetter.0.NextHours.Location_1.Day_1.';
              const arr = [];
               
              for(let i = 0; i <= 24; i++) {
                  if (i == 0) {
                      var state = getState(path + 'current.rain_value');
                      var date = new Date(state.ts);
                  } else {
                      state = getState(path + 'Hour_' + i + '.rain_value');
                      date = new Date(state.ts);
                      date.setHours(date.getHours() + i);
                  };
                  let obj = {
                      time: formatDate(date, 'YYYY-MM-DD hh:mm:ss'),
                      value: state.val
                  };
                  arr.push(obj);
              }
               
              setState(idJSON, JSON.stringify(arr), true);
              
              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #16

              @kail sagte: alle 15 Minuten durchgeführt. Welche art des Triggers bietet sich da an?

              Ein Trigger auf "current.rain_value" bei Aktualisierung.

              const idJSON = '0_userdata.0.Visualisierung.Niederschlag'/*Niederschlag*/;
              const path = 'daswetter.0.NextHours.Location_1.Day_1.';
              
              on({id: path + 'current.rain_value'}, function(dp) {
                  const arr = [];
                  for(let i = 0; i <= 24; i++) {
                      if (i == 0) {
                          var state = dp.state;
              // wie bisher
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Reply Last reply
              0
              • K Offline
                K Offline
                Kail
                wrote on last edited by Kail
                #17

                Wie ich eben feststellen musste, habe ich die Daten vom Adapter falsch interpretiert.
                Die Werte beziehen sich auf die Uhrzeit und nicht auf Stunden.
                Dadurch muss ich das Script etwas umbauen.
                Wenn das Datum im Format YYYYMMDD als String vorliegt, wie bekomme ich das ins Format
                YYYY-MM-DD, nur mit substring?

                let date = getState(path + '1.day_value');
                    let year = date.val.substring(0,4);
                    let month = date.val.substring(4,6);
                    let day = date.val.substring(6,8);
                    date = year + '-' + month + '-' + day;
                

                Bildschirmfoto 2023-12-31 um 13.01.21.png

                K 1 Reply Last reply
                0
                • K Kail

                  Wie ich eben feststellen musste, habe ich die Daten vom Adapter falsch interpretiert.
                  Die Werte beziehen sich auf die Uhrzeit und nicht auf Stunden.
                  Dadurch muss ich das Script etwas umbauen.
                  Wenn das Datum im Format YYYYMMDD als String vorliegt, wie bekomme ich das ins Format
                  YYYY-MM-DD, nur mit substring?

                  let date = getState(path + '1.day_value');
                      let year = date.val.substring(0,4);
                      let month = date.val.substring(4,6);
                      let day = date.val.substring(6,8);
                      date = year + '-' + month + '-' + day;
                  

                  Bildschirmfoto 2023-12-31 um 13.01.21.png

                  K Offline
                  K Offline
                  Kail
                  wrote on last edited by
                  #18

                  Das Script habe ich nun wie folgt umgebaut, vielleicht kann noch jemand darüberschauen, wie man den Code besser schreiben kann.

                  const idJSON = '0_userdata.0.Visualisierung.Niederschlag'/*Niederschlag*/;
                  const path = 'daswetter.0.NextHours.Location_1.Day_';
                  
                  on({id: path + '1.current.temp_value'}, function(dp) {
                      const arr = [];
                      let date = getState(path + '1.day_value');
                      let year = date.val.substring(0,4);
                      let month = date.val.substring(4,6);
                      let day = date.val.substring(6,8);
                      let curr_date = year + '-' + month + '-' + day;
                      
                      for (let d = 1; d <= 2; d++) {
                          for(let i = 1; i <= 24; i++) {
                              var state_temp = getState(path + d +'.Hour_' + i + '.temp_value');
                              var state_rain = getState(path + d + '.Hour_' + i + '.rain_value');
                              var time = getState(path + d + '.Hour_' + i + '.hour_value');
                              if (d == 2 && i == 1) {
                                  curr_date = formatDate(new Date(curr_date).setDate(new Date(curr_date).getDate() + 1), 'YYYY-MM-DD');
                              }
                              var datetime = new Date(curr_date + ' ' + time.val);
                              datetime = new Date(datetime.getTime() - (1000));
                              
                              let obj = {
                                  time: formatDate(datetime, 'YYYY-MM-DD hh:mm:ss'),
                                  Niederschlag: state_rain.val,
                                  Temperatur: state_temp.val
                              };
                              arr.push(obj);
                          };
                      };
                   
                      setState(idJSON, JSON.stringify(arr), true);
                  });
                  
                  

                  Das Resultat:
                  Bildschirmfoto 2023-12-31 um 15.54.48.png

                  1 Reply Last reply
                  0
                  • K Kail

                    @paul53
                    Das Script hat mein Problem noch nicht ganz gelöst. In Grafana kann ich die Daten nicht separieren.
                    Bildschirmfoto 2023-12-28 um 13.47.31.png
                    Bildschirmfoto 2023-12-28 um 13.48.00.png

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    wrote on last edited by
                    #19

                    @kail sagte in Datenpunkt für JSON:

                    In Grafana kann ich die Daten nicht separieren

                    sollte man die daten nicht besser in eine datenbank schreiben (influx oder maria), dann kann grafana die daten selbst daraus lesen?
                    https://grafana.com/docs/grafana/latest/datasources/

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    1 Reply Last reply
                    0
                    • K Offline
                      K Offline
                      Kail
                      wrote on last edited by
                      #20

                      @oliverio
                      Die Einstellungen für Grafana habe ich parallel hinbekommen und es funktioniert gut.
                      In die MariaDB speichere ich eigentlich nur Daten, die mich für einen längeren Zeitraum gesichert und abrufbar haben möchte dastrifft auf die Wetter-Vorschau nicht zu.
                      Grüße Kail

                      OliverIOO 1 Reply Last reply
                      0
                      • K Kail

                        @oliverio
                        Die Einstellungen für Grafana habe ich parallel hinbekommen und es funktioniert gut.
                        In die MariaDB speichere ich eigentlich nur Daten, die mich für einen längeren Zeitraum gesichert und abrufbar haben möchte dastrifft auf die Wetter-Vorschau nicht zu.
                        Grüße Kail

                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        wrote on last edited by
                        #21

                        @kail

                        stimmt ich vergaß das der hersteller vorschreibt, das die daten ein minimum-dauer an speicherfrist verlangt :)

                        Meine Adapter und Widgets
                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                        Links im Profil

                        K 1 Reply Last reply
                        0
                        • OliverIOO OliverIO

                          @kail

                          stimmt ich vergaß das der hersteller vorschreibt, das die daten ein minimum-dauer an speicherfrist verlangt :)

                          K Offline
                          K Offline
                          Kail
                          wrote on last edited by
                          #22

                          @oliverio
                          ;-)

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          706

                          Online

                          32.6k

                          Users

                          82.3k

                          Topics

                          1.3m

                          Posts
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Home
                          • Recent
                          • Tags
                          • Unread 0
                          • Categories
                          • Unreplied
                          • Popular
                          • GitHub
                          • Docu
                          • Hilfe