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

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.
  • 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
                    • 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
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #22

                        @oliverio
                        ;-)

                        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

                        798

                        Online

                        32.4k

                        Benutzer

                        81.6k

                        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