[gelöst] DOIF tut nicht was es soll / Bedingung in {} wird nicht ausgeführt.

Begonnen von abc2006, 12 März 2019, 18:00:39

Vorheriges Thema - Nächstes Thema

abc2006

Hallo, ich habe folgendes DOIF:

Internals:
   DEF        ([{sunrise("HORIZON=4","3600")}-{sunset("HORIZON=4","-3600")}])
(set KNX02.O10_Aktor_Schlafzimmer_Wasserbett on)
{log_telegram("0","$SELF","Sonnenaufgang, Aktor Wasserbett on","alarmbot")}
DOELSE
(set KNX02.O10_Aktor_Schlafzimmer_Wasserbett off)
(set alarmbot message ibims)
{log_telegram("0","$SELF","Sonnenaufgang, Aktor Wasserbett off","alarmbot")}
   FUUID      5c844719-f33f-4040-b6f4-278167cc6fff20e4
   MODEL      FHEM
   NAME       DF_switchWasserbett
   NR         579
   NTFY_ORDER 50-DF_switchWasserbett
   STATE      cmd_2
   TYPE       DOIF
   VERSION    18706 2019-02-23 21:48:22
   READINGS:
     2019-03-12 17:57:15   cmd             2.2
     2019-03-12 17:57:15   cmd_event       set_cmd_2
     2019-03-12 17:57:15   cmd_nr          2
     2019-03-12 17:57:15   cmd_seqnr       2
     2019-03-12 17:57:08   mode            enabled
     2019-03-12 17:57:15   state           cmd_2
     2019-03-12 17:57:08   timer_01_c01    13.03.2019 08:15:48
     2019-03-12 17:57:08   timer_02_c01    13.03.2019 16:55:15
   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms)
   days:
   devices:
   do:
     0:
       0          set KNX02.O10_Aktor_Schlafzimmer_Wasserbett on
       1          {log_telegram("0","DF_switchWasserbett","Sonnenaufgang, Aktor Wasserbett on","alarmbot")}
     1:
       0          set KNX02.O10_Aktor_Schlafzimmer_Wasserbett off
       1          set alarmbot message ibims
   helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
     DOIF_eventas:
       cmd_nr: 2
       cmd_seqnr: 2
       cmd_event: set_cmd_2
       state: cmd_2
   interval:
     0          -1
     1          0
   intervalfunc:
   itimer:
   localtime:
     0          1552461348
     1          1552492515
   realtime:
     0          08:15:48
     1          16:55:15
   time:
     0          {sunrise("HORIZON=4","3600")}
     1          {sunset("HORIZON=4","-3600")}
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1552461348:
       localtime  1552461348
       hash:
     1552492515:
       localtime  1552492515
       hash:
   uiState:
   uiTable:
Attributes:
   room       Solar_PV,_doif
   verbose    5


Leider wird der Code, der bei cmd_2 in {} steht, nicht ausgeführt. Der Code in den () sowie der code in {} im cmd_1 funktioniert einwandfrei.
Kann mir jemand helfen, was ich gerade übersehe?
Im Log gibt es trotz verbose 5 keine einzige Meldung (zu diesem DOIF).
Danke,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Ellert

Setz die Klammern mal in der Form:
cmd_1: (Befehl1,{Perlcode})
cmd_2: (Befehl1,Befehl1,{Perlcode})

abc2006

Hi Ellert,
danke dir. So funktioniert es. Seltsam, dass die erste Bedingung auch funktioniert, wenn die {} ausserhalb der() stehen...
Nur bei der zweiten Bedingung macht es Probleme. Aber, so gehts jetzt.

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Zitat von: abc2006 am 13 März 2019, 16:17:19
Hi Ellert,
danke dir. So funktioniert es. Seltsam, dass die erste Bedingung auch funktioniert, wenn die {} ausserhalb der() stehen...
Nur bei der zweiten Bedingung macht es Probleme. Aber, so gehts jetzt.

Grüße,
Stephan

it's not a feature it´s a bug   :D

Morgen per Update funktionsfähig.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

abc2006

Super, danke für die Behebung. Kannst du kurz klar stellen, wie rum es ab morgen sein/funktionieren soll?

Danke!
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Zitat von: abc2006 am 13 März 2019, 17:47:12
Super, danke für die Behebung. Kannst du kurz klar stellen, wie rum es ab morgen sein/funktionieren soll?

Danke!
Stephan

So, wie es sein sollte. In deinem Fall: Lösung von Ellert.

Sonst geht jetzt:

DOIF (Bedingung) {Perl} DOELSE {Perl}

Deine erste Lösung würde jetzt auch funktionieren, macht aber nur Sinn, wenn du einzelne Befehle per wait verzögern willst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF