FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: h-man-kl am 14 November 2019, 11:13:25

Titel: TFK soll Lampe steuern
Beitrag von: h-man-kl am 14 November 2019, 11:13:25
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
Titel: Antw:TFK soll Lampe steuern
Beitrag von: amenomade am 15 November 2019, 18:55:36
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
Titel: Antw:TFK soll Lampe steuern
Beitrag von: Per am 18 November 2019, 12:51:16
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?
Titel: Antw:TFK soll Lampe steuern
Beitrag von: Wuppi68 am 18 November 2019, 14:09:13
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
Titel: Antw:TFK soll Lampe steuern
Beitrag 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. 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...
Titel: Antw:TFK soll Lampe steuern
Beitrag von: amenomade am 18 November 2019, 20:51:57
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.
Titel: Antw:TFK soll Lampe steuern
Beitrag von: amenomade am 18 November 2019, 20:56:23
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
Titel: Antw:TFK soll Lampe steuern
Beitrag von: Pfriemler am 18 November 2019, 22:08:32
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.


Titel: Antw:TFK soll Lampe steuern
Beitrag von: amenomade am 18 November 2019, 22:15:42
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?
Titel: Antw:TFK soll Lampe steuern
Beitrag von: h-man-kl am 20 November 2019, 06:39:03
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
Titel: Antw:TFK soll Lampe steuern
Beitrag von: h-man-kl am 21 November 2019, 08:13:24
... 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
Titel: Antw:TFK soll Lampe steuern
Beitrag von: Pfriemler am 21 November 2019, 10:51:24
Dann mach mal die Tür kurz zu und gleich wieder auf und schau, was nach zwei Minuten passiert  8)