[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert

Begonnen von holle75, 03 April 2017, 17:43:09

Vorheriges Thema - Nächstes Thema

holle75

#15
Moinsen Per, hatte mal wieder ein Stündchen.

....


#------------------------- Beregnungs Logik -----------------------------#
define BeregnungNachSonneDOIF DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungNachSonneDOIF group Beregnung
attr BeregnungNachSonneDOIF room Beregnung

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
)


define BeregnungTriggerDOIF DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungNachSonneDOIF] eq "cmd_1")) \
(IF ([Beregner_Zitronen] != "auto") (set $SELF cmd_2)) (set BeregnungHelperDummy Beregner_Zitronen) (set BeregnungHelperDummy Beregner_Zitronen, set $SELF cmd_2) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioUnten] != "auto") (set $SELF cmd_3)) (set BeregnungHelperDummy Beregner_CampeggioUnten) (set BeregnungHelperDummy Beregner_CampeggioUnten, set $SELF cmd_3) \
DOELSEIF (0) \
(IF ([Beregner_Blauregen] != "auto") (set $SELF cmd_4)) (set BeregnungHelperDummy Beregner_Blauregen) (set BeregnungHelperDummy Beregner_Blauregen, set $SELF cmd_4) \
DOELSEIF (0) \
(IF ([Beregner_HinterKueche] != "auto") (set $SELF cmd_5)) (set BeregnungHelperDummy Beregner_HinterKueche) (set BeregnungHelperDummy Beregner_HinterKueche, set $SELF cmd_5) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioOben] != "auto") (set $SELF cmd_6)) (set BeregnungHelperDummy Beregner_CampeggioOben) (set BeregnungHelperDummy Beregner_CampeggioOben, set $SELF cmd_6) \
DOELSEIF (0) \
(IF ([Beregner_Waschhaus] != "auto") (set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)) (set BeregnungHelperDummy Beregner_Waschhaus) (set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungHelperDummy Beregner_Zitronen, set BeregnungHelperDummy Beregner_CampeggioUnten, set BeregnungHelperDummy Beregner_Blauregen, set BeregnungHelperDummy Beregner_HinterKueche, set BeregnungHelperDummy Beregner_CampeggioOben, set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)
attr BeregnungTriggerDOIF wait \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0
attr BeregnungTriggerDOIF cmdState \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
end,on,off| \
off


"BeregnungMappingDOIF"  die IF Überprüfung auf "auto" rausgenommen, da das schon in "BeregnungTriggerDOIF"  gemacht wird.

in "attr BeregnungTriggerDOIF cmdState" rumgespielt. Ich hoffe, ich habe das Prinzip jetzt richtig verstanden?

Noch eine Frage: In der alten Version hatte ich ja eine Neustart-Sicherung für "BeregnungNachSonneDOIF" eingebaut. Behält sich DOIF nach einem Neustart seinen cmd-status? Ansonsten würde, falls "BeregnungDurchlauf_AN_AUS_AUTO" auf "auto" steht, "BeregnungNachSonneDOIF" dann "BeregnungTriggerDOIF"  auslösen.
mhm, schwierig zu erklären.

... und "BeregnungTriggerDOIF" die Auslösung umgebaut. Vorher hat das die Idee von "BeregnungDurchlauf_AN_AUS_AUTO" nicht logisch umgesetzt. Diesen Dummy möchte ich irgendwann auf Auto setzen damit, erst am nächsten Tag, der ganze Kremsel dann entsprechend "BeregnungNachSonneDOIF" losläuft. Aber eben nicht nach Neustart oder beim nächsten Trigger.

Per

Zitat von: holle75 am 15 April 2017, 22:29:41"BeregnungMappingDOIF"  die IF Überprüfung auf "auto" rausgenommen, da das schon in "BeregnungTriggerDOIF"  gemacht wird.
Beim ok, aber falls zwischendurch der Status in "on" geändert wird, wird es dann ausgeschaltet.

Zitat von: holle75 am 15 April 2017, 22:29:41Behält sich DOIF nach einem Neustart seinen cmd-status?
Ja, inzwischen schon.

holle75

mmh, habs vor allem rausgeschmissen, weil ich es nicht ganz verstehe.

