[Gelöst] Dummy mit AT am Ende des Monat um 23:59 Uhr schalten

Begonnen von AyshaHM, 21 November 2020, 07:40:29

Vorheriges Thema - Nächstes Thema

AyshaHM

Hallo zusammen,
Ich möchte am Monatsende um 23:59 einen Dummy schalten.
Bei meiner Suche habe ich folgenden Code gefunden.

if ((strftime "%d",localtime time+86400) eq "01")}

Dieser Code sucht den nächsten 1. des Monats und soll dann um einen Tag zurückspringen.

Damit habe ich mir diesen AT erstellt.

*23:59:00 {fhem "set Test99 on" if (strftime "%d",localtime time+86400) eq "01")}

Test99 ist der Dummy

Ist das so richtig und wie testet man das ohne auf den letzten Tag im Monat zu warten???

Für Hilfe bin ich immer sehr dankbar!!



Gruß AyshaHM





Hardware: Raspberry  4

CoolTux

Es gibt einige globale Variablen in FHEM. Gib mal
{ $mday }
in Deiner FHEMWEB Kommandozeile ein.

Siehe auch
https://fhem.de/commandref_DE.html#perl
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

AyshaHM

Guten Morgen CoolTux,
vielen Danke für deine Antwort!

Dieses { $mday } gibt mir den aktuellen Tag des Monats zurück.
Leider verstehe ich nicht was ich damit anfangen soll. Das im Commandref verstehe ich auch nicht.

Es müsste doch eine Funktion geben wo ich FHEM sage das heute der letzte Tage im Monat ist (z.B. 30.11.2020) und die Uhrzeit auf 23:58 Uhr steht. Wenn es dann 23:59 Uhr wird kann ich sehen ob mein AT funktioniert.

Ist den mein AT soweit richtig?

Vielleicht kannst du mir damit noch mal Helfen

Vielen Dank im Voraus!!

Hardware: Raspberry  4

Wzut

Zitat von: AyshaHM am 21 November 2020, 08:21:33
Es müsste doch eine Funktion geben wo ich FHEM sage das heute der letzte Tage im Monat ist
Nein, Denkfehler : strftime "%d",localtime time+86400 gibt dir den aktuellen Montagstag in 24 Stunden aus und wenn der 01 ist muß heute der letzte Tag des Monats sein egal ob der aktuelle Monat 28,29,30 oder 31 Tage hat.
Prüf es heute Abend und setze statt der 01 die 22 ein :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

AyshaHM

Guten Morgen Wzut,
vielen Dank für die Lösung!!!
Ich habe einfach die Uhrzeit verändert und kann somit alles testen.
Der AT arbeitet einwandfrei!!

Danke Danke

Gruß
AyshaHM
Hardware: Raspberry  4

Jamo

Hallo,
Zitat von: Wzut am 21 November 2020, 08:30:53
Zitat von: AyshaHM am 21 November 2020, 08:21:33Es müsste doch eine Funktion geben wo ich FHEM sage das heute der letzte Tage im Monat ist
Nein, Denkfehler : strftime "%d",localtime time+86400 gibt dir den aktuellen Montagstag in 24 Stunden aus und wenn der 01 ist muß heute der letzte Tag des Monats sein egal ob der aktuelle Monat 28,29,30 oder 31 Tage hat.
Prüf es heute Abend und setze statt der 01 die 22 ein :)
das funktioniert nicht, falls ich um 23:59 abfrage, und der letzte Tag des Monats wegen der Zeitumstellung nicht 86400 Sekunden sondern nur 82800 Sekunden hat. Dann wird der vorletzte Tag zum letzten Tag :-)
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

betateilchen

Abgesehen davon, dass es wenig Sinn macht, zu einer solchen Frage einen so alten Thread auszugraben, gibt es für die Aufgabenstellung

Zitat von: AyshaHM am 21 November 2020, 07:40:29Ich möchte am Monatsende um 23:59 einen Dummy schalten.

inzwischen eine sehr einfache Lösung:

define test_at at *{at_ultimo()} set TestDummy on
at_ultimo() berechnet automatisch den Zeitpunkt zum letzten Tag des Monats um 23:59:00.

Ein Blick in die commandref zu "at" hätte dabei helfen können, die Lösung zu finden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!