ReadingsVal auf state von DOIF liefert kein Ergebnis ..

Begonnen von Rampler, 08 Juni 2021, 19:18:42

Vorheriges Thema - Nächstes Thema

Rampler

Hallo Leute,

warum liefert ein ReadingsVal auf den state von einem DOIF kein Ergebnis ?
Konkret liefert {ReadingsVal('HZ.button_control','state','') eq "Release""} nichts zurück.
Normalerweise kommt da doch eine 0 oder eben halt eine 1 ...
Das DOIF:
Internals:
   CFGFN     
   DEF        ##
## Steuerung Heizraum Button
##
([HZ.button:1_press] eq "1") 
(setreading FL.EG.dummyanzeige.led08 HZ.button red)
((IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )) 
DOELSEIF
([HZ.button:2_press] eq "1") 
(setreading FL.EG.dummyanzeige.led08 HZ.button red)
((IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )) 
DOELSEIF
([HZ.button:3_press] eq "1") 
(setreading FL.EG.dummyanzeige.led08 HZ.button red)
((IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )) 
DOELSEIF
([HZ.button:4_press] eq "1") 
(setreading FL.EG.dummyanzeige.led08 HZ.button red)
((IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )) 
DOELSEIF
([HZ.button:5_press] eq "1") 
(setreading FL.EG.dummyanzeige.led08 HZ.button red)
((IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )) 
DOELSEIF
([HZ.button:cSceneDim] eq "1" )
(set Kompressor.timer inactive)
(setreading FL.EG.dummyanzeige.led08 HZ.button green)
((IF ("[HZ.button:1_press]" eq "1") (setreading HZ.button 1_press 0) ))   
((IF ("[HZ.button:2_press]" eq "1") (setreading HZ.button 2_press 0) ))   
((IF ("[HZ.button:3_press]" eq "1") (setreading HZ.button 3_press 0) )) 
((IF ("[HZ.button:4_press]" eq "1") (setreading HZ.button 4_press 0) ))
((IF ("[HZ.button:5_press]" eq "1") (setreading HZ.button 5_press 0) ))




   FUUID      60bf7197-f33f-b6d9-aad5-5e75570b9d248996
   MODEL      FHEM
   NAME       HZ.button_control
   NOTIFYDEV  HZ.button,global
   NR         9019
   NTFY_ORDER 50-HZ.button_control
   STATE       Release
   TYPE       DOIF
   VERSION    24519 2021-05-27 17:06:34
   READINGS:
     2021-06-08 18:33:28   Device          HZ.button
     2021-06-08 18:33:28   cmd             6.7
     2021-06-08 18:33:28   cmd_event       HZ.button
     2021-06-08 18:33:28   cmd_nr          6
     2021-06-08 18:33:28   cmd_seqnr       7
     2021-06-08 18:32:55   e_HZ.button_1_press 1
     2021-06-08 18:32:55   e_HZ.button_2_press 0
     2021-06-08 18:32:55   e_HZ.button_3_press 0
     2021-06-08 18:32:55   e_HZ.button_4_press 0
     2021-06-08 18:32:55   e_HZ.button_5_press 0
     2021-06-08 18:33:28   e_HZ.button_cSceneDim 1
     2021-06-08 17:28:47   mode            enabled
     2021-06-08 18:33:28   state            Release
     2021-06-08 18:33:28   wait_timer      no timer
   Regex:
     accu:
     collect:
     cond:
       HZ.button:
         0:
           1_press    ^HZ.button$:^1_press:
         1:
           2_press    ^HZ.button$:^2_press:
         2:
           3_press    ^HZ.button$:^3_press:
         3:
           4_press    ^HZ.button$:^4_press:
         4:
           5_press    ^HZ.button$:^5_press:
         5:
           cSceneDim  ^HZ.button$:^cSceneDim:
   attr:
     cmdState:
       0:
         1 Stunde
       1:
          2 Stunden
       2:
          3 Stunden
       3:
          4 Stunden
       4:
          5 Stunden
       5:
          Release
     wait:
       0:
         
         3600
       1:
         
         7200
       2:
         
         10800
       3:
         
         14400
       4:
         
         18000
       5:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'HZ.button','1_press') eq "1"
     1          ::ReadingValDoIf($hash,'HZ.button','2_press') eq "1"
     2          ::ReadingValDoIf($hash,'HZ.button','3_press') eq "1"
     3          ::ReadingValDoIf($hash,'HZ.button','4_press') eq "1"
     4          ::ReadingValDoIf($hash,'HZ.button','5_press') eq "1"
     5          ::ReadingValDoIf($hash,'HZ.button','cSceneDim') eq "1"
   do:
     0:
       0          setreading FL.EG.dummyanzeige.led08 HZ.button red
       1          (IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )
     1:
       0          setreading FL.EG.dummyanzeige.led08 HZ.button red
       1          (IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )
     2:
       0          setreading FL.EG.dummyanzeige.led08 HZ.button red
       1          (IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )
     3:
       0          setreading FL.EG.dummyanzeige.led08 HZ.button red
       1          (IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )
     4:
       0          setreading FL.EG.dummyanzeige.led08 HZ.button red
       1          (IF ("[Kompressor.timer]" eq "inactive") (set Kompressor.timer active) )
     5:
       0          set Kompressor.timer inactive
       1          setreading FL.EG.dummyanzeige.led08 HZ.button green
       2          (IF ("[HZ.button:1_press]" eq "1") (setreading HZ.button 1_press 0) )
       3          (IF ("[HZ.button:2_press]" eq "1") (setreading HZ.button 2_press 0) )
       4          (IF ("[HZ.button:3_press]" eq "1") (setreading HZ.button 3_press 0) )
       5          (IF ("[HZ.button:4_press]" eq "1") (setreading HZ.button 4_press 0) )
       6          (IF ("[HZ.button:5_press]" eq "1") (setreading HZ.button 5_press 0) )
     6:
   helper:
     DEVFILTER  ^global$|^HZ.button$
     NOTIFYDEV  global|HZ.button
     event      cSceneDim: 1
     globalinit 1
     last_timer 0
     sleepdevice HZ.button
     sleepsubtimer 1
     sleeptimer -1
     timerdev   HZ.button
     timerevent cSceneDim: 1
     triggerDev HZ.button
     timerevents:
       cSceneDim: 1
       1_press: 0
     timereventsState:
       cSceneDim: 1
       1_press: 0
     triggerEvents:
       cSceneDim: 1
       1_press: 0
     triggerEventsState:
       cSceneDim: 1
       1_press: 0
   internals:
   readings:
     all         HZ.button:1_press HZ.button:2_press HZ.button:3_press HZ.button:4_press HZ.button:5_press HZ.button:cSceneDim
   trigger:
   uiState:
   uiTable:
