Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Rechnen mit JSON+ Abspeichern als Datenpunkt

    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

    Rechnen mit JSON+ Abspeichern als Datenpunkt

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

      Hi zusammen,
      ich nutze folgendes Script, um mir die niedrigsten Spritpreise der letzten Tage auszugeben.
      Das Ergebnis kommt im JSON Format, womit ich leider nicht weiterkomme.
      Ich würde gerne die "_value" Daten auslesen und davon den niedrigsten Wert in einem Datenpunkt abspeichern.
      Wie kann ich auf die JSON-Werte zugreifen?
      Leider hat alles was ich bisher versucht habe nicht funktioniert.
      Es wäre toll, wenn mir jemand helfen könnte,

      VG
      Lisa

      Script:

      sendTo('influxdb.0', 'query',
      'from(bucket: "iobroker")'+
      '  |> range(start: -7d)'+
      '  |> drop(columns: ["_start","_stop"]) '+
      '  |> filter(fn: (r) => r["_measurement"] == "alias.0.Allgemein.Tanken.Jet e5")'+
      '  |> filter(fn: (r) => r["_field"] == "value")'+
      '  |> aggregateWindow(every: 1d, fn: min, createEmpty: false)'
       
       , function (result) {
          if (result.error) {
              console.error(result.error);
          } else {
              // show result
              var data = JSON.stringify(result)
               console.log(data);
          }
      });
      

      JSON - Ergbnis (aus Console):

      {
        "result": [
          [
            {
              "result": "_result",
              "table": 0,
              "_time": "2021-12-15T00:00:00Z",
              "_value": 1.619,
              "_field": "value",
              "_measurement": "alias.0.Allgemein.Tanken.Jet e5",
              "_start": "2021-12-14T12:12:28.834984968Z",
              "_stop": "2021-12-21T12:12:28.834984968Z",
              "ts": 1639526400000
            },
            {
              "result": "_result",
              "table": 0,
              "_time": "2021-12-16T00:00:00Z",
              "_value": 1.599,
              "_field": "value",
              "_measurement": "alias.0.Allgemein.Tanken.Jet e5",
              "_start": "2021-12-14T12:12:28.834984968Z",
              "_stop": "2021-12-21T12:12:28.834984968Z",
              "ts": 1639612800000
            },
            {
              "result": "_result",
              "table": 0,
              "_time": "2021-12-17T00:00:00Z",
              "_value": 1.599,
              "_field": "value",
              "_measurement": "alias.0.Allgemein.Tanken.Jet e5",
              "_start": "2021-12-14T12:12:28.834984968Z",
              "_stop": "2021-12-21T12:12:28.834984968Z",
              "ts": 1639699200000
            },
            {
              "result": "_result",
              "table": 0,
              "_time": "2021-12-18T00:00:00Z",
              "_value": 1.599,
              "_field": "value",
              "_measurement": "alias.0.Allgemein.Tanken.Jet e5",
              "_start": "2021-12-14T12:12:28.834984968Z",
              "_stop": "2021-12-21T12:12:28.834984968Z",
              "ts": 1639785600000
            },
            {
              "result": "_result",
              "table": 0,
              "_time": "2021-12-19T00:00:00Z",
              "_value": 1.609,
              "_field": "value",
              "_measurement": "alias.0.Allgemein.Tanken.Jet e5",
              "_start": "2021-12-14T12:12:28.834984968Z",
              "_stop": "2021-12-21T12:12:28.834984968Z",
              "ts": 1639872000000
            },
            {
              "result": "_result",
              "table": 0,
              "_time": "2021-12-20T00:00:00Z",
              "_value": 1.619,
              "_field": "value",
              "_measurement": "alias.0.Allgemein.Tanken.Jet e5",
              "_start": "2021-12-14T12:12:28.834984968Z",
              "_stop": "2021-12-21T12:12:28.834984968Z",
              "ts": 1639958400000
            },
            {
              "result": "_result",
              "table": 0,
              "_time": "2021-12-21T00:00:00Z",
              "_value": 1.579,
              "_field": "value",
              "_measurement": "alias.0.Allgemein.Tanken.Jet e5",
              "_start": "2021-12-14T12:12:28.834984968Z",
              "_stop": "2021-12-21T12:12:28.834984968Z",
              "ts": 1640044800000
            },
            {
              "result": "_result",
              "table": 0,
              "_time": "2021-12-21T12:12:28.834984968Z",
              "_value": 1.609,
              "_field": "value",
              "_measurement": "alias.0.Allgemein.Tanken.Jet e5",
              "_start": "2021-12-14T12:12:28.834984968Z",
              "_stop": "2021-12-21T12:12:28.834984968Z",
              "ts": 1640088748834
            }
          ]
        ],
        "ts": 1640088749005,
        "error": null
      }
      
      paul53 F 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @adsfa last edited by paul53

        @adsfa Nicht getestet:

        let arr = result.result[0];
        let min = 3;
        for(let i = 0; i < arr.length; i++) {
           if(arr[i]._value < min) min = arr[i]._value;
        }
        setState(idMinimum, min, true):
        
        A 1 Reply Last reply Reply Quote 1
        • F
          fastfoot @adsfa last edited by

          @adsfa als Alternative zu @paul53 Lösung, gibt zusätzlich das letzte Datum des billigsten Preises aus und ermittelt den Preis durch Sortierung:

          let arr = JSON.parse(getState('0_userdata.0.Forum.Tanken.json').val).result[0];
          arr.sort((a, b) => a._value - b._value || a._time - b._time);
          setState('0_userdata.0.Forum.Tanken.preis', arr[0]._value);
          setState('0_userdata.0.Forum.Tanken.datum', new Date(arr[0]._time).getTime());
          
          
          1 Reply Last reply Reply Quote 1
          • A
            adsfa @paul53 last edited by adsfa

            @paul53 sagte in Rechnen mit JSON+ Abspeichern als Datenpunkt:

            @adsfa Nicht getestet:

            let arr = result.result[0];
            let min = 3;
            for(let i = 0; i < arr.length; i++) {
               if(arr[i]._value < min) min = arr[i]._value;
            }
            setState(idMinimum, min, true):
            

            Vielen Dank euch beiden!
            @paul53 Leider weiß ich nicht genau, wo ich den Code einfügen muss. "idMinimum" wird zudem nicht gefunden.
            @fastfoot Den Ansatz verstehe ich leider auch nicht. Den Datenpunkt habe ich bei mir nicht. Muss ich zuerst das JSON in diesem Datenpunkt speichern?

            paul53 F 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @adsfa last edited by paul53

              @adsfa sagte: Leider weiß ich nicht genau, wo ich den Code einfügen muss.

              In den else-Zweig ab Zeile 13.

              @adsfa sagte in Rechnen mit JSON+ Abspeichern als Datenpunkt:

              "idMinimum" wird zudem nicht gefunden.

              Diese Variable / Konstante muss erst deklariert werden. Man kann auch die Datenpunkt-ID direkt eingeben, z.B.

              setState('0_userdata.0.Forum.Tanken.preis', min, true):
              

              Der Datenpunkt "0_userdata.0.Forum.Tanken.preis" muss vorher erstellt werden.

              A 1 Reply Last reply Reply Quote 1
              • F
                fastfoot @adsfa last edited by

                @adsfa sagte in Rechnen mit JSON+ Abspeichern als Datenpunkt:

                Den Ansatz verstehe ich leider auch nicht. Den Datenpunkt habe ich bei mir nicht. Muss ich zuerst das JSON in diesem Datenpunkt speichern?

                du wolltest ja in einen Datenpunkt schreiben, da ich den nicht kenne habe ich einen eigenen genommen, genau wie in der ersten Zeile. Das musst du natürlich durch deine DP ersetzen.

                1 Reply Last reply Reply Quote 1
                • A
                  adsfa @paul53 last edited by

                  Vielen Dank euch beiden!!

                  @paul53
                  Jetzt klappt es perfekt 🙂 Zum Verständnis: Was bedeutet min = 3?

                  @fastfoot
                  Den Ansatz auch noch das Datum zu haben finde ich super.
                  Muss ich dafür das JSON Ergebnis in z.B. dem Datenpunkt: 0_userdata.0.Forum.Tanken.json abspeichern?

                  paul53 F 2 Replies Last reply Reply Quote 0
                  • paul53
                    paul53 @adsfa last edited by

                    @adsfa sagte: Zum Verständnis: Was bedeutet min = 3?

                    Das Start-Minimum. Der Preis wird hoffentlich nie über 3 €/l steigen.

                    1 Reply Last reply Reply Quote 1
                    • F
                      fastfoot @adsfa last edited by

                      @adsfa sagte in Rechnen mit JSON+ Abspeichern als Datenpunkt:

                      Vielen Dank euch beiden!!

                      @paul53
                      Jetzt klappt es perfekt 🙂 Zum Verständnis: Was bedeutet min = 3?

                      @fastfoot
                      Den Ansatz auch noch das Datum zu haben finde ich super.
                      Muss ich dafür das JSON Ergebnis in z.B. dem Datenpunkt: 0_userdata.0.Forum.Tanken.json abspeichern?

                      nein, wenn es schon in einer variable ist (zB result) dann let arr = result.result[0] in der ersten Zeile

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      758
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      479
                      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