Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Min. und Max Wert

    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

    Min. und Max Wert

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

      Liebe Community,

      Ich würde zu diesem Thema eure Hilfe benötigen.
      Bin noch kompletter Rookie und habe versucht Das Skript aus min-max-temperatursensor bei mir einzubauen.
      Die Daten von der Heizung werden schon seit längerem aufgezeichnet und sind im VIS eingebunden.
      Datenpunkte für die Min und Max Werte sind erstellt, MySQL läuft und dennoch erhalte ich eine Fehlermeldung.
      Kann mir bitte jemand weiter helfen?

      var id = 'mqtt.0.Temp_Keller.VL_Heizung.temperature';
       
      var maxid = 'mqtt.0.Temp_Keller.VL_Heizung.Max24';
      var minid = 'mqtt.0.Temp_Keller.VL_Heizung.Min24';
      var dt = 24;//Zeitraum in Stunden
        dt = dt*3600*1000;
       
      schedule("*/5 * * * *", function(){
          SQLAbfrage(id);
      });
       
      SQLAbfrage(id);
       
      // maximum, minimum
      function minimum(result) 
      {
        log(JSON.stringify(result.result));
        setState(minid, result.result[0].MinVal);
      }
       
      function maximum(result) 
      {
        log('Fn Max'+ JSON.stringify(result.result));
        setState(maxid, result.result[0].MaxVal);
      }
       
      function SQLAbfrage () 
      {
      log('Name: '+id);
        sendTo('sql.0', 'query', 'SELECT * FROM datapoints WHERE name = \'' + id + '\'', GetResults);
      }
       
      function GetResults (dpoint) {
        var end_time = new Date().getTime();
        var start_time = new Date().getTime() - dt;
        log('startzeit: '+start_time);
        log('endzeit: '+end_time);
        log('id: '+dpoint.result[0].name);
       
        //log(JSON.stringify(dpoint.result)+'//'+start_time);
        //log(dpoint.result[0].id + '---//---' + dpoint.result[0].name);
        sendTo('sql.0', 'query', 'SELECT Round(Min(val),1) As MinVal FROM 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 ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',maximum);
      }
      

      Ich erhalte folgenden Fehler:

      24.1.2021, 16:16:57.511	[info ]: javascript.0 (8747) Start javascript script.js.common.Temp_VL-min_max
      24.1.2021, 16:16:57.538	[info ]: javascript.0 (8747) script.js.common.Temp_VL-min_max: Name: mqtt.0.Temp_Keller.VL_Heizung.temperature
      24.1.2021, 16:16:57.540	[info ]: javascript.0 (8747) script.js.common.Temp_VL-min_max: registered 0 subscriptions and 1 schedule
      24.1.2021, 16:16:57.554	[info ]: javascript.0 (8747) script.js.common.Temp_VL-min_max: startzeit: 1611415017554
      24.1.2021, 16:16:57.555	[info ]: javascript.0 (8747) script.js.common.Temp_VL-min_max: endzeit: 1611501417554
      24.1.2021, 16:16:57.576	[warn ]: javascript.0 (8747) TypeError: Cannot read property '0' of undefined
          at Object.GetResults [as cb] (script.js.common.Temp_VL-min_max:39:27)
          at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5297:71)
          at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:234:41)
          at processImmediate (internal/timers.js:461:21)
      

      Wenn ich das richtig Interpretiere findet das Skript in der Datenbank des Datenpunkes keine Werte. MySQL ist für den Punkt jedoch aktiviert...
      Jetzt bin ich mit meinem Latein am Ende...

      1476761d-4803-462d-87a2-d1f75d3b06a0-image.png

      Da ich bei den Skripts nur bedingt Durchblicke und mich in den meisten Fällen mit Copy/Paste und Blockly durch Schummle wäre ich sehr dankbar über eure Hilfe!

      Vielen Herzlichen Dank!!

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

        @bloop mach mal in GetResult() ein log(dpoint)

        B 1 Reply Last reply Reply Quote 0
        • B
          bloop @fastfoot last edited by

          @fastfoot
          Danke für die Antwort!
          Habs versucht, jedoch leider ohne Erfolg.

          function GetResults (dpoint) {
            var end_time = new Date().getTime();
            var start_time = new Date().getTime() - dt;
            log('startzeit: '+start_time);
            log('endzeit: '+end_time);
            log('id: '+dpoint.result[0].name);
            log(dpoint)
            
          
          08:34:11.856	info	javascript.0 (8747) Start javascript script.js.common.Temp_VL-min_max
          08:34:11.864	info	javascript.0 (8747) script.js.common.Temp_VL-min_max: Name: mqtt.0.Temp_Keller.VL_Heizung.temperature
          08:34:11.865	info	javascript.0 (8747) script.js.common.Temp_VL-min_max: registered 0 subscriptions and 1 schedule
          08:34:11.875	info	javascript.0 (8747) script.js.common.Temp_VL-min_max: {'error':'Error: ER_NO_DB_ERROR: No database selected'}
          08:34:11.877	warn	javascript.0 (8747) TypeError: Cannot read property '0' of undefined at Object.GetResults [as cb] (script.js.common.Temp_VL-min_max:42:134) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5297:71) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:234:41) at processImmediate (internal/timers.js:461:21)
          
          B 1 Reply Last reply Reply Quote 0
          • B
            bloop @bloop last edited by

            @bloop
            Hab mich jetzt weiter gespielt und das Problem gefunden:
            Bei den Datapoints muss der Datenbankname vorgestellt werden.

             sendTo('sql.0', 'query', 'SELECT * FROM iobroker.datapoints WHERE name = \'' + id + '\'', GetResults);
            

            sowohl in der SQLAbfrage als auch im GetResults

            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);
            

            Ab und zu hilft ne Nacht drüber schlafen auch 😁

            @fastfoot Herzlichen Dank nochmal!

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

            Support us

            ioBroker
            Community Adapters
            Donate

            881
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            2
            4
            260
            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