FTUI Neue Version chart_widget

Begonnen von eki, 31 Januar 2016, 00:17:26

Vorheriges Thema - Nächstes Thema

setstate


eki

Zitat von: ToM_ToM am 10 Januar 2018, 16:43:53
Genau. Dieses Reading wird natürlich permanent aktualisiert. Das heißt, sobald sich der Wert ändert, von dem der Tagesdurchschnitt errechnet wird, ändert sich unter Umständen auch der Wert des Readings welches den Durchschnitt enthält. Coll wäre eben wenn dieser eine Wert als komplett durchgezogene Linie angezeigt wird.

Also so wie im angefügten Bild (Quelle: Google Bilder)

VG, Thomas

Das geht über logproxy schon jetzt. Du musst folgendes Tun:

in FHEM (falls nicht schon vorhanden ein logProxy device anlegen (angenommener Name ist lp).
Folgende Definitionen zu Deinen bestehenden dazufügen (ich gehe mal davon aus, dass Du schon ein Array mit columnspec etc hast, und habe mal als Beispiel angenommen, dass Dein Device welches den Mittelwert als Reading hat test heißt und das Reading mWert, das muss dann natürlich entsprechend Deinen wirklichen Werten angepasst werden):
data-device='[...,"test"]' (das wird gebraucht, um dafür zu sorgen, dass das Chart entsprechend Änderungen dynamisch mitbekommt)
data-logdevice='[...,"lp"]'
data-columnspec='[...,"ConstY:ReadingsVal(\"test\",\"mWert\",\"0\")"]'

entsprechend dann natürlich noch data-style, data-ptype, data-uaxis für den zusätzlichen Graphen festlegen.

Die Art der Berechnung des Readings kann man, wie von setstate vorgeschlagen ja in FHEM dann entsprechend über Perl festlegen, das hat ja nichts mit der Darstellung im Chart zu tun.

Lucky2k12

HP T610, HM, Jeelink, LGW, mapleCUL868+434

ToM_ToM

ZitatDas geht über logproxy schon jetzt. Du musst folgendes Tun:

Hey cool, das funktioniert super. Da wäre ich nie drauf gekommen. :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ekur

Ich verstehe nicht ganz die Syntax, die benötigt wird um data-maxvalue und data-minvalue aus einem Reading zu ziehen.

In der Erklärung steht:

Zitatreadings dynamisch gesetzt werden wenn "<device>:<reading>" als Parameter gesetzt wird

Ich habe mit dem Device "Wetter" und dem Reading "gr_max" folgendes hinterlegt:

data-maxvalue="Wetter:gr_max"

Leider wird damit kein Graph mehr angezeigt. Ist die Syntax jetzt eine andere?

FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC

eki

Prinzipiell sollte das so gehen. Schick mal die komplette Definition Deines Charts, dann kann ich versuchen das nachzustellen und zu beheben.

ekur

Hallo eki,

es ist ein Chart ab aktueller Uhrzeit mit 24 Stunden Vorausschau, unten angehängt die Bilder wie es aussieht sowie das Device mit den Readings, hier der Code:


        <div data-type="chart"
         data-device="Wetter"
         data-get="state"
         data-logdevice='[
                "myLogProxy",
                "myLogProxy",
                "myLogProxy",
                "myLogProxy"
                        ]'
         data-columnspec='[
                "Func:logProxy_proplanta2Plot(\\x22Wetter\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)",
                "ConstY:ReadingsVal(\"Wetter\",\"gr_zero\",\"0\")",
                "Func:logProxy_proplanta2Plot(\\x22Wetter\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)",
                "Func:logProxy_proplanta2Plot(\\x22Wetter\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)"
                        ]'
         data-style='[
                "ftui l0",
                "ftui l2",
                "ftui l6fill",
                "ftui l5fill"
                        ]'
         data-ptype='[
                "quadraticSmooth",
                "lines",
                "steps",
                "quadraticSmooth"
                        ]'
         data-uaxis='[
                "primary",
                "primary",
                "secondary",
                "secondary"
                        ]'
         data-legend='[
                "Temperatur",
                "Null-Linie",
                "Regenmenge",
                "Regenwahrscheinlichkeit"
                        ]'

         data-yunit="°C"
         data-ytext="Temperatur"
         data-yunit_sec="mm/%"
         data-ytext_sec="Regenmenge / -wahrscheinlichkeit"
         data-timeformat="hh"
         data-minvalue="Wetter:gr_min"
         data-maxvalue="Wetter:gr_max"
         data-minvalue_sec="auto"
         data-maxvalue_sec="100"
         data-nofulldays='true'
         data-daysago_start = "now"
         data-daysago_end = "-24h"
         data-xticks="60"
         data-yticks="auto"
         data-yticks_sec="20"
         data-title="24-Stunden - Vorhersage"
         data-showlegend="false"
         data-height="100%"
         class="nobuttons fullsize">
        </div>

FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC

eki

#262
Also ich habe das jetzt mal bei mir mit genau Deinen Einstellungen und einem PROPLANTA Device ausprobiert. Ich musste allerdings erst die beiden Readings gr_min und gr_max anlegen (ich nehme an, dass Du die per userReadings oder von Hand angelegt hast). Sobald die Readings vorhanden waren und dort Zahlen standen hat es bei mir geklappt. Kannst Du mir noch per "list Wetter" in der FHEM Kommandozeile die Parameter Deines Wetter Devices posten.
Bist Du sicher, dass Du die aktuellste Version des Widgets verwendest (das Feature kam ja erst kürzlich dazu)?

ToM_ToM

Guten Morgen Zusammen,

mal eine Frage:

Ich logge alle 10 Sekunden den Stromverbrauch. Wenn ich diese Werte jetzt in ein Chart bringen möchte, ist mein Tablet völlig überfordert.
Gibt es eine Möglichkeit, dem Chart-Widget zu sagen dass es nicht alle Daten, sondern nur die von allen 5 min verwenden soll? Oder müsste ich hier zusätzliche Daten loggen?

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

dafreak

Moin,
ich bin absolut am verzweifeln :'( Warum funktioniert das Widget mit einem Logproxy und ConstX/ConstY mit Variablen nicht?

"ConstY:$data{max1}"
"ConstX:$data{maxdate1},$data{max1},$data{avg1}"

Diese beiden data-columnspecs funktionieren bei mir leider nicht, obwohl $data{max1} z.B. im Titel funktioniert. Ebenso funktioniert es, wenn ich anstelle der Variablen, einen festen Wert angebe, z.B. "ConstY:1500". Dann wird bei 1500 eine waagerechte Linie angezeigt.
Bin ich zu blöd, oder muss man auch hier irgendwas escapen, hinzufügen oder weglassen?

eki

Zitat von: ToM_ToM am 15 Januar 2018, 09:08:36
Guten Morgen Zusammen,

mal eine Frage:

Ich logge alle 10 Sekunden den Stromverbrauch. Wenn ich diese Werte jetzt in ein Chart bringen möchte, ist mein Tablet völlig überfordert.
Gibt es eine Möglichkeit, dem Chart-Widget zu sagen dass es nicht alle Daten, sondern nur die von allen 5 min verwenden soll? Oder müsste ich hier zusätzliche Daten loggen?

VG, Thomas

Hallo Thomas,

das chart widget macht eigentlich selbst nichts an den Daten, die es von FHEM bekommt, sondern stellt sie nur auf verschiedene Weisen dar. Das ist für mich so ein bisschen ein Grundprinzip, das ich auch nicht so gern aufgeben will. Man müsste eigentlich erst mal schauen, was wirklich für die schlechte Performance zuständig ist. Das Ganze geht ja in 2 Schritten:
1. Das Chart Widget holt sich vom FHEM Server per get Befehl (wie in der Columnspec angegeben) die Daten.
2. Das Chart Widget (im Browser auf dem Client) bereitet die Daten auf und stellt sie dar.

