NEWS
Max /Mintemperatur aus influxdb mit gethistory
-
@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 -
@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" } }
-
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);});
-
@adsfa
Kann dir da nicht helfen, da ich die SQL nicht mehr am laufen habe sondern auf Influx umgestiegen bin. -
@segway Danke für deine Antwort.
Ich nutze auch Influx und würde gerne Datenpunkte in iobroker damit aktualisieren.
Wie machst du das jetzt? -
@adsfa
Inwiefern Datenpunkte aktualisieren ? verstehe ich grad nicht ! -
@segway
Ich würde gerne Berechnungen vornehmen, wie z.B. die Min Temperatur der letzten 24h und das Ergebnis in einem Datenpunkt speichern. -
@adsfa
Mit Grafana und Influx brauchst du das nicht ! Das kannst du direkt in Grafana machen -
@segway
Danke dir. Wie gebe ich die berechneten Werte an iobroker zurück? Würde die gerne zum Triggern nutzen. -
@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.