[gelöst] Event-Verhalten und expliziter dummy-Trigger

Begonnen von daedalus0815, 16 März 2019, 12:57:53

Vorheriges Thema - Nächstes Thema

daedalus0815

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) 


Damian

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 "") ...



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

daedalus0815

#2
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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

daedalus0815

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

Damian

#5
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).
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

daedalus0815


....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