Hallo zusammen,
ich habe mir ein vermeintlich einfaches DOIF gebaut welches bei offener Garagentür die Deckenlampe einschalten soll und wenn die Tür zu ist nach zwei Minuten wieder ausschalten soll.
Bleibt die Tür offen soll das Licht dauerhaft an bleiben. Leider geht das Licht IMMER nach zwei Minuten aus und im Fall einer noch offenen Tür direkt wieder an... :-(
Könnt ihm mir bitte meinen Fehler aufzeigen?!
Vielen Dank!
Gruß
H-Man
Internals:
DEF ([01_01_TFK_Garagentuer] ne "zu" and [Garage.Deckenlampe] eq "aus") (set Garage.Deckenlampe on) DOELSE (set Garage.Deckenlampe off)
FUUID 5c44ac27-f33f-627b-c188-8ba68c2512605a4e
MODEL FHEM
NAME di_garagentuer
NOTIFYDEV Garage.Deckenlampe,01_01_TFK_Garagentuer,global
NR 999
NTFY_ORDER 50-di_garagentuer
STATE cmd_2
TYPE DOIF
VERSION 20423 2019-10-29 18:50:08
READINGS:
2019-11-14 11:07:37 Device Garage.Deckenlampe
2019-11-14 06:58:19 cmd 2
2019-11-14 06:58:19 cmd_event Garage.Deckenlampe
2019-11-14 06:58:19 cmd_nr 2
2019-11-14 10:35:34 e_01_01_TFK_Garagentuer_STATE zu
2019-11-14 11:07:37 e_Garage.Deckenlampe_STATE aus
2019-07-24 06:29:49 mode enabled
2019-11-14 06:58:19 state cmd_2
2019-11-14 06:58:19 wait_timer no timer
Regex:
accu:
cond:
01_01_TFK_Garagentuer:
0:
&STATE ^01_01_TFK_Garagentuer$
Garage.Deckenlampe:
0:
&STATE ^Garage.Deckenlampe$
attr:
cmdState:
wait:
0:
0
1:
120
waitdel:
condition:
0 ::InternalDoIf($hash,'01_01_TFK_Garagentuer','STATE') ne "zu" and ::InternalDoIf($hash,'Garage.Deckenlampe','STATE') eq "aus"
do:
0:
0 set Garage.Deckenlampe on
1:
0 set Garage.Deckenlampe off
helper:
DEVFILTER ^global$|^01_01_TFK_Garagentuer$|^Garage.Deckenlampe$
NOTIFYDEV global|01_01_TFK_Garagentuer|Garage.Deckenlampe
event R-logging: aus
globalinit 1
last_timer 0
sleepdevice Garage.Deckenlampe
sleepsubtimer -1
sleeptimer -1
timerdev Garage.Deckenlampe
timerevent R-logging: aus
triggerDev Garage.Deckenlampe
timerevents:
R-logging: aus
timereventsState:
R-logging: aus
triggerEvents:
R-logging: aus
triggerEventsState:
R-logging: aus
internals:
all 01_01_TFK_Garagentuer:STATE Garage.Deckenlampe:STATE
perlblock:
readings:
trigger:
uiState:
uiTable:
Attributes:
disable 0
room _doif
wait 0:120
Versuch mal mitand [?Garage.Deckenlampe] eq "aus")
Wenn es immer noch nicht geht, bitte ein "list" posten, wenn der DOIF deiner Meinung nach nicht richtig geschaltet hat
Zitat von: amenomade am 15 November 2019, 18:55:36
Versuch mal mitand [?Garage.Deckenlampe] eq "aus")
Wozu wird das abgefragt? Auf-> an, zu -> Pause -> aus. Wie oft wird die Tür innerhalb von 2 min wieder geöffnet, so dass eine signifikante Last erzeugt wird?
klingt blöd aber ich würde das ganz anders lösen ;-)
schalter = open --> lampe an
schalter = close --> lampe an für 2 Minuten // ist ja schon an und wird dann nach 2 Minuten einfach ausgeschaltet
Sehr geil. Im ersten Thread führt die wunschgemäß eingeschaltete Lampe nach ihrer Statusänderung zu einer Retriggerung des DOIF. Da die Lampe nun an ist, gilt nun DOELSE und die Lampe geht nach zwei Minuten aus, was wiederum das DOIF triggert und da nun die ersten Bedingungen wahr sind, gehts wieder an...
Das DOIF funktioniert wie programmiert :)
Wenn Abfrage des Lampenstatus unnötige Befehle vermeiden soll, würde ich das mit zusätzlichem IF oder Filter an der Ausführung klären. Den DOIF-Zustand nur nach TFK regeln.
Und Praxistipp: beim Einschalten Höchstlaufzeit vorgeben, 12h oder so. Falls die Schließmeldung des TFK verloren geht, brennt das Licht nicht bis Montagmorgen...
Zitat von: Per am 18 November 2019, 12:51:16
Wozu wird das abgefragt? Auf-> an, zu -> Pause -> aus. Wie oft wird die Tür innerhalb von 2 min wieder geöffnet, so dass eine signifikante Last erzeugt wird?
Damit Garagen.Deckenlampe nicht triggert, was anscheinend der Fall gewesen ist:
Zitat2019-11-14 06:58:19 cmd 2
2019-11-14 06:58:19 cmd_event Garage.Deckenlampe
2019-11-14 06:58:19 cmd_nr 2
Ohne "?":
Wenn die Tür offen ist und bleibt, und die Lampe manuell ausgeschaltet wird, geht sie wieder sofort an.
Wenn die Tür offen ist und bleibt, und die Lampe manuell angeschaltet wird, geht sie nach 2 mn aus.
Deswegen das "?"
Aber Du meinst, das gesammte "and..." weg lassen? Dann einverstanden.
Zitat von: Pfriemler am 18 November 2019, 15:45:46
Sehr geil. Im ersten Thread führt die wunschgemäß eingeschaltete Lampe nach ihrer Statusänderung zu einer Retriggerung des DOIF.
Nein, nw das DOIF triggert sich nicht selbst. Nur eine manuelle Änderung von Garage.Deckenlampe kann wieder triggern
Zitat von: amenomade am 18 November 2019, 20:56:23
Nein, nw das DOIF triggert sich nicht selbst. Nur eine manuelle Änderung von Garage.Deckenlampe kann wieder triggern
sich selbst sowieso nicht. Die Selbstriggerung wird eigentlich unterbunden. Aber in Garage.Deckenlampe findet ein mapping statt - aus "set ... off" wird "state = aus". Das kann das DOIF nicht als Selbsttriggerung erkennen.
Und: Wir kennen den Typ von Garage.Deckenlampe nicht. Mindestens wenn das ein Aktor ist, der seinen Zustand aktiv zurückmeldet (Homematic, MQTT, ...), läuft die Schleife solange TFK offen ist.
Und beim Fragesteller passierte das ohne manuelles Zutun.
Zitat von: Pfriemler am 18 November 2019, 22:08:32
Aber in Garage.Deckenlampe findet ein mapping statt - aus "set ... off" wird "state = aus".
OK, hatte es nicht gesehen.
Zitat von: Pfriemler am 18 November 2019, 22:08:32Das kann das DOIF nicht als Selbsttriggerung erkennen.
Sicher?
hmmm interessant wie viele Antworten und Theorien meine vermeintlich simple Frage erzeugt... :-)
Ich habe jetzt mal den 1. Tipp eingetragen und schaue heute Abend ob es klappt.
Ansich ist es eh noch nicht die 100% Lösung, denn wenn ich bei geschlossener Tür in der Garage stehe und das licht "händig" anschalte und dann die Türe kurz öffne, dann geht es ja auch wieder nach 2 Min aus, aber damit kann ich leben.
Und da die Frage aufkam: es ist ein Homematic Türkontakt und die Lampe wird über ein HMW_IO_12_Sw7_DR Aktor geschaltet an dem auch der Taster für die manuelle Steuerung angeschlossen ist.
Gerne bin ich auch für gänzlich andere Vorschläge offen.
Gruß
H-Man
... was so ein kleines ? doch bewirkt!
Danke für die Hilfestellung. Jetzt bleibt die Lmape an solange die Tür offen ist und geht 2 Minuten nach dem schließen aus.
Gruß
H-Man
Dann mach mal die Tür kurz zu und gleich wieder auf und schau, was nach zwei Minuten passiert 8)