Letzten Werktag im Monat für at ermitteln

Begonnen von KraxelHuber, 13 Januar 2019, 22:01:32

Vorheriges Thema - Nächstes Thema

Otto123

#15
Zitat von: Frank_Huber am 14 Januar 2019, 21:17:31
Otto, mit der Sub geht wohl nicht.
Ich lese das in der Doku so (und hab es auch getestet): für datespec kann man keine Perlfunction aufrufen, das geht nur für timespec.

Aber man kann ja den Datumsstring berechnen und dann sofort mit der Variablen das define an FHEM schicken.

So:

Einfach in der letzten Zeile der Sub das at definieren und dann einfach einmal im Monat die Sub aufrufen.
sub calcLastBusDay {
    use Time::Local;
    use POSIX qw(strftime);

    my ($_year, $_month) = split(/\./, `date +%Y.%m`);
    chomp($_year, $_month);

    # Calculate the last day of the month.
    my $_next_year = ($_month == 12) ? $_year + 1 : $_year;
    my $_next_month = timelocal(0, 0, 0, 1, $_month % 12, $_next_year);
    my $_last_day = (localtime($_next_month - 86400))[3];

    # Make sure it is a business day.
    my $_day = strftime "%a", localtime($_next_month - 86400);
    if ($_day eq 'Sat') { $_last_day--; }
    if ($_day eq 'Sun') { for (1..2) { $_last_day--; } };
    my $ddddd = "$_year-$_month-$_last_day"."T09:00:00";
    fhem("defmod a_test3 at $ddddd {}");
    # return $ddddd;
}


Getestet und funktioniert  8)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Zitat von: KraxelHuber am 14 Januar 2019, 21:36:09
Ja, schon klar. Die Frage ist aber, ob es ein String oder wirklich ein Datumswert ist? D.h. funktioniert der Vergleich im DoIF wirklich, da die SUB ja einen String zurück liefert? Daher auch die Frage, wie ich mir den aktuellen Inhalt dieser Variable in FHEM unmittelbar anzeigen lassen kann.

wenn calcLastBusDay einen String liefert im Format yyyy-mm-dd, dann kann man den Vergleich wie folgt realisieren:


defmod TEST DOIF ($ymd eq calcLastBusDay() and [09:00]) (set bla on)


eq steht für Gleichheit von Strings.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

KraxelHuber

Zitat von: Damian am 14 Januar 2019, 21:43:00
wenn calcLastBusDay einen String liefert im Format yyyy-mm-dd, dann kann man den Vergleich wie folgt realisieren:


defmod TEST DOIF ($ymd eq calcLastBusDay() and [09:00]) (set bla on)


eq steht für Gleichheit von Strings.

Danke für die Aufklärung. Das sollte dann also funktionieren.  :D

KraxelHuber

Zitat von: Otto123 am 14 Januar 2019, 21:41:36
Einfach in der letzten Zeile der Sub das at definieren und dann einfach einmal im Monat die Sub aufrufen.

Gruß Otto

Otto, wenn ich einmal im Monat daran denke, die SUB auszuführen, dann brauche ich die SUB eigentlich erst gar nicht, weil sie ja dafür zuständig ist, mir einmal im Monat eine Erinnerung für eine andere Aufgabe zu schicken. D.h. wenn ich also daran denke, dann könnte ich die andere Aufgabe auch direkt erledigen. ;D

Ich brauche also eine Lösung, die ich nicht manuell anfassen muss. Das DoIF liefert anscheinend diese Lösung.

Trotzdem besten Dank für deine Hilfe!!

Frank_Huber

#19
Danke Damian, da war ich ja auf dem richtigen Weg.

Otto, sorry dann hatte ich es missverstanden.
Den define im sub sollte gehen, klar. [emoji6]
Mir persönlich würde aber die doif Varianten am besten gefallen.

Gesendet von meinem Telekom Puls mit Tapatalk

Otto123

#20
Zitat von: KraxelHuber am 14 Januar 2019, 21:54:49
Otto, wenn ich einmal im Monat daran denke, die SUB auszuführen, dann brauche ich die SUB eigentlich erst gar nicht, weil sie ja dafür zuständig ist, mir einmal im Monat eine Erinnerung für eine andere Aufgabe zu schicken. D.h. wenn ich also daran denke, dann könnte ich die andere Aufgabe auch direkt erledigen. ;D
Na dafür gibt es doch FHEM! Ich habe ja nicht gesagt du sollst es manuell machen.
Ich habe nicht konkret drüber nachgedacht, aber vielleicht gibt es doch eh schon eine Aufgabe bei Dir die zyklisch ausgeführt wird.

Das at an sich kann ja zum Schluss nochmal die SUB aufrufen, nachdem es die Nachricht an Dich geschickt hat.

Und nochmal der Hinweis: Die SUB in #2 und #7 ist falsch. Sie liefert das falsche Datumsformat!!!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

KraxelHuber

Zitat von: Otto123 am 14 Januar 2019, 22:05:28

Und nochmal der Hinweis: Die SUB in #2 und #7 ist falsch. Sie liefert das falsche Datumsformat!!!


Danke für den Hinweis. Ich habe den Fehler korrigiert.