Moin Moin,
ich habe das folgende DOIF, welches meinen STELLMOTOR überwacht und bei falschen Stati das DOIF, welches den STELLMOTOR steuert, resettet:
Internals:
DEF ([EG.HWR.Fussbodenmischer:position] < 0)
(set DI_MischerCommands disable) ## CMD 1.1
(set EG.HWR.Fussbodenmischer calibrate) ## CMD 1.2
(set EG.HWR.Fussbodenmischer reset) ## CMD 1.3
(set EG.HWR.Fussbodenmischer 35) ## CMD 1.4
(set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - negative Position') ## CMD 1.5
(set DI_MischerCommands initialize) ## CMD 1.6
DOELSEIF ([EG.Heizung.Mischer.Vorlauf] > 45)
(set DI_MischerCommands disable) ## CMD 2.1
(set EG.HWR.Fussbodenmischer calibrate) ## CMD 2.2
(set EG.HWR.Fussbodenmischer reset) ## CMD 2.3
(set EG.HWR.Fussbodenmischer 35) ## CMD 2.4
(set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - zu hohe Vorlauftemperatur') ## CMD 2.5
(set DI_MischerCommands initialize) ## CMD 2.6
DOELSEIF ([EG.HWR.Fussbodenmischer:position] > 0)
(set DI_MischerCommands disable) ## CMD 3.1
(set EG.HWR.Fussbodenmischer calibrate) ## CMD 3.2
(set EG.HWR.Fussbodenmischer reset) ## CMD 3.3
(set EG.HWR.Fussbodenmischer 35) ## CMD 3.4
(set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - Position groesser 100') ## CMD 3.5
(set DI_MischerCommands initialize) ## CMD 3.6
DOELSE
## CMD 4
NAME DI_MischerFalsePosAlarm
NR 1124
NTFY_ORDER 50-DI_MischerFalsePosAlarm
STATE cmd_4
TYPE DOIF
Readings:
2017-03-04 13:42:32 Device EG.Heizung.Mischer.Vorlauf
2017-03-04 13:40:05 cmd 4
2017-03-04 13:40:05 cmd_event EG.Heizung.Mischer.Vorlauf
2017-03-04 13:40:05 cmd_nr 4
2017-03-04 13:39:59 e_EG.HWR.Fussbodenmischer_position 39
2017-03-04 13:42:32 e_EG.Heizung.Mischer.Vorlauf_STATE 34.3°C
2017-03-04 13:40:05 state cmd_4
2017-03-04 13:40:05 wait_timer no timer
Condition:
0 ReadingValDoIf($hash,'EG.HWR.Fussbodenmischer','position') < 0
1 InternalDoIf($hash,'EG.Heizung.Mischer.Vorlauf','STATE') > 45
2 ReadingValDoIf($hash,'EG.HWR.Fussbodenmischer','position') > 0
Devices:
0 EG.HWR.Fussbodenmischer
1 EG.Heizung.Mischer.Vorlauf
2 EG.HWR.Fussbodenmischer
all EG.HWR.Fussbodenmischer EG.Heizung.Mischer.Vorlauf
Do:
0:
0 set DI_MischerCommands disable
1 set EG.HWR.Fussbodenmischer calibrate
2 set EG.HWR.Fussbodenmischer reset
3 set EG.HWR.Fussbodenmischer 35
4 set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - negative Position'
5 set DI_MischerCommands initialize
1:
0 set DI_MischerCommands disable
1 set EG.HWR.Fussbodenmischer calibrate
2 set EG.HWR.Fussbodenmischer reset
3 set EG.HWR.Fussbodenmischer 35
4 set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - zu hohe Vorlauftemperatur'
5 set DI_MischerCommands initialize
2:
0 set DI_MischerCommands disable
1 set EG.HWR.Fussbodenmischer calibrate
2 set EG.HWR.Fussbodenmischer reset
3 set EG.HWR.Fussbodenmischer 35
4 set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - Position groesser 100'
5 set DI_MischerCommands initialize
3:
0
Helper:
event temperature: 34.3125,alarm: 1,temperature.avg: 33.217
globalinit 1
last_timer 0
sleepdevice EG.HWR.Fussbodenmischer
sleepsubtimer 1
sleeptimer -1
timerdev EG.Heizung.Mischer.Vorlauf
timerevent temperature: 34.3125,alarm: 1,temperature.avg: 33.217
triggerDev EG.Heizung.Mischer.Vorlauf
timerevents:
temperature: 34.3125
alarm: 1
temperature.avg: 33.217
timereventsState:
temperature: 34.3125
alarm: 1
temperature.avg: 33.217
triggerEvents:
temperature: 34.3125
alarm: 1
temperature.avg: 33.217
triggerEventsState:
temperature: 34.3125
alarm: 1
temperature.avg: 33.217
Internals:
1 EG.Heizung.Mischer.Vorlauf:STATE
all EG.Heizung.Mischer.Vorlauf:STATE
Itimer:
Readings:
0 EG.HWR.Fussbodenmischer:position
2 EG.HWR.Fussbodenmischer:position
all EG.HWR.Fussbodenmischer:position
Regexp:
0:
1:
2:
All:
State:
Trigger:
Attributes:
cmdpause 900
room EG.HWR
wait 1,180,2,180,2,5:1,180,2,180,2,5:1,180,2,180,2,5:0
Dabei ist DI_MischerCommands das DOIF, welches den Mischerzustand steuert.
Dieses DOIF hat drei Bedingungen für verschiedene Fehler. Die Befehle sind für jeden Fall identisch, nur die Pushmessage verschieden.
Gibt es eine Möglichkeit, dies "eleganter" zu realisieren? Was könnte ich lesen und ausprobieren?
Danke, -MN
Du könntest die Befehle mit nachgelagertem IF sparen, ob das eleganter ist?
(Bedingung 1 or Bedingung 2)
(
Befehle,
IF ([EG.HWR.Fussbodenmischer:position] < 0) (message a),
IF ([EG.Heizung.Mischer.Vorlauf] > 45) (message b)
)
DOELSEIF ([EG.HWR.Fussbodenmischer:position] > 0)
Danke, Ellert,
ich finde das eleganter, da der Befehlsblock nur einmal vorhanden ist und nur einmal korrigiert/optimiert werden muss.
Danke, -MN
Oder erst die Meldung schicken und dann reseten:
([EG.HWR.Fussbodenmischer:position] < 0)
(set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - negative Position')(set $SELF cmd_4) ## CMD 1.5
DOELSEIF ([EG.Heizung.Mischer.Vorlauf] > 45)
(set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - zu hohe Vorlauftemperatur')(set $SELF cmd_4) ## CMD 2.5
DOELSEIF ([EG.HWR.Fussbodenmischer:position] > 0)
(set PBNotification message 'Intelligentes Wohnen' | 'ALARM: Problem mit FB-Mischer - Position groesser 100')(set $SELF cmd_4) ## CMD 3.5
DOELSEIF (0)
(set DI_MischerCommands disable) ## CMD 3.1
(set EG.HWR.Fussbodenmischer calibrate) ## CMD 3.2
(set EG.HWR.Fussbodenmischer reset) ## CMD 3.3
(set EG.HWR.Fussbodenmischer 35) ## CMD 3.4
(set DI_MischerCommands initialize) ## CMD 3.6
DOELSE
mit angepassten wait.
Nebenbei: ist die dritte Bedingung mit > 0 richtig? Nicht > 100?