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

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

Datenpunkt für JSON

Scheduled Pinned Locked Moved JavaScript
22 Posts 3 Posters 1.9k 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.
  • paul53P paul53

    @kail sagte:Gibt es noch bestimmte Anforderungen an die Einstellung des Datenpunktes?

    Der DP muss vom Typ "string" oder "json" sein.
    In einen DP vom Typ "array" kann man das Array ohne Wandlung schreiben: Die Wandlung nimmt in dem Fall der JS-Adapter vor.

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

    @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

    paul53P OliverIOO 2 Replies 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

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

      @kail sagte: In Grafana kann ich die Daten nicht separieren.

      Von Grafana habe ich keine Ahnung.

      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: In Grafana kann ich die Daten nicht separieren.

        Von Grafana habe ich keine Ahnung.

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

        Habe mal das Grafana Thema in einen eigenen Thread verschoben.
        Link zum Ziel

        1 Reply Last reply
        0
        • paul53P paul53

          @kail sagte: Wie müsste ein entsprechendes Javascript aussehen?

          const arr = [
            {"time": "xxxxxxx", "value": xxx},
            {"time": "xxxxxxx", "value": xxx},
            {"time": "xxxxxxx", "value": xxx}
          ];
          
          setState(idJSON, JSON.stringify(arr), true);
          
          K Offline
          K Offline
          Kail
          wrote on last edited by
          #8

          @paul53 sagte in Datenpunkt für JSON:

          @kail sagte: Wie müsste ein entsprechendes Javascript aussehen?

          const arr = [
            {"time": "xxxxxxx", "value": xxx},
            {"time": "xxxxxxx", "value": xxx},
            {"time": "xxxxxxx", "value": xxx}
          ];
          
          setState(idJSON, JSON.stringify(arr), true);
          

          Wie fülle ich das Array über eine Schleife?

          paul53P 1 Reply Last reply
          0
          • K Kail

            @paul53 sagte in Datenpunkt für JSON:

            @kail sagte: Wie müsste ein entsprechendes Javascript aussehen?

            const arr = [
              {"time": "xxxxxxx", "value": xxx},
              {"time": "xxxxxxx", "value": xxx},
              {"time": "xxxxxxx", "value": xxx}
            ];
            
            setState(idJSON, JSON.stringify(arr), true);
            

            Wie fülle ich das Array über eine Schleife?

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

            @kail sagte: Wie fülle ich das Array über eine Schleife?

            Wo kommen die Daten für das Array her?

            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: Wie fülle ich das Array über eine Schleife?

              Wo kommen die Daten für das Array her?

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

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

              paul53P 1 Reply Last reply
              0
              • 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

                                      822

                                      Online

                                      32.4k

                                      Users

                                      81.6k

                                      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