Hallo,
ich habe ein für mich neues DOIF-Verhalten erlebt, welches ich nicht einordnen kann, ob es sich um einen Fehler o.ä. handelt.
98_DOIF.pm 18890 2019-03-13 18:56:41Z
Zunächst die Definition meines dummys.
defmod HeizGrenze dummy
attr HeizGrenze alias HeizSoll
attr HeizGrenze event-on-update-reading uzsuDropDown
attr HeizGrenze fp_HOME 382,1016,7,HeizGrenze,
attr HeizGrenze group Max_Feuchte
attr HeizGrenze icon temperature_humidity@red
attr HeizGrenze readingList uzsuDropDown
attr HeizGrenze room Keller,__Steuerung__,ZWave,dummies
attr HeizGrenze setList uzsuDropDown:uzsuDropDown,26,21.9,21.7,21.5,21.3,21.1,20.9,20.7,20.5,20.3,20.1,19.9,19.7,19.5,19,17,15
attr HeizGrenze stateFormat uzsuDropDown
\
\
\
attr HeizGrenze webCmd uzsuDropDown
attr HeizGrenze widgetOverride readingList
setstate HeizGrenze 21.3
setstate HeizGrenze 2019-03-16 08:47:35 TEMP 7.8
setstate HeizGrenze 2018-10-23 00:10:30 state Grenze 21.2
setstate HeizGrenze 2019-03-16 08:47:35 uzsuDropDown 21.3
....und jetzt der Abschnitt meines DOIFs, der vor dem letzten Update beim Aufruf von "trigger HeizGrenze uzsuDropDown" noch funktionierte:
( [HeizGrenze:uzsuDropDown] and ([?Heizung_Kaminofen_di] ne "on") )
(....)
DOELSE
()
Der o.e. "trigger HeizGrenze uzsuDropDown" funktioniert jetzt nur noch als RegEx, mit...man beachte die Anführungszeichen !
( [HeizGrenze:"uzsuDropDown"] and ([?Heizung_Kaminofen_di] ne "on") )
Ist da so gewollt ?
Mein BugFix ... :
trigger überall ersetzen durch "set HeizGrenze uzsuDropDown [HeizGrenze:uzsuDropDown]" , dann funktioniert es mit der alten Variante (also ohne regex)
Das Verhalten hat weniger etwas mit der aktuellen DOIF-Version zu tun - an der Stelle hat sich im DOIF auch nichts geändert.
[HeizGrenze:uzsuDropDown] ist eine Readingabfrage, die einen Trigger von uzsuDropDown erwartet. Wenn das Reading nicht belegt ist oder Null ist, dann ist diese Abfrage nicht wahr. Das hat etwas mit Perl zu tun, denn
if ($bla) ...
entspricht
if ($bla != 0) ...
oder
if ($bla ne "") ...
Danke Damian für deine Antwort....
Ich bin mir nicht sicher, ob ich's jetzt verstanden habe.
Der dummy hat doch einen Wert von 21.3 (setstate...) ?
Ich setzte bisher in meiner Steuerung :
( [09:00])
( trigger HeizGrenze uzsuDropDown )
DOELSEIF
(....)
und dieser Trigger funktionierte bisher über Monate.
Mein derzeitiger sinnvoller/sinnloser Bugfix ?:
( [HeizGrenze:uzsuDropDown] and ([?Heizung_Kaminofen_di] ne "on") )
(set....)
DOELSEIF
( [HeizGrenze:"uzsuDropDown"] and ([?Heizung_Kaminofen_di] ne "on") )
( set $SELF cmd_1)
DOELSE
(set....)
Mir scheint das explizite Antriggern im DOIF nicht durchzukommen...
ODER
das Verhalten der Trigger-Funktion hat sich verändert ??
Da dies der einzige Trigger ist, den ich explizit benutze, kann ich das für mich fixen...das Verhalten ist nur neu für mich.
------------------------------------------
P.S.
noch eine verallgemeinerte Anregung meines Bugfixes, falls man gezwungen sein sollte, den Wert via [device:reading:d] abzuprüfen.
( ([HeizGrenze:uzsuDropDown:d] > 20) and ([?Heizung_Kaminofen_di] ne "on") )
(set....)
DOELSEIF
( [HeizGrenze:"uzsuDropDown"] )
( set HeizGrenze uzsuDropDown [HeizGrenze:uzsuDropDown]) ## Trigger wird hier ausgelöst ohne Wertänderung von HeizGrenze => cmd_1 sollte danach starten
DOELSE
(set....)
Sorry, noch eine letzte "Schnapsidee" meinerseits ..... ;)
Sofern ich in Zukunft explizit mit "trigger xxx reading" arbeiten will, werde ich zukünftig einfach immer ein eigenes "RegEx"-DOIF anlegen:
DEF ( [HeizGrenze:"uzsuDropDown"] )
(set HeizGrenze uzsuDropDown [HeizGrenze:uzsuDropDown])
attr do always
Bei mir funktioniert das Antriggern von Readingangaben mit der aktuellen Version wie gewohnt (gerade mit setreading getestet).
Poste mal die Events aus dem Eventmonitor zu "uzsuDropDown".
Der Unterschied ist, dass bei [HeizGrenze:uzsuDropDown] genau auf das Event "uzsuDropDown" geprüft wird, bei [HeizGrenze:"uzsuDropDown"] wird dagegen getriggert, wenn "uzsuDropDown" irgendwo im Event vorkommt.
Das kann ich bestätigen:
Ein: "setreading HeizGrenze uzsuDropDown 21.1" triggert einwandfrei, wobei 21.1 dem derzeitigen Status des dummy entspricht...also ohne Wertänderung.
Ein: "trigger HeizGrenze uzsuDropDown" funktioniert NICHT.
Im Eventmonitor steht lediglich: 2019-03-17 11:13:12.607 dummy HeizGrenze uzsuDropDown
Zitat von: daedalus0815 am 17 März 2019, 11:22:05
Das kann ich bestätigen:
Ein: "setreading HeizGrenze uzsuDropDown 21.1" triggert einwandfrei, wobei 21.1 dem derzeitigen Status des dummy entspricht...also ohne Wertänderung.
Ein: "trigger HeizGrenze uzsuDropDown" funktioniert NICHT.
Im Eventmonitor steht lediglich: 2019-03-17 11:13:12.607 dummy HeizGrenze uzsuDropDown
Die Readingangaben sind ja dazu da Readings abzufragen, daher muss die Syntax des Events schon einigermaßen dazu passen, also
trigger HeizGrenze uzsuDropDown: 123
Wenn das DOIF-Modul auf alle Trigger eines Devices reagieren soll, so musst du checkReadings 0 als Attribut setzen (das war tatsächlich bis zum 2018-04-23 die Voreinstellung).
....checkReadings 0 und "trigger HeizGrenze uzsuDropDown"
Das war's ....so einfach und dafür hab' ich das Forum beschäftigen müssen :-[
DANKE !
DOIF ist :D