FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Hi2Helmi am 05 März 2019, 07:49:56

Titel: Bei addLog nur bestimmten Teil Loggen.
Beitrag von: Hi2Helmi am 05 März 2019, 07:49:56
Hallo,
ich Logge mit addLog meine statLuftdruckHour regelmässig. Das Reading wird so wie es ist in die Datenbank geschrieben.
z.B.
Min: 1003.30 Avg: 1003.54 Max: 1003.67
Mir würde allerdings reichen wenn er nur den Wert hinter Avg: loggt.
Eine Regex habe ich mir nach langer Recherche zusammengebastelt. Ich weiß nur nicht, wie ich die einsetzten muss!
(?<=Avg: )\d{3,4}.\d{2}
Loggen tue ich mit folgendem befehl:
defmod wetter_luftdruck_addlog at +*0:05 set system_log_maria addLog wetter_luftdruck:statLuftdruckHour
attr wetter_luftdruck_addlog room System->Datenbank

setstate wetter_luftdruck_addlog Next: 07:49:24
setstate wetter_luftdruck_addlog 2019-03-05 07:44:24 state Next: 07:49:24

Habe auch schon überlegt, ob es bei der DbLog in die valueFn rein muß. Aber auch da weiß ich nicht genau wie ich das genau schreiben muss, aus der Commandref werde ich nicht so ganz schlau!
Titel: Antw:Bei addLog nur bestimmten Teil Loggen.
Beitrag von: Hi2Helmi am 05 März 2019, 08:02:17
Ich habe jetzt in valueFN folgendes eingefügt:
{if ($READING eq "statLuftdruckHour"){$VALUE= /(?<=Avg: )\d{3,4}.\d{2}/ } }

Bin jetzt gespannt, ob es so funktioniert!

Edit: Es funktioniert nicht!!!
Titel: Antw:Bei addLog nur bestimmten Teil Loggen.
Beitrag von: DS_Starter am 05 März 2019, 08:26:17
Hallo Florian,

ich habe es jetzt nicht ausgetestet, aber vermutlich müsstest du valueFn so definieren:


{if ($READING eq "statLuftdruckHour") { $VALUE =~ s/.*Avg:\s(\d{3,4}.\d{2})\sMax.*/$1/e; } }


oder wenn das Reading noch mit dem Device verknüpft werden soll:


{if ($DEVICE eq "wetter_luftdruck" && $READING eq "statLuftdruckHour") { $VALUE =~ s/.*Avg:\s(\d{3,4}.\d{2})\sMax.*/$1/e; } }


Grüße,
Heiko
Titel: Antw:Bei addLog nur bestimmten Teil Loggen.
Beitrag von: Hi2Helmi am 05 März 2019, 09:12:49
Ja danke, das funktioniert.
Muss jetzt noch heraus finden warum meines nicht funktioniert hat. Wo mein Denkfehler war.
Auch das mit ~ habe ich probiert.
Titel: Antw:Bei addLog nur bestimmten Teil Loggen.
Beitrag von: Hi2Helmi am 05 März 2019, 17:25:08
Alles klar habe es nach etwas Recherche heraus gefunden und verstanden   8)
Nur das "e" am Ende versteh ich nicht, ist das in meinem Fall wichtig:

Titel: Antw:Bei addLog nur bestimmten Teil Loggen.
Beitrag von: DS_Starter am 05 März 2019, 17:59:12
ZitatAlles klar habe es nach etwas Recherche heraus gefunden und verstanden   8)
:)

ZitatNur das "e" am Ende versteh ich nicht, ist das in meinem Fall wichtig:
Die Variable $1 wird durch Perl gesetzt und enthält den Inhalt der capture group, d.h. den Inhalt innerhalb von (...). Vermutlich brauchst du e nicht am Ende. Ich hatte dir die Hilfe heute früh nur schnell hingeschrieben. Aber probiers einfach mal aus.