HM-RC-12 Funkfernbedienung 12 Tasten

Aus FHEMWiki

HomeMatic Fernbedienung mit 12 Tasten, auch in schwarz als HM-RC-12-B .

Fernbedienung mit 5 Tastenpaaren mit beleuchteten Beschriftungsfeldern. Das sechste Tastenpaar liegt etwas versteckt rechts neben dem 4. und 5. Tastenpaar.

Die Fernbedienung verfügt außerdem über eine Status-LED, die in den Farben Grün, Rot und Orange leuchten bzw. blinken kann.

Bedeutung der LED-Farben und -Sequenzen / Fehlercodes

Siehe Homematic-Link

Anbindung der Fernbedienung an fhem

Wie alle HomeMatic-Komponenten wird die Fernbedienung durch das Modul CUL_HM angebunden. Die Funkverbindung ist mittels einer HomeMatic-CCU, eines HMLAN Konfigurator oder eines CUL/CUNx/COC etc. im HM-Mode möglich. Im Weiteren wird 'HMLAN Konfigurator' synonym für alle diese Devices verwendet.

Anlernen der Fernbedienung an fhem

  1. Sicherstellen, dass autocreate aktiv ist.
  2. HMLAN Konfigurator in den Pairing-Modus bringen durch hmPairForSec oder hmPairSerial .
  3. Den Anlerntaster an der Rückseite der Fernbedienung drücken (bei Verwendung von hmPairForSec innerhalb der angegebenen Zeitspanne). In fhem wird nun die Fernbedienung als device angelegt. Bevor die Tasten angelernt werden, sollte man zunächst
  4. das fhem-device umbenennen durch Verwendung des Befehls rename, im Beispiel ist der neue Name HMremote.
  5. In Betracht ziehen, das autocreate von Filelogs (nicht gesamt) zu deaktivieren. Es werden sonst im nächsten Schritt 12 FileLogs (eines je Taste) angelegt, deren Definition bei JEDEM fhem-event geprüft wird - was nicht ohne Auswirkung auf die perofrmance bleiben kann. Alternativ kann man die FileLogs auch nach Anlage löschen.
  6. Erst nach dem Umbenennen den Anlerntaster an der Fernbedienung ein weiteres mal drücken. Daraufhin werden die 12 Tasten-Kanäle als weitere (Sub)devices in fhem angelegt. Diese werden mit dem Namen des bei Schritt 3 erzeugten bzw. in Schritt 4 umbenannten devices gefolgt vom Zusatz Btn_x angelegt.

Die 12 Kanäle heissen in fhem also <NameDesDevice>Btn_1 .. <NameDesDevice>Btn_12.

Im device sind diese 12 Subdevices/Kanäle verlinkt über die Attribute channel01 .. channel0C (0C hex = 0x0C = 12dez) In fhem.cfg sieht das folgendermassen aus:

define HMremote CUL_HM 11477B
attr HMremote devInfo 0C0000
attr HMremote firmware 1.1
attr HMremote hmClass sender
attr HMremote subType remote
attr HMremote loglevel 5
attr HMremote model HM-RC-12-B
attr HMremote serialNr xxxxxxxxxx
attr HMremote channel_01 HMremoteBtn_1
attr HMremote channel_02 HMremoteBtn_2
attr HMremote channel_03 HMremoteBtn_3
attr HMremote channel_04 HMremoteBtn_4
attr HMremote channel_05 HMremoteBtn_5
attr HMremote channel_06 HMremoteBtn_6
attr HMremote channel_07 HMremoteBtn_7
attr HMremote channel_08 HMremoteBtn_8
attr HMremote channel_09 HMremoteBtn_9
attr HMremote channel_0A HMremoteBtn_10
attr HMremote channel_0B HMremoteBtn_11
attr HMremote channel_0C HMremoteBtn_12
define HMremoteBtn_1 CUL_HM 11477B01
attr HMremoteBtn_1 chanNo 01
attr HMremoteBtn_1 device HMremote
....
define HMremoteBtn_12 CUL_HM 11477B0C
attr HMremoteBtn_12 chanNo 0C
attr HMremoteBtn_12 device HMremote

Besonders zu beachten ist die HMid (im Beipiel 11477B). Beim primären Device ist diese 6stellig hexadezimal. Bei den Tasten/Kanälen wird der HMid der zweistellige hexadezimale Kanal angehängt (im Beipiel 11477B01). Diese HMid bzw HMid+ChannelNo sind in allen ein- und ausgehenden Funktelegrammen zu sehen bzw. bei allen raw-Messages zu verwenden.

Pairing

Das pairing der remote an fhem kann auf unterschiedlichen Ebenen vorgenommen werden. Folgend eine Übersicht der Alternativen:

Tasten/Kanäle nicht gepaired

Wenn die einzelnen Tasten, also die Kanäle, noch nicht gepaired sind, sind Tastendrücke bereits in fhem sichtbar, als Empfänger erscheint dann (to broadcast):

2012-10-29 21:57:18.580 CUL_HM HMremoteBtn_7 Short (to broadcast)

Nach einem Tastendruck leuchtet die LED an der Fenbedienung kurz orange, um das Senden einer Nachricht zu signalisieren. Wie bei allen HM-Geräten kann jeder Kanal mit 1..n Kanälen an anderen devices geapired werden.

Pairing an physischen HM-Aktor

Eine RC12 hat zwölf Tasten. Diese sind aus Sicht der Fernbedienung IMMER einzelne Kanäle und kennen sich gegenseitig nicht. Es gibt aber einen Modus in dem die Tasten paarweise verwendet werden - also Taste1 = on, Taste2 = off. Die Fernbedienung weiss davon nichts, sondern nur der Aktor. Der hat dann zwei Peers auf einem Kanal. Wenn er einen Trigger vom ersten Peer bekommt (Taste 1) wird Aktion 1 ergriffen (also z.B. on). Wenn er trigger von Taste2 bekommt macht er etwas anderes (also z.b. off)

Einfacher Lichtschalter:

  • Aktion: devicepair single - FHEM richtet den aktorchannel auf den RC Kanal als peer ein - FHEM richtet den RC channel auf dem Aktorchannel ein - und zwar nur einen => Aktion im device: Beim pairkommando kam ein Kanal => es wird "toggle" verhalten programmiert - Resultat: deine Taste toggelt den Aktor channel
  • Aktion: devicepair dual - FHEM richtet den aktorchannel auf RC Kanal1 als peer ein - FHEM richtet den aktorchannel auf RC Kanal2 als peer ein (getrennte aktion) - FHEM richtet beide RC channel auf dem Aktorchannel ein - (eine Aktion!) => Aktion im Device: Beim pairkommando kamen 2n Kanaele => einer wird 'on' verhalten, der andere 'off' verhalten bekommen - Resultat: eine Taste schaltet 'on' , die 2. 'off' Das Pairing an einen physischen HM-device ist im Handbuch beschrieben.

    Pairing an HMLAN Konfigurator

    Durch das Pairing der Fernbedienung an einen HMLAN Konfigurator wird erreicht, dass der erfolgreiche Empfang der Nachricht durch den HMLAN Konfigurator mit einem ACK an die Fernbedienung bestätigt wird. Die LED an der Fernbedienung leuchtet nach einem Tastendruck erst orange (Senden des Funktelegramms), dann grün (ACK erhalten) oder rot (NACK bzw. missing ACK). Da die Fernbedienung in fhem als 'CUL_HM' läuft, der HMLAN Konfigurator aber als 'HMLAN', ist ein Pairing der beiden Devices in fhem nicht über einen set-Befehl möglich, da es sich um unterschiedliche Device-Typen handelt. Das pairing muss daher per raw-Befehl vorgenommen werden.

    set HMremote raw ++A0017853C311477B01017853C30100
    

    Der Aufbau der raw-message im Einzelnen: (Erklärung unter Vorbehalt und noch unvollständig) ++A001<fhemId><RCId><BtnNo>01<fhemId><Chn>00 fhemId= HMId Zentrale (HMLAN Konfigurator/CUL) z.B.123456 Chn = Channel der Zentrale 01 oder 02... 0A RCId = HMID remote control BtnNo = Rc channel (sprich button) in hex: 01 02 03 oder 0A - bei RC12 max 0C

    ++A0013333334444440C013333330100 # Button 12 erhaelt peer HMLAN (333333) channel 01

    ueberpruefen mit

    set <rcButtonName> getdevicepair
    


    Pairing an FHEM-dummy

    Ziel ist, die remote nicht an einen HMLAN Konfigurator vom Typ HMLAN , sondern an ein virtuelles Device (dummy) in FHEM anzulernen. Dadurch kommen die Nachrichten von der Fernbedienung direkt auf diesem Device an, ausserdem kann gesteuert werden, ob mit ACK oder NACK geantwortet wird, wodurch wiederum die Farbe der LED-Bestätigung gesteuert werden kann. Der Schaltvorgang auf den virtuellen FHEM Device kann per notify abgehorcht und für indirekte Schaltvorgänge o.Ä. verwendet werden.


    Anlegen des virtuellen Device

    Zunächst muss das virtuelle (Dummy)-Device in fhem erzeugt werden:

    define HMvirtual CUL_HM ABC123
    attr HMvirtual hmClass receiver
    attr HMvirtual subType switch
    

    Bei der Vergabe der HMid ist zu beachten, dass der code 6stellig hexadezimal ist. Werden Buchstaben als Bestandteil der HMid gewählt, müssen diese als Großbuchstaben angegeben werden.

    Pairing des Remote-Buttons

    Im Beispiel wird Button2 an das virtuelle Device HMvirtual gekoppelt:

    set HMremoteBtn_2 devicepair 0 HMvirtual single set remote
    

    Erzeugen der ACK-Nachricht (work in progress)

    Zum Versenden des ACK wird ein notify definiert:

    define HManswer notify HMremote.* { HManswer("%") }
    

    das folgende Routine zB in 99_myUtils.pm aufruft (das geht auch viel kürzer - ist bewusst als lange Version dargestellt, um den Zusammenhang zwischen eintreffender Nachricht und Struktur des zu sendenden raw-ACK zu verdeutlichen):

    ## HM Anrufbeantworter für Button2
    sub
    HManswer($) {
    my ($cmdval) = @_;
    	if ($cmdval =~ m,Btn_2,) {
    		 my $raw  = $defs{HMremote}{HMLAN_RAWMSG};
    		 my $msgnr = substr($raw,30,2); # Nummer der eingehenden Nachricht
    		 my $flag = substr($raw,32,2); # flag der eingehenden Nachricht
    		 my $mtyp = substr($raw,34,2); # type der eingehenden Nachricht
    		 my $src  = substr($raw,36,6); # Sender der eingehenden Nachricht
    		 my $dst  = substr($raw,42,6); # Adressat der eingehenden Nachricht
    		 my $chnl = substr($raw,48,2); # Kanal der eingehenden Nachricht
    		 my $stat = substr($raw,50,2); # Status der eingehenden Nachricht
    		 my $rsp  = $msgnr."80"."02".$dst.$src."00".$chnl."000000"; # ACK-message zusammenbauen
    		 Log 1, "in  : ".substr($raw,30,22); # Log nur zum Testem
    		 Log 1, "rsp  : $rsp";        # Log nur zum Testem
    		 fhem "set HMvirtual raw $rsp";    # Senden der response (ACK)
    	}
    }
    

    Einschränkungen: - Das timing der Funkkommunikation ist sehr fragil. Teilweise akzeptiert die remote das gesendete ACK (angezeigt durch grünes LED-Signal) nur, wenn HMLAN hmProtocolEvents <3 hat, zeitweise nur dann, wenn hmProtocolEvents auf 3 steht. Dies ist noch näher zu untersuchen. - HMvirtual bekommt seinerseits ein missing ACK, das man einfach ignorieren muss - Vmtl. auf Grund desselben timing-Problems funktioniert das Quittieren nicht, wenn der nächste button-press bereits erfolgt, bevor das missing ACK von HMvirtual abgewartet wurde.