gelöst: Codeschnipsel gesucht für "Alle zwei Wochen ausführen"

Begonnen von gadget, 15 Oktober 2016, 11:28:30

Vorheriges Thema - Nächstes Thema

gadget

Hallo,

Irgend etwas einmal pro Woche machen geht im DOIF ja so:

([22:00|0])

-> Sonntags um 22:00 Uhr

wie bekomme ich es elegant hin sowas nur  alle zwei Wochen zu machen (ohne Gefrickel wie dummy in der ersten Woche setzen und in der zweiten Woche zurücksetzen)  ?  Irgendwas wie z.B. auf Perl-Ebene die Wochennummer modulo 2 als Einzeiler ?)

Grüsse, gadget

MichaelO

Hi,

nur so als erste Idee und mit Pseudocode...

DOIF (Uhrzeit am Sonntag und DOIF nicht im cmd1)
  (schalte cmd1)
DOELSEIF (Uhrzeit am Sonntag und DOIF im cmd1)
  (cmd2)


Da müsste doch nur jeden 2. Sonntag um die Uhrzeit das cmd1 ausgeführt werden.

CoolTux

Du kannst zusätzlich mit $mday den Tag des Monats abfragen.
Nun kannst du ja überlegen welche Tage eines Monats für die zweite und vierte Woche in Frage kommen und darauf prüfen

$mday >= 8 and $mday <= 14 sollte jeden 2. Sonntag abdecken.
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

jmike

Sollte sich das nicht geändert haben, wird wohl das größte Problem..
Zitat von: Damian am 01 November 2015, 21:03:08
... In die DOIF-Bedingung gehören keine geschweiften Klammern hin - wirst du in der Doku auch nicht finden.
Gruß
Damian

Trotzdem mal eine Idee.. das hier gibt dir die aktuelle Kalender Woche zurück.
{POSIX::strftime("%V", gmtime time)}

Und das hier, 1 wenn ungerade und 0 wenn eine gerade KW.
{POSIX::strftime("%V", gmtime time) &1}

Hab es nur bisher nicht geschafft es ins DOIF einzubauen.
Solche sachen gehen nicht:
( [22:00|0] and { POSIX::strftime("%V", gmtime time) &1 } == "1")(set dummy on)
oder sowas:
( [22:00|0] and {( POSIX::strftime("%V", gmtime time) &1 ?"TRUE":"FALSE")} eq "FALSE" )(set dummy on)
und vieles andere auch nicht.


Vielleicht findet ja jemand eine Lösung. Damian vielleicht, oder er bestätigt dass {perl} in der Bedingung nicht geht.
Ich würde ein Kalender Dummy anlegen wo ich so Zeug wie KW und KW1|0 eintragen würde.

Dann lässt sich ein DOIF leicht machen.
([22:00|0] and [Kalender:KW] == "0")(set mach-was-an-Sonntagen-von-geraden-Wochen)

Ellert

So ( [22:00|0] and (POSIX::strftime("%V", gmtime time) &1) == 1)(set dummy on) funktioniert es bei mir.

getestet mit

( [a31] and (POSIX::strftime("%V", gmtime time) &1) == 1 )(set LUM on)
DOELSE (set LUM off)


Die Dummies hatte ich gerade noch.

jmike

Sehr gut, das ging schnell :)

Einfache ( ) hatte ich tatsächlich nicht ausprobiert.

Dann haben wir doch eine Lösung 8)

Damian

Zitat von: Ellert am 16 Oktober 2016, 10:53:59
So ( [22:00|0] and (POSIX::strftime("%V", gmtime time) &1) == 1)(set dummy on) funktioniert es bei mir.

getestet mit

( [a31] and (POSIX::strftime("%V", gmtime time) &1) == 1 )(set LUM on)
DOELSE (set LUM off)


Die Dummies hatte ich gerade noch.

Ich kann zukünftig zu den bisherigen Zeitvariablen $sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst die Variable $week für Wochennummer ergänzen.

Allerdings funktioniert %V offenbar nicht unter Windows, %W  dürfte kompatibler sein.

Gruß

Damian


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

Ellert

ZitatIch kann zukünftig zu den bisherigen Zeitvariablen $sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst die Variable $week für Wochennummer ergänzen.

Das wäre eine gute Ergänzung.

spiedo


Damian

Zitat von: spiedo am 22 Januar 2017, 14:42:33
Ja, die Variable $week würde ich auch gerne verwenden.

Kannst du tun. Zitat aus der Commandref:

Zitat
<Perl-Zeitvariablen>
Variablen für Zeit- und Datumsangaben, $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst, $week, $hms, $hm
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

spiedo

Hm, in der Commandref unter dem Abschnitt <Perl specials> steht nichts von $week. Den Eintrag <Perl-Zeitvariablen> kann ich nicht finden. Oder bin ich zu doof was zu finden? Auch vermisse ich dort eine Suchfunktion.

Damian

Zitat von: spiedo am 22 Januar 2017, 21:16:39
Hm, in der Commandref unter dem Abschnitt <Perl specials> steht nichts von $week. Den Eintrag <Perl-Zeitvariablen> kann ich nicht finden. Oder bin ich zu doof was zu finden? Auch vermisse ich dort eine Suchfunktion.

https://fhem.de/commandref_DE.html#DOIF

im Browser nach $week suchen (ggf. vorher Seite aktualisieren (F5 unter Windows))
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF