DBLog in Value auch Unit abgespeichert

Begonnen von antonwinden, 14 August 2020, 09:56:10

Vorheriges Thema - Nächstes Thema

antonwinden

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
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

DS_Starter

#1
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) 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
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

antonwinden

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
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

abc2006

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
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX