FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: o.l.i am 11 Januar 2021, 21:30:25

Titel: Nur Teile eines Reading Wert (String) in DB schreiben
Beitrag von: o.l.i am 11 Januar 2021, 21:30:25
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
Titel: Antw:Nur Teile eines Reading Wert (String) in DB schreiben
Beitrag von: TomLee am 11 Januar 2021, 22:11:21
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 (http://www.mathe2.uni-bayreuth.de/perl/GK/arrays.htm) 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

Titel: Antw:Nur Teile eines Reading Wert (String) in DB schreiben
Beitrag von: DS_Starter am 11 Januar 2021, 23:55:16
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
Titel: Antw:Nur Teile eines Reading Wert (String) in DB schreiben
Beitrag von: o.l.i am 12 Januar 2021, 20:37:02
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