Notify löst mehrfach aus

Begonnen von Loredo, 05 August 2013, 12:31:19

Vorheriges Thema - Nächstes Thema

Loredo

Hi,

ich habe einen Taster, welcher mit einem virtuellen Device gepeert ist. Auf das virtuelle Device habe ich ein Notify definiert, welches jedoch leider mehrfach aufgerufen wird, wenn ich den Taster betätige :-(

Hier mal das Notify:
# Sleep switcher
#
define n_Julian.sleepswitcher notify v_BR_PButtonRight_Btn2:ON|OFF {\
if (Value("Julian.homestatus") eq "sleep") {\
  Log 3,("Julian just woke up");;\
  fhem "set BR_Bell_LED led greenS,greenS";;\
  fhem "set Julian.homestatus awoken";;\
} else {\
  Log 3,("Julian just went to bed");;\
  fhem "set BR_Bell_LED led greenS,greenS";;\
  fhem "set Julian.homestatus sleep";;\
}\
}


Schaltet der Button auf OFF, dann erscheint folgendes im Log:

2013.08.05 12:26:02 3: Julian just went to bed
2013.08.05 12:26:02 2: CUL_HM set BR_Bell_LED led greenS,greenS
2013.08.05 12:26:02 3: Julian just woke up
2013.08.05 12:26:02 2: CUL_HM set BR_Bell_LED led greenS,greenS


Schaltet der Button auf ON, dann erscheint folgendes im Log:
2013.08.05 12:26:58 3: Julian just went to bed
2013.08.05 12:26:58 2: CUL_HM set BR_Bell_LED led greenS,greenS


Außerdem hängen an Julian.homestatus noch zwei Watchdogs (Julian.homestatus:awoken und Julian.homestatus:sleep), welche auch nicht aufgerufen werden :-(

Setze ich den Status von Julian.homestatus allerdings manuell per Befehl auf awoken oder sleep, funktioniert alles wunderbar wie es soll.

Ich weiß leider nicht mehr weiter ;-(


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Zrrronggg!

Was soll dieser Teil bewirken?

notify v_BR_PButtonRight_Btn2:ON|OFF

Was ist eigentlich das gewünschte Verhalten?

Jemand drückt die ......-Taste und dann soll "....." ausgeläst werden.

Mit anderen Worten: Etwas mehr Prosa würde uns helfen.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Loredo

Ich nahm an das sei selbsterklärend, schon allein von den Bezeichnungen ;-)
Beim Drücken einer Taste soll der Status eines Dummy (Julian.homestatus) so geändert werden, dass er danach awoken (aufgewacht) oder sleep (schlafend) als Status hat (eben abhängig davon wie der Status bisher ist). Praxisbeispiel: Ich gehe ins Bett und drücke den Knopf BR_PButtonRight_Btn2, welcher in FHEM mit dem virtuellen Device v_BR_PButtonRight_Btn2 gepeert ist. Zuvor war mein Status "present" (also normale Anwesenheit; wird von anderen Scripts beeinflusst), danach ist er "sleep". Morgens drücke ich ebenfalls den Button, danach ist er "awoken", weil er vorher auf "sleep" stand. Je nach geändertem Status werden dann entsprechende Notifies und Watchdogs abgefeuert.

"notify v_BR_PButtonRight_Btn2:ON|OFF" reagiert auf Änderungen des virtuellen HM-Devices v_BR_PButtonRight_Btn2, wenn sich der Status auf ON oder OFF ändert.

Genügt das? :D
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Achso, ich sollte vielleicht noch erwähnen, dass das ganze bis vor einigen Wochen problemlos funktioniert hat und erst seit einem Update (wann genau weiß ich nicht mehr) Probleme macht.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Der Vollständigkeit halber hier noch die Button Definitionen selbst (Hardware und virtuell); auch wenn ich glaube, dass man die zur Lösungsfindung nicht braucht ;)

#######################################################
# HARDWARE DEVICE: Push Button right
#

define BR_PButtonRight CUL_HM ABCDEF
attr BR_PButtonRight .devInfo 020000
attr BR_PButtonRight .stc 40
attr BR_PButtonRight expert 2_full
attr BR_PButtonRight firmware 1.1
attr BR_PButtonRight model HM-PB-2-WM55
attr BR_PButtonRight peerIDs
attr BR_PButtonRight room 02. Bedroom
attr BR_PButtonRight serialNr JEQ1234567
attr BR_PButtonRight subType pushButton
attr BR_PButtonRight webCmd getConfig

# Channel 1
define BR_PButtonRight_Btn1 CUL_HM ABCDEF01
attr BR_PButtonRight_Btn1 expert 1
attr BR_PButtonRight_Btn1 model HM-PB-2-WM55
attr BR_PButtonRight_Btn1 peerIDs 00000000,BCDEFG01
attr BR_PButtonRight_Btn1 room 02. Bedroom

# Channel 2
define BR_PButtonRight_Btn2 CUL_HM ABCDEF02
attr BR_PButtonRight_Btn2 expert 1
attr BR_PButtonRight_Btn2 model HM-PB-2-WM55
attr BR_PButtonRight_Btn2 peerIDs 00000000,10000202
attr BR_PButtonRight_Btn2 room 02. Bedroom


#######################################################
# VIRTUAL DEVICE: Push Button right actor
#

define v_BR_PButtonRight CUL_HM 100002
attr v_BR_PButtonRight expert 2_full
attr v_BR_PButtonRight model virtual_2
attr v_BR_PButtonRight peerIDs
attr v_BR_PButtonRight room 02. Bedroom
attr v_BR_PButtonRight subType virtual
attr v_BR_PButtonRight webCmd press short:press long

# Channel 1
define v_BR_PButtonRight_Btn1 CUL_HM 10000201
attr v_BR_PButtonRight_Btn1 comment DeskLight switcher
attr v_BR_PButtonRight_Btn1 expert 1
attr v_BR_PButtonRight_Btn1 model virtual_2
attr v_BR_PButtonRight_Btn1 peerIDs
attr v_BR_PButtonRight_Btn1 room 02. Bedroom
attr v_BR_PButtonRight_Btn1 webCmd press short:press long

# Channel 2
define v_BR_PButtonRight_Btn2 CUL_HM 10000202
attr v_BR_PButtonRight_Btn2 comment Julians Sleep/Awake Button
attr v_BR_PButtonRight_Btn2 expert 1
attr v_BR_PButtonRight_Btn2 model virtual_2
attr v_BR_PButtonRight_Btn2 peerIDs ABCDEF02,
attr v_BR_PButtonRight_Btn2 room 02. Bedroom
attr v_BR_PButtonRight_Btn2 webCmd press short:press long
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Zrrronggg!

ZitatIch nahm an das sei selbsterklärend, schon allein von den Bezeichnungen ;-)
Beim Drücken einer Taste

Ja, das denken viele (inklusive mir selbst muss ich zugeben). Problem dabei ist nur:
Die anderen im Forum dürfen dein gewünschtes Verhalten anhand eines Codes raten, der ja erklärtermaßen NICHT funktioniert. Das ist schon prinzipiell nicht unproblematisch, mal abgesehen davon, dass man dann den Helfern zusätzliche Arbeit aufbürdet: Es ist immer schwieriger Code zu lesen der quasi sein eigener Kommentar und sein eigenes Pflichtenheft sein soll.


Welcher Taste? Egal ob in oder off?

Zitatsoll der Status eines Dummy (Julian.homestatus) so geändert werden, dass er danach awoken (aufgewacht) oder sleep (schlafend) als Status hat (eben abhängig davon wie der Status bisher ist). Praxisbeispiel: Ich gehe ins Bett und drücke den Knopf BR_PButtonRight_Btn2, welcher in FHEM mit dem virtuellen Device v_BR_PButtonRight_Btn2 gepeert ist. Zuvor war mein Status "present" (also normale Anwesenheit; wird von anderen Scripts beeinflusst), danach ist er "sleep". Morgens drücke ich ebenfalls den Button, danach ist er "awoken", weil er vorher auf "sleep" stand. Je nach geändertem Status werden dann entsprechende Notifies und Watchdogs abgefeuert.

