Einfaches DoIf - Finde den Fehler nicht

Begonnen von Grml, 08 März 2017, 18:41:38

Vorheriges Thema - Nächstes Thema

Grml

Hallo zusammen,

ich stehe gerade wie der Ochs' vorm Berg. Mein simples DoIf will nicht auslösen, das Licht will nicht angehen.

Wenn die Haustür aufgeht (abgefragt über den optischen Homematic Sensor) soll ein Licht angehen und solange eingeschaltet bleiben, bis die Türe wieder geschlossen wird. Dann soll mit einer Verzögerund von 15 Sekunden das Licht wieder ausgehen.


(
[WinSensOptEingang01] eq "open"
)
(
set 0.Aussen.HUELight.Eingang pct 100%,
set 0.Aussen.HUELight.Eingang on
)
DOELSEIF
(
[WinSensOptEingang01] eq "closed"
)
(
sleep 15;
set 0.Aussen.HUELight.Eingang off
)
DOELSE()


Ich möchte das nicht über 2 Notifys machen, da ich das DoIf später noch um weitere Konditionen (bspw. Uhrzeit) erweitern will.
Die Namen meiner Geräte sind definitv korrekt.

Mag mir jemand einen Hinweis geben, was ich übersehe warum es nicht funktioniert?

fischit

Hi,

Also bei mir heißt die Abfrage DOIF ([fenster_arbeitszimmer:state] eq "open" ) (set ... )

Grüße
Nils

KernSani

Statt sleep kannst du das wait Attribut nutzen, aberposte mal ein list des DOIF
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Grml

#3
Mit ":state" habe ich es auch schon versucht...

Hier das List:

Internals:
   DEF        (
[WinSensOptEingang01:state] eq "open"
)
(
set 0.Aussen.HUELight.Eingang pct 100%;
set 0.Aussen.HUELight.Eingang on
)
DOELSEIF
(
[WinSensOptEingang01:state] eq "closed"
)
(
sleep 15;
set 0.Aussen.HUELight.Eingang off
)
DOELSE()
   NAME       Aussenlicht.WinSensOptEingang01.DoIf
   NR         213
   NTFY_ORDER 50-Aussenlicht.WinSensOptEingang01.DoIf
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2017-03-08 20:14:04   Device          WinSensOptEingang01
     2017-03-08 19:41:16   cmd             2
     2017-03-08 19:41:16   cmd_event       WinSensOptEingang01
     2017-03-08 19:41:16   cmd_nr          2
     2017-03-08 20:14:04   e_WinSensOptEingang01_state closed
     2017-03-08 19:41:16   state           cmd_2
   Condition:
     0           ReadingValDoIf($hash,'WinSensOptEingang01','state') eq "open"
     1           ReadingValDoIf($hash,'WinSensOptEingang01','state') eq "closed"
   Devices:
     0           WinSensOptEingang01
     1           WinSensOptEingang01
     all         WinSensOptEingang01
   Do:
     0:
       0           set 0.Aussen.HUELight.Eingang pct 100%;  set 0.Aussen.HUELight.Eingang on
     1:
       0           sleep 15;  set 0.Aussen.HUELight.Eingang off
     2:
       0
   Helper:
     event      alive: yes,battery: ok,contact: closed (to HMLAN1),sabotageError: off,closed
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   WinSensOptEingang01
     timerevent alive: yes,battery: ok,contact: closed (to HMLAN1),sabotageError: off,closed
     triggerDev WinSensOptEingang01
     timerevents:
       alive: yes
       battery: ok
       contact: closed (to HMLAN1)
       sabotageError: off
       closed
     timereventsState:
       alive: yes
       battery: ok
       contact: closed (to HMLAN1)
       sabotageError: off
       state: closed
     triggerEvents:
       alive: yes
       battery: ok
       contact: closed (to HMLAN1)
       sabotageError: off
       closed
     triggerEventsState:
       alive: yes
       battery: ok
       contact: closed (to HMLAN1)
       sabotageError: off
       state: closed
   Internals:
   Itimer:
   Readings:
     0           WinSensOptEingang01:state
     1           WinSensOptEingang01:state
     all         WinSensOptEingang01:state
   Regexp:
     0:
     1:
     All:
   State:
   Trigger:
Attributes:
   room       Eingang

Damian

Du musst hier nicht den Fall posten der funktioniert, sondern den, der nicht funktioniert, also Status "open".
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Grml

