FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: antonwinden am 14 August 2020, 09:56:10

Titel: DBLog in Value auch Unit abgespeichert
Beitrag von: antonwinden am 14 August 2020, 09:56:10
Hallo
ich habe das Problem das bei einigen Devices in Value nicht nur der Wert sondern auch die Einheit mitgespeichert wird.
z.B. (jedes Feld in einer eigenen Zeile -> kw/h und Celsius gehören eigentlich in die nächste Zeile/Feld)
MQTT_DEVICE
KWH: 22800.94 kw/h
KWH
22800.94 kw/h
VANTAGEPRO2
temperature-outside: 28.67 Celsius
temperature-outside
28.67 Celsius
°C

Wie kann ich das ändern? Stört zwar eigentlich nur bei Grafana das dann schreit das VALUE nur einen numerischen Wert enthalten darf.
Tritt anscheinend auch nur bei MQTT_DEVICE und VANTAGEPRO" auf also dürfte es am Modul liegen vermute ich mal vorsichtig.
danke Anton
Titel: Antw:DBLog in Value auch Unit abgespeichert
Beitrag von: DS_Starter am 14 August 2020, 10:28:09
Hallo Anton,

das Problem liegt hier im sogenannten DbLog-Split. Im Modul DbLog selbst ist ein rudimentäres Splitting VALUE/UNIT für gewisse Standardmodule eingebaut. Es ist aber so gut wie unmöglich jeden auftretenden Fall abzubilden.
Deswegen werden die Modulautoren gebeten, in ihren Modulen die DbLog_splitFn (siehe Wiki (https://wiki.fhem.de/wiki/DevelopmentModuleIntro#X_DbLog_split)) einzubauen.


Dort wo das nicht vorhanden oder möglich ist, kann bzw. muß man sich als User selbst helfen.
Dazu gibt es im DbLog das Attribut valueFn. Das setzt man z.B. so:



attr <dblog> valueFn {
   if ($DEVICE eq "<dein Device>")
   {
      my ($v,$u) = split " ", $VALUE;
      $VALUE     = $v;
      $UNIT      = $u;
   }
}




Das Beispiel ist ungetestet und es gibt mit Sicherheit andere Varianten es zu schreiben, aber ich wollte dir das System zeigen wie man sowas lösen kann.
In der CommandRef DbLog steht einiges dazu.


Grüße,
Heiko
Titel: Antw:DBLog in Value auch Unit abgespeichert
Beitrag von: antonwinden am 15 August 2020, 15:34:32
Danke - hat mir geholfen und ich hab es dann mit dem Attribut DbLogValueFn im jeweiligen Device geändert

attr StromzaehlerOtto DbLogValueFn {if ($READING eq "StromzaehlerOtto"){
    $VALUE=substr($VALUE,0,length($VALUE)-5);
$UNIT="kw/h"
  }}


gruß Anton
Titel: Antw:DBLog in Value auch Unit abgespeichert
Beitrag von: abc2006 am 19 Oktober 2020, 20:56:57
Hallo,

ich werde dieses Beispiel auch für mich nutzen, danke dafür.
Nur der fachlichen Korrektheit halber: kw/h ist als Einheit nicht korrekt, es muss kWh heissen, da sich die Energie aus der Leistung über die Zeit aufintegriert und nicht geteilt wird.

Grüße:)
Stephan