Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Max /Mintemperatur aus influxdb mit gethistory

    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

    Max /Mintemperatur aus influxdb mit gethistory

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

      @sonystar
      Irgendwas passt da nicht.

      Den Datenpunkt den du auslesen möchtest ist ja unter javascript .0 usw
      Macht das Sinn?
      Normalerweise kommt der Datenpunkt doch von einem Messgerät wie zB bei mir von einem Homemtaic Temp/Humidity Gerät! Dieses lese ich dann aus.
      Dein Datenpunkt ist ja anscheinend selber angelegt daher die Frage wie das konfiguriert ist

      S 1 Reply Last reply Reply Quote 0
      • S
        sonystar @Segway last edited by

        @Segway
        Nee das passt schon so.

        {
          "common": {
            "name": "Temperatur Außen",
            "type": "number",
            "role": "state",
            "unit": "°C",
            "custom": {
              "influxdb.0": {
                "enabled": true,
                "changesOnly": true,
                "debounce": "1000",
                "retention": 0,
                "changesRelogInterval": "1800",
                "changesMinDelta": 0,
                "storageType": "Number",
                "aliasId": ""
              }
            }
          },
          "native": {
            "name": "Temperatur Außen",
            "type": "number",
            "role": "state",
            "unit": "°C"
          },
          "type": "state",
          "from": "system.adapter.javascript.0",
          "user": "system.user.admin",
          "ts": 1606934334904,
          "_id": "javascript.0.Wetterstation.Aussentemperatur",
          "acl": {
            "object": 1636,
            "state": 1636,
            "owner": "system.user.admin",
            "ownerGroup": "system.group.administrator"
          }
        }
        

        Unbenannt.png

        1 Reply Last reply Reply Quote 0
        • A
          adsfa last edited by adsfa

          Hallo,
          auch wenn das Thema schon etwas älter ist, würde ich gerne den gleichen Ansatz nutzen.
          Leider erhalte ich immer folgende Warnung. Hast du vielleicht eine Idee @Segway :)?

          javascript.0 (129) TypeError: Cannot read property 'id' of undefined at Object.GetResults [as cb] (script.js.Allgemein.Testen.SQL:38:154) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5618:71) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-states-redis/lib/states/statesInRedisClient.js:232:37) at processImmediate (internal/timers.js:461:21)
          
          // -----------------------------------------------------------------------------
          // ----- Abfragen von Werten aus der Datenbank (SQL) ---------------------------
          // -----------------------------------------------------------------------------
           
          // ----- Datenpunkt der ausgelesen werden soll ---------------------------------
          var id = 'alias.0.Arbeitszimmer.Temperatur.ACTUAL';
          // ----- Datenpunkte in die gespeichert werden soll ----------------------------
          var maxid = 'javascript.0.Statistik.Temp_Aussen_Max24';
          var minid = 'javascript.0.Statistik.Temp_Aussen_Min24';
          var dt = 24;                // Zeitraum in Stunden
              dt = dt*3600*1000;      // Zeitraum umrechnen in ms
           
          // ----- Datenpunkte anlegen ---------------------------------------------------
          createState(maxid, " ");
          createState(minid, " ");
          //log('1. ) Datenpunkte angelegt ');
           
          SQLAbfrage(id);
           
          //-----  SQL-Abfrage durchführen
          function SQLAbfrage () {
          //    log('2. ) Datenpunkt => ' + id);
          //    log('2a.) Abfrage    => SELECT * FROM datapoints WHERE name = \'' + id + '\'');
              sendTo('influxdb.0', 'query', 'SELECT * FROM iobroker.datapoints WHERE name = \'' + id + '\'', GetResults);
          }
          //---------------------------------------
           
          function GetResults (dpoint) {
          //    log('3. ) Funktion -> GetResults aufrufen');
              var end_time =   new Date().getTime();
              var start_time = new Date().getTime() - dt;
          //    log('3a.) Startzeit : ' + start_time);
          //    log('3b.) Endzeit   : ' + end_time);
          //    log('     Datenpunkt: ' + dpoint.result);
          //    log('3c.) result    : ' + JSON.stringify(dpoint.result) + ' -//- ' + start_time);
          //    log('     Datenpunkt: ' + dpoint.result[0].id + ' ---//--- ' + dpoint.result[0].name);
              sendTo('influxdb.0', 'query', 'SELECT Round(Min(val),1) As MinVal FROM iobroker.ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',minimum);
              sendTo('influxdb.0', 'query', 'SELECT Round(Max(val),1) As MaxVal FROM iobroker.ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',maximum);
          }
           
          //-----  Werte schreiben (maximum, minimum)
          //-----  minimum
          function minimum(result) {
          //  log('min )Funktion -> ' + JSON.stringify(result.result));
            setState(minid, result.result[0].MinVal);
          }
          //-----  maximum
          function maximum(result) {
          //    log('max )Funktion -> ' + JSON.stringify(result.result));
              setState(maxid, result.result[0].MaxVal);
          //    log('---- fertig -----------------------------------------');
              
          }
          //---------------------------------------
           
          // ----- Funktion jede Minute aufrufen
          schedule("*/5 * * * *", function(){SQLAbfrage(id);});
           
          
          

          ee20e0c6-48eb-4db6-b651-61253a2d43fc-image.png

          Segway 1 Reply Last reply Reply Quote 0
          • Segway
            Segway @adsfa last edited by

            @adsfa
            Kann dir da nicht helfen, da ich die SQL nicht mehr am laufen habe sondern auf Influx umgestiegen bin.

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

              @segway Danke für deine Antwort.
              Ich nutze auch Influx und würde gerne Datenpunkte in iobroker damit aktualisieren.
              Wie machst du das jetzt?

              Segway 1 Reply Last reply Reply Quote 0
              • Segway
                Segway @adsfa last edited by

                @adsfa
                Inwiefern Datenpunkte aktualisieren ? verstehe ich grad nicht !

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

                  @segway
                  Ich würde gerne Berechnungen vornehmen, wie z.B. die Min Temperatur der letzten 24h und das Ergebnis in einem Datenpunkt speichern.

                  Segway 1 Reply Last reply Reply Quote 0
                  • Segway
                    Segway @adsfa last edited by

                    @adsfa
                    Mit Grafana und Influx brauchst du das nicht ! Das kannst du direkt in Grafana machen 🙂

                    1 Reply Last reply Reply Quote 0
                    • A
                      adsfa last edited by

                      @segway
                      Danke dir. Wie gebe ich die berechneten Werte an iobroker zurück? Würde die gerne zum Triggern nutzen.

                      Segway 1 Reply Last reply Reply Quote 0
                      • Segway
                        Segway @adsfa last edited by

                        @adsfa sagte in Max /Mintemperatur aus influxdb mit gethistory:

                        @segway
                        Danke dir. Wie gebe ich die berechneten Werte an iobroker zurück? Würde die gerne zum Triggern nutzen.

                        Ah okay, du willst triggern darauf, dann musste es in einen Wert schreiben ja das stimmt.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        391
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        javascript monitoring
                        5
                        18
                        2685
                        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