Nur Teile eines Reading Wert (String) in DB schreiben

Begonnen von o.l.i, 11 Januar 2021, 21:30:25

Vorheriges Thema - Nächstes Thema

o.l.i

Hallo Leute,

mein FHEM schreibt manche Readings in die DB. Nun habe ich eine Viessmann Heizung mit folgendem:
Reading Name: Gasverbrauch_Heizung/Tag
Reading Wert: 21.8,18.9,17.9,18.1,25.5,18.6,17.1,20.1

Jetzt möchte ich aber nur immer den ersten Wert (21.8) in die DB schreiben, Reading Name bleibt gleich. Im Standard würde er ja den ganzen String in die DB schreiben (21.8,18.9,17.9,18.1,25.5,18.6,17.1,20.1).

Wie würde ich da vorgehen?


Grüße,
Oliver

TomLee

Hallo,

eine Möglichkeit: den ersten Wert extrahieren in ein userReadings und dann nur das userReadings in die Datenbank schreiben.

In Perl kann man den String (Reading Wert) in ein Array stupsen, könnte so in der Art aussehen :

my @a = split(/,/,ReadingsVal("<devicename>","Gasverbrauch_Heizung/Tag","nix"))


Auf die einzelnen Elemente des Array kann man dann mit dem Zugriffsoperator [] zugreifen, hier dann also auf den ersten Wert mit:

$a[0]


Hier ist das mMn verständlich erklärt.

Bei Fragen fragen, mit Sicherheit hab ich überstürzt geantwortet und irgendwas (wichtiges) übersehen/nicht erwähnt.
Gruß

Thomas


DS_Starter

#2
Man kann auch direkt im DbLog das Attribut valueFn (DbLogValueFn im Quelldevice selbst) bemühen um nur die interessierenden Teile zu loggen.

Zum Beispiel so:


{
   if ($DEVICE eq "<devicename>" && $READING eq "Gasverbrauch_Heizung/Tag")
   {
    my $val     = (split ",", $VALUE)[0];
    $VALUE= $val;
   }
}


Es geht noch etwas kürzer, aber ich wollte das Prinzip verdeutlichen.

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

o.l.i

Hallo Ihr zwei,

danke für die Lösungsvorschläge.

Ich habe dies mit DbLogValueFn gemacht und es hat auf Anhieb geklappt.

Super, danke.

Oliver