Hallo zusammen,
ich habe eine automatisierte Bewässerung mit mehreren Kreisläufen. Einen dieser Kreisläufe möchte ich bei Bedarf auch quasi "von Hand" schalten. Dazu habe ich folgendes kleines DOIF:
Internals:
DEF ([[$SELF:mytime]] or ["$SELF:state: on"]) (set MQTT2_DVES_8C2EC3
on) (set $SELF off)
DOELSE (set MQTT2_DVES_8C2EC3 off)
DOIFDEV ^global$|bewaesserung_hecke|^bewaesserung_hecke$
FUUID 5ebac645-f33f-74ea-3c33-ded2bd0041467aa0
MODEL FHEM
NAME bewaesserung_hecke
NR 513
NTFY_ORDER 50-bewaesserung_hecke
STATE off
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-05-15 23:01:00 cmd 2
2020-05-15 23:01:00 cmd_event set_off_cmd_2
2020-05-15 23:01:00 cmd_nr 2
2020-05-14 19:10:21 mode enabled
2020-05-15 22:54:16 mytime 23:00
2020-05-15 23:01:00 state off
2020-05-15 23:00:00 timer_01_c01 16.05.2020 23:00:00
2020-05-15 23:00:59 wait_timer no timer
Regex:
accu:
cond:
:
0:
"bewaesserung_hecke:state: on" bewaesserung_hecke:state: on
itimer:
bewaesserung_hecke:
itimer:
mytime ^bewaesserung_hecke$:^mytime:
attr:
cmdState:
0:
on
off
1:
off
wait:
0:
0
30
waitdel:
waitsame:
condition:
0 ::DOIF_time_once($hash,0,$wday) or ::EventDoIf('bewaesserung_hecke',$hash,'state: on',0)
days:
do:
0:
0 set MQTT2_DVES_8C2EC3 on
1 set bewaesserung_hecke off
1:
0 set MQTT2_DVES_8C2EC3 off
helper:
DEVFILTER ^global$|bewaesserung_hecke|^bewaesserung_hecke$
NOTIFYDEV global|.*bewaesserung_hecke.*|bewaesserung_hecke
event timer_1
globalinit 1
last_timer 1
sleepdevice set_on_cmd_1
sleepsubtimer 1
sleeptimer -1
timerdev
timerevent timer_1
triggerDev
timerevents:
timer_1
timereventsState:
timer_1
triggerEvents:
timer_1
triggerEventsState:
timer_1
interval:
intervalfunc:
intervaltimer:
localtime:
0 1589662800
realtime:
0 23:00:00
time:
0 [bewaesserung_hecke:mytime]
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1589662800:
localtime 1589662800
hash:
uiState:
uiTable:
Attributes:
alexaName Bewässerung Hecke
cmdState on,off|off
disable 0
genericDeviceType switch
icon helper_doif
readingList mytime
room Garten,alexaRoom
setList mytime:time on off
wait 0,3600
webCmd mytime:on:off
Leider wird bei Benutzung des "Schiebereglers" mytime immer auch ein Timer mit gleicher Uhrzeit am nächsten Tag angelegt und auch abgearbeitet.
Dies würde ich gerne verhindern, weiss aber leider nicht wie...
Gewünschtes Verhalten wäre einmaliges Einschalten mittels on / off oder einmaliges zeitgesteuertes Einschalten mittles mytime.
Ich bin für jede Hilfe dankbar
Gruß
oelidoc
Du möchtest einen Timer nutzen, aber du möchtest den nicht setzen???
Hallo Damian,
natürlich möchte ich den Timer nutzen, aber eben nur einmal. Ich möchte nicht, dass das Ventil am nächsten Tag zur selben Zeit wieder aufgeht.
Verständlich?
Gruß
oelidoc
DOIF kennt nur wiederholende Timer. Ohne do always wird nur einmal geschaltet und dann muss der Zustand des DOIFs wechseln, damit ein erneutes Mal geschaltet wird. Wenn das Modul im cmd_1-Zustand bleibt, wird am nächsten Tag nicht geschaltet.
Ich habe ein ähnliches Konstrukt, nur mit einem weiteren Knopf, um den Timer aktiv/inaktiv zu schalten.
Kurz, weil mobil....
Hallo KernSani,
Zitat von: KernSani am 16 Mai 2020, 20:46:05
Ich habe ein ähnliches Konstrukt, nur mit einem weiteren Knopf, um den Timer aktiv/inaktiv zu schalten.
na das klingt doch interessant. Vielleicht könntest du ja noch was nachreichen, wenn du wieder zuhause bist...
Danke
oelidoc
Zitat von: Damian am 16 Mai 2020, 20:39:07
DOIF kennt nur wiederholende Timer. Ohne do always wird nur einmal geschaltet und dann muss der Zustand des DOIFs wechseln, damit ein erneutes Mal geschaltet wird. Wenn das Modul im cmd_1-Zustand bleibt, wird am nächsten Tag nicht geschaltet.
Leider habe ich keine Möglichkeit gefunden, wie ich das gewünschte Ziel erreichen kann, ohne dass das Modul den cmd-1 Zustand verlässt. :(
Zitat von: oelidoc am 16 Mai 2020, 22:34:16
Leider habe ich keine Möglichkeit gefunden, wie ich das gewünschte Ziel erreichen kann, ohne dass das Modul den cmd-1 Zustand verlässt. :(
Du kannst dir einen Schalter definieren (on/off), dessen Zustand du mit and mit dem Timer verknüpfst und das Modul auf do always stellst.
Zitat von: Damian am 16 Mai 2020, 22:55:21
Du kannst dir einen Schalter definieren (on/off), dessen Zustand du mit and mit dem Timer verknüpfst und das Modul auf do always stellst.
Also ist doch wieder ein Dummy-Device nötig, oder hab ich wieder was nicht verstanden?
Zitat von: oelidoc am 17 Mai 2020, 00:03:37
Also ist doch wieder ein Dummy-Device nötig, oder hab ich wieder was nicht verstanden?
Wenn du mit DOIF arbeitest, brauchst du keine Dummys. Du kannst alles im Modul mit Hilfe von Readings innerhalb des Moduls realisieren, hier sind ein paar Beispiele: https://wiki.fhem.de/wiki/DOIF/Zeitgeber
Hallo Damian,
vielen Dank für deine Hilfe! Den Wiki Eintrag https://wiki.fhem.de/wiki/DOIF/Zeitgeber kannte ich nicht - hat mir sehr geholfen.
So sieht es jetzt bei mir aus:
Internals:
DEF (([$SELF:P_einaus,"off"] eq "on" and [[$SELF:mytime]]) or ["$SELF:state: on"]) (set MQTT2_DVES_8C2EC3 on) (set $SELF off, set $SELF P_einaus off)
DOELSE (set MQTT2_DVES_8C2EC3 off)
DOIFDEV ^global$|^bewaesserung_hecke$|bewaesserung_hecke
FUUID 5ebac645-f33f-74ea-3c33-ded2bd0041467aa0
MODEL FHEM
NAME bewaesserung_hecke
NR 513
NTFY_ORDER 50-bewaesserung_hecke
STATE off
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-05-17 17:55:08 P_einaus off
2020-05-17 17:55:08 cmd 1.2
2020-05-17 17:55:08 cmd_event timer_1
2020-05-17 17:55:08 cmd_nr 1
2020-05-17 17:55:08 cmd_seqnr 2
2020-05-17 17:50:25 e_bewaesserung_hecke_P_einaus on
2020-05-17 17:48:34 mode enabled
2020-05-17 17:50:41 mytime 17:55
2020-05-17 17:55:08 state off
2020-05-17 17:55:00 timer_01_c01 18.05.2020 17:55:00
2020-05-17 17:55:08 wait_timer no timer
Regex:
accu:
cond:
:
0:
"bewaesserung_hecke:state: on" bewaesserung_hecke:state: on
bewaesserung_hecke:
0:
P_einaus ^bewaesserung_hecke$:^P_einaus:
itimer:
bewaesserung_hecke:
itimer:
mytime ^bewaesserung_hecke$:^mytime:
attr:
cmdState:
0:
on
off
1:
off
wait:
0:
0
8
waitdel:
condition:
0 (::ReadingValDoIf($hash,'bewaesserung_hecke','P_einaus','"off"') eq "on" and ::DOIF_time_once($hash,0,$wday)) or ::EventDoIf('bewaesserung_hecke',$hash,'state: on',0)
days:
do:
0:
0 set MQTT2_DVES_8C2EC3 on
1 set bewaesserung_hecke off, set bewaesserung_hecke P_einaus off
1:
0 set MQTT2_DVES_8C2EC3 off
helper:
DEVFILTER ^global$|^bewaesserung_hecke$|bewaesserung_hecke
NOTIFYDEV global|bewaesserung_hecke|.*bewaesserung_hecke.*
event timer_1
globalinit 1
last_timer 1
sleepdevice timer_1
sleepsubtimer -1
sleeptimer -1
timerdev
timerevent timer_1
triggerDev
timerevents:
timer_1
timereventsState:
timer_1
triggerEvents:
timer_1
triggerEventsState:
timer_1
internals:
interval:
intervalfunc:
intervaltimer:
localtime:
0 1589817300
readings:
all bewaesserung_hecke:P_einaus
realtime:
0 17:55:00
time:
0 [bewaesserung_hecke:mytime]
timeCond:
0 0
timer:
0 0
timers:
0 0
trigger:
triggertime:
1589817300:
localtime 1589817300
hash:
uiState:
uiTable:
Attributes:
alexaName Bewässerung Hecke
cmdState on,off|off
disable 0
genericDeviceType switch
icon helper_doif
readingList P_einaus mytime
room Garten,alexaRoom
setList P_einaus:uzsuToggle,on,off mytime:time on off
wait 0,3600
webCmd P_einaus:
Für mich ist das jetzt so perfekt => gelöst
Vielen Dank für deine Geduld mit Anfängern wie mir und für deinen unermüdlichen Einsatz für die Gemeinschaft
Gruß
oelidoc