DOIF soll zwei Sensoren auswerten - nur wie?

Begonnen von The Grue, 20 Oktober 2021, 21:19:54

Vorheriges Thema - Nächstes Thema

The Grue

Servus!

Dank Hilfe aus dem Forum habe ich ein DOIF, das eine Heizung abschaltet, wenn eine Tür geöffnet wird und in den vorherigen Zustand zurücksetzt, wenn die Tür geschlossen wird:

defmod Livingroom.ThermostatControl DOIF ([Patio.Door.Sensor:"^alarm:.AccessControl:.Window/Door.is.open$"])  \
(setreading Livingroom.ThermostatControl OldMode  [Livingroom.Thermostat:state], set Livingroom.Thermostat tmOff) \
DOELSEIF ([Patio.Door.Sensor:"^alarm:.AccessControl:.Window/Door.is.closed$"])  \
(set Livingroom.Thermostat [Livingroom.ThermostatControl:OldMode]) \
DOELSE ()


Jetzt habe ich aber folgenden Fall: Der Raum hat zwei Türen. Die Heizung soll ausgehen, wenn mindestens eine Tür offen ist und wieder in den vorherigen Zustand, wenn beide Türen zu sind. Das mit einem DOIF hinzubekommen habe ich nicht geschafft. Könnt Ihr mir da bitte zeigen, wie es geht?

Vielen Dank,
Markus

Damian

Zitat von: The Grue am 20 Oktober 2021, 21:19:54
Servus!

Dank Hilfe aus dem Forum habe ich ein DOIF, das eine Heizung abschaltet, wenn eine Tür geöffnet wird und in den vorherigen Zustand zurücksetzt, wenn die Tür geschlossen wird:

defmod Livingroom.ThermostatControl DOIF ([Patio.Door.Sensor:"^alarm:.AccessControl:.Window/Door.is.open$"])  \
(setreading Livingroom.ThermostatControl OldMode  [Livingroom.Thermostat:state], set Livingroom.Thermostat tmOff) \
DOELSEIF ([Patio.Door.Sensor:"^alarm:.AccessControl:.Window/Door.is.closed$"])  \
(set Livingroom.Thermostat [Livingroom.ThermostatControl:OldMode]) \
DOELSE ()


Jetzt habe ich aber folgenden Fall: Der Raum hat zwei Türen. Die Heizung soll ausgehen, wenn mindestens eine Tür offen ist und wieder in den vorherigen Zustand, wenn beide Türen zu sind. Das mit einem DOIF hinzubekommen habe ich nicht geschafft. Könnt Ihr mir da bitte zeigen, wie es geht?

Vielen Dank,
Markus

Wenn es zwei bestimmte Türen sind, dann gibt die beiden einfach an:

DOIF ([tür1] eq "opened" or [tür2] eq "opend") (<sichere zustand und setze neuen)
DOELSE (<wiederherstelle alten zustand>)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

The Grue

Danke, sieht einfach aus...

Ich frage u.a. deswegen so dumm, weil ich immer noch nicht verstanden habe, wann in einem DOIF auf das Auslösen eines Events geprüft wird und wann ein Zustand abgefragt wird. Ich habe das bisher immer falsch gemacht  ::)

Zwei Events gleichzeitig treten ja praktisch nicht auf (erst recht nicht bei den Türen...), also vermute ich, daß in Deinem Beispiel Zustände geprüft werden. In meinem Beispiel Events?

Wenn Du mir (für Dummies) die Angelegenheit mit den Events und Zuständen erklären könntest wäre das prima. Und ja, die DOIF-Doku habe ich gelesen, mehrfach rauf und runter. Manchmal dachte ich, ich hab's kapiert - und dann doch wieder falsch gemacht  :-[

Damian

Zitat von: The Grue am 21 Oktober 2021, 16:21:38
Danke, sieht einfach aus...

Ich frage u.a. deswegen so dumm, weil ich immer noch nicht verstanden habe, wann in einem DOIF auf das Auslösen eines Events geprüft wird und wann ein Zustand abgefragt wird. Ich habe das bisher immer falsch gemacht  ::)

Zwei Events gleichzeitig treten ja praktisch nicht auf (erst recht nicht bei den Türen...), also vermute ich, daß in Deinem Beispiel Zustände geprüft werden. In meinem Beispiel Events?

Wenn Du mir (für Dummies) die Angelegenheit mit den Events und Zuständen erklären könntest wäre das prima. Und ja, die DOIF-Doku habe ich gelesen, mehrfach rauf und runter. Manchmal dachte ich, ich hab's kapiert - und dann doch wieder falsch gemacht  :-[

Einen reinen Eventtrigger kann man immer an Anführungszeichen erkennen, sie triggern das Modul und sind in diesem Augenblick wahr (true), sie sind aber bei einer reinen Abfrage ohne Trigger unwahr (false), weil sie keinen Inhalt von etwas repräsentieren.

Zustandsabfragen haben keine Anführungszeichen und keine Regex-Angaben, es sind normalerweise Readings, die ebenfalls das Modul triggern, wenn ein Event zu diesem Reading im System kommt. Sie liefern allerdings nicht den Wert wahr/falsch, sondern immer den aktuellen Inhalt des jeweiligen Readings.

Das war es.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

The Grue

Danke, DAS hat mir zum Verständnis gefehlt :)