Hauptmenü

DOIF Poolpumpe Intervall

Begonnen von mfeske, 29 Juli 2018, 09:28:28

Vorheriges Thema - Nächstes Thema

mfeske

Hallo zusammen,
ich hatte mir letztes Jahr schon ein DOIF für die Poolpumpe zurecht gelegt und war auch der Meinung das Es funktionierte.
Über ein Dropdown kann ich die verschiedenen Zustände auswählen:

Internals:
   NAME       Poolpumpe_Schalter
   NR         343
   STATE      on
   TYPE       dummy
   READINGS:
     2018-07-29 09:09:50   state           countdown
Attributes:
   devStateIcon on:set_on off:off intervall:general_an_fuer_zeit countdown:hourglass
   icon       sani_domestic_waterworks
   room       Garten
   setList    state:on,off,intervall,countdown
   webCmd     state


on soll die Pumpe zwischen 9 und 17 einschalten
off ausschalten
intervall soll die Pumpe um X:15 für fünf Minuten einschalten
courndown soll die Pumpe für 3 Stunden einschalten.

dazu habe ich folgendes DOIF genommen:

Internals:
   DEF        ([Poolpumpe_Schalter] eq "on") (set Poolpumpe on) DOELSEIF ([9:00 -17:00] and [+:15] and ([Poolpumpe_Schalter] eq "intervall")) (set Poolpumpe on-for-timer 300, define Poolpumpe_Schalter_off at +00:05:00 set Poolpumpe off, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF (([Poolpumpe_Schalter] eq "countdown")) (set Poolpumpe on-for-timer 7200, define Poolpumpe_Schalter_off at +02:00:00 set Poolpumpe_Schalter intervall, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF ([Poolpumpe_Schalter] eq "off") (set Poolpumpe off)
   MODEL      FHEM
   NAME       Poolpumpe_DOIF
   NR         347
   NTFY_ORDER 50-Poolpumpe_DOIF
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-07-29 09:19:19   Device          Poolpumpe_Schalter
     2018-07-29 09:19:22   cmd             1
     2018-07-29 09:19:22   cmd_event       Poolpumpe_Schalter
     2018-07-29 09:19:22   cmd_nr          1
     2018-07-29 09:19:19   e_Poolpumpe_Schalter_STATE on
     2018-07-29 09:19:22   state           cmd_1
     2018-07-28 17:00:00   timer_01_c02    29.07.2018 09:00:00
     2018-07-28 17:00:00   timer_02_c02    29.07.2018 17:00:00
     2018-07-29 09:15:00   timer_03_c02    29.07.2018 09:30:00
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          InternalDoIf($hash,'Poolpumpe_Schalter','STATE') eq "on"
     1          DOIF_time($hash,0,1,$wday,$hms) and DOIF_time_once($hash,2,$wday) and (InternalDoIf($hash,'Poolpumpe_Schalter','STATE') eq "intervall")
     2          (InternalDoIf($hash,'Poolpumpe_Schalter','STATE') eq "countdown")
     3          InternalDoIf($hash,'Poolpumpe_Schalter','STATE') eq "off"
   days:
   devices:
     0           Poolpumpe_Schalter
     1           Poolpumpe_Schalter
     2           Poolpumpe_Schalter
     3           Poolpumpe_Schalter
     all         Poolpumpe_Schalter
   do:
     0:
       0          set Poolpumpe on
     1:
       0          set Poolpumpe on-for-timer 300, define Poolpumpe_Schalter_off at +00:05:00 set Poolpumpe off, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass
     2:
       0          set Poolpumpe on-for-timer 7200, define Poolpumpe_Schalter_off at +02:00:00 set Poolpumpe_Schalter intervall, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass
     3:
       0          set Poolpumpe off
     4:
   helper:
     event      on
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   Poolpumpe_Schalter
     timerevent on
     triggerDev Poolpumpe_Schalter
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: Poolpumpe_Schalter
       state: cmd_1
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       on
     triggerEventsState:
       state: on
   internals:
     0           Poolpumpe_Schalter:STATE
     1           Poolpumpe_Schalter:STATE
     2           Poolpumpe_Schalter:STATE
     3           Poolpumpe_Schalter:STATE
     all         Poolpumpe_Schalter:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   intervaltimer:
   itimer:
   localtime:
     0          1532847600
     1          1532876400
     2          1532849400
   perlblock:
   readings:
   realtime:
     0          09:00:00
     1          17:00:00
     2          09:30:00
   time:
     0          9:00
     1          17:00:00
     2          +:15
   timeCond:
     0          1
     1          1
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     1           0  1  2
   trigger:
   triggertime:
     1532849400:
       localtime  1532849400
       hash:
     1532876400:
       localtime  1532876400
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Garten


Der Countdown gelingt mir. Auch das off. Aber ich sehe nicht das Intervall genutzt wurde in den Logs :-(.
Ich weiss auch nicht wie ich sicherstellen kann, das die Pumpe tatsächlich am Nachmittag aus geht.

Ich habe noch ein DOIF um die Schalter umzuschalten:

Internals:
   DEF        ([Pool_FB_01] eq "on") (setstate Poolpumpe_Schalter on, set Pool_FB_02 off, set Pool_FB_03 off, set Pool_FB_0ff on) DOELSEIF ([Pool_FB_02] eq "on") (setstate Poolpumpe_Schalter on, set Pool_FB_01 off, set Pool_FB_03 off, set Pool_FB_0ff on) DOELSEIF ([Pool_FB_03] eq "on") (setstate Poolpumpe_Schalter on, set Pool_FB_01 off, set Pool_FB_02 off, set Pool_FB_0ff on) DOELSEIF ([Pool_FB_Off] eq "off") (setstate Poolpumpe_Schalter off, setstate Pool_FB_01 off, setstate Pool_FB_02 off, setstate Pool_03_0ff off) DOELSE ()
   MODEL      FHEM
   NAME       Poolpumpe_Modus_DOIF
   NR         345
   NTFY_ORDER 50-Poolpumpe_Modus_DOIF
   STATE      cmd_5
   TYPE       DOIF
   READINGS:
     2018-07-29 09:26:53   Device          Pool_FB_01
     2018-07-29 09:26:53   cmd             5
     2018-07-29 09:26:53   cmd_event       Pool_FB_01
     2018-07-29 09:26:53   cmd_nr          5
     2018-07-29 09:26:53   e_Pool_FB_01_STATE off
     2018-07-29 09:26:53   state           cmd_5
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          InternalDoIf($hash,'Pool_FB_01','STATE') eq "on"
     1          InternalDoIf($hash,'Pool_FB_02','STATE') eq "on"
     2          InternalDoIf($hash,'Pool_FB_03','STATE') eq "on"
     3          InternalDoIf($hash,'Pool_FB_Off','STATE') eq "off"
   devices:
     0           Pool_FB_01
     1           Pool_FB_02
     2           Pool_FB_03
     3           Pool_FB_Off
     all         Pool_FB_01 Pool_FB_02 Pool_FB_03 Pool_FB_Off
   do:
     0:
       0          setstate Poolpumpe_Schalter on, set Pool_FB_02 off, set Pool_FB_03 off, set Pool_FB_0ff on
     1:
       0          setstate Poolpumpe_Schalter on, set Pool_FB_01 off, set Pool_FB_03 off, set Pool_FB_0ff on
     2:
       0          setstate Poolpumpe_Schalter on, set Pool_FB_01 off, set Pool_FB_02 off, set Pool_FB_0ff on
     3:
       0          setstate Poolpumpe_Schalter off, setstate Pool_FB_01 off, setstate Pool_FB_02 off, setstate Pool_03_0ff off
     4:
       0         
   helper:
     event      off
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Pool_FB_01
     timerevent off
     triggerDev Pool_FB_01
     DOIF_eventas:
       cmd_nr: 5
       cmd: 5
       cmd_event: Pool_FB_01
       state: cmd_5
     timerevents:
       off
     timereventsState:
       state: off
     triggerEvents:
       off
     triggerEventsState:
       state: off
   internals:
     0           Pool_FB_01:STATE
     1           Pool_FB_02:STATE
     2           Pool_FB_03:STATE
     3           Pool_FB_Off:STATE
     all         Pool_FB_01:STATE Pool_FB_02:STATE Pool_FB_03:STATE Pool_FB_Off:STATE
   itimer:
   perlblock:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Garten


An dem liegt es hoffentlich nicht.

Gruß
Micha
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Ellert

[Poolpumpe_Schalter] bezieht sich auf das Internal STATE, das Reading state fragst Du mit [Poolpumpe_Schalter:state] ab. Die Bedingzng muss nicht doppelt geklammert werden.

mfeske

und dann sollte es funktionieren ? oder ist das nur eine syntax sache ?
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Ellert

Zitat von: mfeske am 29 Juli 2018, 19:56:29
und dann sollte es funktionieren ? oder ist das nur eine syntax sache ?

So wohl, als auch, Du könntest es probieren.

Damian

#4
Angaben  der Art:

[9:00 -17:00] and [+:15]

triggern den ganzen Tag lang. Das kann man neuerdings eleganter lösen mit https://fhem.de/commandref_DE.html#DOIF_Intervall-Timer

hier also:

[09:00-17:00,+:15]


Außerhalb des Zeitintervalls wird nicht getriggert - das spart Ressourcen.



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

mfeske

mein neuer Versuch sieht jetzt also so aus:
[Poolpumpe_Schalter:"on"] (set Poolpumpe on) DOELSEIF ([9:00 -17:00,+:15] and [Poolpumpe_Schalter:"intervall"] (set Poolpumpe on-for-timer 300, define Poolpumpe_Schalter_off at +00:05:00 set Poolpumpe off, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF [Poolpumpe_Schalter:"countdown"] (set Poolpumpe on-for-timer 7200, define Poolpumpe_Schalter_off at +02:00:00 set Poolpumpe_Schalter intervall, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF [Poolpumpe_Schalter:"off"] (set Poolpumpe off)
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Otto123

Hi,

ist das nicht doppelt gemoppelt?
set Poolpumpe on-for-timer 300, define Poolpumpe_Schalter_off at +00:05:00 set Poolpumpe offwenn der Schalter selbst on-for-timer kann, ist das doch Zuverlässiger als eine Reißleine von FHEM.

Und wenn schon eine "Reißleine" würde ich sie im DOIF mit Waittimer machen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ellert

Ich gehe davon aus, dass der Zeittrigger und der Eventtrigger nicht gleichzeitig wahr werden, für
[9:00 -17:00,+:15] and [Poolpumpe_Schalter:"intervall"]

Otto123

#8
Edit:
Das war vor allem fast schon mal richtig?
[Poolpumpe_Schalter:state] eq "intervall"

Mal außerhalb vom DOIF gefragt: Hast Du mit dem Intervall (8 mal 4 mal 5min macht in Summe 2,5h Pumpe an)  gute Erfahrungen für den Pool? Ich habe meine früh und nachmittag jeweils für 2 Stunden an. Das war aus dem Bauch und geht irgendwie.
Bei 5 min hätte ich Bedenken, dass die Masse überhaupt in Schwung kommt?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ellert

Zitat von: Otto123 am 31 Juli 2018, 16:32:35
Das war vor allem schon mal richtig?
[Poolpumpe_Schalter] eq "intervall"

Mal außerhalb vom DOIF gefragt: Hast Du mit dem Intervall (8 mal 4 mal 5min macht in Summe 2,5h Pumpe an)  gute Erfahrungen für den Pool? Ich habe meine früh und nachmittag jeweils für 2 Stunden an. Das war aus dem Bauch und geht irgendwie.
Bei 5 min hätte ich Bedenken, dass die Masse überhaupt in Schwung kommt?

Gruß Otto

STATE und state haben  unterschiedliche Werte im Startpost, daher mein Hinweis https://forum.fhem.de/index.php/topic,89753.msg822498.html#msg822498

Ellert

Zitat von: Ellert am 31 Juli 2018, 16:27:01
Ich gehe davon aus, dass der Zeittrigger und der Eventtrigger nicht gleichzeitig wahr werden, für
[9:00 -17:00,+:15] and [Poolpumpe_Schalter:"intervall"]

Ich muss das präzisieren:
Das Zeitinterval ist in der Zeitspanne wahr und triggert alle 15 Minuten, die gesamte Bedingung bleibt unwahr, da [Poolpumpe_Schalter:"intervall"] nur zum Event wahr ist.
Die Bedingung wird nur wahr, wenn in der Zeitspanne Poolpumpe_Schalter das Event "intervall" liefert, unabhängig von Intervalltimer.

mfeske

Ihr vewirrt mich :-( Was ich festgestellt habe mit
[Poolpumpe_Schalter:"on"] (set Poolpumpe on) DOELSEIF ([9:00 -17:00,+:15] and [Poolpumpe_Schalter:"intervall"] (set Poolpumpe on-for-timer 300, define Poolpumpe_Schalter_off at +00:05:00 set Poolpumpe off, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF [Poolpumpe_Schalter:"countdown"] (set Poolpumpe on-for-timer 7200, define Poolpumpe_Schalter_off at +02:00:00 set Poolpumpe_Schalter intervall, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF [Poolpumpe_Schalter:"off"] (set Poolpumpe off)

geht gar nichts mehr :-(

ich bin jetzt erstmal zurück bei
([Poolpumpe_Schalter] eq "on") (set Poolpumpe on) DOELSEIF ([9:00 -17:00] and [+:15] and ([Poolpumpe_Schalter] eq "intervall")) (set Poolpumpe on-for-timer 300, define Poolpumpe_Schalter_off at +00:05:00 set Poolpumpe off, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF (([Poolpumpe_Schalter] eq "countdown")) (set Poolpumpe on-for-timer 7200, define Poolpumpe_Schalter_off at +02:00:00 set Poolpumpe_Schalter intervall, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF ([Poolpumpe_Schalter] eq "off") (set Poolpumpe off)

damit on / off und countdown funktionieren
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Damian

[9:00 -17:00,+:15] and [Poolpumpe_Schalter:"intervall"]

So macht der Intervalltrigger alle 15 Minuten keinen Sinn, denn Zeittrigger und Ereignistrigger können niemals zum gleichen Zeitpunkt wahr sein.

Daher macht die Sache nur mit einem Reading Sinn:

[9:00 -17:00,+:15] and [Poolpumpe_Schalter] eq "intervall"
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mfeske

Hallo Damian,

also:
([9:00 -17:00,+:15] and [Poolpumpe_Schalter] eq "intervall) (set Poolpumpe on-for-timer 300, define Poolpumpe_Schalter_off at +00:05:00 set Poolpumpe off, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF (([Poolpumpe_Schalter] eq "countdown")) (set Poolpumpe on-for-timer 7200, define Poolpumpe_Schalter_off at +02:00:00 set Poolpumpe_Schalter intervall, attr Poolpumpe_Schalter_off room Garten, attr Poolpumpe_Schalter_off icon hourglass) DOELSEIF ([Poolpumpe_Schalter] eq "off") (set Poolpumpe off)

Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Otto123

Moin,

in Antwort #2 stand dazu aber schon die Beschreibung des Problems deines Unterschiedes mit STATE und state.

Aus meiner Sicht wird das nichts: [Poolpumpe_Schalter] es muss so heissen [Poolpumpe_Schalter:state]

Warum verwirren wir Dich? Unklare Fragen?
Aber nochmal meine Frage: Warum machst Du on-for-timer und schickst ein at hinterher, welches das Gleiche tut?
(set Poolpumpe on-for-timer 300) bzw (set Poolpumpe on-for-timer 7200) reicht doch völlig!?
([9:00 -17:00,+:15] and [Poolpumpe_Schalter:state] eq "intervall) (set Poolpumpe on-for-timer 300) DOELSEIF ([Poolpumpe_Schalter:state] eq "countdown") (set Poolpumpe on-for-timer 7200) DOELSEIF ([Poolpumpe_Schalter:state] eq "off") (set Poolpumpe off)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz