NEWS
History 2.0.0 verfügbar - eine Zusammenfassung
-
Hey all,
von History gibts jetzt die 2.1.6 mit letzten Fixes. Wenn keiner mehr was meldet wäre das die Version die die Tage in Stable geht.
Bitte checkt es nochmal
Ingo
-
@apollon77
Ich habe jetzt nochmal einen Test gemacht. Betrachtungszeitraum "dieser Tag".
Der Datenpunkt war von gestern 22:15 bis heute 19:36 false. Erst um 19:36 wurde er auf true gesetzt. Wie man im Bild sehen kann.
In der Grafik wird der Datenpunkt aber als true dargestellt. Das ist falsch.
Wählt man einen größeren Zeitbereich, wo der Wechsel um 22:15 nach false enthalten ist wird es richtig dargestellt.
History Einstellungen sind folgende:
Aus meiner Sicht wird nicht der richtige History Wert zur Darstellung herangezogen.
-
@afuerhoff sagte: Betrachtungszeitraum "dieser Tag".
Dann holt sich das Chart-Programm auch nur diesen Zeitraum aus der History, das den alten Wert nicht enthält. Wenn Änderungen seltener sind als der zu betrachtende Zeitraum, muss man zusätzliche Einträge erzeugen lassen mit "trotzdem gleiche Werte aufzeichnen": 43200 (12 h).
-
@paul53
Wofür gibt es dann diese Funktionalität "AUFZEICHNUNG ZUSÄTZLICHER WERTE ZUR BESSEREN GRAFISCHEN DARSTELLUNG" ?Der History Adapter müsste für die Darstellung ja nur in die Vergangenheit schauen und den letzten Wechsel suchen und in der Darstellung berücksichtigen. Das gleiche wäre auch beim auslesen per Script sinnvoll wenn zusätzliche Werte mit ausgegeben sollen.
-
@afuerhoff sagte: "AUFZEICHNUNG ZUSÄTZLICHER WERTE ZUR BESSEREN GRAFISCHEN DARSTELLUNG" ?
Wo gibt es das? Ist das neu?
-
@afuerhoff So funktioniert diese Funktion nicht. Diese Loggt zusätzliche Daten nwenn es sinn macht - hat mit der Darstellung an sich nichts zu tun. Normalerweise wird auch für Admin immer noch ein Wert an den "Rändern" gelesen, aber am Ende ist es immer eine Frage wie weit so ein Wert "weg" ist ...
Aber Paul hat recht - die einzig sinnvolle Variante um "immer" eine sinncolle grafische darstellung zu bekommen ist Werte öfters zu loggen
-
@paul53 Siehe ganz obe - das "neue" ist aber das man das Loggen dieser zusätzlichen Werte deaktivieren kann (war bisher immer schon da, nur halt Defaultmäßig). Jetzt kann man sagen "Ich will nur die echten/Raw Werte haben"
-
@apollon77
Das loggen zusätzlicher Werte wollte ich gerade vermeiden.Die Frage ist, kann man nicht grundsätzlich bei Boolean Werten davon ausgehen, dass ein Wert, der im Betrachtungszeitraum z.B. irgendwann auf true gewechselt hat, außerhalb des Betrachtungszeitraum dann false gewesen sein muss. also findet ein Wechsel von false nach true statt und nicht von true nach true. Es wird ja generell durch die jetzige Darstellung etwas falsches dargestellt.
-
@afuerhoff Das ist aber wen ein Admin Thema und keins vom Adapter! ich weiss gerade nicht wie Admin genau Abfragt und was es dann wie darstellt. Müsste man exakt mit Debug Log und so reinschauen. Bitte ggf Admin Issue erstellen
-
@apollon77
Das verstehe ich gerade nicht. Der History Adapter müsste doch die richtigen Werte für die Darstellung im Admin liefern. Admin stellt doch nur dar. Müsste ja auch beim Auslesen mit einem Script mit den "Zusatzwerten" richtig vom History Adapter zurückgegeben werden. -
@afuerhoff Naja dann müssten wir erstmal schauen was Admin genau abfragt ... und dann kann man dazu was sagen. Also dann schauen wir mal rein:
1.) Den ausgewählten Datenpunkt in den Settings das enhanced Logging einschalten
2.) History Instanz auf Debug Loglevel setzen
3.) Log posten und sagen welche Datenpunkt es war
4.) Dann nehmen wir die Abfrage die Admin gesendet hat und du sendest Sie als Skript und wir sehen welche Daten zurückkommen -
@apollon77
Hallo, hier mal das Log. Gefiltert nach dem Datenpunkt. Passt das so oder benötigst Du etwas anderes?2022-07-02 00:10:57.242 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134570680.4469083272847678 after getFileData: cacheData.length = 1, fileData.length = 1 2022-07-02 00:10:57.243 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134570680.4469083272847678 pre-cut data to 1 oldest values 2022-07-02 00:10:57.243 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134570680.4469083272847678 Beautify: 1 results 2022-07-02 00:10:57.243 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134570680.4469083272847678 after beautify: options.result.length = 1 2022-07-02 00:10:57.243 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134570680.4469083272847678 Send: 1 values in: 175ms 2022-07-02 00:10:57.764 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134577640.9211639891185686 getHistory message: {"id":"fb-checkpresence.0.familyMembers.Achim.presence","options":{"instance":"history.0","start":1656712800000,"end":1656713460000,"from":false,"ack":false,"q":false,"addID":false,"aggregate":"none","returnNewestEntries":true,"user":"system.user.admin"}} 2022-07-02 00:10:57.764 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134577640.9211639891185686 getHistory options final: {"id":"fb-checkpresence.0.familyMembers.Achim.presence","path":"/opt/iobroker/history/","start":1656712800000,"end":1656713460000,"step":null,"count":2000,"from":false,"ack":false,"q":false,"ignoreNull":false,"aggregate":"none","limit":2000,"addId":false,"returnNewestEntries":true,"percentile":null,"quantile":null,"integralUnit":null,"integralInterpolation":null,"removeBorderValues":false,"logId":"fb-checkpresence.0.familyMembers.Achim.presence16567134577640.9211639891185686","round":null,"debugLog":true} 2022-07-02 00:10:57.764 - debug: history.0 (31885) getOneCachedData: got 1 datapoints for fb-checkpresence.0.familyMembers.Achim.presence 2022-07-02 00:10:57.764 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134577640.9211639891185686 after getCachedData: length = 1, isFull=false 2022-07-02 00:10:57.782 - debug: history.0 (31885) getOneFileData: 20220702 -> 20220702 for fb-checkpresence.0.familyMembers.Achim.presence 2022-07-02 00:10:57.782 - debug: history.0 (31885) handleFileData: 20220702 -> /opt/iobroker/history/20220702/history.fb-checkpresence.0.familyMembers.Achim.presence.json 2022-07-02 00:10:57.783 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134577640.9211639891185686 after getFileData: cacheData.length = 1, fileData.length = 0 2022-07-02 00:10:57.783 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134577640.9211639891185686 Beautify: 1 results 2022-07-02 00:10:57.783 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134577640.9211639891185686 after beautify: options.result.length = 1 2022-07-02 00:10:57.783 - debug: history.0 (31885) fb-checkpresence.0.familyMembers.Achim.presence16567134577640.9211639891185686 Send: 1 values in: 19ms
-
@afuerhoff SO und damit hast Du mit
{"id":"fb-checkpresence.0.familyMembers.Achim.presence","options":{"instance":"history.0","start":1656712800000,"end":1656713460000,"from":false,"ack":false,"q":false,"addID":false,"aggregate":"none","returnNewestEntries":true,"user":"system.user.admin"}}
den gehHistory call ... Das jetzt mal in nem Javascript Skript mit "sendTo" zum history.0 instanz senden. Und dann Zeig mal das Ergebnis - dann weisst Du was zurückkommt
-
@apollon77
ich bekomme genau einen History Eintrag zurück geliefert für den aktuellen Tag. Das ist der Zeitpunkt wo der Datenpunkt nach true gewechselt hat. Die Grafik sagt etwas ganz anderes aus.2022-07-02 00:33:30.396 - info: javascript.0 (31943) script.js.Haus.Skript_3: history cntActualDay: 1 2022-07-02 00:33:30.397 - info: javascript.0 (31943) script.js.Haus.Skript_3: history: Sat Jul 02 2022 00:10:13 GMT+0200 (Central European Summer Time) value: true
-
@afuerhoff naja mit exakt einem Datenpunkt kann ein charting jetzt zwei Dinge tun:
- annehmen das es davor true war und danach ists unbekannt (scheinbar ist das das was die admin charting lib tut)
- vorher unbekannt und true dann ab Zeitpunkt x bis Ende darstellen. Wenn vorher auch true war ist’s indirekt auch falsch. Aber ggf richtiger als oben
Und daher wie gesagt. Bitte ein Admin issue anlegen. Der Adapter kann nicht mehr Daten zurückgeben wenn in dem Zeitraum nicht mehr da ist. Wenn es am gleichen Tag noch vorher oder nachher was gegeben hätte wäre das mit dabei gewesen (ich meine: wenn du das jetzt ausführst dann könnten 3 werte zurückkommen) - er ließt aber nicht über tagesgrenzen hinaus zusätzliche Daten … die würden ggf nur komme wenn sie in den eh gelesenen Daten mit drin wären.
-
@apollon77
Ich erstelle einen Issue im Admin.
Es wäre ja sehr einfach den Vorgänger Wert außerhalb des Betrachtungszeitraum zu ermitteln. Man müsste erstens die Anzahl der Werte im Betrachtungszeitraum ermitteln und dann die Anzahl erhöhen und erneut einlesen. Dann hätte man den Wert außerhalb des Betrachtungszeitraum, den man nutzen könnte. Hier müsste man natürlich noch Null Werte abfangen.Es wäre aber schön, wenn der History Adapter dies schon so liefern könnte, dann hätte man auch den Benefit in Scripten und müsste das nicht selber programmieren. Dann wäre das auch für den Admin so verfügbar. So hatte ich eigentlich die zusätzlichen Werte verstanden. Denn was nützen diese, wenn sie nicht wirklich richtig sind. Der History Adapter hat ja alle Werte vorliegen. Das Verhalten kann dann über die Aggregat Funktion beeinflusst werden. Nur mal als Anregung.
-
@afuerhoff naja wie bereits gesagt. Der History Adapter tut genau das … wenn es am gleichen Tag einen Vorgänger Bzw Nachfolger wert gab.
Was er nicht tut ist extra den Vortag auch noch komplett einzulesen nur um ggf den vorwert zu bekommen (und wenn da keiner ist den Vortag und den Vortag …….).
Die Alternative im bei charting besser zu sein ist genannt worden: auch unveränderte Werte regelmäßig zu loggen. So umgehst du das issue.
-
@apollon77
Hallo, ich habe mal eine Frage zum Parameter "ignoreNull".
Wenn ignoreNull=true, count =10, end = die aktuelle Zeit und in den Historydaten in dem Bereich 2 Null werte enthalten sind, werden 8 Werte zurück geliefert. Ich hätte jetzt erwartet, dass es 10 sind. Mit ignoreNull=false würden ja 10 Werte zurück geliefert.Ist das ein korrektes Verhalten oder ein Fehler?
-
@afuerhoff Im aktuellen Code ist es korrekt ... ob es so sein sollte ist ne andere Frage ... leg gern mal ein Issue an, muss ich mal drüber meditieren
-
@apollon77
Mach ich.Würde das leben erleichtern, wenn man den aktuellen Tag abfragt und den letzten Wert davor ebenfalls abfragen möchte. Dann käme man mit zwei History Abfragen aus.
Die erste um den Count des aktuellen Tages zu bekommen und die zweite um den Count + 1 zu lesen.
Im aktuellen Zustand des Adapters müsste man auf Verdacht mehr als einen zusätzlichen Wert einlesen (aufgrund möglicher Null Werte) und dann noch schauen, ob ein gültiger Wert dabei ist.