FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: oelidoc am 16 Mai 2020, 18:26:04

Titel: (Gelöst) Dummy like Zeitschieber
Beitrag von: oelidoc am 16 Mai 2020, 18:26:04
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
Titel: Antw:Dummy like Zeitschieber
Beitrag von: Damian am 16 Mai 2020, 19:56:01
Du möchtest einen Timer nutzen, aber du möchtest den nicht setzen???
Titel: Antw:Dummy like Zeitschieber
Beitrag von: oelidoc am 16 Mai 2020, 20:29:56
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
Titel: Antw:Dummy like Zeitschieber
Beitrag 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.
Titel: Antw:Dummy like Zeitschieber
Beitrag 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.


Kurz, weil mobil....
Titel: Antw:Dummy like Zeitschieber
Beitrag von: oelidoc am 16 Mai 2020, 20:49:05
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
Titel: Antw:Dummy like Zeitschieber
Beitrag von: oelidoc am 16 Mai 2020, 22:34:16
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.  :(
Titel: Antw:Dummy like Zeitschieber
Beitrag von: Damian am 16 Mai 2020, 22:55:21
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.
Titel: Antw:Dummy like Zeitschieber
Beitrag von: oelidoc am 17 Mai 2020, 00:03:37
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?
Titel: Antw:Dummy like Zeitschieber
Beitrag von: Damian am 17 Mai 2020, 08:04:35
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
Titel: Antw:Dummy like Zeitschieber
Beitrag von: oelidoc am 17 Mai 2020, 18:03:37
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