NEWS
[gelöst] Min /Max Temperatursensor
-
Da ich mich dem Thema der Min/Max Ermittlung auf einem anderen Weg nähern wollte, mal eine Frage:
Wie sieht es mit der Systemlast aus, wenn die Datenbank jede Minute abgefragt wird?
Ich wollte das prinzipiell nur so mit Datenpunkten machen, wie es im ersten Beitrag des TE beschrieben ist.
Also eigentlich völlig ohne Array oder häufige DB-Abfrage.
Erzeugt die ursprüngliche Lösung nicht wesentlich weniger Systemlast, wenn nun zwischen den Datenpunkten seit Mitternacht verglichen wird?
-
Wie sieht es mit der Systemlast aus, wenn die Datenbank jede Minute abgefragt wird?
Erzeugt die ursprüngliche Lösung nicht wesentlich weniger Systemlast, wenn nun zwischen den Datenpunkten seit Mitternacht verglichen wird?Ja, eine Datenbankabfrage erzeugt eine höhere Systemlast, zumal sich auch noch der Temperaturwert seltener als jede Minute ändert.
-
Liebe Community,
Ich würde zu diesem Thema eure hilfe benötigen.
Bin noch kompletter Rookie und habe versucht das hier angegebene Skript einzubauen.
Datenpunkte 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 er in der Datenbank des Datenpunkes keine Werte. MySQL ist für den Punkt jedoch aktiviert...

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!
Herzlichen Dank!!