Hauptmenü

DOIF Auführung

Begonnen von slako, 26 August 2019, 09:18:22

Vorheriges Thema - Nächstes Thema

slako

Hallo Leute,

ich habe eine typische Anfängerfrage. Ich schalte ein Gerät mit einer DOIF-Abfrage. Im Detail habe ich einen Temperatursensor der mir einen Wert liefert. Sobald dieser Wert erreicht wird soll ein Schalter geschalten werden. Das DOIF sollte so aussehen:

define DUMMYEIN DOIF ([MEINGERAET:temperature] >= 20 ) set mySwitch1 on

Jetzt meine Frage, schaltet das nur einmal wenn der Wert erreicht wird oder wird das immer wieder geprüft. Wenn also der Wert unter 20 fällt und später wieder erreicht wird, schaltet es dann wieder?

kumue

so wie es jetzt definiert ist, schaltet es nur 1x.
Es ist kein DOELSEIF, DOELSE bzw. kein Attribut wie "do always" definiert, sodaß es zu keinem Zustandswechsel des DOIF kommen kann.
Das DOIF schaltet also 1x und verhaart dann in diesem Zustand.....

slako

Danke für die Info :)
Wie müsste ich es dann machen?

Damian

Zitat von: slako am 26 August 2019, 09:18:22
Hallo Leute,

ich habe eine typische Anfängerfrage. Ich schalte ein Gerät mit einer DOIF-Abfrage. Im Detail habe ich einen Temperatursensor der mir einen Wert liefert. Sobald dieser Wert erreicht wird soll ein Schalter geschalten werden. Das DOIF sollte so aussehen:

define DUMMYEIN DOIF ([MEINGERAET:temperature] >= 20 ) set mySwitch1 on

Jetzt meine Frage, schaltet das nur einmal wenn der Wert erreicht wird oder wird das immer wieder geprüft. Wenn also der Wert unter 20 fällt und später wieder erreicht wird, schaltet es dann wieder?

bis auf die fehlenden Klammern  (set mySwitch1 on) ist die Definition so ausreichend und korrekt (ohne DOELSE und ohne do always).

Zitat aus der Commandref:

ZitatBei der Angabe von zyklisch sendenden Sensoren (Temperatur, Feuchtigkeit, Helligkeit usw.) wie z. B.:

define di_heating DOIF ([sens:temperature] < 20) (set heating on)

ist die Nutzung des Attributes do always nicht sinnvoll, da das entsprechende Kommando hier: "set heating on" jedes mal ausgeführt wird, wenn der Temperatursensor in regelmäßigen Abständen eine Temperatur unter 20 Grad sendet. Ohne do always wird hier dagegen erst wieder "set heating on" ausgeführt, wenn der Zustand des Moduls auf "cmd_2" gewechselt hat, also die Temperatur zwischendurch größer oder gleich 20 Grad war.

In diesem Fall wird DOELSE automatisch vom Modul angenommen.

Zitat aus der Commandref:

ZitatSoll bei Nicht-Erfüllung aller Bedingungen ein Zustandswechsel erfolgen, so muss man ein DOELSE am Ende der Definition anhängen. Ausnahme ist eine einzige Bedingung ohne do always, wie im obigen Beispiel, hierbei wird intern ein virtuelles DOELSE angenommen, um bei Nicht-Erfüllung der Bedingung einen Zustandswechsel in cmd_2 zu provozieren, da sonst nur ein einziges Mal geschaltet werden könnte, da das Modul aus dem cmd_1-Zustand nicht mehr herauskäme.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

slako

Super, danke für die Info :). Hab mir die Commandref jetzt genauer angesehen. Da hab ich noch was zum Basteln  ;D