Zitat von: Damian am 08 März 2017, 20:42:09
Du musst hier nicht den Fall posten der funktioniert, sondern den, der nicht funktioniert, also Status "open".
Sorry, ich verstehe nicht was Du meinst. Vermutlich stehe ich als Anfänger da gerade auf dem Schlauch.
Ich sollte ein List vom DoIf posten, das habe ich getan.
Außerdem zu Anfang eben die DEF des DoIf.

AmunRe

Zitat von: Grml am 08 März 2017, 21:26:37
Sorry, ich verstehe nicht was Du meinst. Vermutlich stehe ich als Anfänger da gerade auf dem Schlauch.
Ich sollte ein List vom DoIf posten, das habe ich getan.
Außerdem zu Anfang eben die DEF des DoIf.


Öffne die Tür bzw den Kontakt den Du im DOIF verarbeitest. und wenn die Tür/das Fenster offen ist, machst Du ein list.


Es geht doch darum das es nicht geht wenn die Tür offen ist, dein List vom Device war aber bei geschlossener Tür.
4 x Echo Dot, HMLAN Gateway, und diverse HM Komponenten, Philips Hue + OSRAM Plugs

Grml

#7
Ach, jetzt verstehe ich... sorry! Wird geliefert...

Grml

#8
EDIT: Hier stand Quatsch (bzw. ein List vom falschen Device)

KernSani

Nah dran ;-) Ein List vom DOIF während des nicht-funktionierens wäre schön...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Grml

Oh man... Ich bin heute so dämlich... Jetzt habe ich das List vom Sensor statt vom DoIf gepostet... Ich glaube ich sollte eher ins Bett als daran noch rumzubasteln...

Hier das List vom DoIf während die Türe offen ist

ZitatInternals:
   DEF        (
[WinSensOptEingang01:state] eq "open"
)
(
set 0.Aussen.HUELight.Eingang pct 100%;
set 0.Aussen.HUELight.Eingang on
)
DOELSEIF
(
[WinSensOptEingang01:state] eq "closed"
)
(
sleep 15;
set 0.Aussen.HUELight.Eingang off
)
DOELSE()
   NAME       Aussenlicht.WinSensOptEingang01.DoIf
   NR         213
   NTFY_ORDER 50-Aussenlicht.WinSensOptEingang01.DoIf
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-03-08 21:56:36   Device          WinSensOptEingang01
     2017-03-08 21:56:36   cmd             1
     2017-03-08 21:56:36   cmd_event       WinSensOptEingang01
     2017-03-08 21:56:36   cmd_nr          1
     2017-03-08 21:56:36   e_WinSensOptEingang01_state open
     2017-03-08 21:56:36   state           cmd_1
   Condition:
     0           ReadingValDoIf($hash,'WinSensOptEingang01','state') eq "open"
     1           ReadingValDoIf($hash,'WinSensOptEingang01','state') eq "closed"
   Devices:
     0           WinSensOptEingang01
     1           WinSensOptEingang01
     all         WinSensOptEingang01
   Do:
     0:
       0           set 0.Aussen.HUELight.Eingang pct 100%;  set 0.Aussen.HUELight.Eingang on
     1:
       0           sleep 15;  set 0.Aussen.HUELight.Eingang off
     2:
       0
   Helper:
     event      battery: ok,contact: open (to HMLAN1),open,trigDst_37A0F0: noConfig,trigger_cnt: 109
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   WinSensOptEingang01
     timerevent battery: ok,contact: open (to HMLAN1),open,trigDst_37A0F0: noConfig,trigger_cnt: 109
     triggerDev WinSensOptEingang01
     timerevents:
       battery: ok
       contact: open (to HMLAN1)
       open
       trigDst_37A0F0: noConfig
       trigger_cnt: 109
     timereventsState:
       battery: ok
       contact: open (to HMLAN1)
       state: open
       trigDst_37A0F0: noConfig
       trigger_cnt: 109
     triggerEvents:
       battery: ok
       contact: open (to HMLAN1)
       open
       trigDst_37A0F0: noConfig
       trigger_cnt: 109
     triggerEventsState:
       battery: ok
       contact: open (to HMLAN1)
       state: open
       trigDst_37A0F0: noConfig
       trigger_cnt: 109
   Internals:
   Itimer:
   Readings:
     0           WinSensOptEingang01:state
     1           WinSensOptEingang01:state
     all         WinSensOptEingang01:state
   Regexp:
     0:
     1:
     All:
   State:
   Trigger:
Attributes:
   room       Eingang