Attributes:
   alias      Heizraum Button Control (Kompressor)
   cmdState   1 Stunde | 2 Stunden | 3 Stunden | 4 Stunden | 5 Stunden | Release
   icon       helper_doif
   room       Heizraum
   wait       ,3600:,7200:,10800:,14400:,18000:0


Sicherlich übersehe ich wie so oft ein Detail ..
VG Klaus
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

MadMax-FHEM

#1
Kannst du das mal in code Tags packen:

{ReadingsVal('HZ.button_control','state','') eq "Release""}

Wieviel einfache und doppelte Anführungszeichen hast du denn bei eq "Release"" ?
Egal wie sieht das falsch aus.
Gibt das keinen Fehler?
EDIT: bei mir gibt das folgenden Fehler
ZitatCan't find string terminator '"' anywhere before EOF at (eval 929296) line 1.
Wie hast du denn getestet? In FhemWeb kann eigentlich nicht sein, sonst nämlich Fehler ;)
Im Log schon nach Fehlern geschaut? Falls du den Aufruf wo eingebaut hattest...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Hi,

weil da ein " zuviel ist :)

Wobei das Ergebnis true eine 1 liefert, das Ergebnis false nichts liefert - damit siehst Du in der Oberfläche nichts - funktioniert aber.

So bekommst Du zuverlässig eine Reaktion in der Oberfläche
{ReadingsVal('HZ.button_control','state','') eq "Release" ? 'wahr':'falsch'}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Rampler

OK, Sorry da wahr ein doppeltes Anführungszeichen zuviel ! (cut and paste)

Aber der Befehl: (Danke Otto)
{ReadingsVal('HZ.button_control','state','') eq "Release" ? 'wahr':'falsch'}
liefert ein falsch, obwohl der state doch auf Release steht, wie aus dem listing zu sehen ist.

Nachtrag:
Wenn ich auf " Release" abfrage funktionierts !!
Ursache :l cmdstate
1 Stunde | 2 Stunden | 3 Stunden | 4 Stunden | 5 Stunden | Release
steht
Vielen Dank für eure Hilfe
Klaus

3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

Otto123

Dafür gäbe es dann noch die etwas unschärfere aber tolerantere Variante (nur zum Test mit festem String, geht auch mit ReadingsVal()):
{" Release" =~ "Release" ? 'wahr':'falsch'}
oder so:
{lc(" Release") =~ "release" ? 'wahr':'falsch'}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz