[gelöst] DOIF mit DOELSEIF funktioniert nicht

Begonnen von willybauss, 16 November 2020, 08:47:25

Vorheriges Thema - Nächstes Thema

willybauss

Die u.g. Codes stammen aus "Raw definition".

geht nicht - keine Reaktion des Moduls (weder brightness noch Uhrzeit), obwohl die auslösenden Events im Eventmonitor sichtbar sind:

defmod KuecheAbenddaemmerungOnOff DOIF ( [HM_Bewegungsmelder_SW:brightness] < 120 ) \
(set KuecheAbenddaemmerung on) \
DOELSEIF ([23:45] or [01:30]) \
(set KuecheAbenddaemmerung off)


Beide Teile in einzelnen DOIFs funktionieren:

defmod KuecheAbenddaemmerungOn DOIF ( [HM_Bewegungsmelder_SW:brightness] < 120 ) \
(set KuecheAbenddaemmerung on)

defmod KuecheAbenddaemmerungOff DOIF ([23:45] or [01:30]) \
(set KuecheAbenddaemmerung off)


Hat dazu Jemand eine Idee?
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

rabehd

Da gibt es Vermutungen. Wäre gut, wenn Du sagt in welchem Zustand Deine KuecheAbenddaemmerung ist und welche Helligkeit aktuell ist.
Pauschal denke ich cmd_1 trifft bei jeder Änderung der Helligkeit unterhalb 120 zu. attr <name> do always gesetzt?
Auch funktionierende Lösungen kann man hinterfragen.

willybauss

Ich versteh's nicht. Da suche ich seit Tagen nach dem Fehler, und jetzt läuft's plötzlich.

In den letzten Tagen hatte ich behelfsmäßig das DOIF auf disabled gesetzt und stattdessen die beiden einzelnen DOIFs aktiviert. Heute Nachmittag habe ich das umgedreht, zum Debuggen die Zeiten und brightness-Level geändert, und plötzlich ist alles gut. Springt, wie es sein soll zwischen cmd_1 und cmd_2, je nach Event.

Ich beobachte das jetzt mal ein paar Tage und werde den Thread ggf. auf "gelöst" setzen. Erst mal besten Danke für die Hilfe.

Ach ja: do always hatte ich absichtlich nicht. Sonst versucht das DOIF alle 5 Minuten, wenn ein neuer Wert vom Helligkeitssensor kommt, das schon leuchtende Licht einzuschalten. Das führt zu unnötigem Traffic, der bei Funksignalen (Homematic) nicht so schön wäre. Außerdem würde das Licht nach dem abendlichen Abschalten gleich wieder angehen.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

amenomade

Zitat von: willybauss am 16 November 2020, 18:27:56
Außerdem würde das Licht nach dem abendlichen Abschalten gleich wieder angehen.
Das wird mMn sowieso passieren
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

willybauss

warum - ohne do always?

Ist bisher mit den einzelnen DOIFs seit Jahren nicht passiert.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

amenomade

#5
DOIF mit DOELSEIF :
- 23:45 Uhr => cmd_2 => off
- 23:50 Uhr, neue Meldung von Brightness < 120 => cmd_1 => on

Einzelne DOIFs:
- brightness < 120 => cmd_1 => on
- es bleibt auf cmd_1, bis brightness wieder > 120, dann cmd_2 => off (inzwischen hat das 2. DOIF wahrscheinlich geschlatet, aber das hat keinen Einfluss auf dem Zustand des 1. DOIFs
- es bleibt auf cmd_2, bis brightness wieder < 120

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

#6
Man kann die Abfrage [HM_Bewegungsmelder_SW:brightness] < 120 in DOIF_Readings auslagern, dann kann man auch do always aktivieren, ohne dass ständig geschaltet wird.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

willybauss

@amenomade:
Sieht aus, als ob Du recht hast. Jedenfalls brannte das Licht heute Morgen wieder und das Logfile zeigt, dass es offenbar so ablief wie von Dir beschrieben. Klingt jetzt auch völlig logisch, ich war nur nicht drauf gekommen.

Ich werde es dann wohl wieder mit 2 getrennten DOIFs machen müssen.

Besten Dank für die Hilfe. Ich werde es im Titel auf [gelöst] setzen.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Damian

Solche Aufgaben löst man besser mit Zeitintervallen.

z. B.

DOIF ([16:00-23:45] and Brightness < 120) (set ... on) DOELESE (set ... off)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF