FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: daedalus0815 am 16 März 2019, 12:57:53

Titel: [gelöst] Event-Verhalten und expliziter dummy-Trigger
Beitrag von: daedalus0815 am 16 März 2019, 12:57:53
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) 

Titel: Antw:neues Event-Verhalten bei trigger ?
Beitrag von: Damian am 16 März 2019, 22:08:48
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 "") ...



Titel: Antw:neues Event-Verhalten bei trigger ?
Beitrag von: daedalus0815 am 17 März 2019, 10:12:33
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
Titel: Antw:Event-Verhalten und expliziter dummy-Trigger
Beitrag von: Damian am 17 März 2019, 11:02:00
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.
Titel: Antw:Event-Verhalten und expliziter dummy-Trigger
Beitrag 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
Titel: Antw:Event-Verhalten und expliziter dummy-Trigger
Beitrag von: Damian am 17 März 2019, 14:29:33
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).
Titel: Antw:Event-Verhalten und expliziter dummy-Trigger
Beitrag von: daedalus0815 am 17 März 2019, 15:31:20

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