Hauptmenü

DOIF manuell übersteuern

Begonnen von romakrau, 11 Dezember 2020, 17:58:09

Vorheriges Thema - Nächstes Thema

romakrau

Hallo zusammen,
ich habe eine Verständnisfrage. Ich hab folgendes DOIF definiert:
defmod Kirmes_an DOIF ([Abend] eq "on" and [16:00-22:30] and $ymd gt "2020-11-27" and $ymd lt "2021-01-08" ) (set Kirmes_Lampe on) DOELSE (set Kirmes_Lampe off)
attr Kirmes_an wait 600:0

Nachdem ich das HUE-Device Kirmes_Lampe manuell an-  und ausgeschaltet habe (per Klick im FHEMWeb) reagiert das Device nicht auf das DOIF.
Was mache ich falsch bzw. verstehe ich falsch?
Gruß
Roman

xenos1984


romakrau


romakrau

Vieleicht nochmal für mich zum Verständnis.
Ein Device hat einen Zustand den ich mittels Set Befehl ändere. Dieser Zustand wird nicht gespeichert sondern wenn ich diesen Befehl per WebCmd, Notify oder DOIF schicke wird der letzte Sender gespeichert. Nur dieser kann den Zustand wieder ändern oder ich muss ein Do Always hinzufügen um die Änderung auch für andere freizugeben. Bin jetzt total verwirrt.


xenos1984

Nicht ganz. Du hast:

  • Eine Lampe, die einen Zustand "on" oder "off" hat.
  • Ein DOIF, das einen Zustand "cmd1" (erster Zweig) oder "cmd2" (zweiter Zweig) hat.
Das DOIF schaltet in einen neuen Zustans, wenn eine der beiden Schaltbedngungen erfüllt ist und es sich vorher in einem anderen Zustand befunden hat. Wenn es also z.B. Abend wird, schaltet das DOIF auf cmd1, wenn es vorher auf cmd2 war, und dann schaltet es die Lampe an. Damit es erneut in den Zustand cmd1 schalten kann (und damit die Lampe einschalten), muss es zuerst wieder zurück in den Zustand cmd2 schalten.

Wenn du nun "von Hand", z.B. über FHEMWEB, die Lampe direkt schaltest, schaltet das die Lampe ebenfalls an oder aus. Das ändert aber nur den Status der Lampe - nicht den des DOIF. Das DOIF merkt davon nichts und bleibt in seinem Zustand, also z.B. in cmd1. Wenn nun die Lampe aus ist, das DOIF aber noch in cmd1, dann schaltet das DOIF die Lampe nicht mehr ein, weil es ja schon in seinem "eingeschalteten" Zustand ist.

Mit attr do always umgeht man dieses Verhalten. Dann schaltet das DOIF immer, wenn eine Bedingung erfüllt wird, egal in welchem Zustand es vorher war.

romakrau

Danke für die ausführliche Erklärung. Das trifft es nicht ganz, denn das DOIF arbeitete seit langem einwandfrei. Ich versuche es mal anhand eines Ablaufes zu beschreiben:

Das DOIF ist im Zustand cmd2 und ich schalte die Lampe per WEBCmd der Lampe ein. Dann schalte ich die Lampe per WEBCmd der Lampe wieder aus. Das DOIF sollte sich weiterhin in cmd2 befinden,wird aber bei Erfüllung aller Bedingungen nicht wirksam sondern die Lampe bleibt aus. Ich schalte die Lampe per WEBCmd ein und das DOIF schaltet sie nach Ablauf einer Bedingung wieder aus. Danach arbeitet das DOIF wieder korrekt.
Wenn ich deiner Erklärung folge würde es bedeuten das das DOIF durch das manuelle Schalten seinen Zustand in cmd1 gewechselt hat aber das Ausschalten nicht mitbekommen hat?





xenos1984

Ob bzw. wann das DOIF seinen Zustand wechselt, hängt von den Bedingungen ab, die in seiner Definition stehen. In deinem Fall sind das also [Abend] und ein Zeitintervall. Auf das reine Schalten der Lampe sollte es nicht reagieren.

Aber statt zu spekulieren, in welchem Zustand das DOIF sein sollte und was es dahin befördert hat, ist es hilfreicher, sich das direkt anzusehen. Ein
list Kirmes_an
sollte mehr Klarheit bringen. (Idealerweise in dem Zustand, der deiner Meinung nach "falsch" ist, also in dem das DOIF nicht so reagiert, wie es soll.)

romakrau

Also das DOIF funktionierte heute Abend wieder so wie es sollte, auch ohne Do Always. Warum es klemmte? Keine Ahnung.
Danke für alle Erleuchtungen  ;)