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
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)}
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ß
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...
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
Hallo,
das sollte eigentlich egal sein aber ich meine wir hatten schonmal das Problem das es ohne .* nicht geklappt hat.
Grüße
Auch "define changeState notify ANLAGE_STATUS:.* {my $State=Value("ANLAGE_STATUS");; pushover('Status EMA: ' . $State)}" bringt leider keine Besserung...
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?