Hallo alle,
ich habe einen Homematic 4-fach Aktor für meine Bewässerungs-Steuerung. Ein Kanal schaltet die Pumpe an und ab, dieser wird aber kaum explizit angesprochen, da mit den beiden Beregnungs-Kreisen auf den anderen Kanälen ein Notify für die Pumpe verknüpft ist. Das funktioniert manuell auch alles.
Nun wollte ich aber ein Kommando bauen, das erst für 30 min den ersten, dann für 30 min den zweiten Kreis beregnet. Das schaut erstmal so aus:
define AllesBeregnen dummy
attr AllesBeregnen webCmd on:off
define AllesBeregnenNotify notify AllesBeregnen:on set CUL_HM_HM_LC_SW4_DR_29154A_Sw_03 on-for-timer 1800;; sleep 1820;; set CUL_HM_HM_LC_SW4_DR_29154A_Sw_04 on-for-timer 1800;; sleep 1830;; set AllesBeregnen off
die Sleeps sind etwas länger, um sicherzustellen dass das Pumpen-Notify (off am Ende des ersten Kreises) schon durch ist, wenn der zweite Kreis anfängt und die Pumpe per notify wieder einschaltet.
Das ganze scheint aber ab und zu schiefzugehen, ich bin mir ehrlich gesagt auch nciht so recht sicher woran es liegt. Eventuell ein Command-Überlauf? Hab da mit dem MAX Heizungssystem auch schon meinen Kampf gehabt, wenn zu viele Befehle die Credits aufbrauchen.
Daher wollte ich erstmal grundsätzlich die Frage stellen, ob die Vorgehensweise überhaupt sinnvoll und angebracht ist oder ob es viel einfachere /elegantere Lösungen gäbe?
Danke!!
N/A
Hallo N/A,
zuerst Mal:
Es wird einfacher zu lesen, wenn du code Tags verwendest.
Nun zu deiner Aufgabenstellung:
Ich würde ein DOIF Verwenden
define di_AllesBeregnen DOIF (
[AllesBeregnen:?on]
)(
set CUL_HM_HM_LC_SW4_DR_29154A_Sw_03 on-for-timer 1800
)DOELSEIF(
[CUL_HM_HM_LC_SW4_DR_29154A_Sw_03:?off] and [AllesBeregnen:on]
)(
set CUL_HM_HM_LC_SW4_DR_29154A_Sw_04 on-for-timer 1800
)DOELSEIF(
[CUL_HM_HM_LC_SW4_DR_29154A_Sw_04:?off] and [AllesBeregnen:on]
)(
set AllesBeregnen:off
)
attr di_AllesBeregnen wait 0:20:30
Einer der großen Vorteile dabei ist, dass du siehst, wo dein DOIF grade steht und du könntest die Zeit von on-for-timer auch in den Dummy schreiben um so flexibler zu sein.
Grüße
igami
Warum machst du das mit sleep ?
Ich anhabe das mit einem einfachen at gelöst
* { if ( Value ("Regen") eq "an") {fhem ("set Regner3 on-for-timer 1200; define R2 at +00:21 set Regner2 on-for-timer 1200; define R3 at +00:42 set Regner1 gon-for-timer 1200")}}
Bei mir regnet es immer zu der Zeit
Zitat von: Paul am 21 Juli 2015, 22:21:08
Warum machst du das mit sleep ?
Ich anhabe das mit einem einfachen at gelöst
* { if ( Value ("Regen") eq "an") {fhem ("set Regner3 on-for-timer 1200; define R2 at +00:21 set Regner2 on-for-timer 1200; define R3 at +00:42 set Regner1 gon-for-timer 1200")}}
Bei mir regnet es immer zu der Zeit
oder neuerdings:
define Beregnung DOIF ([Regen:?an])
(set Regner3 on-for-timer 1200)
(set Regner2 on-for-timer 1200)
(set Regner1 gon-for-timer 1200)
attr Beregnung do always
attr Beregnung wait 0,1200,1200
siehe http://forum.fhem.de/index.php/topic,39070.msg312029.html#msg312029
Gruß
Damian