fronthem + Plots + status.log für smartVISU 2.9

Begonnen von raman, 03 April 2018, 20:36:21

Vorheriges Thema - Nächstes Thema

raman

@cruser1800
It's not a bug, it's a feature! Kombination aus "1d" und "avg" liefert dir den Sundendurchschnitt,
Setze mal in SV mode auf "raw"!

@blue
Noch so ein Sonderfall! In FHEM wird glaube ich bei einem state-Event das state nicht wie bei anderen
Readings mit angegeben.

Wird der Plot dan mit folgender Angabe für den Converter an SV gesendet?
converter: Plotfile heizung_verbraucherkreis_temp_vl 3

herrmannj

bei den anderen convertern setze ich da explizit "state" ein um diese confusion zu verhindern. Macht be den logs evtl auch Sinn.

blue

Zitat von: raman am 05 April 2018, 11:18:17
@blue
Noch so ein Sonderfall! In FHEM wird glaube ich bei einem state-Event das state nicht wie bei anderen
Readings mit angegeben.

Wird der Plot dan mit folgender Angabe für den Converter an SV gesendet?
converter: Plotfile heizung_verbraucherkreis_temp_vl 3

Richtig, exakt so hat es funktioniert und wichtig war eben auch, dass Readings leer bleibt, ansonsten klappt das mit der Column-Nummer nicht. Als Idee: Wie wäre es, wenn du bei dem Reading "state" fest die Spalte 3 nimmst anstatt default die 4? Ja, es wäre dann ein Sonderfall, aber der zieht sich immerhin durch ganz FHEM durch.

cruser1800

Zitat von: raman am 05 April 2018, 11:18:17
@cruser1800
It's not a bug, it's a feature! Kombination aus "1d" und "avg" liefert dir den Sundendurchschnitt,
Setze mal in SV mode auf "raw"!


Hallo raman,

habe ich probiert! Aber das Plot bleibt leer! Vielleicht sollte ich noch erwähnen, dass ich mit 2.9 teste!

Alle andern mode - Einstellungen funktionieren!

blue

Hallo raman, hallo cruser1800,

ich habe gestern Abend dblog installiert und mit deiner Erweiterung getestet. Ich kann das Verhalten, das cruser1800 mit plot.period beschreibt, nachvollziehen: avg mittelt stundenweise (ok, das ist ein Feature, soweit verstanden  :) ), aber bei 'raw' bleibt die komplette Grafik leer (siehe Anhang). A propos 'raw': Die Kurve bleibt genauso komplett leer, wenn ich Plotfile verwende (und explizit 'raw' verwende, leer '' oder 'avg' bringt mit Plotfile die gewünschte Kurve zum Vorschein). Die Ursache für das Nichtfunktionieren von 'raw' scheint also unabhängig von Plot und Plotfile zu sein. Ich habe noch nicht in deinen Code schauen können und daher noch nicht genau die Stelle nachvollzogen. Vielleicht mache auch ich was falsch?

Summa summarum: Mir ist es mit dblog und Plot nicht möglich, die Kurve mit Rohwerten darzustellen. Plotfile funktioniert, wie auch schon gestern geschrieben, aber nur mit Modus '' oder 'avg' (nicht 'raw').

Mein Code in SV:

{{ plot.period('p5', ['Heizung.Verbraucherkreis.Temperatur.Vorlauf', 'Heizung.Verbraucherkreis.Temperatur.Ruecklauf'], 'raw', '9h', 'now', 0, 0, 100, ['Vorlauftemp.', 'Rücklauftemp'], [ '#a00',  '#00a'], ['line', 'line'], ['', 'Temperatur in °C']) }}

Funktionierend aber nur mit 'avg':

{{ plot.period('p5', ['Heizung.Verbraucherkreis.Temperatur.Vorlauf', 'Heizung.Verbraucherkreis.Temperatur.Ruecklauf'], 'avg', '9h', 'now', 0, 0, 100, ['Vorlauftemp.', 'Rücklauftemp'], [ '#a00',  '#00a'], ['line', 'line'], ['', 'Temperatur in °C']) }}


Ein anderer Punkt: Eine Kurve mit 'avg' aktualisiert sich mit neuen (nicht gemittelten) Werten. Ist der Browser eine längere Zeit geöffnet, wird die Kurve ab dem Zeitpunkt des Seitenaufrufs mit den einzelnen Rohwerten mit jedem Event angezeigt. Es sei aber mal dahin gestellt, ob das wirklich ein "Problem" und wichtig ist.

raman

