Optimierung eines DOIFs mit 3 Fällen und beinahe identischen Kommandos

Begonnen von Morgennebel, 04 März 2017, 13:45:25

Vorheriges Thema - Nächstes Thema

Morgennebel

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
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Ellert

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)

Morgennebel

Danke, Ellert,


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

Danke, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Per

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?