FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: gadget am 15 Oktober 2016, 11:28:30

Titel: gelöst: Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: gadget am 15 Oktober 2016, 11:28:30
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
Titel: Antw:Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: MichaelO am 16 Oktober 2016, 01:19:42
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.
Titel: Antw:Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: CoolTux am 16 Oktober 2016, 07:27:19
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.
Titel: Antw:Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: jmike am 16 Oktober 2016, 10:31:40
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)
Titel: Antw:Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag 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.
Titel: Antw:Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: jmike am 16 Oktober 2016, 11:45:15
Sehr gut, das ging schnell :)

Einfache ( ) hatte ich tatsächlich nicht ausprobiert.

Dann haben wir doch eine Lösung 8)
Titel: Antw:Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: Damian am 16 Oktober 2016, 12:11:56
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


Titel: Antw:Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: Ellert am 16 Oktober 2016, 13:49:25
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.
Titel: Antw:gelöst: Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: spiedo am 22 Januar 2017, 14:42:33
Ja, die Variable $week würde ich auch gerne verwenden.
Titel: Antw:gelöst: Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: Damian am 22 Januar 2017, 16:23:50
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
Titel: Antw:gelöst: Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag 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.
Titel: Antw:gelöst: Codeschnipsel gesucht für "Alle zwei Wochen ausführen"
Beitrag von: Damian am 22 Januar 2017, 21:41:30
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))