Hallo,
nach der Migration/Überarbeitung meiner fhem-Umgebung stehe ich vor folgender Problemstellung:
die Daten sollen per Tag in einem Monatsdiagram dargestellt werden
in der DB sieht das so aus
(siehe Anhang / see attachement)
wenn ich all das Gelesene (Google, commandref, Forum) sollte folgendes den Wert liefern: #DbLog StromZaehler:cum_day::$fld[5] - tut es aber nicht :-([/list]
Kann mir ein hilfreicher Geist auf die Sprünge helfen - Danke schon mal.
Edit: Sehe gerade, dass das Feld ein char(32) ist.Da passt die ganze Information gar nicht rein. Nichtsdestotrotz funktioniert die ober Zeile auch nciht bei den anderen Zahlenwerten.
ciao walter
Hallo,
bzgl des auf 32 char beschränkten Value-Feldes hat da jemand die Lust das auf 64 char zu erweitern? Meine Perl-Kenntnisse reichen maximal für einfache Routinen.
Besser wäre fast noch, den string in seine Werte aufzuteilen und als separate Werte zur Verfügung zu stellen. Ich will aber nicht gierig erscheinen ;-)
ciao walter
Und nochmal Hallo,
habe nun wie folgt value auf 64char erhöht.
(siehe Anhang / see attachement)
ciao walter
Hallölö,
hab das ganze auf FileLog zurückgedreht und damit gespielt. Damit funktioniert die Geschichte mit $fld[].
Meine Schlussfolgerung ist nun, mit DbLog wird dieses Konstrukt nicht unterstützt :-(((
ciao walter
Hallo,
ich greife das Thema nochmal auf, da verschiedene Ansatzversuche zu keiner Lösung führten.
Zuerst wollte ich einen workaround schaffen indem der value-Inhalt zerlegt wird und mit tigger an das device gesendet wird. Leider verarbeitet dblog diese trigger nicht :-(
Nächste Ansatz mit awk vergleichbar mit fht.gplot. Auch dies scheint nicht zu funkionieren.
#DbLog <SPEC1>:cum_day::
plot "< awk '/:/{print $1, $2}' <IN>" using 1:2 axes x1y1 title 'Day [Euro]' ls l6fill lw 2 with lines
Egal was ich eintrage es ergeben sich keine Auswirkungen.
Kann mir jeman hier unter die Arme greifen?
Danke und ciao walter
Hallo,
Problem gelöst. Ein Blick auf die folgende Routine in 93_DbLog.pm
############ Auswerten des 5. Parameters: Regexp ###################
# die Regexep wird vor der Function ausgewertet und der Wert im Feld
# Value angepasst.
####################################################################
if($readings[$i]->[4] && $readings[$i]->[4]) {
#evaluate
my $val = $sql_value;
my $ts = $sql_timestamp;
eval("$readings[$i]->[4]");
$sql_value = $val;
$sql_timestamp = $ts;
if($@) {Log3 $hash->{NAME}, 3, "DbLog: Error in inline function: <".$readings[$i]->[4].">, Error: $@";}
$out_tstamp = $sql_timestamp;
$writeout=1;
}
... in Verbindung mit dem Beispiel von commandref
get myDbLog - - 2012-11-10 2012-11-20 Bodenfeuchte:data:::$val=~s/.*B:\s([-\.\d]+).*/$1/eg
Example of OWAD: value like this: "A: 49.527 % B: 66.647 % C: 9.797 % D: 0.097 V"
and output for port B is like this: 2012-11-20_10:23:54 66.647
brachte die Erkenntnis. Das Resultat sieht nun so aus
#DbLog <SPEC1>:cum_day:::$val=~s/.*COST:\s([-\.\d]+).*/$1/eg
oder
#DbLog <SPEC1>:cum_day:::$val=~s/.*COST:\s([0-9]+(?:\.[0-9]*)?).*/$1/eg
ciao walter