FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Michi240281 am 06 Februar 2021, 13:01:06

Titel: DOIF löst falsches cmd aus
Beitrag von: Michi240281 am 06 Februar 2021, 13:01:06
Hallo zusammen,

folgendes DI löst das falsche cmd aus:

([{sunset_abs("HORIZON=4",0,"16:00","19:30")}-00:30] or [06:00-{sunrise_abs("HORIZON=0",0,"7:00","9:30")}]) (set Ambientelicht_Kueche_1 an, set Ambientelicht_Kueche_2 an) DOELSEIF (([HarmonyHUB:activity] eq "PowerOff") and [?21:00-00:30]) (set Ambientelicht_Kueche_1 aus, set Ambientelicht_Kueche_2 aus) DOELSE (set Ambientelicht_Kueche_1 aus, set Ambientelicht_Kueche_2 aus)

cmd1 wird ordnungsgemäß geschaltet. cmd2 funktioniert auch. Nur aus mir unerklärlichen Gründen wird, wenn sich an dem Device:reading "HarmonyHUB:activity" etwas ändert (nicht PowerOff), cm3 getriggert und die Beleuchtung geht aus. Erst dachte ich, der HarmonyHub würde beim wechseln der activity kurzzeitig PowerOff annehmen, aber das ist es nicht. Wenn beim HarmonyHub eine Änderung passiert, scheint das DI eine erneute Abfrage aller Bedingungen zu machen und dann wird cmd3 wahr.

Wie kann ich das Problem lösen?

Besten Dank vorab!
Titel: Antw:DOIF löst falsches cmd aus
Beitrag von: Otto123 am 06 Februar 2021, 14:12:58
Hi,

Eventuell in dem Du keine Bedingungsabfrage machst sondern nur den Event als Trigger nimmst:
Musst Du Dir aber im Eventmonitor anschauen. So wäre es wenn in dem Event das Wort PowerOff auftritt. Ist eventuell zu grob gefasst.

([HarmonyHUB:"PowerOff"])

DOELSE ist halt der Rest wenn keine andere Bedingung passt.

Gruß Otto
Titel: Antw:DOIF löst falsches cmd aus
Beitrag von: Michi240281 am 06 Februar 2021, 19:52:40
Wie meinst du das?

So?:

([{sunset_abs("HORIZON=4",0,"16:00","19:30")}-00:30] or [06:00-{sunrise_abs("HORIZON=0",0,"7:00","9:30")}]) (set Ambientelicht_Kueche_1 an, set Ambientelicht_Kueche_2 an) DOELSEIF (([HarmonyHUB:"PowerOff"] ) and [?21:00-00:30]) (set Ambientelicht_Kueche_1 aus, set Ambientelicht_Kueche_2 aus) DOELSE (set Ambientelicht_Kueche_1 aus, set Ambientelicht_Kueche_2 aus)

Das Reading heißt doch gar nicht PowerOff, sondern activity. Versteh ich nicht!

Im Eventmonitor steht es so: 2021-02-06 19:43:55.655 harmony HarmonyHUB activity: PowerOff

Gerade fällt mir aber noch was ein: Der sollte in jedem Fall auf cmd1 gehen und nicht auf cmd3, weil cmd1 ja noch erfüllt ist, da es ja zu dem Zeitpunkt noch innerhalb des Zeitintervalls liegt. Also irgendwas stimmt da nicht.
Titel: Antw:DOIF löst falsches cmd aus
Beitrag von: Otto123 am 06 Februar 2021, 20:58:47
Ich habe auch nicht vom Reading sondern vom Event gesprochen:
https://fhem.de/commandref_modular_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Zuviele Klammern können auch stören :) und falsche Hochkommas sind der Tod im Code schlechthin!! Also wenn schon dann so:
([HarmonyHUB:"PowerOff"]  and [?21:00-00:30])
Ansonsten solltest Du Dir das list anschauen (und bei Fragen posten) wenn der Fehler auftritt.
BTW. Sind die _abs Funktionen meist auch die falschen, nimm lieber die "normalen" die sind richtig auch wenn man sie vielleicht nicht auf Anhieb versteht.

Reine von-bis Timer triggern das Kommando ev. wirklich nur zum Timer Event. Gäbe es in der Bedingung eine weiteren Trigger würde der Zeitraum geprüft - aber so?

Gruß Otto
Titel: Antw:DOIF löst falsches cmd aus
Beitrag von: Michi240281 am 06 Februar 2021, 22:32:30
Der scheint auf das Event nicht zu triggern, obwohl ja das PowerOff vorkommt.

Hab es jetzt anders gemacht:

([{sunset_abs("HORIZON=8",0,"16:00","19:30")}-00:30] or [06:30-{sunrise_abs("HORIZON=8",0,"7:00","9:30")}]) (set Ambientelicht_Kueche an) DOELSEIF ([HarmonyHUB:"PowerOff"] and [?21:00-00:30]) (set Ambientelicht_Kueche aus) DOELSEIF ([00:30-06:30] or [{sunrise_abs("HORIZON=8",0,"7:00","9:30")}-{sunset_abs("HORIZON=8",0,"16:00","19:30")}]) (set Ambientelicht_Kueche aus)

So müsste es funktionieren denke ich, nachher mal testen.