Hallo zusammen,
ich hab mal ein wenig mit dem DbLog rumgespielt - dabei ist mir aufgefallen dass die Module die Werte korrekt in die Felder READING und VALUE eintragen - zb CUL_WS schreibt "temperature" in READING und "21.3" in VALUE.
Das Modul FHT8V schreibt jedoch "valve 18" in READING, VALUE bleibt leer. Da wird es wahrscheinlich auch schwierig mit dbplot eine Grafik zu erstellen.
Ich vermute mal da ist noch irgendwas "krumm".....
Das FHT8V schreibt leider etwas nicht "normkonforme" Logs. Die meisten Geräte Module trennen den Stellwert vom Eventname mit ":". DbLog trennt bei unbekannten Readings ebenso.
Du kannst jedoch den FHT8V schnell mit DbLog bekannt machen. Dazu einfach in die 93_DbLog.pm in die sub DbLog_ParseEvent($$) z.B. nach der KS300-Definition folgendes einfügen:
# KS300
elsif($type eq "KS300") {
if($event =~ m(T:.*)) { $reading= "data"; $value= $event; }
if($event =~ m(avg_day)) { $reading= "data"; $value= $event; }
if($event =~ m(avg_month)) { $reading= "data"; $value= $event; }
if($reading eq "temperature") { $value=~ s/ \(Celsius\)//; $unit= "°C"; }
if($reading eq "wind") { $value=~ s/ \(km\/h\)//; $unit= "km/h"; }
if($reading eq "rain") { $value=~ s/ \(l\/m2\)//; $unit= "l/m2"; }
if($reading eq "rain_raw") { $value=~ s/ \(counter\)//; $unit= ""; }
if($reading eq "humidity") { $value=~ s/ \(\%\)//; $unit= "%"; }
if($reading eq "israining") {
$value=~ s/ \(yes\/no\)//;
$value=~ s/no/0/;
$value=~ s/yes/1/;
}
}
# FHT8V
elsif($type eq "FHT8V") {
if($reading =~ m(valve)) {
@parts= split(/ /,$event);
$reading= $parts[0];
$value= $parts[1];
$unit= "%";
}
}
danach ein reload 93_DbLog oder fhem-Neustart und der Wert wird vom Reading getrennt in die Datenbank geschrieben.
Grüße
// tetzlav
wenns funktioniert bitte kurze pm an mich und ich checke es ein
@Tobias und tetzlav
Besten Dank erstmal für die Rückmeldungen. Aufgrund der genannten Probleme und der generell spärlichen Informationen die sich zu DBLog und Einbindung von DBlog in die gplot-Dateien finden lassen habe ich das erstmal wieder aufgegeben.
Ich kann es bei Gelegenheit aber auch gerne nochmal testen - generell ist mir eine "richtige" Datenbank lieber als einzelne Logfiles, da ich diese auch besser bereinigen kann.
Ich melde mich sobald ich was zu sagen kann.....
Gruß Tilo
eigentlich war ich der Meinung dort genug Beispiele in der commendref hinterlassen zu haben ...
Der DBlog selbst ist ja kein Problem - wo ich mich ein wenig schwer getan habe sind die entsprechenden Anpassungen in den einzelnen .gplot-Dateien.
Irgendwie müssen ja die beiden Einträge #FileLog und plot entsprechend angepasst werden. Da habe ich auch kaum nützliche Beispiele gefunden.
Zitat von: tetzlav schrieb am So, 17 März 2013 17:07
# FHT8V
elsif($type eq "FHT8V") {
if($reading =~ m(valve)) {
@parts= split(/ /,$event);
$reading= $parts[0];
$value= $parts[1];
$unit= "%";
}
}
Getestet und für gut befunden :-)
Besten Dank @tetzlav
@Tobias: Wäre prima dies direkt in 93_DbLog einzupflegen.
Danke + Gruß
Tilo
...um auch DUMMYs plotten zu können wäre vielleicht auch noch diese Erweiterung sinnvoll:
# DUMMY
elsif($type eq "DUMMY") {
$reading= "state";
$value= $event;
$unit= "";
}
Gruß Tilo
habe es erstmal ins contrib eingecheckt. Bitte testen, danach gehts in den Hauptzweig
zusätzlich ist noch das Attribut "DbLogType" hinzugekommen um auszuwählen, ob in die current- und/oder in die historytabelle geloggt werden soll
So, hab jetzt umgestellt auf DbLog und die entsprechenden gplot-Dateien für meine Grafiken erstellt.
Mit den Anpassungen für FHT8V und DUMMY klappt das auch alles bestens :-)
Ein Problem habe ich aber noch - mit der Übersetzung von on/off des FS20 ST
Für den Filelog funktioniert die Zeile so:
#FileLog 3:Luefter:0:$fld[2]=~"on"?1:0
Doch wie bekomme ich das für den DbLog übersetzt?
Es müsste also irgendwie so aussehen:
#DBLog Luefter:data:0:"on"?1:0 ... doch das funktioniert nicht, "on" wird nicht als 1 erkannt
Gruß Tilo
Jubel :-)
Habs hinbekommen:
#DbLog <SPEC1>:data:0::$val=~s/(on|off).*/$1eq"on"?1:0/eg
Aber eine Frage habe ich noch: Wie bekomme ich es vom Syntax hin nicht nur "on" auf 1 zu übersetzen sondern auch "dimup"
In etwa so, doch das geht leider nicht:
#DbLog <SPEC1>:data:0::$val=~s/(on|off|dimup|dimdown).*/$1eq("on"|"dimdown")?1:0/eg
Gruß Tilo
ich denke mal ungefähr so:
#DbLog <SPEC1>:data:0::$val=~s/(on|off|dimup|dimdown).*/$1eq"on"||$1eq"dimdown")?1:0/eg
....stimmt - es kann doch so einfach sein. Da links schon einfache | standen, kam ich nicht drauf doppelte || zu verwenden.
Die linke Klammer vor $1 fehlte aber noch.
Besten Dank + Gruß :-)