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
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
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
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
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'}