DOIF regelmäßig alle x tage zu einer Uhrzeit ausführen...

Begonnen von Tsturm, 07 April 2019, 19:43:16

Vorheriges Thema - Nächstes Thema

Tsturm

Hallo Zusammen,

ich möchte alle 2 / 3/ 4/... Tage zu einer bestimmten Zeit ein Doif ausführen ( Beregnung). Irgendwie stehe ich auf dem Schlauch... ich bekomme entweder die Wochentagssteuerung hin (hilft aber nicht bei variablen Tagesintervallen wenn ich von zwei auf drei Tage Intervall gehen will), oder eine Taktung mit  [+[h]:MM] - allerdings ist dann die Startzeit nicht mehr definiert (ich will wenn, dann morgens um 6:00 bewässsern).

Any suggestions oder habe ich da was übersehen?

VG timmo

Damian

Zitat von: Tsturm am 07 April 2019, 19:43:16
Hallo Zusammen,

ich möchte alle 2 / 3/ 4/... Tage zu einer bestimmten Zeit ein Doif ausführen ( Beregnung). Irgendwie stehe ich auf dem Schlauch... ich bekomme entweder die Wochentagssteuerung hin (hilft aber nicht bei variablen Tagesintervallen wenn ich von zwei auf drei Tage Intervall gehen will), oder eine Taktung mit  [+[h]:MM] - allerdings ist dann die Startzeit nicht mehr definiert (ich will wenn, dann morgens um 6:00 bewässsern).

Any suggestions oder habe ich da was übersehen?

VG timmo

Es gibt die Zeitvariable $yday mit Tag des Jahres.

Mit Modulo-Operator kannst du die Teilbarkeit überprüfen:

An ungeraden Tagen:

([18:00] and $yday %  2)

oder

jeden dritten Tag:

([18:00] and !($yday %  3))

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

amenomade

Dann hast Du evtl. ein Problem beim Jahreswechsel.

([20:00|[$SELF:nextDay]]) (set du1 on)(setreading $SELF nextDay {(([$SELF:nextDay]+2)%7)})
wo nextDay ein Reading vom DOIF ist, mit Wochentag als Zahl

Beispiel: jeden 2. Tag ab kommenden Montag
nextDay = 1 am Anfang; es wird um 20 Uhr am Montag geschaltet, dann wird der nächste Tag auf 3 gesetzt => schaltet dann am Mittwoch => 5 = Freitag => 0 = Sonntag => 2 = Dienstag, usw. Ergibt jeden 2. Tag ab kommenden Montag
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

in der Rubrik: hackers guide

könnte auch funktionieren:

([([18:00]+anzahl_Tage*86400)])


anzahl_tage ist mit einer Zahl zu belegen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Tsturm

Wow.. na wenigstens habe ich nichts übersehen ;-))

Vielen Dank - ich probiere es aus und gebe Bescheid!

VG timmo

Bartimaus

Zitat von: Damian am 07 April 2019, 21:37:08
in der Rubrik: hackers guide

könnte auch funktionieren:

([([18:00]+anzahl_Tage*86400)])


anzahl_tage ist mit einer Zahl zu belegen.

Aber dann wird doch die Bedingung nie wahr...., weil man nie 18:00+2 Tage erreicht. Am nächsten Tag sind es ja wieder +2 Tage
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

#6
Zitat von: Bartimaus am 18 September 2019, 15:09:39
Aber dann wird doch die Bedingung nie wahr...., weil man nie 18:00+2 Tage erreicht. Am nächsten Tag sind es ja wieder +2 Tage

Nein, der nächste Zeitpunkt ist erst in zwei Tagen. Definiere mal DOIF ([([18:00]+2*86400)]) und schaue wann der nächste Timer zuschlägt. ;)

Es ist nirgendwo beschrieben, aber DOIF kann auch alle x-Tage triggern.

Edit: Es geht sogar ([42:00]) ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Frank_Huber

Zitat von: Damian am 18 September 2019, 17:12:29
Nein, der nächste Zeitpunkt ist erst in zwei Tagen. Definiere mal DOIF ([([18:00]+2*86400)]) und schaue wann der nächste Timer zuschlägt. ;)

Es ist nirgendwo beschrieben, aber DOIF kann auch alle x-Tage triggern.

Edit: Es geht sogar ([42:00]) ;)

in der Commandref steht etwas von max 59min bzw 24 Std.
https://fhem.de/commandref_DE.html#DOIF_Relative_Zeitangaben_nach_Zeitraster_ausgerichtet
Bin ich damit auf dem Holzweg oder ist DOIF mittlerweile besser als seine commandref? ;-)

Damian

Zitat von: Frank_Huber am 18 September 2019, 18:01:34
in der Commandref steht etwas von max 59min bzw 24 Std.
https://fhem.de/commandref_DE.html#DOIF_Relative_Zeitangaben_nach_Zeitraster_ausgerichtet
Bin ich damit auf dem Holzweg oder ist DOIF mittlerweile besser als seine commandref? ;-)

Das sind ja nur relative Zeitangaben und zwar ausgerichtet nach einem Zeitraster.

Hier geht es um absolute Angaben, wie z. B. ([18:00])

und ja, DOIF kann mehr als in der Doku steht und das mit Absicht, denn [42:00] würde keiner verstehen, obwohl es funktioniert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Zitat von: Damian am 18 September 2019, 18:06:55
denn [42:00] würde keiner verstehen, obwohl es funktioniert.
Und wie ist das zu verstehen?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

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

amenomade

Zitat von: Damian am 18 September 2019, 19:26:13
Eben! Probiere mal aus! Da war sie wieder: die berühmte 42 :)

Kriege ich dann DIE Antwort? Waouh, Cool !
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

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

Bartimaus

Zitat von: Damian am 18 September 2019, 17:12:29
Nein, der nächste Zeitpunkt ist erst in zwei Tagen. Definiere mal DOIF ([([18:00]+2*86400)]) und schaue wann der nächste Timer zuschlägt. ;)

Es ist nirgendwo beschrieben, aber DOIF kann auch alle x-Tage triggern.



Moin,

hatte ich, und die Beregnung ist nie losgelaufen....
.... weil meiner Meinung nach jeden Tag um 04:00 Uhr wieder zwei Tage addiert wurden.. ([([04:00]+2*86400)])

Ich werde jetzt aber "sicherheitshalber" ein neues Test-DOIF mit dieser Zeitangabe erstellen, und abwarten was passiert  ;D
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Zitat von: Bartimaus am 19 September 2019, 08:46:09
Moin,

hatte ich, und die Beregnung ist nie losgelaufen....
.... weil meiner Meinung nach jeden Tag um 04:00 Uhr wieder zwei Tage addiert wurden.. ([([04:00]+2*86400)])

Ich werde jetzt aber "sicherheitshalber" ein neues Test-DOIF mit dieser Zeitangabe erstellen, und abwarten was passiert  ;D

Naja nach der Definition des DOIFs steht der Timer auf jeden Fall vom Datum her zwei Tage später und damit wird er auf jeden Fall nicht morgen zuschlagen. Jetzt muss man noch die Tage abwarten und schauen, ob der nächste Zeitpunkt nach der Triggerung wieder Tage später ist. Da die Anzeige des Timers im Reading mit Datum die tatsächlich errechnete ist, kann man sich darauf verlassen. Zu bedenken ist, dass wenn während der Wartezeit das System neu gestartet wird, die Zeit ab dem Definitionszeitpunkt neu berechnet wird und das kann dann ein späterer Tag sein. Deswegen sind solche Definitionen mit Vorsicht zu genießen und stehen nicht in der Commandref.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

#15
So, Test läuft.

Um 09:00 hat es nicht gefeuert, weil +2 Tage.
Timer C01 steht auf übermorgen.

