Hi,
ich habe folgenden dummy Schalter. Wenn ich das "attr disable 1" setze, und 'on' oder 'off' schalte, ändert sich zwar der dummy state nicht mehr, aber es wird trotzdem ein Event generiert (e.g. im "Event monitor"), und mein nachfolgendes notify reagiert. Ich kann das nachfolgende notify nicht auf disabled setzten, weil das Suchmuster des nachfolgenden Notify mehrere Schalter enthält.
Ich hätte erwartet, dass, wenn 'attr disable = 1' gesetzt ist, kein Event mehr generiert wird. In der Comandref oder Wiki ist das nicht beschrieben, soll das so sein oder ist das ein Fehler?
defmod test1 dummy
attr test1 disable 1
attr test1 event-on-change-reading state
attr test1 room Test
attr test1 webCmd on:off
Das ist zwar keine Absicht, aber es zu fixen wuerde einen groesseren Umbau mit Nebenwirkungen nach sich ziehen.
Mir faellt nur ein cmdalias als Workaround ein.
OK, danke, dann weiss ich Bescheid, und werde mir dann einen Workaround bauen.
setze doch zb
attr test1 event-on-change-reading blabla
damit sollten keine events mehr kommen.
'blabla' funktioniert auch nicht, gerade probiert ...
Du könntest einen Event-Handler nehmen, der den Status auswertet, statt das Event.
Hallo Damian,
falls Du sowas meinst:
defmod testfhem1_n notify test1:.* {
my $state = ReadingsVal ("test1","state","nA");
if ($state eq "on") {...}
}
das hier funktioniert für den Fall, das der gegenwärtige state 'off' ist (der sich durch das disable ja dann auch nicht mehr ändert), ich ein 'on' auslöse, und und ich dann prüfe, ob der Status 'on' ist. Also für den Fall das der Schalter aus ist.
Aber für den Fall das der state schon 'on' ist, wird das Event immer noch durchgelassen.
Wahrscheinlich meinst Du aber folgendes: Bei jedem Event den aktuellen state separat abspeichern (zum beispiel in einem seperaten Reading), und schauen ob dieses Reading und der Event unterschiedlich sind. Ja, das funktioniert wenn man ein event-on-change-reading state gesetzt hat ....
Danke für die Idee!
Im Prinzip das Gleiche nur etwas kürzer und ohne mehrfache Ausführung (erst wieder wenn test1 zwischendurch off war):
defmod testfhem1 DOIF ([test1:state] eq "on") (set ...)
Eine weitere Lösung wäre z.B. den disabled Status im notify abzufragen:
defmod testfhem1_n notify test1:.* {
return if (IsDisabled($NAME));
if ($state eq "on") {...}
}
Gruß
Dan