FHEM - Hausautomations-Systeme > Kalendermodule

[gelöst] get <Kalender> events: schreibt viele Einträge in Logfile

(1/4) > >>

Gisbert:
Hallo,

ich habe eine Weihnachtsbeleuchtung außen am Haus, die ich automatisch schalte, also nicht nur morgens und abends anhand der Uhrzeit oder Lichtverhältnisse sondern auch einige Tage vor dem 1. Advent bis zur Weihnachtsbaumsammlung - der kluge Mann baut vor :). Das funktioniert auch alles sehr schön, bis auf eine Kleinigkeit. Das folgende userReadings zum Auslesen der Weihnachtsbaumsammlung aus einem vorhandenen Kalender führt dazu, dass jede Minute 2 Einträge in den Logfile geschrieben werden:

--- Zitat ---attr <DEVICE> userReadings MuelltonnenKalenderAVEA_Weihnachtsbaumsammlung_date {fhem('get Muelltonnen.Kalender.AVEA events format:custom="$T1" timeFormat:"%d.%m.%Y" filter:field(summary)=~"Weihnachtsbaum"')}
--- Ende Zitat ---
Im Device Muelltonnen.Kalender.AVEA habe ich verbose auf eins und auch mal auf null gesetzt, es wird aber immer fleißig ins Logfile geschrieben.

Hat jemand eine Idee, ggf. work around, wie ich das Schreiben in den Logfile verhindern kann?

Viele Grüße Gisbert

TomLee:

--- Zitat ---attr <DEVICE> MuelltonnenKalenderAVEA_Weihnachtsbaumsammlung_date {fhem('get Muelltonnen.Kalender.AVEA events format:custom="$T1" timeFormat:"%d.%m.%Y" filter:field(summary)=~"Weihnachtsbaum"',1)}
--- Ende Zitat ---

?


--- Zitat von: commandref Perl Specials ---Um FHEM-Kommandos in den PERL-Ausdrücken zu verwenden, benutzen Sie bitte die Funktion fhem(), mit einem Textargument. Dieser Text wird als FHEM-Kommando interpretiert.
        Beispiel

{ fhem "set light on" }
define n1 notify piri:on { fhem "set light on" }
 

Bemerkung: Wenn diese Funktion einen wert zurück liefert, wird dieser in der allgemeinen Logdatei gespeichert.. Benutzen sie "1" als zweites Argument um dieses speichern zu verhindern. Sinnvoll ist dieses Argument bei der Abfrage von Werten mittels "get...".

--- Ende Zitat ---

Gisbert:
Hallo TomLee,

das funktioniert schon mal:
- das Reading wird zwar nach wie vor jede Minute geschrieben (das könnte ich auch noch abfangen, ist aber hier nicht interessant)
- das Loggen unterbleibt damit

Könntest du mir kurz erklären, was ",1" macht? Ggf. eine andere Zahl?

Schon mal vielen Dank
Gisbert

TomLee:

--- Zitat ---Könntest du mir kurz erklären, was ",1" macht? Ggf. eine andere Zahl?
--- Ende Zitat ---

Hab ein paar Minuten gebraucht bis ich es gefunden hatte und dann oben ergänzt.

Dass das Reading jede Minute geschrieben wird, würd ich auf jedenfall ändern, komm aber noch nicht ganz mit, weil ein userreadings hast du nicht wirklich gezeigt.

Gisbert:
Hallo TomLee,

ich hab's im ersten Beitrag ergänzt.
Ein anderes Reading wird jede Minute erneuert, was dann die userReadings erneuert.

Hier mein gesamtes Konstrukt inkl. eines längeren comments:

