FHEM Forum

FHEM => Automatisierung => Thema gestartet von: TomLee am 15 Juni 2023, 14:15:08

Titel: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: TomLee am 15 Juni 2023, 14:15:08
Ich hab mir vorhin zufällig zeitgleich und unabängig zu/von zu diesem Thread (https://forum.fhem.de/index.php?msg=1278897) ein at überlegt wie es gerade Betateilchen zuletzt mit zwei ats vorschlägt.

Hab die Bezeichnungen/Namen des Vorschlags mal übernommen:

defmod at_test at *23:59:00 {\
my $time = time_str2num(ReadingsTimestamp("$SELF","state","1970-01-01 00:00:00"))-1;;\
my $lm = ReadingsVal("<pv_device>","laufendermonat",0);;\
fhem("setreading <pv_device> laufendermonat <WertDesLaufendenMonats>");;\
fhem("setreading <pv_device> vormonat $lm; setreading <pv_device> laufendermonat 0") if $time == at_ultimo();;\
}


Ich weiß noch nicht ob ich das wirklich brauche.
Könnte man das so machen oder hab ich einen Denkfehler drin (ich meine nicht) ?
Könnte man es noch anders/besser lösen oder sollte man einfach zwei ats verwenden ?
Ich frag auch deshalb weil vom Zeitstempel ja eine Sekunde abgezogen werden muss wenn das at um 23:59:00 auslöst (bin mir aber nicht sicher ob das immer so ist). Bsp:
setstate at_test 2023-06-14 23:59:01 state Next: 23:59:00
Titel: Aw: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: frober am 16 Juni 2023, 19:01:27
Prinzipiell würde ich sagen, warum sollte es nicht funktionieren.

Aber mit der einen Sekunde Abzug wäre ich vorsichtig, die kommt bestimmt von der Verarbeitungszeit (Freezes) und kann vermutlich schwanken. Daher die Uhrzeit evtl. hard vercoden und nur das Datum anfragen!?
Titel: Aw: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: Beta-User am 16 Juni 2023, 19:10:33
Das 2. at ist vermutlich effektiver, aber wenn du es mit einem Vergleich lösen willst, dann würde ich eher den Monat von time mit Monat von (time +2) nehmen. Dürfte jedenfalls effizienter sein wie diese Text-Operationen.
Titel: Aw: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: TomLee am 17 Juni 2023, 13:56:43
Danke für die Rückmeldungen.

Denke werde das überhaupt nicht brauchen, eigentlich gehts mir nur darum was dazuzulernen.

Mag ja sein das zwei at effektiver sind, ein Device wär mir aber lieber wie zwei, das ist eine Prüfung pro Tag, das bringt meine gelangweilte Pi nicht um.

Zitatdann würde ich eher den Monat von time mit Monat von (time +2) nehmen

Ich verstehs nicht wie das gemeint ist (habs kurz versucht nachzuvollziehen) ::)


Genauso wie das:
ZitatDürfte jedenfalls effizienter sein wie diese Text-Operationen.



Hab mir noch eine Möglichkeit überlegt auf den letzten Tag zu prüfen, mit Zuhilfenahme einer Time::Piece Methode:
{my @a= split(' ',localtime);; return 'bla' if  localtime()->month_last_day == $a[2];;}
edit: OK, man könnte auch mit der FHEM eigenen $mday Variablen vergleichen, kam mir erst später:
{return 'bla' if  localtime()->month_last_day == $mday;;}
Titel: Aw: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: TomLee am 17 Juni 2023, 22:38:37
Zitatdie kommt bestimmt von der Verarbeitungszeit (Freezes)

Hab mich nicht weiter beschäftigt, bist dir sicher dass das ein "Freeze" ist ?
Hab die Vermutung das die Millisekunden auf eine Sekunde aufgerundet werden im Zeitstempel ?
Titel: Aw: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: frober am 18 Juni 2023, 13:33:53
Zitat von: TomLee am 17 Juni 2023, 22:38:37
Zitatdie kommt bestimmt von der Verarbeitungszeit (Freezes)

Hab mich nicht weiter beschäftigt, bist dir sicher dass das ein "Freeze" ist ?
Hab die Vermutung das die Millisekunden auf eine Sekunde aufgerundet werden im Zeitstempel ?

Eher eine Vermutung, da ich das auch immer wieder beobachte.
Wobei Freeze nur ein Bsp. war, bezogen Fhem = ein Prozess. Auch wenn es je nach Modul Forks gibt...
D.h. es kann immer zu kleinen Verzögerungen kommen.
Titel: Aw: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: Beta-User am 18 Juni 2023, 15:23:20
Zitat von: TomLee am 17 Juni 2023, 13:56:43dann würde ich eher den Monat von time mit Monat von (time +2) nehmen

Ich verstehs nicht wie das gemeint ist (habs kurz versucht nachzuvollziehen) ::)
Gemeint war: Addiere zur aktuellen Zeit (in Sekunden) soviel Sekunden, dass in jedem Fall ein Tages- bzw. Monatswechsel dazwischen liegt (das at eine Minute vor Mitternacht => 120 Sekunden addieren) und vergleiche die Monate dieser beiden Sekundenwerte. Sind die gleich => return;. Sowas braucht keine weiteren libraries, das localtime-Array sollte ausreichen.
Titel: Aw: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: betateilchen am 18 Juni 2023, 16:06:47
Das Modul at.pm wurde im Januar 2021 genau deshalb um die Funktion at_ultimo() erweitert, damit man solche Krämpfe nicht mehr veranstalten muss...

https://forum.fhem.de/index.php?topic=117269.0
Titel: Aw: Täglich setreading mit at, am Monatsende ein zusätzliches setreading
Beitrag von: TomLee am 18 Juni 2023, 19:41:38
ZitatSowas braucht keine weiteren libraries, das localtime-Array sollte ausreichen.

Liest sich für mich jetzt so das die Time::Piece Variante (versteh ich als weitere Library) weniger effizient ::) sein soll ?
Die ist in Perl seit mehr als 20 Jahren vorhanden, warum nutzt man/Ihr diese Möglichkeit nicht ?

Ihr wisst ja wer frägt, ich erwarte bitte eine mir verständliche Antwort darauf !