Der Grund für schlechte Performance könnte als 1. der FHEM Server sein, der muss ja auch die Logfiles oder die LogDB durchsuchen und dann die gewünschten Daten zusammen sammeln und über das WEB an den Client schicken und 2. der Client auf einem schwächerer performanten Tablet/Smarphone/PC. Um wirklich Performance zu sparen, sollte man also am Beginn der Kette reduzieren und das geht aus meiner Sicht am besten mit einem zweiten Logfile in FHEM, das weniger häufig loggt (z.B. per event-min-interval Attribut).

eki

Zitat von: dafreak am 16 Januar 2018, 22:18:28
Moin,
ich bin absolut am verzweifeln :'( Warum funktioniert das Widget mit einem Logproxy und ConstX/ConstY mit Variablen nicht?

"ConstY:$data{max1}"
"ConstX:$data{maxdate1},$data{max1},$data{avg1}"

Diese beiden data-columnspecs funktionieren bei mir leider nicht, obwohl $data{max1} z.B. im Titel funktioniert. Ebenso funktioniert es, wenn ich anstelle der Variablen, einen festen Wert angebe, z.B. "ConstY:1500". Dann wird bei 1500 eine waagerechte Linie angezeigt.
Bin ich zu blöd, oder muss man auch hier irgendwas escapen, hinzufügen oder weglassen?

Nein, Du bist nicht zu blöd (nehme ich zumindest an ;)). Die Möglichkeit des Zugriffs auf $data... ist bisher im Chart nicht implementiert. Die Parameter $data... sind erst mal nur im Perl von FHEM enthalten und das Chart Widget ist ja ein ganz anderes Tool, welches auf einem Web Clienten läuft (möglicherweise auf einem anderen Rechner) und das nur per Web Schnittstelle Daten aus FEHM abrufen kann.

Für die Einträge in der Überschrift habe ich das im Chart Widget "nach implementiert" und das müsste ich für die Nutzung in den Columnspecs auch machen. Ich schaue mal, wieviel Aufwand das ist und was ich machen kann.

nhetzke

#267
Hallo,
ich habe ein Problem mit der 'data-columnspec'

Ich greife über folgende Zeilen die Werte aus einem LogFile ab:

data-logdevice='["FileLog_MeinWetter.Regen"]'
data-device="MeinWetter.Regen"
data-columnspec='["4:rainToDay"]'


Dabei habe ich folgende Erkenntnisse gemacht. In dem LogFile gibt es folgende beiden Werte:

  • rainToDay
  • rainToDayIn

2018-01-17_09:03:23 MeinWetter.Regen rainToDay: 3.61
2018-01-17_09:03:23 MeinWetter.Regen rainToDayIn: 0.14


Nun möchte ich natürlich nur die Werte aus rainToDay haben. Das Chart Widget liefert mir jedoch teilweise auch Werte aus rainToDayIn.

Mache ich nun etwas falsch?

Danke und LGe
Niels
Entwickler, Projekt und Qualitätsmanager
RasPi1b & FHEM & HM-CFG-USB

eki

Du musst in der Columnspec beim Filtern auch den ':' mit einbeziehen. Allerdings muss der 'maskiert' werden.

Mit:

data-columnspec='["4:rainToDay\\x3a:"]'

sollte es gehen.

ToM_ToM

ZitatDer Grund für schlechte Performance könnte als 1. der FHEM Server sein, der muss ja auch die Logfiles oder die LogDB durchsuchen und dann die gewünschten Daten zusammen sammeln und über das WEB an den Client schicken und 2. der Client auf einem schwächerer performanten Tablet/Smarphone/PC. Um wirklich Performance zu sparen, sollte man also am Beginn der Kette reduzieren und das geht aus meiner Sicht am besten mit einem zweiten Logfile in FHEM, das weniger häufig loggt (z.B. per event-min-interval Attribut).

Hi eki, alles klar. Mit dieser Antwort kann ich leben. :) Ich werde dann einfach ein zweites Userreading anlegen welches nur den Durchschnitt über die letzten 5 min loggt und das für die Anzeige verwenden.
Es liegt definitiv am Tablet. Wenn ichs am PC aufrufe, sehe ich die Daten sofort.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8