*gelöst* Dblog Trennen von Daten im SVG-Plot / zurückliefern einer Teilmenge

Begonnen von andi11, 25 November 2017, 10:49:41

Vorheriges Thema - Nächstes Thema

andi11

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.

andi11

Hmmm, sehr ungewöhnlich im FHEM Forum dass nach dieser Zeit noch keine Antwort da ist. An was liegt es denn? Welche Infos fehlen?

DS_Starter

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
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

andi11

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.


DS_Starter

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
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

andi11

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

DS_Starter

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
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter