FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Christian80 am 16 September 2020, 08:47:08

Titel: [Gelöst] keine Aktualisierung bei DOIF mit mehreren CMDs
Beitrag von: Christian80 am 16 September 2020, 08:47:08
Hallo zusammen,

ich habe ein DOIF gebaut, welches in Abhängigkeit der Aussentemperatur ein Fernsehlicht schalten soll.
Zum Sonnenuntergang wird es korrekt ausgeführt und ruft den entsprechenden Command auf.
Wenn es nun aber während des abends kälter wird, aktualisiert sich die Lichtfarbe nicht.

Erst bei einem manuallen "set d_Beleuchtung_Fernsehen checkall" aktualisiert sich die Lichtfarbe.

Wo ist mein Fehler?

Danke und schöne Grüße
Christian


Internals:
   DEF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) <= "0")
(set Li_Fernsehen rgb FF5D46)

DOELSEIF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "0" and ReadingsNum("Waermepumpe", "temp2", 0) <= "5")
(set Li_Fernsehen rgb FF8B46)

DOELSEIF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "5" and ReadingsNum("Waermepumpe", "temp2", 0) <= "10")
(set Li_Fernsehen rgb B9A57E)

DOELSEIF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "10" and ReadingsNum("Waermepumpe", "temp2", 0) <= "15")
(set Li_Fernsehen rgb 74BFB5)

DOELSEIF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "15" and ReadingsNum("Waermepumpe", "temp2", 0) <= "20")
(set Li_Fernsehen rgb 17E2FF)

DOELSEIF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "20" and ReadingsNum("Waermepumpe", "temp2", 0) <= "25")
(set Li_Fernsehen rgb 109EFF)

DOELSEIF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "25" and ReadingsNum("Waermepumpe", "temp2", 0) <= "30")
(set Li_Fernsehen rgb 0744FF)

DOELSEIF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "30")
(set Li_Fernsehen rgb 0000FF)

DOELSEIF ([[Twilight:ss_indoor]-02:00] and [Fernseher_WohnZi] eq "on")
(set Li_Fernsehen rgb FF0000)
   FUUID      ##########
   MODEL      FHEM
   NAME       d_Beleuchtung_Fernsehen
   NOTIFYDEV  Fernseher_WohnZi,Twilight,global
   NR         91
   NTFY_ORDER 50-d_Anwesenheit_Stehlampe_WohnZi
   STATE      16.09.2020 19:00:48, off
   TYPE       DOIF
   VERSION    22588 2020-08-12 19:25:15
   READINGS:
     2020-09-15 23:00:11   Device          Fernseher_WohnZi
     2020-09-15 19:26:11   cmd             6
     2020-09-15 19:26:11   cmd_event       d_Beleuchtung_Fernsehen
     2020-09-15 19:26:11   cmd_nr          6
     2020-09-15 23:00:11   e_Fernseher_WohnZi_STATE off
     2020-09-08 20:59:23   mode            enabled
     2020-09-15 19:26:11   state           cmd_6
     2020-09-16 02:00:00   timer_01_c01    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_02_c01    17.09.2020 02:00:00
     2020-09-16 02:00:00   timer_03_c02    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_04_c02    17.09.2020 02:00:00
     2020-09-16 02:00:00   timer_05_c03    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_06_c03    17.09.2020 02:00:00
     2020-09-16 02:00:00   timer_07_c04    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_08_c04    17.09.2020 02:00:00
     2020-09-16 02:00:00   timer_09_c05    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_10_c05    17.09.2020 02:00:00
     2020-09-16 02:00:00   timer_11_c06    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_12_c06    17.09.2020 02:00:00
     2020-09-16 02:00:00   timer_13_c07    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_14_c07    17.09.2020 02:00:00
     2020-09-16 02:00:00   timer_15_c08    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_16_c08    17.09.2020 02:00:00
     2020-09-16 02:00:00   timer_17_c09    16.09.2020 19:00:48
     2020-09-16 02:00:00   timer_18_c09    17.09.2020 02:00:00
   Regex:
     accu:
     cond:
       Fernseher_WohnZi:
         0:
           &STATE     ^Fernseher_WohnZi$
         1:
           &STATE     ^Fernseher_WohnZi$
         2:
           &STATE     ^Fernseher_WohnZi$
         3:
           &STATE     ^Fernseher_WohnZi$
         4:
           &STATE     ^Fernseher_WohnZi$
         5:
           &STATE     ^Fernseher_WohnZi$
         6:
           &STATE     ^Fernseher_WohnZi$
         7:
           &STATE     ^Fernseher_WohnZi$
         8:
           &STATE     ^Fernseher_WohnZi$
     itimer:
       Twilight:
         itimer:
           ss_indoor  ^Twilight$:^ss_indoor:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) <= "0"
     1          ::DOIF_time($hash,2,3,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "0" and ReadingsNum("Waermepumpe", "temp2", 0) <= "5"
     2          ::DOIF_time($hash,4,5,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "5" and ReadingsNum("Waermepumpe", "temp2", 0) <= "10"
     3          ::DOIF_time($hash,6,7,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "10" and ReadingsNum("Waermepumpe", "temp2", 0) <= "15"
     4          ::DOIF_time($hash,8,9,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "15" and ReadingsNum("Waermepumpe", "temp2", 0) <= "20"
     5          ::DOIF_time($hash,10,11,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "20" and ReadingsNum("Waermepumpe", "temp2", 0) <= "25"
     6          ::DOIF_time($hash,12,13,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "25" and ReadingsNum("Waermepumpe", "temp2", 0) <= "30"
     7          ::DOIF_time($hash,14,15,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on" and ReadingsNum("Waermepumpe", "temp2", 0) > "30"
     8          ::DOIF_time($hash,16,17,$wday,$hms) and ::InternalDoIf($hash,'Fernseher_WohnZi','STATE') eq "on"
   days:
   do:
     0:
       0          set Li_Fernsehen rgb FF5D46
     1:
       0          set Li_Fernsehen rgb FF8B46
     2:
       0          set Li_Fernsehen rgb B9A57E
     3:
       0          set Li_Fernsehen rgb 74BFB5
     4:
       0          set Li_Fernsehen rgb 17E2FF
     5:
       0          set Li_Fernsehen rgb 109EFF
     6:
       0          set Li_Fernsehen rgb 0744FF
     7:
       0          set Li_Fernsehen rgb 0000FF
     8:
       0          set Li_Fernsehen rgb FF0000
     9:
   helper:
     DEVFILTER  ^global$|^Fernseher_WohnZi$|^Twilight$
     NOTIFYDEV  global|Fernseher_WohnZi|Twilight
     event      timer_18
     globalinit 1
     last_timer 18
     sleeptimer -1
     timerdev   
     timerevent timer_13
     timerevents
     timereventsState
     triggerDev
     triggerEvents:
       timer_18
     triggerEventsState:
       timer_18
   internals:
     all         Fernseher_WohnZi:STATE
   interval:
     0          -1
     1          0
     10         -1
     11         10
     12         -1
     13         12
     14         -1
     15         14
     16         -1
     17         16
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   intervalfunc:
   intervaltimer:
   localtime:
     0          1600275648
     1          1600300800
     10         1600275648
     11         1600300800
     12         1600275648
     13         1600300800
     14         1600275648
     15         1600300800
     16         1600275648
     17         1600300800
     2          1600275648
     3          1600300800
     4          1600275648
     5          1600300800
     6          1600275648
     7          1600300800
     8          1600275648
     9          1600300800
   readings:
   realtime:
     0          19:00:48
     1          02:00:00
     10         19:00:48
     11         02:00:00
     12         19:00:48
     13         02:00:00
     14         19:00:48
     15         02:00:00
     16         19:00:48
     17         02:00:00
     2          19:00:48
     3          02:00:00
     4          19:00:48
     5          02:00:00
     6          19:00:48
     7          02:00:00
     8          19:00:48
     9          02:00:00
   time:
     0          [Twilight:ss_indoor]
     1          02:00:00
     10         [Twilight:ss_indoor]
     11         02:00:00
     12         [Twilight:ss_indoor]
     13         02:00:00
     14         [Twilight:ss_indoor]
     15         02:00:00
     16         [Twilight:ss_indoor]
     17         02:00:00
     2          [Twilight:ss_indoor]
     3          02:00:00
     4          [Twilight:ss_indoor]
     5          02:00:00
     6          [Twilight:ss_indoor]
     7          02:00:00
     8          [Twilight:ss_indoor]
     9          02:00:00
   timeCond:
     0          0
     1          0
     10         5
     11         5
     12         6
     13         6
     14         7
     15         7
     16         8
     17         8
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
     8          4
     9          4
   timer:
     0          0
     1          0
     10         0
     11         0
     12         0
     13         0
     14         0
     15         0
     16         0
     17         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timers:
     0           0  1
     1           2  3
     2           4  5
     3           6  7
     4           8  9
     5           10  11
     6           12  13
     7           14  15
     8           16  17
   trigger:
   triggertime:
     1600275648:
       localtime  1600275648
       hash:
     1600300800:
       localtime  1600300800
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   group      Beleuchtung
   room       Logik
   stateFormat timer_01_c01, e_Fernseher_WohnZi_STATE
Titel: Antw:keine Aktualisierung bei DOIF mit mehreren CMDs
Beitrag von: MadMax-FHEM am 16 September 2020, 08:59:06
Ich nutze ja so kein DOIF und es mag auch nicht DER Fehler sein...
...ABER:

Zitatand ReadingsNum("Waermepumpe", "temp2", 0) <= "0")

Du nimmst ReadingsNum -> numerisches Ergebnis

machst aus einer numerischen '0' "extra" (warum!?) eine "Zeichenkette" -> "0"

um dann einen numerischen Wert (ReadingsNum) mit einer "Zeichenkette" ("0") zu vergleichen und nutzt dazu einen "numerischen Vergleich": <=

Also das 0 -> "0" ist "unnötig" (um es "freundlich" auszudrücken ;)  )

Und dann stimmt auch der Vergleichsoperator... :)


Ansosnten bei "Zeichenkettenvergleich": eq, ne, gt, lt

Gruß, Joachim
Titel: Antw:keine Aktualisierung bei DOIF mit mehreren CMDs
Beitrag von: Sany am 16 September 2020, 09:19:07
Moin,

versuch doch mal komplett bei DOIF-Syntax zu bleiben, also statt
ReadingsNum("Waermepumpe", "temp2", 0) <= "0"

kannst du

[Waermepumpe:temp2:d] <= 0

nehmen. Liefert ganze Zahlen für temp2.

und dann wie von MadMax-FHEM schon beschrieben muss der Vergleichsoperator stimmen, also <= 0 etc.

CommandRef DOIF:
ZitatEreignissteuerung über Auswertung von Events
...
Filtern nach Ausdrücken mit Ausgabeformatierung   back

Syntax: [<device>:<reading>|<internal>:d<number>|"<regex>":<output>]

d - Der Buchstabe "d" ist ein Synonym für das Filtern nach Dezimalzahlen, es entspricht intern dem regulären Ausdruck "(-?\d+(\.\d+)?)". Ebenfalls lässt sich eine Dezimalzahl auf eine bestimmte Anzahl von Nachkommastellen runden. Dazu wird an das "d" eine Ziffer angehängt. Mit der Angabe d0 wird die Zahl auf ganze Zahlen gerundet.
...
Beispiele:

Es soll aus einem Reading, das z. B. ein Prozentzeichen beinhaltet, nur der Zahlenwert für den Vergleich genutzt werden:

define di_heating DOIF ([adjusting:actuator:d] < 10) (set heating off) DOELSE (set heating on)

sowie
ZitatLesbarkeit der Definitionen
...
Ereignissteuerung 

Vergleichende Abfragen werden in der Bedingung, mit Perl-Operatoren ==, !=, <, <=, >, >= bei Zahlen und mit eq, ne, lt, le, gt, ge, =~, !~ bei Zeichenketten angegeben

Viel Erfolg!
Titel: Antw:keine Aktualisierung bei DOIF mit mehreren CMDs
Beitrag von: Christian80 am 16 September 2020, 20:52:52
Habe die Syntax entsprechend angepasst und es funktioniert jetzt.

Danke für eure Hilfe.
Christian