FHEM Forum

FHEM => Automatisierung => Thema gestartet von: andi11 am 25 November 2017, 10:49:41

Titel: *gelöst* Dblog Trennen von Daten im SVG-Plot / zurückliefern einer Teilmenge
Beitrag von: andi11 am 25 November 2017, 10:49:41
Hallo zusammen,
ich protokolliere Daten von unserer Heizung. Im Reading steht z.b. "Day: 3.6 Month: 493 Year: 493 (since: 2017-11-03 )"
Wichtig wäre mir der Wert 3.6 in diesem Fall. Wie kann ich das im .gplot schreiben dass es nur die 3.6 verwendet?

#logdb Heizung:statHeatQHeating

plot "<IN>" using 1:2 axes x1y2 title 'QHeating' ls l0 lw 1 with lines


Für Filelog finde ich Infos wie es klappt, aber nicht für DBlog. Den Eintrag kann ich nur im Codeeditor einfügen oder? Die normale "Create SVG Plot" Variante bietet mir hier keine weiteren Optionen an.
Titel: Antw:Dblog Trennen von Daten im SVG-Plot / zurückliefern einer Teilmenge
Beitrag von: andi11 am 25 November 2017, 17:31:43
Hmmm, sehr ungewöhnlich im FHEM Forum dass nach dieser Zeit noch keine Antwort da ist. An was liegt es denn? Welche Infos fehlen?
Titel: Antw:Dblog Trennen von Daten im SVG-Plot / zurückliefern einer Teilmenge
Beitrag von: DS_Starter am 25 November 2017, 19:29:35
Hallo andi,

du hast doch erst heute Vormittag eingestellt ... es ist Wochenende und so manch einer hat am Tag (oder auch Abends) mit der Familie oder Freunden etwas vor ... nur als Beispiel.  ;)

Ansonsten ist es möglicherweise das falsche Forum, das Unterforum für SVG wäre evtl. besser geeignet.
Eventuell hilft dir aber schon dieser Beitrag weiter:
https://forum.fhem.de/index.php/topic,79469.msg714872.html#msg714872

Den findet man recht schnell über die Suche mit den Keywords "SVG DbLog".

viele Grüße
Titel: Antw:Dblog Trennen von Daten im SVG-Plot / zurückliefern einer Teilmenge
Beitrag von: andi11 am 25 November 2017, 20:45:14
Hey das kenn ich hier im Forum einfach nicht, normalerweise kriegt man Hilfe schneller, als man die Frage stellen kann :P
Diesen Beitrag hatte ich nicht gefunden, da ich immer viel spezifischer gesucht habe.
Das ist mein momentaner Code:

#logdb Heizung:statHeatQHeating:::$val=~s/Day..(([\d]*.[\d]*)|[\d]*).*/$1/e
#logdb Heizung:statHeatQHeating:::$val=~s/Month..(([\d]*.[\d]*)|[\d]*).*/$1/e

Für die Zeile Day: 6.5 Month: 496 Year: 496 (since: 2017-11-03 )
funktioniert es für Day astrein, bei Month gibt es aber Day: 2.3 492 zurück.
Regex Ausdrücke sind jetzt nicht so mein Spezialgebiet wofür das ~s/ und das .*/$1/e sind versteh ich garnicht.

Titel: Antw:Dblog Trennen von Daten im SVG-Plot / zurückliefern einer Teilmenge
Beitrag von: DS_Starter am 25 November 2017, 21:28:11
Nur mal so auf die Schnelle ...

ZitatRegex Ausdrücke sind jetzt nicht so mein Spezialgebiet wofür das ~s/ und das .*/$1/e sind versteh ich garnicht.

Schreib die die Funktion etwas anders, mit Leerzeichen, dann sieht man es besser:


statt:         $val=~s/Month..(([\d]*.[\d]*)|[\d]*).*/$1/e
schreibe:    $val =~ s/Month..(([\d]*.[\d]*)|[\d]*).*/$1/e 


Das "=~" ist die Kennzeichnung dass jetzt ein Regex kommt.  "s" steht für "substitute", also ersetze a mit b.
In deinem Fall heißt es, finde einen String der dem Ausdruck a="Month..(([\d]*.[\d]*)|[\d]*).*" genügt und ersetze ihn mit b="$1".

"$1" ist ein Platzhalter der von Perl mit dem gefundenen String gefüllt wird, in deinem Fall die Ziffern mit "." oder ohne den Punkt.
Der Modifier "/e" besagt, Perl behandelt das Gefundene als expression.
Siehe hier: https://stackoverflow.com/questions/6082219/perl-regex-e-eval-modifier-with-s

Vielleicht klappt es so (auf die schnelle und ungetestet):

$val =~ s/.*Month..(([\d]*.[\d]*)|[\d]*).*/$1/e

Wenn es nicht klappt arbeite dich mal z.B. mit einem Onlne Regex-Tester durch.

Grüße
Heiko
Titel: Antw:Dblog Trennen von Daten im SVG-Plot / zurückliefern einer Teilmenge
Beitrag von: andi11 am 25 November 2017, 21:57:03
Danke für die ausführliche Antwort für das drumrum. Meines hatte ich schon im Regex Tester probiert, da ging es auch, im svg plot aber nicht.
Bei deinem Vorschlag geht es 1a. Nur ohne Leerzeichen, also so
$val=~s/.*Month..(([\d]*.[\d]*)|[\d]*).*/$1/e
Titel: Antw:*gelöst* Dblog Trennen von Daten im SVG-Plot / zurückliefern einer Teilmenge
Beitrag von: DS_Starter am 25 November 2017, 22:05:46
Na das sieht doch gut aus.  :)
Das das Leerzeichen nicht gemocht wird ist dann sicherlich eine Spezialität in dem SVG-Kontext.

Im Normalfall, also im normalen Perl, könntest du es mit Leerzeichen verwenden. Dadurch liest es sich einfach besser und man kann es verstehen.

schönen Abend noch.

Grüße
Heiko