FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Morgennebel am 04 März 2017, 13:45:25

Titel: Optimierung eines DOIFs mit 3 Fällen und beinahe identischen Kommandos
Beitrag von: Morgennebel am 04 März 2017, 13:45:25
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
Titel: Antw:Optimierung eines DOIFs mit 3 Fällen und beinahe identischen Kommandos
Beitrag von: Ellert am 04 März 2017, 19:53:19
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)
Titel: Antw:Optimierung eines DOIFs mit 3 Fällen und beinahe identischen Kommandos
Beitrag von: Morgennebel am 05 März 2017, 11:19:44
Danke, Ellert,


ich finde das eleganter, da der Befehlsblock nur einmal vorhanden ist und nur einmal korrigiert/optimiert werden muss.

Danke, -MN
Titel: Antw:Optimierung eines DOIFs mit 3 Fällen und beinahe identischen Kommandos
Beitrag von: Per am 09 März 2017, 22:22:41
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?