--- Code: ---defmod Lichterkette.Schaltzeit DOIF (([06:45|8] or [07:30|7]) and ([$SELF:Tage_bis_ersterAdvent] <= 10 or $md le [$SELF:Weihnachtsbaumsammlung]) and sunrise_abs(1130) gt $hms) \
(set Lichterkette on-till {sunrise_abs(2090)}) \
DOELSEIF (sunset_abs(-7200) le $hms and [Lichtstaerke:BH1750_Illuminance]<=15 and ([$SELF:Tage_bis_ersterAdvent] <= 10 or $md le [$SELF:Weihnachtsbaumsammlung])) \
(set Lichterkette on-till {"22:".(42+int(rand(5))).":".(10+int(rand(49)))}) \
DOELSEIF ([02:30])
attr Lichterkette.Schaltzeit alias Schaltzeit Lichterkette
attr Lichterkette.Schaltzeit comment Die Funktion "ersterAdvent" steht in der Datei 99_myUtils.pm.\
Wichtig ist, dass am Anfang "use HTTP::Date;;" definiert werden muss.\
Vorlage siehe: https://forum.fhem.de/index.php/topic,43381.msg\
Die Lichterkette wird damit 10 Tage vor dem 1. Advent eingeschaltet,\
unabhängig davon, auf welches Datum der 1. Advent fällt.\
Wenn keine Jahreszahl angegeben wird, wird das aktuelle Jahr verwendet.\
Damit wird die Differenz Tage_bis_erster_Advent nach dem 1. Advent negativ, also auch kleiner 10,\
womit die Bedingung 1 zum Einschalten der Weihnachtsbeleuchtung erfüllt ist.\
Ab dem 1.1. greift dann die Abfrage des Datum zur Weihnachtsbaumabholung,\
das aus dem Abfallkalender für das neue Jahr extrahiert wird.\
Für einen Vergleich mit $md, wird ein Format mm-dd benötigt,\
welches üblicherweise auch noch in Gänsefüßchen steht, also so: "mm-dd".\
Ein entsprechends userReading liefert mm-dd, welches in der Abfrage - wie es scheint -\
ohne Gänsefüßchen verwendet werden kann.\
Aus dem Kalender Muelltonnen.Kalender.AVEA kann man das Datum der Weihnachstbaumabholung/sammlung auslesen:\
https://forum.fhem.de/index.php/topic,117822.msg1122448.html#msg1122448\
Auf dieses Datum wurden noch 2 Tage dazu addiert, da die Nachbarschaft auch noch ihre Lichter an hatte.\
Was auch gehen würde:\
Durch timeFormat :"%m-%d" (in der Kalenderabfrage) könnte man sofort das Ergebnis mm-dd erhalten.\
Update vom 21.11.2021:\
Durch die Eventabfrage im userReading werden jede Minute 2 Einträge in den logfile geschrieben.\
Dies kann verhindert werden (https://forum.fhem.de/index.php/topic,124284.msg1188390.html#msg1188390), wenn "1" als 2. Argument benutzt.
attr Lichterkette.Schaltzeit devStateIcon .*:fts_shutter_1w_0
attr Lichterkette.Schaltzeit do always
attr Lichterkette.Schaltzeit icon FS20.off
attr Lichterkette.Schaltzeit room HomeHM
attr Lichterkette.Schaltzeit userReadings Tage_bis_ersterAdvent {round((str2time(ersterAdvent) - time)/86400,2)},\
MuelltonnenKalenderAVEA_Weihnachtsbaumsammlung_date {fhem('get Muelltonnen.Kalender.AVEA events format:custom="$T1" timeFormat:"%d.%m.%Y" filter:field(summary)=~"Weihnachtsbaum"',1)},\
Weihnachtsbaumsammlung {substr(ReadingsVal($name,'MuelltonnenKalenderAVEA_Weihnachtsbaumsammlung_date','01'),3,2)."-".\
(substr(ReadingsVal($name,'MuelltonnenKalenderAVEA_Weihnachtsbaumsammlung_date','12'),0,2)+2)}
--- Ende Code ---

Viele Grüße
Gisbert

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln