Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. Aggregate function macht aus boolean float Werte

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Aggregate function macht aus boolean float Werte

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      harvey637 last edited by

      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".

      1 Reply Last reply Reply Quote 0
      • H
        harvey637 last edited by

        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.
        964_sonne1.png

        Leider mach flot nur das draus:
        964_sonne2.png

        1 Reply Last reply Reply Quote 0
        • First post
          Last post

        Support us

        ioBroker
        Community Adapters
        Donate

        441
        Online

        31.8k
        Users

        80.0k
        Topics

        1.3m
        Posts

        1
        2
        591
        Loading More Posts
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes
        Reply
        • Reply as topic
        Log in to reply
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
        The ioBroker Community 2014-2023
        logo