Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Gelöst] Einzelwert aus Array-Objekt?

    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

    [Gelöst] Einzelwert aus Array-Objekt?

    This topic has been deleted. Only users with topic management privileges can see it.
    • frank2604
      frank2604 last edited by frank2604

      Hallo,

      ich frage einen einzelnen Wert aus der InfluxDB ab (z.B. Stromverbrauch der Wärmepumpe der letzten 24h) und möchte diesen in einen Datenpunkt schreiben.

      Das Ergebnis der Query sieht so aus:

      {"result":[[{"result":"_result","table":0,"_start":"2022-01-28T09:00:12.676771291Z","_stop":"2022-01-29T09:00:12.676771291Z","_measurement":"Strom.Heizung.Energie_in_der_letzten_Stunde","_value":14.683000000000117,"_time":"2022-01-29T09:00:12.676771291Z","ts":1643446812676}]],"ts":1643446812684,"error":null}
      

      Ich benötige den _value, den ich mir so aus dem Objekt hole:

      value = query.result[0].map(elm => (elm._value));
      

      Wenn ich jetzt den Inhalt der Variablen value in einen DP schreibe, steht das Ergebnis noch in eckigen Klammern [14.683000000000117].

      Es fehlt wohl noch eine Kleinigkeit, um den reinen Wert da herauszuholen. Könnt Ihr mir helfen?

      Hier das vollständige Skript:

      refresh();
      
      function refresh() {
          let targetDP = '0_userdata.0.Strom.Heizung.Heizung_Energie_gestern';
          let value = 0;
      
          sendTo('influxdb.0', 'query',
                  'from(bucket: "iobroker") \
                      |> range(start: -24h) \
                      |> filter(fn: (r) => r["_measurement"] == "Strom.Heizung.Energie_in_der_letzten_Stunde") \
                      |> drop(columns: ["_field", "ack", "from", "q"]) \
                      |> aggregateWindow(every: 1w, fn: sum, createEmpty: false) \
                      |> limit(n:1) \
                      ',
              function (query) {
                  if (query.error) {
                      console.error(query.error);
                  } else {
                      // Ergebnis in Datenpunkt
                      console.log('Row: ' + JSON.stringify(query));
                      value = query.result[0].map(elm => (elm._value));
                      setState(targetDP, value, true);
                      console.log("value: " + value);
                  }
          })
      };
      

      Danke.

      Grüße Frank

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @frank2604 last edited by

        @frank2604 sagte in Einzelwert aus Array-Objekt?:

        {"result":[[{"result":"_result","table":0,"_start":"2022-01-28T09:00:12.676771291Z","_stop":"2022-01-29T09:00:12.676771291Z","_measurement":"Strom.Heizung.Energie_in_der_letzten_Stunde","_value":14.683000000000117,"_time":"2022-01-29T09:00:12.676771291Z","ts":1643446812676}]],"ts":1643446812684,"error":null}

        Der Pfad müsste meines Erachtens so lauten:

        result[0][0]._value
        
        frank2604 1 Reply Last reply Reply Quote 1
        • frank2604
          frank2604 @mickym last edited by

          @mickym

          Ja, funktioniert. Vielen Dank!

          refresh();
          
          function refresh() {
              let targetDP = '0_userdata.0.Strom.Heizung.Heizung_Energie_gestern';
              let value = 0;
          
              sendTo('influxdb.0', 'query',
                      'from(bucket: "iobroker") \
                          |> range(start: -24h) \
                          |> filter(fn: (r) => r["_measurement"] == "Strom.Heizung.Energie_in_der_letzten_Stunde") \
                          |> drop(columns: ["_field", "ack", "from", "q"]) \
                          |> aggregateWindow(every: 1w, fn: sum, createEmpty: false) \
                          |> limit(n:1) \
                          ',
                  function (query) {
                      if (query.error) {
                          console.error(query.error);
                      } else {
                          // Ergebnis in Datenpunkt
                          console.log('Row: ' + JSON.stringify(query));
                          value = query.result[0][0]._value
                          console.log("value: " + value);
                          setState(targetDP, value, true);
          
                      }
              })
          };
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          498
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          2
          3
          149
          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