FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Esteban am 08 März 2016, 00:58:31

Titel: Wie wird eine Abfrage auf einen virtuellen Aktor vorgenommen?
Beitrag von: Esteban am 08 März 2016, 00:58:31
Hallo!

Ich habe einen HM-PB-2-WM55-2 Funk-Wandtaster 2-fach. Alles ganz frisch nachdem ich ein Autocreate Fauxpas beim Pairen hatte bin ich nun ein Stück weiter.

Da ich ihn zum eleganten Steuern (ohne die blöde Funksteckdosen-FB) einer bestimmten Funksteckdose verwenden will - die kein Rückkanal hat - habe ich lt. Anleitung einen Virtuellen Aktor angelegt, der mir dann entsprechend eine Rückmeldung gibt:

Internals:
   DEF        56427801
   NAME       virtueller_Aktor_Btn1
   NR         156
   NTFY_ORDER 50-virtueller_Aktor_Btn1
   STATE      OFF
   TYPE       CUL_HM
   chanNo     01
   device     virtueller_Aktor
   peerList   sz_HM_Taster_Btn_01,
   Readings:
     2016-03-08 00:21:18   peerList        sz_HM_Taster_Btn_01,
     2016-03-08 00:45:58   state           OFF
     2016-03-08 00:45:58   trigLast        sz_HM_Taster_Btn_01:short
     2016-03-08 00:45:58   trig_sz_HM_Taster_Btn_01 short
     2016-03-08 00:45:58   virtActState    OFF
     2016-03-08 00:45:58   virtActTrigNo   86
     2016-03-08 00:45:58   virtActTrigRpt  1
     2016-03-08 00:45:58   virtActTrigType short_Release
     2016-03-08 00:45:58   virtActTrigger  sz_HM_Taster_Btn_01
   Helper:
     trgLgRpt   0
     Expert:
       def        1
       det        0
       raw        1
       tpl        0
     Role:
       chn        1
       vrt        1
Attributes:
   model      virtual_2
   peerIDs    36471901,
   room       Homematic
   webCmd     press short:press long



Jetzt muss ich mal ganz blöd fragen: wenn ich das Ereignis Schalter eq "on" abfragen will... was muss ich da nehmen?

Da der Virtuelle Aktor ja auch andere Geräte (sind das die Peers, also die in der Peer List stehen?) schalten kann denke ich mal, dass man es irgendwie über

z.B.DOIF ( [virtueller_Aktor_Btn1.sz_HM_Taster_Btn_01] eq "on") (set Lampe_an)

machen muss, oder lieg ich da völlig falsch?

Sorry wenn ich so blöd nachfrage aber wenn die ganzen Links in der Google-Suche schon rosa sind, dann muss man wohl mal lieber nett fragen :)

Ich möchte einfach nur ein DOIF über den virtuellen Aktor ausführen.

Und wie frage ich die long_press - Sachen ab?

Vielen Dank und GN8! :)
Titel: Antw:Wie wird eine Abfrage auf einen virtuellen Aktor vorgenommen?
Beitrag von: frank am 08 März 2016, 07:58:00
der virtuelle aktor toggelt nur.
zum gezielten setzen über short/long würde ich die events des realen buttons nehmen. schau im eventmonitor, was alles kommt und dein vorhaben am besten umsetzen lässt.
Titel: Antw:Wie wird eine Abfrage auf einen virtuellen Aktor vorgenommen?
Beitrag von: Esteban am 08 März 2016, 16:54:44
Hallo Frank!

Danke für die Info! Heut Nacht um 1 Uhr war Maintenance-Time, da konnt ich nix mehr im Forum posten :)

Ich hab das erst einmal mit einem Notify gelöst, will das aber eigentlich per DOIF machen weil ichs eleganter finde, jetzt hab ich 4 Notifys für 2 Button mit short-long:

define sz_HM_Taster_BTN1_sz_Schrank_OFF notify sz_HM_Taster_Btn_01.Long.* set sz_LED_Schrank off

...und halt noch 3x

Na ich werde mal ein wenig probieren.

SO funktioniert das jetzt aber schonmal top. Nur wenn z.B. die Lampe manuell angeschaltet wird soll dann auch mein Standard-Lampen-An-Aus-Script irgendwie mitbekommen, dass die Lampe dann nicht einfach so mit ausgeschaltet wird - jetzt wirds für einen Anfänger in Sachen FHEM ganz schön komplex :)

Grüße

Stefan
Titel: Antw:Wie wird eine Abfrage auf einen virtuellen Aktor vorgenommen?
Beitrag von: Esteban am 09 März 2016, 01:33:26
So kurzer Zwischenstand...

Ich hab ja mit Notify entsprechend die Funktionen realisieren können.

define sz_HM_Taster_BTN2_fl_LED_ON notify sz_HM_Taster_Btn_02.Short.* set fl_LED on
attr sz_HM_Taster_BTN2_fl_LED_ON room Schlafzimmer
define sz_HM_Taster_BTN2_fl_LED_OFF notify sz_HM_Taster_Btn_02.Long.* set fl_LED off
attr sz_HM_Taster_BTN2_fl_LED_OFF room Schlafzimmer
define sz_HM_Taster_BTN1_sz_Schrank_ON notify sz_HM_Taster_Btn_01.Short.* set sz_LED_Schrank on
attr sz_HM_Taster_BTN1_sz_Schrank_ON room Schlafzimmer
define sz_HM_Taster_BTN1_sz_Schrank_OFF notify sz_HM_Taster_Btn_01.Long.* set sz_LED_Schrank off
attr sz_HM_Taster_BTN1_sz_Schrank_OFF room Schlafzimmer


Fand ich aber irgendwie nicht so schön, daher hab ich dann ein DOIF draus gemacht.

Mein Virtueller Aktor schaut ja so aus:

# Virtueller Aktor für Taster Schlafzimmer
define virtueller_Aktor CUL_HM 564278
attr virtueller_Aktor IODev hmusb
attr virtueller_Aktor expert 2_raw
attr virtueller_Aktor model virtual_2
attr virtueller_Aktor room Zentrale
attr virtueller_Aktor subType virtual
attr virtueller_Aktor webCmd virtual
define virtueller_Aktor_Btn1 CUL_HM 56427801
attr virtueller_Aktor_Btn1 model virtual_2
attr virtueller_Aktor_Btn1 peerIDs 36471901,
attr virtueller_Aktor_Btn1 room Zentrale
attr virtueller_Aktor_Btn1 webCmd press short:press long
define virtueller_Aktor_Btn2 CUL_HM 56427802
attr virtueller_Aktor_Btn2 model virtual_2
attr virtueller_Aktor_Btn2 peerIDs 36471902,
attr virtueller_Aktor_Btn2 room Zentrale
attr virtueller_Aktor_Btn2 webCmd press short:press long


ich sehe im Event-Monitor, dass der BTN1 bei einem Short-Klick

2016-03-09 01:19:36 CUL_HM sz_HM_Taster battery: ok
2016-03-09 01:19:36 CUL_HM sz_HM_Taster CMDs_done
2016-03-09 01:19:36 CUL_HM sz_HM_Taster sz_HM_Taster_Btn_01 Short
2016-03-09 01:19:36 CUL_HM sz_HM_Taster_Btn_01 Short (to virtueller_Aktor)
2016-03-09 01:19:36 CUL_HM sz_HM_Taster_Btn_01 trigger: Short_15
2016-03-09 01:19:36 CUL_HM sz_HM_Taster_Btn_01 trigger_cnt: 15
2016-03-09 01:19:36 CUL_HM virtueller_Aktor_Btn1 OFF
2016-03-09 01:19:36 CUL_HM virtueller_Aktor_Btn1 trigLast: sz_HM_Taster_Btn_01:short
2016-03-09 01:19:36 CUL_HM virtueller_Aktor_Btn1 trig_sz_HM_Taster_Btn_01: short
2016-03-09 01:19:36 CUL_HM virtueller_Aktor_Btn1 virtActState: OFF
2016-03-09 01:19:36 CUL_HM virtueller_Aktor_Btn1 virtActTrigNo: 15
2016-03-09 01:19:36 CUL_HM virtueller_Aktor_Btn1 virtActTrigRpt: 1
2016-03-09 01:19:36 CUL_HM virtueller_Aktor_Btn1 virtActTrigType: short_Release
2016-03-09 01:19:36 CUL_HM virtueller_Aktor_Btn1 virtActTrigger: sz_HM_Taster_Btn_01


OK, der virtuelle Aktor triggert nur. Ist ja ne Frage, was ich machen will.

Eben noch dachte ich, der Taster hat folgende Funktionen:

Button1: kurz: lampe1 an lang lampe 1 aus
Button2: kurz: lampe2 an lang lampe 2 aus

Ich glaube das ist so auch am sinnvollsten, denn das ganze so umzustellen ist sinnlos:
Button1: kurz: lampe1 an kurz wieder drücken lampe 1 aus, lang drücken lampe2 an lang wieder drücken lampe2 aus und das auch für btn2...

Also bleiben wir mal bei der Usability und sagen Button 1 für lampe 1 an kurz und lang aus und ebenso für button 2 mit lampe 2.

Meine DOIFs sahen jetzt so aus, ohne den Virtuellen Aktor zu benutzen:

# DOIF für Taster Schlafzimmer
define sz_fl_Lava DOIF ([sz_HM_Taster_Btn_01:"Short"]) (set fl_Lava on) DOELSE (set fl_Lava off)
attr sz_fl_Lava cmdState on|off
attr sz_fl_Lava room Schlafzimmer
define sz_fl_LED DOIF ([sz_HM_Taster_Btn_02:"Short"]) (set fl_LED on) DOELSE (set fl_LED off)
attr sz_fl_LED cmdState on|off
attr sz_fl_LED room Schlafzimmer


Ich hab erst einmal andere Lampen genommen bevor meine bessere Hälfte rebelliert gegen meine nächtlichen FHEM-Aktivitäten :)

Das funktioniert so wunderbar. Gibt es Verbesserungspotential?

Nochmal blöd gefragt: der Virtuelle Aktor ist jetzt nur dafür da, um dem Taster eine Rückmeldung zu liefern, damit er grün leuchtet, richtig??? Ach so: wenn ich richtig verstanden habe greif ich das Event vom Taster direkt ab, aber wenn ich den Virtuellen Aktor nehme den Status?

Danke und GN8!
Titel: Antw:Wie wird eine Abfrage auf einen virtuellen Aktor vorgenommen?
Beitrag von: frank am 09 März 2016, 09:27:22
ZitatNochmal blöd gefragt: der Virtuelle Aktor ist jetzt nur dafür da, um dem Taster eine Rückmeldung zu liefern, damit er grün leuchtet, richtig???
im prinzip schon. durch das peering sendet der taster eventuell zusätzliche events => longRelease?

Zitatwenn ich richtig verstanden habe greif ich das Event vom Taster direkt ab, aber wenn ich den Virtuellen Aktor nehme den Status?
letztendlich ist es egal, welche events du benutzt.

das reading state würde ich, zumindestens bei homematic, grundsätzlich vermeiden, da hier meistens zusätzlich diverse andere infos "gesendet" werden, die dann ggf erstmal das triggernde notify/doif/filelog unnötigerweise aufrufen.
aber bekanntlich ist rom gut erreichbar.  :)

Zitatdenn das ganze so umzustellen ist sinnlos:
Button1: kurz: lampe1 an kurz wieder drücken lampe 1 aus, lang drücken lampe2 an lang wieder drücken lampe2 aus und das auch für btn2...
wieso sinnlos? dadurch könntest du einen button (btn2) für 2 weitere funktionen (short/long) gewinnen.
Titel: Antw:Wie wird eine Abfrage auf einen virtuellen Aktor vorgenommen?
Beitrag von: Esteban am 09 März 2016, 20:26:40
Ja der sendet noch mehr, klar! Wenn man es braucht. Ich hab ja gelernt, dass auch vieles Schnuppe ist von wo man sich das holt :)

Ja beim Reading state wird z.B. Short und LongRelease oder ähnlich gesendet... da kann man dann schon mal in einen Fehler laufen bzw. in ein "Versehen".

Sinnlos nicht, okay - aber wenn ich den Button mit zuviel Funktionen ausstatte drehen die anderen Personen im Haushalt ab.

Die schauen mich seit 2 Wochen nur noch mit Fragezeichen an, was ich schon wieder für einen Quatsch veranstalte - aber dass das Licht zur Dämmerung angeht ist ja sooo praktisch ;)