NEWS
Flot-Editor: Tageshöchstwerte anzeigen lassen
-
Hallo,
benutze den Flot-Editor zum anzeigen von Kurven. Früher konnte ich bei FHEM (siehe Bild) mir in der Überschrift zB die Tagestiefst- und höchstwerte anzeigen lassen. Geht das mit dem Flot-editor auch ?
-
Ich habe nun zwei andere Threads gefunden, wo per SQL-Abfrage der Min und Max-Wert ermittelt werden soll. Leider bekomme ich folgenden Fehler:
sql.0 2018-08-04 20:33:12.901 error Cannot insert INSERT INTO `iobroker`.datapoints (name, type) VALUES('javascript.0.Statistik_24h_Max_TempAussen', undefined);: Error: ER_BAD_FIELD_ERROR: Unknown column 'undefin
Hier das Javascript dazu - jemand einen Hinweis:
! // –---------------------------------------------------------------------------
! // ----- Abfragen von Werten aus der Datenbank (SQL) ---------------------------
! // -----------------------------------------------------------------------------
! // ----- Datenpunkt der ausgelesen werden soll ---------------------------------
! var id = "hm-rpc.1.KEQ0054069.1.TEMPERATURE"/Temp_Feuchte_Aussen:1.TEMPERATURE/;
! // ----- Datenpunkte in die gespeichert werden soll ----------------------------
! var maxid = 'javascript.0.Statistik_24h_Max_TempAussen';
! var minid = 'javascript.0.Statistik_24h_Min_TempAussen';
! var dt = 24; // Zeitraum in Stunden
! dt = dt36001000; // 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 iobroker.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("*/1 * * * *", function(){SQLAbfrage(id);});Es geht hauptsächlich um diesen Thread https://forum.iobroker.net/viewtopic.php?f=21&t=5663
-
Vielleicht bin ich ja schon einen Schritt weiter aber nun habe ich einen Fehler mit Duplicate entry:
annot insert INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES(1885, 1533458884463, 0, 1, 14, 0);: Error: ER_DUP_ENTRY: Duplicate entry '1885-1533458884463' f
-
Habe nun nach langem hin und her die Lösung gefunden für mein Script warum das nicht läuft.
Habe https://forum.iobroker.net/viewtopic.php?t=5386 den entscheidenden Hinweis gelesen.
Schon sehr merkwürdig das man solch wichtige Informationen nicht irgendwo platziert oder in der Hilfe vom Adapter !!! Ich hatte das Script die ganze Zeit im global drin und als ich es daraus genommen hatte kamen auch Meldungen im Log. Schön - hat mich ja nur 4 Tage gekostet.
Nichts für ungut aber sowas ist schon ärgerlich…...nun bastel ich dann mal weiter.
-
Das man eigene Scripte die nicht global verfügbar sein sollen nicht in den Ordner global packt steht aber nun wirklich an vielen Stellen.
Evtl wäre es natürlich möglich den Ordner global nur anzuzeigen wenn der User vorher in der Konfiguration eine bestimmte Änderung vornimmt. Somit würden evtl weniger Anfänger in diesen Fehler laufen
-
Jo, ich weiß das es schwer ist eine Anleitung für Newbies parat zu haben. Das ist wirklich nicht einfach - gebe ich ja zu.
ABER dann sollte eben mind. ein Hinweis irgendwo sein oder nicht nur ein Ordner global sondern auch ein Ordner userdefined oder so.
Oder wie geschrieben hast erstmal den Ordner "verstecken".
Ich hatte mich die ganze Zeit gewundert warum in dem Log Fenster direkt im Java-Adapter NIE NIE NIE Meldungen drin sind. Da muss doch was faul sein. Als ich einfach mal auf Truescript umgestellt hatte den Internpreter dann kamen aber ganz viele Fehler…..also hab ich den fehler woanders gesucht, da anscheinend ja was im Log kommt.
Wurde ich aber letztendlich irre geführt. Bis ich den richtigen Hinweis las.
Naja, 4 Tage waren ja nicht umsonst sondern habe vieles gelernt.....aber ärgerlich ist es trotzdem .-)
-
Anfängern würde ich eindeutig Typescript vor Javascript empfehlen.
Da sieht man sehr viele Fehler die man machen kann schon beim kompilieren und sucht dann nicht erst lange weil ein Programm einfach nicht so läuft wie man denkt.
-
Hier das Javascript dazu - jemand einen Hinweis:
! // –---------------------------------------------------------------------------
! // ----- Abfragen von Werten aus der Datenbank (SQL) ---------------------------
! // -----------------------------------------------------------------------------
! // ----- Datenpunkt der ausgelesen werden soll ---------------------------------
! var id = "hm-rpc.1.KEQ0054069.1.TEMPERATURE"/Temp_Feuchte_Aussen:1.TEMPERATURE/;
! // ----- Datenpunkte in die gespeichert werden soll ----------------------------
! var maxid = 'javascript.0.Statistik_24h_Max_TempAussen';
! var minid = 'javascript.0.Statistik_24h_Min_TempAussen';
! var dt = 24; // Zeitraum in Stunden
! dt = dt36001000; // 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 iobroker.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("*/1 * * * *", function(){SQLAbfrage(id);}); `Kurze Frage noch zu dem Script:
Schaut das Script im Prinzip IMMER AKTUELL auf die letzten 24 Stunden und macht dann entsprechend des Poll-Script-Aufrufes eine Datenpunktaktualisierung ?also von 19 bis 19 Uhr ? wenn ich um 21Uhr schaue ist es von 21 bis 21 Uhr ?
Was wäre zu tun, wenn es immer für den jeweiligen Tag dies machen soll also von 0:00 bis 23:59 ?