Hallo Miteinander,
habe eine Pumpensteuerung mit 2 Wasserschaltern w1,w2 und 2 Pumpen p1,p2 und möchte deren Zustand über ein notify loggen. w1,w2,p1,p2 werden in einem room ordentlich aktualisiert angezeigt und das loggen klappt auch:
define act_AnbTei at +*00:05:00 {\
my $w1= Value("AnbTei_w1");;\
my $w2= Value("AnbTei_w2");;\
my $p1= Value("AnbTei_p1");;\
my $p2= Value("AnbTei_p2");;\
my $dat= sprintf("%d %d %d %d",$w1,$w2,$p1,$p2);;\
fhem ("set AnbTei $dat");;\
}
geloggt wird 2019-06-22_14:23:24 AnbTei 1 0 0 0
jetzt würde ich aber gerne alle Änderungen mitbekommen und deshalb habe ich einen dummy AnbTei_ch (für change), der bei jeder Änderung von w1,w2,p1,p2 hochgezählt wird, ich habe nur die Kopfzeile angepasst:
define act_AnbTei notify AnbTei_ch {\
my $w1= Value("AnbTei_w1");;\
my $w2= Value("AnbTei_w2");;\
my $p1= Value("AnbTei_p1");;\
my $p2= Value("AnbTei_p2");;\
my $dat= sprintf("%d %d %d %d",$w1,$w2,$p1,$p2);;\
fhem ("set AnbTei $dat");;\
}
geloggt wird:
2019-06-22_14:28:46 AnbTei 43d 43d 43d 43d
ich bekomme als 4x die Variable AnbTei_ch und nicht w1,w2,p1,p2 wie zuvor?
Warum? Was mache ich falsch?
Besten Dank für jeden Tip im voraus !
Bitte den Code in Codetags setzen.
Hallo Miteinander,
habe eine Pumpensteuerung mit 2 Wasserschaltern w1,w2 und 2 Pumpen p1,p2 und möchte deren Zustand über ein notify loggen. w1,w2,p1,p2 werden in einem room ordentlich aktualisiert angezeigt und das loggen klappt auch:
define act_AnbTei at +*00:05:00 {\
my $w1= Value("AnbTei_w1");;\
my $w2= Value("AnbTei_w2");;\
my $p1= Value("AnbTei_p1");;\
my $p2= Value("AnbTei_p2");;\
my $dat= sprintf("%d %d %d %d",$w1,$w2,$p1,$p2);;\
fhem ("set AnbTei $dat");;\
}
geloggt wird 2019-06-22_14:23:24 AnbTei 1 0 0 0
jetzt würde ich aber gerne alle Änderungen mitbekommen und deshalb habe ich einen dummy AnbTei_ch (für change), der bei jeder Änderung von w1,w2,p1,p2 hochgezählt wird, ich habe nur die Kopfzeile angepasst:
define act_AnbTei notify AnbTei_ch {\
my $w1= Value("AnbTei_w1");;\
my $w2= Value("AnbTei_w2");;\
my $p1= Value("AnbTei_p1");;\
my $p2= Value("AnbTei_p2");;\
my $dat= sprintf("%d %d %d %d",$w1,$w2,$p1,$p2);;\
fhem ("set AnbTei $dat");;\
}
geloggt wird:
2019-06-22_14:28:46 AnbTei 43d 43d 43d 43d
ich bekomme als 4x die Variable AnbTei_ch und nicht w1,w2,p1,p2 wie zuvor?
Wieso verhält sich sprintf in Abhängigkeit der Kopfzeile anders?
Gibt es da einen anderen Weg?
Besten Dank für jeden Tip im voraus !
Beitrag editieren
Frag mal einfach so, da ich nicht mitkomme.
Warum das ganze, weshalb nicht gleich ein FileLog -welches nur diese vier Daten loggt- erstellen ?
Oder sollen die vier Werte unbedingt in einer Zeile im Log stehen ?
Gruß
Thomas
wie könnte das denn aussehen mit dem Filelog?
Ich würde gerne die 4 Werte in einem Diagramm sehen.
Nur am Rande interessiert mich warum das notify das sprintf beeinflusst ;-))
Danke für jeden Hinweis!
Also ob mein Weg der richtige ist kann ich dir nicht sagen, aber er ist einfach und funktioniert.
Ich würde mit
define AnbTei FileLog ./log/AnbTei-%Y.log 1
in der Befehlszeile ein Jahres-Log erstellen.
Im erstellten Device mit set AnbTei addRegexpPart <einesdeinervierdevices> <regexp> alle deine vier Geräte hinzufügen.
Mit removeRegexpPart bei der 1 noch den Platzhalter 1 enfernen den wir nur in der Definition gebraucht haben.
Wenn dich damit beschäftigt hast und alles klappt dann drückst auf Create SVG plot und hast schonmal ein Diagramm, ist aber ein anderes Thema.
Gruß
Thomas
Danke für den Tip!
define AnbTei dummy
define act_AnbTei notify AnbTei_ch {\
my $w1= Value("AnbTei_w1");;\
my $w2= Value("AnbTei_w2");;\
my $p1= Value("AnbTei_p1");;\
my $p2= Value("AnbTei_p2");;\
fhem ("set AnbTei $w1 $w2 $p1 $p2");;\
}
define FileLog_AnbTei FileLog ./log/log-AnbTei.log AnbTei
attr FileLog_AnbTei logtype text
So funktioniert das jetzt. Wenn ich allerdings das sprintf von vorher verwende, dann geht es nicht. Aber das ist eine andere Frage und ich kann mit dem workaround prima leben!!
Danke an Alle!!