Das mit den Update bei Punkten funktioniert nicht so wie es soll!
Das habe ich noch nicht umgesetzt, aber ich habe dazu eine Idee.

Das mit raw muss ich mir noch genauer anschauen, aber für Plotfile
wird der Modus gar nicht ausgewertet und verwendet. Da ist es auf
fronthem-Seite eigentlich egal, was man angibt. Wie sich das auf
die Auswertung in SV auswirkt muss ich noch mal testen.



smai

Die sV macht nichts mit dem Mode, das aggregieren wird dem Backend überlassen.
Genau genommen kümmert sich die sV aktuell nur um count und wirft frühere Werte raus, wenn neue hinzukommen und der count überschritten wird.
Zudem werden zeitgleiche Werte eliminiert, dadurch können diese rückwirkend angepasst oder auch mehrmals derselbe Datenpunkt gesendet werden.

In Zukunft möchte ich ersteres aber ändern, weil eine Einschränkung auf den angegebenen Zeitbereich wohl sinnvoller wäre als auf die Anzahl.

Anscheinend gibt es noch gewisse Probleme bei der Darstellung mit plot.period, zumindest berichten SmartHomeNG User davon.
Ich konnte diese nicht nachvollziehen. Da ich kürzlich einige umgebaut habe, kann es aber auch nicht ausschliessen.

HCS

Bei mir funktioniert raw mit filelog

  <div class="block">
    <div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
      <div data-role="collapsible" data-collapsed="false" >
        <h3>plot.period</h3>
        <div class="hcs-test">
          {{ plot.period( "id.PlotTest.1",
            ["PlotTest.1"],
            raw,
            "3d",
            "0d",
            0,
            30,
            100,
            ["Bad"],
            ["#0000FF"],
            ["line"]) }}
        </div>
      </div>
    </div>
  </div>


Mit dem filelog:
2018-04-04_12:38:01 Temperature_Bathroom values: T: 20.3 H: 64
2018-04-04_12:43:16 Temperature_Bathroom values: T: 20.3 H: 63
2018-04-04_12:48:36 Temperature_Bathroom values: T: 20.3 H: 63
2018-04-04_12:53:56 Temperature_Bathroom values: T: 20.3 H: 63
2018-04-04_12:59:16 Temperature_Bathroom values: T: 20.3 H: 63
2018-04-04_13:04:36 Temperature_Bathroom values: T: 20.3 H: 63
2018-04-04_13:09:56 Temperature_Bathroom values: T: 20.3 H: 63
2018-04-04_13:15:16 Temperature_Bathroom values: T: 20.3 H: 63
2018-04-04_13:20:41 Temperature_Bathroom values: T: 20.3 H: 62.8
2018-04-04_13:25:56 Temperature_Bathroom values: T: 20.3 H: 63
2018-04-04_13:31:16 Temperature_Bathroom values: T: 20.3 H: 62.3
2018-04-04_13:36:36 Temperature_Bathroom values: T: 20.2 H: 62
2018-04-04_13:41:56 Temperature_Bathroom values: T: 20.2 H: 62
2018-04-04_13:47:16 Temperature_Bathroom values: T: 20.2 H: 62
2018-04-04_13:52:36 Temperature_Bathroom values: T: 20.2 H: 62


Und:
Item: PlotTest.1
mode: plot
device: Temperature_Bathroom
reading: values
converter: Plotfile FileLog_Temperature_Bathroom 5 T


Ergibt Anhang (linker plot, der rechte hat aber auch raw)

blue

Hallo,

@HCS
Dein Code funktionierte auch bei mir, was mich wirklich (freudig) stutzig machte: Ich denke es liegt aber an dem raw ohne Anführungszeichen. Denn bei mir gab es daraufhin den Effekt im Plot, dass die Anzeige mit Daten aus dbLog wieder gemittelt wurden (Ansicht wie avg) und bei Plotfile die Rohwerte angezeigt wurden. ==> Der Parameter wird also nicht als String interpretiert und das führt dazu, dass einfach die Default-Einstellung übernommen wird. Die widerrum verhält sich gehabt, insbesondere nur für Plotfile. Setze ich "raw" in Anführungszeichen ist der Plott wieder komplett leer. Vielleicht könntest du das auch mal probieren?

@smai
ZitatIn Zukunft möchte ich ersteres aber ändern, weil eine Einschränkung auf den angegebenen Zeitbereich wohl sinnvoller wäre als auf die Anzahl.

Das fände ich ebenfalls sehr sinnvoll und würde ich begrüßen.

@raman + @smai
Wenn sV nichts mit dem Mode am Hut hat und die Anzeige ansonsten funktionert, sollte es doch eher auf fronthem-Seite liegen, dass die Einzelwerte (raw) mit dbLog nicht angezeigt werden? Mir macht es jedenfalls den Anschein, dass die Wertepaare nicht richtig befüllt werden. Warum sollte es sonst mit den FileLogs klappen...

smai

raw ohne Anführungszeichen ist tatsächlich falsch. Das hat nichts mit Plot oder FHEM zu tun, sondern ganz grundsätzlich mit Twig.

Ohne Anführungszeichen wird es als Variablenname interpretiert. Da diese Variable nicht gesetzt ist, kommt wie du vermutest der Standardwert 'avg' zum Tragen.

HCS

Gut, dass ich es falsch gemacht habe, sonst hätte ich keinen plot gesehen  ;D ;D

Stimmt, mit "raw" bleibt er leer

Was mich nun aber wundert: mit "raw" mault der Template checker mit raw sieht er kein Problem
Line 43
Widget: plot.period
Parameters: "id.PlotTest.1", ["PlotTest.1"], "raw", "4d", "now", 0, 30, 1000, ["Bad"], ["#FF0000"], ["line"]
Parameter Index: 2
Parameter Value: "raw"
Valid Values: avg,sum,min,max,minmax,minmaxavg,raw


Aber der Fehler, dass es mit raw nicht geht, liegt im FHEM-Treiber:

     // sV Plots
      widget.plot().each(function () {
        var list = widget.explode($(this).attr('data-item'));
        for (var i = 0; i < list.length; i++) {
          if (widget.checkseries(list)) {
            var plotItem = io.splitPlotItem(list);
            if ($.inArray(plotItem.mode, Array('avg', 'min', 'max', 'sum', 'diff', 'rate', 'on')) >= 0) {

Das müsste sein: avg,sum,min,max,minmax,minmaxavg,raw
Wenn man die Zeile so anpasst:
if ($.inArray(plotItem.mode, Array('avg', 'min', 'max', 'sum', 'diff', 'rate', 'on', 'raw')) >= 0) {
dann geht es auch.

Jetzt muss ich nur noch herausbekommen, was die gültigen modes sind.
Stimmt die Liste, die der Template checker verkündet?




HCS

Zitat von: HCS am 06 April 2018, 17:15:18
Jetzt muss ich nur noch herausbekommen, was die gültigen modes sind.

Wobei eigentlich: müsste die Liste der möglichen modes von fronthem bestimmt sein, was dort verstanden wird?

blue

Zitat von: HCS am 06 April 2018, 17:15:18
Das müsste sein: avg,sum,min,max,minmax,minmaxavg,raw
Wenn man die Zeile so anpasst:
if ($.inArray(plotItem.mode, Array('avg', 'min', 'max', 'sum', 'diff', 'rate', 'on', 'raw')) >= 0) {
dann geht es auch.

Bingo, funktioniert! Perfekt!  :)

blue

Zitat von: HCS am 06 April 2018, 17:27:37
Wobei eigentlich: müsste die Liste der möglichen modes von fronthem bestimmt sein, was dort verstanden wird?

Ich bin mir nicht ganz sicher (ihr seid schon länger mit FHEM im Geschäft  ;) ), aber laut 99_fronthemUtils.pm sind in der Methode "sub Plot(@)" von raman auf Fronthem-Seite die Modes raw,avg,sum,min,max,minmax,minmaxavg definiert.

raman

@smai: Danke für die Ausführung!

Ich ging auch davon aus, dass für "minmax" und "minmaxavg" die Daten in einem Array übergeben werden müssen.
Aber dier Serien werden ja getrennt voneinander jeweils für min, max bzw. avg in SV erwartet.

Also "minmax" und "minmaxavg" funktionieren deshalb nicht, da muss ich einiges abändern.

"min", "max", "avg" und "raw" (mit der Änderung im Treiber) sollten gehen!

Das Updaten der Punkte funktioniert aber noch nicht wie es soll! Das müssen noch ein paar Fallunterscheidungen rein.

Man kann auch mal überlegen, wann bei "avg" bei welcher Zeitangabe welche Durchschnittswerte (Stunden-, Tages-, Wochen-, Monatsdurchschnitt) geliefert weren sollen.
Also z.B. Kombination aus "avg" und "1d" ==> Stundendurchschnitt
                                      "avg" und "1W" ==> Tagesdurchschnitt
                                      ...

Bin für Vorschläge offen!