(IF ([Beregner_[$EVENT] eq "auto"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
) \
)


müßte es nicht

(IF ([$EVENT] eq "auto") \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
) \
)


heißen? Sonst wärs doch "Beregner_Beregner_Zitronen"? ..... und was wird ausgeschaltet wenn was auf "on" geht? Kompliziert.

Per

Zitat von: holle75 am 16 April 2017, 00:27:06müßte es nicht
Ja, muss es. Ich bin erstaunt, wieviele C&P-Fehler man früh um 3 machen kann :D

Zitat von: holle75 am 16 April 2017, 00:27:06..... und was wird ausgeschaltet wenn was auf "on" geht?
Ausgeschaltet wird was, wenn das aufrufende DOIF auf off geht. An nur bei on.
Der Trick ist, dass das "BeregnungMappingDOIF" den Status "on" hat, das "BeregnungTriggerDOIF" aufruft, dort dieser Status abgefragt wird und nach Ablauf der Zeit das Ganze mit "off" wiederholt wird.

Zitat von: holle75 am 16 April 2017, 00:27:06Kompliziert.
;D

holle75

#19
Zitat von: Per am 16 April 2017, 10:46:55
Ja, muss es. Ich bin erstaunt, wieviele C&P-Fehler man früh um 3 machen kann :D

es soll dir vergeben sein :)

Zitat von: Per am 16 April 2017, 10:46:55
Der Trick ist, dass das "BeregnungMappingDOIF" den Status "on" hat, das "BeregnungTriggerDOIF" aufruft, dort dieser Status abgefragt wird und nach Ablauf der Zeit das Ganze mit "off" wiederholt wird.

Jo, aber weil du meintest, dass

Zitat von: Per am 15 April 2017, 23:44:41
Beim ok, aber falls zwischendurch der Status in "on" geändert wird, wird es dann ausgeschaltet.

wenn man was auf on stellt wird was ausgeschaltet? Das kann ich noch nicht nachvollziehen. Oder anders gesagt, was könnte sich zwischendurch auf "on" ändern? Immer noch kompliziert ;) ... Vollschlauch. Oder ich habs immer noch nicht verstanden, wer was triggert

attr BeregnungTriggerDOIF cmdState \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
end,on,off| \
off


Das macht Sinn? weil anders als im "Original"

Guten (späten) Morgen!

Per

Zitat von: holle75 am 16 April 2017, 11:23:49Jo, aber weil du meintest, dass

wenn man was auf on stellt wird was ausgeschaltet? Das kann ich noch nicht nachvollziehen. Oder anders gesagt, was könnte sich zwischendurch auf "on" ändern?
Achso, das bezog sich auf die Dummys:
attr Beregnung_Zitronen webCmd auto:on:off


Zitat von: holle75 am 16 April 2017, 11:23:49
attr BeregnungTriggerDOIF cmdState \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
end,on,off| \
off


Das macht Sinn? weil anders als im "Original"
Probiers aus. Wichtig ist nur, dass zum Zeitpunkt der Ausführung des "BeregnungTriggerDOIF" die richtigen Status vorliegen. Falls nicht, entweder cmdState vom "Mapping" oder IF vom "Trigger" anpassen.

holle75

Zitat von: Per am 16 April 2017, 11:58:28
Achso, das bezog sich auf die Dummys:
attr Beregnung_Zitronen webCmd auto:on:off

Ah ok ....

Zitat von: Per am 16 April 2017, 11:58:28
Probiers aus.

Jo, werd ich. Wenn verstanden und ich all die Mechanik die da dran hängt dann nur noch 20x und nicht 200x malträtieren muß :D

Per

Kannst ja Dummys ansteuern. Die kosten nix, falls mal eins kaputt geht ;D

holle75

#23
das war ein schöner :D

Also jetzt mal

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([$EVENT] eq "auto") \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
) \
)


ausprobiert. Da wird nichts an oder ausgeschaltet.

Wenn ich manuell einen Beregner starte, sagt mir der Player "gestartet" ohne Variable.

und den Fehler

DOIF BeregnungMappingDOIF error: set  on: Please define on first

da fehlt der $DEVICE oder $EVENT

Scheint fhem hat die selben Verständnisprobleme wie ich :D .... woher kommt $DEVICE und $EVENT

wenn ich BeregnungDurchlauf_AN_AUS_AUTO auf "on" stelle bekomme ich das als events:

2017-04-16 13:50:45 dummy Beregner_CampeggioOben auto
2017-04-16 13:50:46 dummy Beregner_CampeggioUnten auto
2017-04-16 13:50:48 dummy Beregner_HinterKueche auto
2017-04-16 13:50:49 dummy Beregner_Waschhaus auto
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_nr: 1
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_seqnr: 1
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd: 1.1
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF skip
2017-04-16 13:50:53 dummy BeregnungHelperDummy Beregner_Zitronen
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_nr: 1
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_seqnr: 2
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd: 1.2
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF on
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF wait_timer: 16.04.2017 13:55:53 cmd_1_3 BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 13:50:53 dummy BeregnungDurchlauf_AN_AUS_AUTO on


bei "off":

2017-04-16 13:51:57 DOIF BeregnungTriggerDOIF wait_timer: no timer
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_Zitronen
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_CampeggioUnten
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_Blauregen
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_HinterKueche
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_CampeggioOben
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_Waschhaus
2017-04-16 13:51:58 SB_PLAYER SqueezeBoxPlayer_Raspi_2 talk Durchlauf Beregnung beendet
2017-04-16 13:51:58 SB_PLAYER SqueezeBoxPlayer_ZirkusOben talk Durchlauf Beregnung beendet
2017-04-16 13:51:58 DOIF BeregnungTriggerDOIF cmd_nr: 7
2017-04-16 13:51:58 DOIF BeregnungTriggerDOIF cmd: 7
2017-04-16 13:51:58 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 13:51:58 DOIF BeregnungTriggerDOIF    off
2017-04-16 13:51:58 dummy BeregnungDurchlauf_AN_AUS_AUTO off
2017-04-16 13:51:58 SB_PLAYER SqueezeBoxPlayer_NUC currentTitle: http://api.voicerss.org/?&src=Durchlauf+Beregnung+beendet.&hl=de-de&f=48khz_16bit_stereo


vom Gefühl scheint da schon einiges zu funktionieren ... außer dieser verflixten $DEVICE und $EVENT Geschichte. Wie gesagt Kompliziert :D

Per

Zitat von: holle75 am 16 April 2017, 13:58:18außer dieser verflixten $DEVICE und $EVENT Geschichte.
Lass mal die eckigen Klammern drum rum weg!

holle75

Ich habs mit und ohne Klammern probiert. 

ohne

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set $DEVICE:switch on, set SqueezeBoxPlayer.* talk $DEVICE:talktext gestartet) \
DOELSEIF (["Beregner_:off"]) (set $DEVICE:switch off, set SqueezeBoxPlayer.* talk $DEVICE:talktext beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ($EVENT eq "auto") \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set $EVENT:switch on, set SqueezeBoxPlayer.* talk $EVENT:talktext gestartet) \
ELSE \
(set $EVENT:switch off, set SqueezeBoxPlayer.* talk $EVENT:talktext beendet) \
) \
)


hängts mir fhem nach ein paar Minuten auf.


On/off funktioniert für die Beregner direkt (das lag übrigens an falschen Attr bei den Dummies - shame on me), aber unzuverlässig. Sprich mal ja, mal nicht (seltsam)

und (sehr) häufig sowas im fhem-log

2017.04.16 18:19:53 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at (eval 342) line 1.
2017.04.16 18:20:06 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at (eval 350) line 1.
2017.04.16 18:20:07 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at (eval 359) line 1.
2017.04.16 18:20:21 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at (eval 371) line 1.


BeregnungDurchlauf_AN_AUS_AUTO auf "on" verursacht das im Event-Monitor

2017-04-16 18:36:29 dummy Beregner_Blauregen off
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_nr: 1
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_seqnr: 1
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd: 1.1
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF skip
2017-04-16 18:40:03 dummy BeregnungHelperDummy Beregner_Zitronen
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_nr: 1
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_seqnr: 2
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd: 1.2
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF on
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF wait_timer: 16.04.2017 18:44:03 cmd_1_3 BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 18:40:03 dummy BeregnungDurchlauf_AN_AUS_AUTO on


schaltet aber keinen Beregner an.


DOIF.pm ist aktuell
fhem ist 5.7

daran sollte es nicht liegen?

Mmh, weiß jetzt gerade nicht wo ich ansetzen soll.


######################################## BEREGNUNG ############################################

define myTwilight Twilight
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#------------------------ Beregner Dummys ---------------------------#

define Beregner_Zitronen dummy
attr Beregner_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Zitronen group Beregnung
attr Beregner_Zitronen room Beregnung
attr Beregner_Zitronen webCmd auto:on:off
attr Beregner_Zitronen readingList talktext,switch
set Beregner_Zitronen talktext Beregnung Zitronen
set Beregner_Zitronen switch BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14

define Beregner_CampeggioOben dummy
attr Beregner_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_CampeggioOben group Beregnung
attr Beregner_CampeggioOben room Beregnung
attr Beregner_CampeggioOben webCmd auto:on:off
attr Beregner_CampeggioOben readingList talktext,switch
set Beregner_CampeggioOben talktext Beregnung Camping oben
set Beregner_CampeggioOben switch BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13

define Beregner_CampeggioUnten dummy
attr Beregner_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_CampeggioUnten group Beregnung
attr Beregner_CampeggioUnten room Beregnung
attr Beregner_CampeggioUnten webCmd auto:on:off
attr Beregner_CampeggioUnten readingList talktext,switch
set Beregner_CampeggioUnten talktext Beregnung Camping unten
set Beregner_CampeggioUnten switch BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_Blauregen dummy
attr Beregner_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Blauregen group Beregnung
attr Beregner_Blauregen room Beregnung
attr Beregner_Blauregen webCmd auto:on:off
attr Beregner_Blauregen readingList talktext,switch
set Beregner_Blauregen talktext Beregnung Blauregen
set Beregner_Blauregen switch BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17

define Beregner_HinterKueche dummy
attr Beregner_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_HinterKueche group Beregnung
attr Beregner_HinterKueche room Beregnung
attr Beregner_HinterKueche webCmd auto:on:off
attr Beregner_HinterKueche readingList talktext,switch
set Beregner_HinterKueche talktext Beregnung Hinter Kueche
set Beregner_HinterKueche switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15

define Beregner_Waschhaus dummy
attr Beregner_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Waschhaus group Beregnung
attr Beregner_Waschhaus room Beregnung
attr Beregner_Waschhaus webCmd auto:on:off
attr Beregner_Waschhaus readingList talktext,switch
set Beregner_Waschhaus talktext Beregnung Waschhaus
set Beregner_Waschhaus switch BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16

#------------------------ Einstellungs Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat group Beregnung
attr BeregnungStartmonat room Beregnung
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat group Beregnung
attr BeregnungEndmonat room Beregnung
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer group Beregnung
attr BeregnungStandarddauer room Beregnung
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation group Beregnung
attr BeregnungStartelevation room Beregnung
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungHelperDummy dummy
attr BeregnungHelperDummy group Beregnung
attr BeregnungHelperDummy room Beregnung

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO group Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO room Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnungs Logik -----------------------------#

define BeregnungNachSonneDOIF DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungNachSonneDOIF group Beregnung
attr BeregnungNachSonneDOIF room Beregnung

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([$EVENT] eq "auto") \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
) \
)
attr BeregnungMappingDOIF group Beregnung
attr BeregnungMappingDOIF room Beregnung


define BeregnungTriggerDOIF DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungNachSonneDOIF] eq "cmd_1")) \
(IF ([Beregner_Zitronen] != "auto") (set $SELF cmd_2)) (set BeregnungHelperDummy Beregner_Zitronen) (set BeregnungHelperDummy Beregner_Zitronen, set $SELF cmd_2) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioUnten] != "auto") (set $SELF cmd_3)) (set BeregnungHelperDummy Beregner_CampeggioUnten) (set BeregnungHelperDummy Beregner_CampeggioUnten, set $SELF cmd_3) \
DOELSEIF (0) \
(IF ([Beregner_Blauregen] != "auto") (set $SELF cmd_4)) (set BeregnungHelperDummy Beregner_Blauregen) (set BeregnungHelperDummy Beregner_Blauregen, set $SELF cmd_4) \
DOELSEIF (0) \
(IF ([Beregner_HinterKueche] != "auto") (set $SELF cmd_5)) (set BeregnungHelperDummy Beregner_HinterKueche) (set BeregnungHelperDummy Beregner_HinterKueche, set $SELF cmd_5) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioOben] != "auto") (set $SELF cmd_6)) (set BeregnungHelperDummy Beregner_CampeggioOben) (set BeregnungHelperDummy Beregner_CampeggioOben, set $SELF cmd_6) \
DOELSEIF (0) \
(IF ([Beregner_Waschhaus] != "auto") (set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)) (set BeregnungHelperDummy Beregner_Waschhaus) (set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungHelperDummy Beregner_Zitronen, set BeregnungHelperDummy Beregner_CampeggioUnten, set BeregnungHelperDummy Beregner_Blauregen, set BeregnungHelperDummy Beregner_HinterKueche, set BeregnungHelperDummy Beregner_CampeggioOben, set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)
attr BeregnungTriggerDOIF wait \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0
attr BeregnungTriggerDOIF cmdState \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
end,on,off| \
off
attr BeregnungTriggerDOIF group Beregnung
attr BeregnungTriggerDOIF room Beregnung


Per

Habe es mal mit Dummies zum Laufen gebracht, mache morgen mal nen Diff (sonst schleichen sich wieder viele Fehler rein ;)).
Nur die
IF([xxx] ne "auto")(set $SELF cmd_x)
tuns nicht, teste ich gerade noch.

Per

Habe aufs Diff verzichtet, habe es doch zu sehr umgeschrieben:

######################################## BEREGNUNG ############################################

define myTwilight Twilight
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#------------------------ Beregner Dummys ---------------------------#

define BEREGNUNG_SCHALTER_01_Zitronen_12_7_MEQ0064131_14 dummy
define BEREGNUNG_SCHALTER_05_CampeggioOben_12_7_MEQ0064131_13 dummy
define BEREGNUNG_SCHALTER_02_CampeggioUnten_12_7_MEQ0064131_18 dummy
define BEREGNUNG_SCHALTER_03_Blauregen_12_7_MEQ0064131_17 dummy
define BEREGNUNG_SCHALTER_04_HinterKueche_12_7_MEQ0064131_15 dummy
define BEREGNUNG_SCHALTER_06_Waschhaus_12_7_MEQ0064131_16 dummy

define Beregner_01_Zitronen dummy
attr Beregner_01_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_01_Zitronen webCmd auto:on:off
attr Beregner_01_Zitronen readingList talktext,switch
set Beregner_01_Zitronen talktext Beregnung Zitronen
set Beregner_01_Zitronen switch BEREGNUNG_SCHALTER_01_Zitronen_12_7_MEQ0064131_14

define Beregner_05_CampeggioOben dummy
attr Beregner_05_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_05_CampeggioOben webCmd auto:on:off
attr Beregner_05_CampeggioOben readingList talktext,switch
set Beregner_05_CampeggioOben talktext Beregnung Camping oben
set Beregner_05_CampeggioOben switch BEREGNUNG_SCHALTER_05_CampeggioOben_12_7_MEQ0064131_13

define Beregner_02_CampeggioUnten dummy
attr Beregner_02_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_02_CampeggioUnten webCmd auto:on:off
attr Beregner_02_CampeggioUnten readingList talktext,switch
set Beregner_02_CampeggioUnten talktext Beregnung Camping unten
set Beregner_02_CampeggioUnten switch BEREGNUNG_SCHALTER_02_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_03_Blauregen dummy
attr Beregner_03_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_03_Blauregen webCmd auto:on:off
attr Beregner_03_Blauregen readingList talktext,switch
set Beregner_03_Blauregen talktext Beregnung Blauregen
set Beregner_03_Blauregen switch BEREGNUNG_SCHALTER_03_Blauregen_12_7_MEQ0064131_17

define Beregner_04_HinterKueche dummy
attr Beregner_04_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_04_HinterKueche webCmd auto:on:off
attr Beregner_04_HinterKueche readingList talktext,switch
set Beregner_04_HinterKueche talktext Beregnung Hinter Kueche
set Beregner_04_HinterKueche switch BEREGNUNG_SCHALTER_04_HinterKueche_12_7_MEQ0064131_15

