Notify löst kein neues Event aus

Begonnen von janbert, 05 Juni 2014, 15:47:32

Vorheriges Thema - Nächstes Thema

janbert

Hallo zusammen,

ich habe als Noob ein vermutlich kleines Problem. Für meine Alarmanlage setzte ich momentan ausschließlich homematic-Komponenten ein. Ich möchte unterschiedliche Zustände (scharf, unscharf, verzoegerung, voralarm und alarm) unterscheiden und habe hierfür ein dummy (ANLAGEN_STATUS) definiert.

Zur Aktivierung bzw. Deaktivierung benutze ich die Keymatic vier Tastenfernbedienung. Im ersten Schritt habe ich alle Aktionen im notify der Keymatic definiert und es hat auch funktioniert. Da ich aber verschiedene Aktionen zeitgleich/versetzt ausführen  und gleichzeitig modularen und wiederverwendbaren Code haben möchte, habe ich eine (eigentlich) marginale Änderung durchgeführt, die mich gestern drei Stunden meines Lebens gekostet haben.  Statt alle Aktion im notify-Teil der Keymatic zu definieren, ändere ich dort nur noch den Zustand meines dummies (ANLAGEN_STATUS).

Gleichzeitig habe ich ein neues notify für den dummy (changeState), so dass bei Zustandsänderungen dieser Code ausgeführt werden soll. Das Problem hierbei ist allerdings, wenn ich über die Keymatic den Zustand ändere, wird kein notify-Event für den dummy ausgelöst. In diesem Fall wird gar kein Event (außer natürlich das Keymatic-Event) im Event Monitor angezeigt. Verbose-Mode war ebenfalls auf 5. Der Zustand (ANLAGEN_STATUS) ändert sich merkwürdigerweise aber.

Ändere ich den Status allerdings über die Console oder des Webfrontend (set ANLAGEN_STATUS scharf), wird sowohl der Status geändert als auch das Event ausgelöst. In dem Fall funktioniert mein vorher definiertes notify (changeState) natürlich auch wieder.

Ich hoffe ich habe das ganze nicht zu kompliziert geschrieben und hoffe auf Hilfe:-)

Danke

janbert

Anbei meine Codeschnipsel:

define ANLAGE_STATUS dummy
attr ANLAGE_STATUS room Alarmanlage
attr ANLAGE_STATUS webCmd scharf:delay:unscharf:alarm

define activateEMA notify keymatic_close:Short.* set ANLAGE_STATUS scharf

define deactivateEMA notify keymatic_open:Short.* set ANLAGE_STATUS unscharf

define changeState notify ANLAGE_STATUS {my $State=Value("ANLAGE_STATUS");; pushover('Status EMA: ' . $State)}

Elektrolurch

Hallo,
die Frage ist, ob das Event von Deiner Taste wirklich so aussieht.
Um das zu prüfen, ändere Dein notify mal ab.
define activateEMA notify keymatic_close:Short.* set ANLAGE_STATUS scharf

define activateEMA notify keymatic_close:Short.* {fhem("set ANLAGE_STATUS scharf");; Log(1,"not: $NAME $EVENT");;}


Und wenn dann im Log immer noch nichts steht, änderst Du die Bedingung im notify mal wie folgt ab:

:.*

Dann kommen alle Events von der Taste und Du siehst, wie die wirklich heißen.

Gruß

configDB und Windows befreite Zone!

janbert

Moin,

erst einmal danke für deine Hilfe. Ich versuche das Problem klarer zu schildern. Das Event "keymatic_close:Short.*" wird korrekt ausgelöst und der Befehl "set ANLAGE_STATUS scharf" wird auch korrekt umgesetzt. Der Zustand ändert sich wie gewünscht. Leider wird in der Folge aber nicht das Folgeevent "changeState notify ANLAGE_STATUS" ausgelöst.

ABER, und jetzt wird es merkwürdig: Wenn ich den Befehl "set ANLAGE_STATUS scharf" über das Webfrontend auslöse, wird auch das Folgeevent ausgelöst. Das macht mich ja so stutzig...

Elektrolurch

define changeState notify ANLAGE_STATUS {my $State=Value("ANLAGE_STATUS");; pushover('Status EMA: ' . $State)}

müsste das nicht:
define changeState notify ANLAGE_STATUS:.* {my $State=Value("ANLAGE_STATUS");; pushover('Status EMA: ' . $State)}

heißen?

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Puschel74

Hallo,

das sollte eigentlich egal sein aber ich meine wir hatten schonmal das Problem das es ohne .* nicht geklappt hat.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

janbert

Auch "define changeState notify ANLAGE_STATUS:.* {my $State=Value("ANLAGE_STATUS");; pushover('Status EMA: ' . $State)}" bringt leider keine Besserung...

janbert

Ein Workaround funktioniert: Einfach mit Trigger das Event manuell auslösen. Ist aber alles andere als schön:

define activateEMA notify key_jan_close:Short.* {fhem("set ANLAGE_STATUS scharf");; fhem("trigger ANLAGE_STATUS scharf");;}
bzw.
define deactivateEMA notify key_jan_open:Short.* {fhem("set ANLAGE_STATUS unscharf");; fhem("trigger ANLAGE_STATUS unscharf");;}

Hat jemand noch eine schöne Lösung?