Also drückst du letztlich immer nur einen Button.

Zitat"notify v_BR_PButtonRight_Btn2:ON|OFF" reagiert auf Änderungen des virtuellen HM-Devices v_BR_PButtonRight_Btn2, wenn sich der Status auf ON oder OFF ändert.

Genügt das? :D

Nein. Ich verstehe den Sinn nicht. (das mag aber auch an mir liegen). Wenn ich dich recht verstehe, soll der Tastendruck eine Prüfung auslösen und dann je nach Ergebniss was machen. Zu den Werten dieser Prüfung gehört aber *nicht* der Zustand des Tasters selbst. Es kann kann dir wurstegal sein, was der Tastendruck selber macht oder nicht macht und eine Prüfung bietet nur Fehlerquellen.
Eventuell kapiere ich aber auch nur diese "Virtuelle Device" Mimik nicht richtig. Es scheint keinerlei Logik in der Kopplung wischen dem Schalter und dem virtuellen Device zu geben.
Warum wertest du den Schalter nicht direkt aus?

Irgendwo da liegt der Hase im Pfeffer.

Oder ich stehe gerade richtig fett auf dem Schlauch was dein SetUp betrifft.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Loredo

ZitatWelcher Taste? Egal ob in oder off?

Nur eine Taste (die untere, die obere wird zum direkten Schalten der Nachttischlampe genommen).
Deshalb ist es egal ob sie on oder off schaltet, die Logik soll abhängig vom aktuellen Schlafstatus schalten.

ZitatAlso drückst du letztlich immer nur einen Button.

Genau!

Zitat
Zitat"notify v_BR_PButtonRight_Btn2:ON|OFF" reagiert auf Änderungen des virtuellen HM-Devices v_BR_PButtonRight_Btn2, wenn sich der Status auf ON oder OFF ändert.

Genügt das? :D

Nein. Ich verstehe den Sinn nicht. (das mag aber auch an mir liegen). Wenn ich dich recht verstehe, soll der Tastendruck eine Prüfung auslösen und dann je nach Ergebniss was machen. Zu den Werten dieser Prüfung gehört aber *nicht* der Zustand des Tasters selbst.

Richtig.

ZitatEs kann kann dir wurstegal sein, was der Tastendruck selber macht oder nicht macht und eine Prüfung bietet nur Fehlerquellen.
Eventuell kapiere ich aber auch nur diese "Virtuelle Device" Mimik nicht richtig. Es scheint keinerlei Logik in der Kopplung wischen dem Schalter und dem virtuellen Device zu geben.
Warum wertest du den Schalter nicht direkt aus?

ich habe das Notify auch schon mit .* statt ON|OFF definiert, macht eigentlich keinen Unterschied. Ist halt nur genauer mit ON|OFF.

Ich habe verstanden, dass man ein virtuelles Devices benötigt, mit dem man den Tastenkanal peeren kann, damit korrekterweise nach dem Drücken der Taste ein Bestätigungssignal an den Taster zurück gesendet werden kann und dessen LED grün leuchtet; eben ganz so wie bei einem echten Aktor. Genau das habe ich gemacht und das funktioniert ja auch.

Was nicht funktioniert ist an den Status des virtuellen Devices ein Notify zu hängen, weil das virtuelle Device aus irgend einem Grund mehrfach aktualisiert wird, obwohl ich den Taster nur einmal drücke. Und da liegt meiner Meinung nach der Fehler in FHEM.
Als Workaround kann ich sicherlich noch die Wiederholungszeit für das Event erhöhen oder so, aber das resultiert natürlich auch darin, dass ich den Taster un dieser Zeit nicht nochmal drücken kann, falls ich ihn versehentlich betätigt habe und gerne sofort wieder zum vorherigen Status zurückgehen möchte.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Zitat"notify v_BR_PButtonRight_Btn2:ON|OFF" reagiert auf Änderungen des virtuellen HM-Devices v_BR_PButtonRight_Btn2, wenn sich der Status auf ON oder OFF ändert.

Das ist nicht ganz korrekt: es reagiert entweder auf das ON Event vom Geraet v_BR_PButtonRight_Btn2 oder auf beliebige events von einem Geraet namens OFF.

Sonst muesste die Schreibweise v_BR_PButtonRight_Btn2:(ON|OFF) lauten.

Loredo

Das wars, danke!! Muss mir irgendwie durchgerutscht sein ;)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Was nun noch bleibt ist, dass die Watchdogs nur auslösen, wenn ich manuell "set Julian.homestatus sleep" oder "set Julian.homestatus awoken" eingebe.
Wird der Status durch das Drücken des Tasters gesetzt, reagieren die Watchdogs nicht, obwohl der Status von Julian.homestatus korrekt verändert wird. :-(

Hier mal die Watchdogs


# Presence: sleep
#
define wd_Julian.sleep watchdog Julian.homestatus:sleep 00:00:04 Julian.homestatus:awoken {\
  fhem "set BR_Bell_MP3 playTone 1";;\
  fhem "set g_APT_Lights off";;\
  fhem "setstate wd_Julian.awoken defined";;\
}
attr wd_Julian.sleep room 10. Residents

# Presence: awoken
#
define wd_Julian.awoken watchdog Julian.homestatus:awoken 00:00:04 Julian.homestatus:sleep {\
  fhem "set BR_Bell_MP3 playTone 1";;\
  fhem "set Julian.homestatus home";;\
  fhem "setstate wd_Julian.sleep defined";;\
  if (defined($defs{"at_Julian.Wakeup1"})) {fhem "delete at_Julian.Wakeup1"}\
  if (defined($defs{"at_Julian.Wakeup2"})) {fhem "delete at_Julian.Wakeup2"}\
  if (defined($defs{"at_Julian.Wakeup3"})) {fhem "delete at_Julian.Wakeup3"}\
  if (defined($defs{"at_Julian.Wakeup4"})) {fhem "delete at_Julian.Wakeup4"}\
  if (defined($defs{"at_Julian.Wakeup5"})) {fhem "delete at_Julian.Wakeup5;;set BR_Shutter 60"}\
  if (defined($defs{"at_Julian.Wakeup6"})) {fhem "delete at_Julian.Wakeup6"}\
  if (defined($defs{"at_Julian.Wakeup7"})) {fhem "delete at_Julian.Wakeup7"}\
}
attr wd_Julian.awoken room 10. Residents
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Ich wuerde den Event Monitor (oder inform timer in telnet) starten, und pruefen, was die unterschiedlichen Aktionen fuer events ausloesen. Irgendetwas muss da unterschiedlich sein.

Loredo

Ja. Es zeigt sich, dass im Event Monitor gar nicht auftaucht, dass der Status von Julian.homestatus geändert wurde, wenn ich den Taster drücke. Obwohl es faktisch der Fall ist (ich seh's ja im Web Interface).
Hier das Log:

2013-08-06 10:24:32 CUL_HM BR_PButtonRight_Btn2 Short (to v_BR_PButtonRight)
2013-08-06 10:24:32 CUL_HM BR_PButtonRight_Btn2 trigger: Short_16
2013-08-06 10:24:33 CUL_HM v_BR_PButtonRight_Btn2 OFF
2013-08-06 10:24:33 CUL_HM v_BR_PButtonRight_Btn2 virtActState: OFF
2013-08-06 10:24:33 CUL_HM v_BR_PButtonRight_Btn2 virtActTrigger: BR_PButtonRight_Btn2
2013-08-06 10:24:33 CUL_HM v_BR_PButtonRight_Btn2 virtActTrigType: short_Release
2013-08-06 10:24:33 CUL_HM v_BR_PButtonRight_Btn2 virtActTrigRpt: 1
2013-08-06 10:24:33 CUL_HM v_BR_PButtonRight_Btn2 virtActTrigNo: 16
2013-08-06 10:24:33 CUL_HM BR_PButtonRight battery: ok
2013-08-06 10:24:33 CUL_HM BR_PButtonRight BR_PButtonRight_Btn2 Short (to v_BR_PButtonRight)


Danach steht der Status von Julian.homestatus auf "awoken", obwohl es hier nicht auftaucht und der Watchdog wird nicht ausgelöst.
Schiebe ich manuell nochmal ein "set Julian.homestatus awoken" hinterher, wird auch der Watchdog ausgelöst:


2013-08-06 10:24:54 dummy Julian.homestatus awoken
2013-08-06 10:24:58 CUL_HM BR_Bell_MP3 set_playTone 1
2013-08-06 10:24:58 dummy Julian.homestatus home

Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Ich kann das Problem nicht nachstellen: kannst Du bitte ein Minimalversion posten mit Anleitung?

So in der Art: wenn du X definierst und auf Y klickst, dann bekommst du kein Event fuer Z.

Puschel74

Hallo,

Zitatfhem "setstate wd_Julian.awoken defined";;\

Das Problem hat aber nicht zufällig mit setstate zu tun?

Wenn ich bei mir bei einer Änderung eines Device ein notify auslösen möchte mache ich die Änderung am Device per set.
setstate benutze ich bei meiner Rollo wenn ich "nur" das Icon der Rollo anpassen möchte aber keine notifys triggern will durch die Änderung.

Ich kann mich aber, wie üblich, auch irren.
Rudi wäre sicher schon auf das setstate eingegangen wenn das das Problem wäre.

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.

Loredo

Nein, an setstate liegt es sichrlich nicht ;-)
Den Befehl nutze ich nur, um die Watchdogs nachdem sie ausgelöst worden sind wieder scharf zu schalten (entsprechend jeweils gegenseitig). Das funktioniert auch. Nur werden eben die Watchdogs, trotz dass sie scharf geschaltet sind (state=defined) nur ausgelöst, wenn ich den regex1 manuell setze.

@Rudi, Ich schaue mal wie ich das verpackt kriege...
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

betateilchen


define wd_Julian.awoken watchdog Julian.homestatus:awoken 00:00:04 Julian.homestatus:sleep {\
...
  fhem "set Julian.homestatus home";;\


Du versuchst, die entity (Julian.homestatus) mit set zu verändern (von awoken auf home), auf die Du gerade die Ausführung getriggert hast? Das geht sehr häufig schief...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

Zitat von: betateilchen schrieb am Mi, 07 August 2013 14:57
define wd_Julian.awoken watchdog Julian.homestatus:awoken 00:00:04 Julian.homestatus:sleep {\
...
  fhem "set Julian.homestatus home";;\


Du versuchst, die entity (Julian.homestatus) mit set zu verändern (von awoken auf home), auf die Du gerade die Ausführung getriggert hast? Das geht sehr häufig schief...

Ja. Allerdings wird der Watchdog ja gar nicht erst getriggert (sehe ich ja am Watchdog selbst), ergo wird auch der Status nicht auf "home" umgeändert. Wie gesagt es gab eine Zeit, da hat das alles problemlos funktioniert....
Ich überlege grad nochmal wie ich ein Minimal-Szenario definiere, damit man das nachvollziehen kann.


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER