Status Anzeige in einem Chart mit Log Eintrag "on" / "off" / Fensterkontakt etc.

Begonnen von DuffyDuck, 30 Oktober 2016, 20:10:01

Vorheriges Thema - Nächstes Thema

DuffyDuck

Ich möchte gerne den on/off Status eines Fenster Kontakts im Chart darstellen. (nicht verwirren lassen, im Code habe ich noch 4 Sensoren drin (2 gleich), die ich später nutzen möchte)
Ich habe leider nichts in der Richtung im Forum gefunden, nur jemand der erfolglos eine myDbLog Abfrage im Chart anzeigen möchte.
https://forum.fhem.de/index.php/topic,52422.msg441712.html#msg441712
Ich bin sicher der Fehler ist in der data-columnspec= Definition zu suchen. Evtl. hat da jemand schon eine Funktionierende Definition laufen ?

Versuche mit:
                 <div    data-type="chart"
                        data-logdevice='["FileLog_MYSENSOR_253","FileLog_MYSENSOR_253","FileLog_MYSENSOR_254","FileLog_MYSENSOR_254"]'
                        data-logfile='["MYSENSOR_253-2016.log","MYSENSOR_253-2016.log","MYSENSOR_254-2016.log","MYSENSOR_254-2016.log"]'

                        data-columnspec='["*:tripped1:data:::$val=~s/(on|off)(\d*).*/$1eq"on"?1:0/eg","*:tripped1:data:::$val=~s/(on|off)(\d*).*/$1eq"on"?1:0/eg","*:tripped1:data:::$val=~s/(on|off)(\d*).*/$1eq"on"?1:0/eg","*:tripped1:data:::$val=~s/(on|off)(\d*).*/$1eq"on"?1:0/eg"]'

                        data-style='["ftui l3fill","ftui l4fill","ftui l5fill","ftui l6fill"]'
                        data-ptype='["histeps","histeps","histeps","histeps"]'
                        data-uaxis='["primary","primary","primary","primary"]'
                        data-legend='["Wohnzimmer unten","Schlafzimmer unten","Bad unten","Esszimmer unten"]'
                        data-yunit=""
                        data-ytext="Auslösung"
                        data-minvalue="-1"
                        data-maxvalue="2"
                        data-yunit_sec="mm"
                        data-ytext_sec="Rain (mm)"
                        data-height="250"
                        data-yticks="auto"
                        data-minvalue_sec="auto"
                        data-maxvalue_sec="auto"
                        data-nofulldays="true"
                        data-daysago_start="1"
                        data-daysago_end="0"
                        data-cursorgroup="1"
                        data-scrollgroup="1"
                        data-xticks="auto">
                 </div>
  haben bisher nicht zum Erfolg geführt.
Ausgehend vom log werden folgende Daten vom Sensor bereit gestellt:

2016-10-30_17:39:18 MYSENSOR_254 tripped1: on
2016-10-30_17:39:18 MYSENSOR_254 batterylevel: 42
2016-10-30_17:39:18 MYSENSOR_254 batterylevel: 42
2016-10-30_17:39:18 MYSENSOR_254 temperature1: 18.6
2016-10-30_17:39:18 MYSENSOR_254 temperature1: 18.6
2016-10-30_17:39:19 MYSENSOR_254 tripped1: on
2016-10-30_17:39:19 MYSENSOR_254 batterylevel: 42
2016-10-30_17:39:19 MYSENSOR_254 temperature1: 18.6
2016-10-30_17:39:19 MYSENSOR_254 temperature1: 18.6
2016-10-30_17:44:52 MYSENSOR_254 tripped1: on
2016-10-30_17:44:52 MYSENSOR_254 batterylevel: 41
2016-10-30_17:44:52 MYSENSOR_254 batterylevel: 41
2016-10-30_17:44:52 MYSENSOR_254 temperature1: 18.5
2016-10-30_17:44:52 MYSENSOR_254 temperature1: 18.5
2016-10-30_17:44:52 MYSENSOR_254 tripped1: off
2016-10-30_17:44:52 MYSENSOR_254 batterylevel: 41
2016-10-30_17:44:52 MYSENSOR_254 temperature1: 18.5
2016-10-30_17:44:52 MYSENSOR_254 temperature1: 18.5

Anzeige von Temperatur und Batterie Status funktionieren.

Franky1992


eki

Die Columnspec orientiert sich an der Plotfunktion von FHEM. Ich versuche mal ein bisschen Licht in die Sache zu bringen (dazu gibt es aber auch jede Menge Infos im Wiki zum FHEM Plot und ein bisschen auch im Chart Wiki (dort ist auch ein Beispiel für dblog an dem Du Dich zumindest orientieren könntest  ;)):

Grundsätzlich besteht die Columnspec aus Feldern, die durch ':' getrennt sind.
Der erste Wert im Fall eines Logfiles (bei dblog sieht es anders aus) ist eine Zahl, die angibt welcher Teil einer Zeile die Informationen enthält, die dargestellt werden soll. Dabei wird die Zeile in Felder, die durch ' ' getrennt sind, aufgeteilt und die Zählweise fängt bei 1 an (in Deinem Fall müsste dort also eine 4 stehen).
Der zweite Wert (hinter dem ersten ':') ist eine regular expression, die angibt, welche Zeilen des Logfiles verwendet werden sollen (es wird einfach in jeder Zeile geschaut, ob das in der regular expression enthaltene Suchmuster enthalten ist). Hier sollte also bei Dir so etwas wie 'tripped1' stehen (wenn Du auch noch den ':' mit in das Suchmuster einschließen möchtest, dann musst Du das 'maskieren', weil die ':' wie oben angemerkt ja eine spezielle Bedeutung haben, ist aber hier nicht notwendig.
Der dritte Wert ist der Defaultwert. Falls nichts gefunden wird, wird dieser Wert eingesetzt.
Danach kommt der spannende Teil. Es kann mit dem Ergebnis noch "gerechnet werden" in dieser Rechnung kann man auf ein Array zugreifen, welches die aktuellen Werte der Zeile enthält (der Trenner ist auch hier wieder ein ' ') blöderweise beginnt hier die Zählung bei 0 (habe ich nicht erfunden, ist halt so). Wenn Du also da etwas rechnen willst kannst Du per fld[3] auf Deinen Wert im 4 Feld der Zeile zugreifen.
Das gilt bisher alles sowohl für FTUI Chart als auch für die FHEM SVG Plots. Beim Chart gibt es aber noch ein paar Besonderheiten. Zum einen musst Du vorsichtig mit den ' und " sein. Wenn Du als Columnspec ein Array angibst (per '[...]'), musst Du die Felder des Arrays, die nur Strings sein können, in " einschließen. Wenn Du jetzt in den Feldern auch noch ' oder " verwenden willst, dann musst Du die "maskieren entweder am besten durch \\x22 (22 ist der Hex Code des ASCII Zeichens ").

So, nachdem ich nun meiner pädagogischen Pflicht nachgekommen bin, hier ein Beispiel, das bei Dir funktionieren sollte (nur für einen Wert des Arrays):

data-columnspec = '["4:MYSENSOR_254.tripped1:0:$val=($fld[3]=~\\x22on\\x22?1:0)"]'