Bug bei FHT8V und DbLog

Begonnen von roedert, 08 März 2013, 19:32:02

Vorheriges Thema - Nächstes Thema

roedert

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".....

tetzlav

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

Tobias

wenns funktioniert bitte kurze pm an mich und ich checke es ein
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

roedert

@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

Tobias

eigentlich war ich der Meinung dort genug Beispiele in der commendref hinterlassen zu haben ...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

roedert

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.

roedert

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


roedert

...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

Tobias

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
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

roedert

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

roedert

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

Tobias

ich denke mal ungefähr so:
#DbLog <SPEC1>:data:0::$val=~s/(on|off|dimup|dimdown).*/$1eq"on"||$1eq"dimdown")?1:0/eg
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

roedert

....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ß :-)