NEWS
Min. und Max Wert
-
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...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!!
-
@bloop mach mal in GetResult() ein
log(dpoint)
-
@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)
-
@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!