Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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.8k

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

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

Datenpunkt für JSON

Geplant Angeheftet Gesperrt Verschoben JavaScript
22 Beiträge 3 Kommentatoren 1.9k Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • K Offline
    K Offline
    Kail
    schrieb am zuletzt editiert von
    #1

    Hallo,
    ich möchte einen Datenpunkt anlegen und mit JSON Daten füllen, die ich dann an Grafana weitergebe.
    Bisher habe ich das händisch versucht, aber noch keinen richtigen Erfolg gehabt. Meine Vermutung ist, dass die JSON Daten als String und nicht als Objekt gespeichert/übergeben werden.
    Die Daten sind wie folgt aufgebaut:

    [
      {"time": "xxxxxxx", "value": xxx},
      {"time": "xxxxxxx", "value": xxx},
      {"time": "xxxxxxx", "value": xxx}
    ]
    

    Wie müsste ein entsprechendes Javascript aussehen?
    Danke und Grüße

    paul53P 1 Antwort Letzte Antwort
    0
    • K Kail

      Hallo,
      ich möchte einen Datenpunkt anlegen und mit JSON Daten füllen, die ich dann an Grafana weitergebe.
      Bisher habe ich das händisch versucht, aber noch keinen richtigen Erfolg gehabt. Meine Vermutung ist, dass die JSON Daten als String und nicht als Objekt gespeichert/übergeben werden.
      Die Daten sind wie folgt aufgebaut:

      [
        {"time": "xxxxxxx", "value": xxx},
        {"time": "xxxxxxx", "value": xxx},
        {"time": "xxxxxxx", "value": xxx}
      ]
      

      Wie müsste ein entsprechendes Javascript aussehen?
      Danke und Grüße

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

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

      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 2 Antworten Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #3

        @paul53
        Danke Paul.
        Gibt es noch bestimmte Anforderungen an die Einstellung des Datenpunktes?

        paul53P 1 Antwort Letzte Antwort
        0
        • K Kail

          @paul53
          Danke Paul.
          Gibt es noch bestimmte Anforderungen an die Einstellung des Datenpunktes?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

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

          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 Antwort Letzte Antwort
          0
          • 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
            schrieb am zuletzt editiert von
            #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 Antworten Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • paul53P paul53

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

                Von Grafana habe ich keine Ahnung.

                K Offline
                K Offline
                Kail
                schrieb am zuletzt editiert von
                #7

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

                1 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #10

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

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • K Kail

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

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                        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
                          schrieb am zuletzt editiert von
                          #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 Antworten Letzte Antwort
                          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
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            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
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              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
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                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
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  0
                                  • K Offline
                                    K Offline
                                    Kail
                                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                                    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
                                      schrieb am zuletzt editiert von
                                      #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 Antwort Letzte Antwort
                                      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
                                        schrieb am zuletzt editiert von
                                        #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 Antwort Letzte Antwort
                                        0
                                        • K Offline
                                          K Offline
                                          Kail
                                          schrieb am zuletzt editiert von
                                          #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 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          494

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe