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.
    • paul53
      paul53 @sonystar last edited by paul53

      @sonystar
      Das Script ist verstümmelt. Lösche alle "! " am Anfang der Zeilen, in denen es vorhanden ist.
      Zeile 11

      dt = dt36001000; // Zeitraum umrechnen in ??
      

      ändern

      dt = dt * 3600 * 1000; // Zeitraum umrechnen in ms
      
      1 Reply Last reply Reply Quote 0
      • S
        sonystar last edited by sonystar

        @Segway @paul53
        Dankeschön schonmal.
        Jetzt komme ich schonmal ein paar Zeilen weiter:

        javascript.0	2020-12-18 22:14:53.647	info	(3004) Stop script script.js.common.Skript_1
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at process._tickCallback (internal/process/next_tick.js:68:7)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at client.get (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:616:17)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at adapter.getForeignState (/opt/iobroker/node_modules/iobroker.javascript/main.js:1140:17)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at createProblemObject (/opt/iobroker/node_modules/iobroker.javascript/main.js:1559:17)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1503:37)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1280:28)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at Object.createScript (vm.js:277:10)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) at new Script (vm.js:83:7)
        javascript.0	2020-12-18 22:14:51.485	error	(3004) SyntaxError: missing ) after argument list
        javascript.0	2020-12-18 22:14:51.485	error	(3004) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        javascript.0	2020-12-18 22:14:51.485	error	(3004) log('2a.) Abfrage => SELECT * FROM datapoints WHERE name = '' + id + ''');
        javascript.0	2020-12-18 22:14:51.485	error	at script.js.common.Skript_1:20
        javascript.0	2020-12-18 22:14:51.485	error	(3004) script.js.common.Skript_1 compile failed:
        javascript.0	2020-12-18 22:14:51.484	info	(3004) Start javascript script.js.common.Skript_1
        

        Scheint eine Klammer zu fehlen? Wo muss ich die setzten?

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

          @sonystar

          habe meines mal kopiert. sieht so aus

          // -----------------------------------------------------------------------------
          // ----- Abfragen von Werten aus der Datenbank (SQL) ---------------------------
          // -----------------------------------------------------------------------------
          
          // ----- Datenpunkt der ausgelesen werden soll ---------------------------------
          var id = "hm-rpc.1.KEQxxxxxxx.1.TEMPERATURE";
          // ----- Datenpunkte in die gespeichert werden soll ----------------------------
          var maxid = 'javascript.0.Datenpunkte.Temp_Aussen.Statistik_Luft_Aussen_Max24';
          var minid = 'javascript.0.Datenpunkte.Temp_Aussen.Statistik_Luft_Aussen_Min24';
          var dt = 24;                // Zeitraum in Stunden
              dt = dt*3600*1000;      // Zeitraum umrechnen in ??
          
          // ----- 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('sql.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('sql.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('sql.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);});
          
          S 1 Reply Last reply Reply Quote 0
          • S
            sonystar @Segway last edited by

            @Segway

            Nachdem ich das Script jetzt angepasst habe auf Influx kommt folgendes raus:

            javascript.0	2020-12-18 22:36:36.669	warn	at processImmediate (timers.js:658:5)
            javascript.0	2020-12-18 22:36:36.669	warn	at tryOnImmediate (timers.js:676:5)
            javascript.0	2020-12-18 22:36:36.669	warn	at runCallback (timers.js:705:18)
            javascript.0	2020-12-18 22:36:36.669	warn	at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:234:41)
            javascript.0	2020-12-18 22:36:36.669	warn	at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5297:71)
            javascript.0	2020-12-18 22:36:36.669	warn	at Object.GetResults [as cb] (script.js.common.Skript_3:37:154)
            javascript.0	2020-12-18 22:36:36.669	warn	(3004) TypeError: Cannot read property 'id' of undefined
            javascript.0	2020-12-18 22:36:36.669	warn	(3004) States system pmessage io.messagebox.system.adapter.javascript.0 {"command":"query","message":{"result":[],"error":"Invalid call"},"from":"system.adapter.influxdb.0","callback":{"message":"SEL
            influxdb.0	2020-12-18 22:36:36.664	error	(3024) query: Error: error parsing query: found NAME, expected identifier, string, number, bool at line 1, char 41
            javascript.0	2020-12-18 22:36:36.663	info	(3004) script.js.common.Skript_3: registered 0 subscriptions and 1 schedule
            javascript.0	2020-12-18 22:36:36.652	info	(3004) Start javascript script.js.common.Skript_3
            

            Hier das Script:

            // -----------------------------------------------------------------------------
            // ----- Abfragen von Werten aus der Datenbank (SQL) ---------------------------
            // -----------------------------------------------------------------------------
             
            // ----- Datenpunkt der ausgelesen werden soll ---------------------------------
            var id = "javascript.0.Wetterstation.Aussentemperatur";
            // ----- 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);});
            
            
            Segway 1 Reply Last reply Reply Quote 0
            • 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

                                731
                                Online

                                31.9k
                                Users

                                80.1k
                                Topics

                                1.3m
                                Posts

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