Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Datenpunkt für JSON

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Datenpunkt für JSON

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      Kail @paul53 last edited by

      @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
      
      paul53 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @Kail last edited by

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

        Stunden fangen mit 1 an?

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Kail last edited by

          @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 1 Reply Last reply Reply Quote 0
          • K
            Kail @paul53 last edited by

            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);
            
            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Kail last edited by

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

                  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 Reply Quote 0
                  • OliverIO
                    OliverIO @Kail last edited by

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

                    1 Reply Last reply Reply Quote 0
                    • K
                      Kail last edited by

                      @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

                      OliverIO 1 Reply Last reply Reply Quote 0
                      • OliverIO
                        OliverIO @Kail last edited by

                        @kail

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

                        K 1 Reply Last reply Reply Quote 0
                        • K
                          Kail @OliverIO last edited by

                          @oliverio
                          😉

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          847
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          3
                          22
                          879
                          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