define Beregner_06_Waschhaus dummy
attr Beregner_06_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_06_Waschhaus webCmd auto:on:off
attr Beregner_06_Waschhaus readingList talktext,switch
set Beregner_06_Waschhaus talktext Beregnung Waschhaus
set Beregner_06_Waschhaus switch BEREGNUNG_SCHALTER_06_Waschhaus_12_7_MEQ0064131_16

#------------------------ Einstellungs Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungDummy_Helper dummy

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnungs Logik -----------------------------#

define BeregnungDOIF_NachSonne DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"])
(set [$DEVICE:switch] on)
DOELSEIF (["Beregner_:off"])
(set [$DEVICE:switch] off)
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] == 2) \
(set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])

attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|6*[BeregnungStandarddauer]|0|0

defmod BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1"))
()
()
(set $SELF cmd_2)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_01_Zitronen)
(set BeregnungDummy_Helper Beregner_01_Zitronen)
(set $SELF cmd_3)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten)
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten)
(set $SELF cmd_4)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_03_Blauregen)
(set BeregnungDummy_Helper Beregner_03_Blauregen)
(set $SELF cmd_5)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_04_HinterKueche)
(set BeregnungDummy_Helper Beregner_04_HinterKueche)
(set $SELF cmd_6)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_05_CampeggioOben)
(set BeregnungDummy_Helper Beregner_05_CampeggioOben)
(set $SELF cmd_7)
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_06_Waschhaus)
(set BeregnungDummy_Helper Beregner_06_Waschhaus)
()
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off")
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus)

attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0

attr .*Beregnung.* group Beregnung
attr .*BEREGNUNG.* group Beregnung
attr .*Beregner.* group Beregnung
attr .*BEREGNUNG.* room Beregnung
attr .*Beregnung.* room Beregnung
attr .*Beregner.* room Beregnung


Die Sprachausgabe muss wieder rein, die habe ich komplett entfernt, da bei mir nicht vorhanden (ok, ich hätte nen Dummy draus machen können, beim nächsten Mal!).
Die Variablennamen habe ich auch gedreht, sieht im Browser besser aus. Ansonsten habe ich den Code vereinfacht, ich hoffe, du findest dich jetzt besser rein, obwohl manches etwas komisch aussieht (z.B. zwei leere Befehlsgruppen im ersten Zweig von BeregnungDOIF_Trigger), aber das ist dem Call-Konzept von set $SELF cmd_x geschuldet.

holle75

#28
Hello Per, top .... bin ab morgen für 1-2 Wochen unterwegs. Danach werde ich deinen Code am lebenden Objekt probieren und mich natürlich melden.

Danke!

H.

ps. Hauptsache die IF Geschichte ist raus !!!!!!! :D

holle75

Hallo Per, gerade ein bißchen Zeit für Trockenübungen.

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"]) \
(set [$DEVICE:switch] on) \
DOELSEIF (["Beregner_:off"]) \
(set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] == 2) \
(set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])


müßte es nicht

DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "1")

sein? Zum einen Sequenz 1 und eq und Anführungszeichen....... seqnr als numerischer Wert wirft bei mir Fehler im fhem-log  (noch nicht probiert, aber in einem anderen DOIF). Bei dir nicht?

Warum 2? Müßte doch die erste Klammer von BeregnungDOIF_Trigger auf on gehen und die zweite auf off?

-------------------------------------------

defmod BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1"))


wieso defmod? gibts da was was noch nicht existiert?

------------------------------------------------------

attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0

und
attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|60*[BeregnungStandarddauer]|0|0

erschließt sich mir auf den ersten Blick nicht :D .... also versteh ich das Zusammenspiel nicht.... resp. was ist der Vorteil in BeregnungDOIF_Trigger auf den cmdstate von BeregnungDOIF_Mapping zuzugreifen und nicht direkt anzugeben? Was würde cmdState [$self] ergeben?

Müßte hier dann nicht auch das 60*[BeregnungStandarddauer] an 4ter Stelle anstatt 3ter sein?

Kompliziert! ... was du dir da ausgedacht hast :)