Long Short bei virtual Aktor auswerten

Begonnen von Garbsen, 30 Juli 2016, 21:26:16

Vorheriges Thema - Nächstes Thema

Garbsen

Moin

Ich habe eine HM-RC-8 Fernbedienung die ich zum Steuern von Nicht-HM Devices (Somfy Rolläden) nutze. Hierfür habe ich einen Virtual Aktor erstellt und die Kanäle der Fernbedienung mit den Kanälen des Aktor pepeert (Single Set).
Ich kann hier jetzt je Kanal zwischen On und Off unterscheiden und mittels DOIF den Somfy Rolläden steuern.

Ich würde aber gerne auch die Möglichkeit der FB nutzen zwischen Long und Short Tastendrücken zu unterscheiden. Jemand eine Idee, wie ich das hinbekomme?

Hier ein Auszug aus meiner FHEM.cfg


define Remote_WZ CUL_HM 4C7EE9
   attr Remote_WZ IODev CUL_0
   attr Remote_WZ IOgrp VCCU:CUL_0
   attr Remote_WZ autoReadReg 4_reqStatus
   attr Remote_WZ expert 2_raw
   attr Remote_WZ firmware 1.1
   attr Remote_WZ group Fernbedienung
   attr Remote_WZ model HM-RC-8
   attr Remote_WZ room CUL_HM
   attr Remote_WZ serialNr NEQ0503128
   attr Remote_WZ subType remote
   attr Remote_WZ webCmd getConfig:clear msgEvents
define FileLog_Remote_WZ FileLog ./log/Remote_WZ-%Y.log Remote_WZ
   attr FileLog_Remote_WZ logtype text
   attr FileLog_Remote_WZ room CUL_HM
define Remote_WZ_1 CUL_HM 4C7EE901
   attr Remote_WZ_1 group Fernbedienung
   attr Remote_WZ_1 model HM-RC-8
   attr Remote_WZ_1 peerIDs 00000000,12345601,
   attr Remote_WZ_1 room Dummies
define Remote_WZ_2 CUL_HM 4C7EE902
   attr Remote_WZ_2 group Fernbedienung
   attr Remote_WZ_2 model HM-RC-8
   attr Remote_WZ_2 peerIDs 00000000,12345602,
   
define VA_1 CUL_HM 123456
   attr VA_1 IODev VCCU
   attr VA_1 expert 2_raw
   attr VA_1 room CUL_HM,Dummies
   attr VA_1 subType virtual
   attr VA_1 webCmd virtual
define VA_1_1 CUL_HM 12345601
   attr VA_1_1 group Fernbedienung
   attr VA_1_1 model virtual_8
   attr VA_1_1 peerIDs 4C7EE901,
   attr VA_1_1 room Dummies
   attr VA_1_1 webCmd press short:press long
define VA_1_2 CUL_HM 12345602
   attr VA_1_2 group Fernbedienung
   attr VA_1_2 model virtual_8
   attr VA_1_2 peerIDs 4C7EE902,
   attr VA_1_2 room Dummies
   attr VA_1_2 webCmd press short:press long
   
define Fernbedienung_1_1 DOIF ([VA_1_1] eq "ON") (set Rollo5 on)\
DOELSEIF ([VA_1_1] eq "OFF") (set Rollo5 stop)\
DOELSEIF ([VA_1_2] eq "ON") (set Rollo5 off)\
DOELSE ([VA_1_2] eq "OFF") (set Rollo5 stop)
   attr Fernbedienung_1_1 group Fernbedienung,Rolläden WZ

define Fernbedienung_1_2 DOIF ([VA_1_3] eq "ON") (set Rollo6 on, set Rollo7 on)\
DOELSEIF ([VA_1_3] eq "OFF") (set Rollo6 stop, set Rollo7 stop)\
DOELSEIF ([VA_1_4] eq "ON") (set Rollo6 off, set Rollo7 off)\
DOELSE ([VA_1_4] eq "OFF") (set Rollo6 stop, set Rollo7 stop)
   attr Fernbedienung_1_2 group Fernbedienung,Rolläden WZ
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

betateilchen

Zitat von: Garbsen am 30 Juli 2016, 21:26:16
Ich würde aber gerne auch die Möglichkeit der FB nutzen zwischen Long und Short Tastendrücken zu unterscheiden. Jemand eine Idee, wie ich das hinbekomme?

Ich mache das bei allen meinen Fernbedienungen über ein simples notify.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Garbsen

Zitat von: betateilchen am 30 Juli 2016, 21:56:04
Ich mache das bei allen meinen Fernbedienungen über ein simples notify.

Kannst Du bitte mal einen Beispielscode posten?
Was genau überwachst Du mit notify?
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

betateilchen

define rc_notify notify .*_Btn_...(Short|Long).* {mache irgendwas mit  $EVTPART0}


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

define Fernbedienung_1_2 DOIF ([VA_1_3:"Short"]) (set Rollo6 on, set Rollo7 on)...

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

Meine Lösung funktioniert aber mit einem einzigen notify für ALLE meine Fernbedienungen und für Long und Short gleichzeitig :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Garbsen

Zitat von: betateilchen am 31 Juli 2016, 10:57:56
Meine Lösung funktioniert aber mit einem einzigen notify für ALLE meine Fernbedienungen und für Long und Short gleichzeitig :)

Fragst Du mit dem notify direkt die Remote ab? Ohne Umweg über einen Virtual Aktor?
Genau das habe ich nicht hinbekommen, da reagiert nichts.
Ich muss es nochmal versuchen, vielleicht habe ich Syntax-Fehler.
Copy Paste doch bitte mal den original, kompletten notify-code
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

betateilchen

#7
define n_remote_HomeMatic notify .*_Btn_...(Short|Long).* {myRemote($NAME,$EVTPART0)}

myRemote() ist eine Funktion in der 99_myUtils.pm, in der sämtliche Fernbedienungen mit allen Tasten und der Unterscheidung nach Short und Long ausgewertet werden. Übrigens nicht nur die Homematic-Fernbedienungen, sondern auch die EnOcean Wandtaster (über ein zweites notify für enocean).

Die Funktion, die ich verwende, wird Dir nicht viel nützen.
Aber zum Testen kannst Du folgende Funktion in Deine 99_myUtils.pm einbauen, dann solltest Du entsprechende Meldungen im Logfile bekommen.


sub myRemote($$) {
  my ($name,$evt) = @_;
  Debug "Name: $name Event: $evt";
  return
}


Entscheidend ist natürlich, wie die Fernbedienungen und ihre Tasten bei Dir in fhem "heißen". Bei mir haben die alle den standard-Namen, der bei Anlernen der Fernbedienungen vergeben wurde - siehe Screenshot im Anhang.

Die Auswertung in meiner 99_myUtils.pm sieht prinzipiell so aus:



      when ('HM_4987D5') {
        CommandSet(undef,'wz_Licht_Sessel on')               if ($button ==  1 && $evt eq "Short");
        CommandSet(undef,'wz_Licht_Sessel off')              if ($button ==  1 && $evt eq "Long");
        CommandSet(undef,'wz_Licht_Bild on')                 if ($button ==  2 && $evt eq "Short");
        CommandSet(undef,'wz_Licht_Bild off')                if ($button ==  2 && $evt eq "Long");
        CommandSet(undef,'wz_Licht_Hifi on')                 if ($button ==  3 && $evt eq "Short");
        CommandSet(undef,'wz_Licht_Hifi off')                if ($button ==  3 && $evt eq "Long");


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Garbsen

@Betateilchen
Ok, das sieht interessant aus, mit 99_myutils.pm habe ich mich noch nicht beschäftigt. Nutze FHEM erst seit ein paar Wochen und lerne ständig dazu. Ich werde mir das auf jeden Fall mal genauer ansehen, scheint gute Lösung zu sein.

Vorerst bleibe ich bei meiner DOIF Lösung, allerdings verändert auf Abfrage long short, hier Danke an Damian!
Ich hatte das schon probiert aber nicht hinbekommen, denke Syntaxfehler Long / long, jedenfalls klappt es so jetzt und ist weitaus besser als die on off Abfrage für meine Zwecke.
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2