Jetzt heisst es warten

Internals:
  CFGFN     
  DEF        ([([09:00]+2*86400)])
(set PushiPhone message Testberegnung)
  FUUID      5d8324b5-f33f-dcb4-827c-bb432b0ab651dc72
  MODEL      FHEM
  NAME      TestBeregnung
  NR        747591
  NTFY_ORDER 50-TestBeregnung
  STATE      cmd_2
  TYPE      DOIF
  VERSION    19786 2019-07-05 21:47:08
  READINGS:
    2019-09-19 08:52:13  cmd            2
    2019-09-19 08:52:13  cmd_event      TestBeregnung
    2019-09-19 08:52:13  cmd_nr          2
    2019-09-19 08:52:05  mode            enabled
    2019-09-19 08:52:13  state          cmd_2
    2019-09-19 08:52:06  timer_01_c01    21.09.2019 09:00:00
  Regex:
    accu:
  attr:
    cmdState:
    wait:
    waitdel:
  condition:
    0          ::DOIF_time_once($hash,0,$wday)
  days:
  devices:
  do:
    0:
      0          set PushiPhone message Testberegnung
    1:
  helper:
    globalinit 1
    last_timer 1
    sleeptimer -1
    timerdev 
    timerevent
    timerevents
    timereventsState
    triggerDev
    DOIF_eventas:
      cmd_nr: 2
      cmd: 2
      cmd_event: TestBeregnung
      state: cmd_2
  internals:
  intervalfunc:
  itimer:
  localtime:
    0          1569049200
  readings:
  realtime:
    0          09:00:00
  time:
    0          ([09:00]+2*86400)
  timeCond:
    0          0
  timer:
    0          0
  timers:
    0          0
  triggertime:
    1569049200:
      localtime  1569049200
      hash:
  uiState:
  uiTable:
Attributes:
  room      TestDOIF


Edith:

Ha, ([59:00]) (set bla on) funzt tatsächlich.... Timer C01 auf 21.09.2019 11:00 Uhr....  :o :D
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Zitat von: Bartimaus am 19 September 2019, 10:09:47
Edith:

Ha, ([59:00]) (set bla on) funzt tatsächlich.... Timer C01 auf 21.09.2019 11:00 Uhr....  :o :D

Naja, wenn 42 funktioniert, dann auch 59 :) Bevor du weiter probierst, die größte mögliche Zahl an dieser Stelle liegt bei 99.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mi.ke

Zitat von: Damian am 07 April 2019, 20:55:58
Es gibt die Zeitvariable $yday mit Tag des Jahres.

Mit Modulo-Operator kannst du die Teilbarkeit überprüfen:

An ungeraden Tagen:

([18:00] and $yday %  2)

oder

jeden dritten Tag:

([18:00] and !($yday %  3))

usw.

Würde das auch mit Monaten funktionieren?

([18:00] and !($month % 3))

Oder gibt es einen anderen Weg, dass DOIF alle drei Monate auszuführen?

cheers
mi.ke
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

Per

Dann würde das in dem Monat aber jeden Tag ausgeführt werden.

Damian

Zitat von: mi.ke am 01 Januar 2023, 14:25:11
Würde das auch mit Monaten funktionieren?

([18:00] and !($month % 3))

Oder gibt es einen anderen Weg, dass DOIF alle drei Monate auszuführen?

cheers
mi.ke

Dann eher:

([18:00] and (($month-1) % 3) == 0 and $mday == 1)

ergibt:

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

mi.ke

Zitat von: Per am 01 Januar 2023, 15:12:18
Dann würde das in dem Monat aber jeden Tag ausgeführt werden.

Zitat von: Damian am 01 Januar 2023, 16:33:14
Dann eher:

([18:00] and (($month-1) % 3) == 0 and $mday == 1)

ergibt:

01.01, 01.04, ...

Danke Euch Beiden
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara