NEWS
Aggregate function macht aus boolean float Werte
-
Hi,
in dem node_module/iobroker.sql/lib/aggregate.js werden aus booleans bei aggregate=average
in floatwerte gewandelt.
Hintergrund: Ich habe eine Variable "SONNE" vom type boolean, die also nur true/false sein kann.
Diese Variable setze ich, wenn ich Sonnenschein erkannt habe (aus diversen Temperaturen und Temperaturdifferenzen).
Gemessen wird alle 10 Minuten, kann also auch nur für 10 Minuten einmalig "true" sein, so ist das Wetter eben
In der Datenbank sehe ich dies als Reihe von 0000001000111100001001100 mit den timestamps eingetragen.
Das Feld val ist als tinyint(1) definiert, das bool ergibt sich ja nur aus der verwendeten Tabelle ts_bool.
Wenn ich mehr Werte als auszugebende Punkte habe, also die aggregate Funktion zuschlägt,
passiert bei "average" dass die Werte addiert und dann durch die Anzahl der Reduktion dividert wird.
(Zeile 239 in aggregate.js)
Und dadurch werden aus ganz kurzen "true" Phasen Werte wie 0.14, 0.22, aus langen "true" Phasen 0.48, 0.62.
Jedenfalls ist der Type dann nicht mehr boolean!
Lösungsansatz:
Werte >= 0.5 werden "true", Werte < 0.5 werden "false", es bleibt immer boolean.
Eventuell ist es noch besser, wenn >= 1 Wert in der Schleife "true" ist, dann immer "true" zurückzugeben. Dann geht kein Peek nach "true" verloren.
Nur wenn alle Werte (in einer zusammengefassten Anzahl) = "false" dann ein "false" zurückgeben.
Ein ähnliches Phänomen ergibt sich auch bei numerischen Werten, die nur extrem wenige Änderungen haben, etwa Rolladen, die
einmal am Tag hoch und abends wieder runter gehen. Durch die Aggregation entstehen da nicht richtige Werte. Aber das ist
ein leicht anderes Thema. Vielleicht ist der ART-Type "bei Änderung" dafür vorgesehen, funktioniert nur noch nicht richtig.
Optisch sieht das Ergebnis richtig aus, wenn ich als aggregatationtype "none" verwende. Dies ist allerdings nicht im FLOT-Editor selbst einstellbar,
sondern kann nur im Bookmark editiert werden, da ist es das I[lfd_nummer][art] Feld. Im Editor "fehlt" noch der select für das "none".
-
Noch ein paar Bilder dazu:
So sähe es eigentlich richtig aus, es gibt ein paar ganz kurze Peeks "SONNE". Dies ist das Ergebnis, wenn [art]=none manuell in der URL gesetzt ist.
Leider mach flot nur das draus: