Funksteckdosen mit dem Raspberry PI steuern

Mit dem in einem anderen Artikel vorgestellten RaspyRFM Modul ist es möglich verschiedene Funksteckdosen vom Raspberry PI aus anzusprechen und die Aussendungen der Fernbedienung einzulesen. Es gibt eine Vielzahl unterschiedlicher Funksteckdosen, die mit unterschiedlichen Funkprotokollen arbeiten. Für die verbreitetsten Typen gibt es Pythonskripte, mit denen die Funksteckdosen geschaltet werden können. Eine (unvollständige) Übersicht aller Funksteckdosen die mit dem RaspyRFM und den verfügbaren Skripten gesteuert werden können findet man in diesem Artikel.

Protokolltyp I: Tristate 434 MHz

Viele Funksteckdosen arbeiten mit dem IC HX2262 oder Kompatiblen. Das IC hat 12 Dateneingänge (A0-A11), wobei jeder Eingang auf Low, High oder offen gelegt werden kann. Eine 0 an einem Eingang erzeugt zwei kurze Impulse, eine 1 zwei lange Impulse und ein offener Eingang einen kurzen Impuls gefolgt von einem Langen.

          ____              ____
Bit 0 : _|    |____________|    |____________ 
         |<4a>|<---12a---->|<4a>|<---12a--->|
          ____________      ____________ 
Bit 1 : _|            |____|            |____ 
         |<---12a---->|<4a>|<---12a---->|<4a>|
          ____              ____________ 
Bit f:  _|    |____________|            |____ 
         |<4a>|<---12a---->|<---12a---->|<4a>|
          ____ 
Sync :  _|    |___________ _ _ _ ____________ 
         |<4a>|<-----------124a------------->|

Ein Frame besteht aus 12 dieser Doppelimpulse (“0”, “1”, oder “F”), gefolgt von einem Synchronisationsimpuls. Die Zeitbasis a schwankt von Hersteller zu Hersteller. Um ein Telegram mit diesem Protokoll mit dem RaspyRFM auszusenden kann das mitgelieferte Skript “rcpulse.py” verwendet werden:

./rcpulse.py -p tristate -c 000000000FFF

Die Eingänge sind je nach Hersteller unterschiedlich beschaltet, etwa mit Hexdrehrädchen, DIP-Schaltern, Tastern oder fest verdrahtet. Manche Hersteller schalten die Eingänge gegen GND, oder gegen Plus. Im folgenden sind einige Modelle mit ihrer Beschaltung aufgelistet:

Intertechno (tristate)

Dieses System arbeitet mit Hauscode A-P, Gruppe 1-4 und Kanal (Taste) 1-4, welche wie folgt in Tristatecode umgewandelt wird:

Bit 1-4Bit 5-6Bit 7-8Bit 9-10Bit 11-12
Hauscode A-P
A=”0000″
B=”F000″

P=”FFFF”
Kanal 1-4
1=”00″
2=”F0″
3=”0F”
4=”FF”
Wahlschalter Gruppe 1-4
1=”00″
2=”F0″
3=”0F”
4=”FF”
Fest “0F”Kommando
On=”FF”
Off=”F0″

Für diese Steckdosen können an das Skript direkt die Parameter Hauscode, Gruppe und Kanal übergeben werden um sich so die manuelle Umcodierung zu sparen:

sudo ./rcpulse.py -p ittristate -o A -g 1 -u 1 -a on

Brennenstuhl RCS 1000

Bei den Steckdosen von Brennenstuhl kann der Code über DIP Schalter eingestellt. Auch für diese Steckdose kann das rcpulse Skript direkt die Parameter für die Brennenstuhlsteckdose aufnehmen, also 5 Bits Systemcode, die Kanalnummer (Taste) und den Zustand:

Bit 1-5Bit 6-9Bit 10Bit 11-12
5 Dipschalter Hauscode
Jeweils “0” für ON und “F” für OFF
Kanal 1-4
Jeweils “0” für gedrückt, “F” für nicht gedrückt
Fest “F”On=”0F”, Off=”F0″
./rcpulse.py -p tristate -c 00FF000FFFF0F

Aufbau der MQTT-Nachrichten mit rcpulsegw Skript:

home/rcpulse/brennenstuhl

RSL366

An den Steckdosen RSL366 wird jeweils Hauscode und Kanal (Taste) über ein Drehrädchen eingestellt:

Bit 1-4Bit 5-8Bit 9-11Bit 12
Hauscode “0FFF”, “F0FF”, “FF0F”, oder “FFF0”Kanal 1-4
Jeweils “0” für gedrückt, “F” für nicht gedrückt
Fest “F”On=”F”, Off=”0″

Auch diese Steckdosen können direkt unter Angabe des Hauscodes und des Kanals gesteuert werden:

./rcpulse.py -p tristate -c 0FFF0FFFFFFF

Goobay 94503

Diese Funksteckdose kann lediglich mit einem Schiebeschalter von 1-4 auf eine Adresse konfiguriert werden, die Symbole sond wie folgt belegt:

  • Symbol 1-3: 0
  • Symbol 4-7: Schalterstellung 1: FF0F, Schalterstellung 2: FFF0, Schalterstellung 3: F0FF, Schalterstellung 4: 0FFF
  • Symbol 8-10: 00F
  • Symbol 11-12: FF für ein, F0 für aus

Protokolltyp II: PPM 32 Bit

Pulse Position Modulation 32 bit. Neben allen selbstlernenden Intertechno-Funksteckdosen verwenden auch andere Hersteller wie Hama diesen Protokolltyp. Dabei werden folgende Symbole benutzt:

             ____      ____
Bit 0    : _|    |____|    |____________________

            |<1T>|<1T>|<1T>|<--------5T-------->|
             ____                      ____
Bit 1    : _|    |____________________|    |____

            |<1T>|<--------5T-------->|<1T>|<1T>|
             ____      ____ 
Bit X    : _|    |____|    |____

            |<1T>|<1T>|<1T>|<1T>|
             ____                       
Sync     : _|    |_________ _ _ _ ________

            |<1T>|<----------11T--------->|
             ____
Pause    : _|    |___________ _ _ _ ____________

            |<1T>|<-----------39T-------------->|

Ein Telegram besteht aus einem Syncsymbol, 32 Datenbits und einem Pausesymbol. Ein Telegram wird für eine Aussendung 4x wiederholt. Das Datenfeld ist folgendermaßen aufgebaut:

  • 26 Bits Systemcode
  • 1 Bit Gruppe (0=einzeln, 1=Gruppe)
  • 1 Bit ein/aus
  • 4 Bit Kanal (0000 = 0, 0001 = 1, …)

Die Bedeutung der Bits und die Pulsdauer ist unter den Herstellern leicht unterschiedlich:

Selbstlernende Intertechno Steckdosen (“Intertechno neu”)

Die Schrittdauer beträgt ca. 275 µS. Mit dem rcpulse Skript können diese Steckdosen unter Angabe des Systemcodes (26 Bits) und der Kananlnummer (1-16) folgendermaßen angesprochen werden:

./rcpulse.py -p intertechno -i 47113 -u 1 -a on

Einige selbstlernenden Intertechnoaktoren unterstützen die Funktion dimmen. Dazu wird an der Stelle des “ein-aus”-Bits (Bit 28) das X Symbol gesendet und am Ende noch 4 weitere Bits für die Helligkeit (0-15) gesendet:

  • 26 Bits Systemcode
  • 1 Bit Gruppe (0=einzeln, 1=Gruppe)
  • 1 Bit X
  • 4 Bit Kanal (0000 = 0, 0001 = 1, …)
  • 4 Bit Helligkeit (0000 = 0 %, 1000 = 50 %, 1111 = 100 %)

Soll ein Intertechnoaktor über MQTT gedimmt werden, wird statt “on” im MQTT Payload einfach die Dimmstufe von 0 – 100 % angegeben:

./rcpulse.py -p intertechno -i 47113 -u 1 -a 60

Hamafunksteckdosen HAMA 00121938

Diese Geräte funktionieren ähnlich wie die “Intertechno neu” Geräte, allerdings mit einer Schrittdauer von 250 µS und die 4 Kanalbits müssen invertiert werden, das erledigt das Skript.

 ./rcpulse.py -p hama -i 47113 -u 1 -a on

Protokoll III: Voltcraft/Silvercrest Sender TR502MSV, Steckdose RC30ADX

Pulse Position Modulation, 20 bit. Impuls in Symbolmitte = 0, Impuls am Symbolende = 1

  • 12 Bit ID
  • 2 Bit Unit
  • 3 Bit Command
  • 1 Füllbit = 0
  • 2 Bit Prüfsumme

Protokoll IV: PWM1 24 Bit

Pulse Width Modulation, breiter Impuls = 1, kurzer Impuls = 0. Dieses Protokoll wird u. a. von den Herstellern Logilight, emylo, u. a. verwendet. Die 24 Bits werden mit folgenden Symbole kodiert. Die Pulsdauer schwankt von Modell zu Modell.

          ____             
Bit 0 : _|    |____________
         |<1a>|<---3a---->|
          ____________ 
Bit 1 : _|            |____
         |<----3a---->|<1a>|
          ____ 
Sync :  _|    |___________ _ _ _ ____________ 
         |<1a>|<-----------31a------------->|

Nach einem Block bestehend aus 24 Bit Daten folgt ein Syncpuls. Die 24 Datenbits werden unter den Herstellern unterschiedlich verwendet, oft ist ein Frame wie folgt codiert:

  • Sync
  • 20 Bits unit code
  • 4s Bit data (Taste)

Logilight Funksteckdosen EC0001-EC0004

Die Schrittdauer beträgt hier ca. 300 µs. Die 24 Datenbits sind wie folgt zugeteilt:

  • 20 Bits Systemcode
  • Bit 21 für ein/aus
  • Bits 22-24: 111 = Kanal 1, 011 = Kanal 2, 101 = Kanal 3

Die Logilightsteckdosen brauchen zum Anlernen mehr Wiederholungen in der Aussendung damit der Lerncode zuverlässig erkannt wird. Zum Anlernen muss das Datenpaket länger gesendet werden, was durch das Kommando “learn” angegeben werden kann. Kanal 2 mit einem Systemcode 4113 anlernen:

./rcpulse.py -p logilight -i 47113 -u 1 -a learn

eMylo Schaltmodule

Die Schrittdauer der eMylo Module liegt bei ca. 350 µs.

  • 20 Bits Systemcode
  • 4 Bits Taste, A = 0001, B = 0010, C = 0100, D = 1000

Der Code für die eMylo Module kann mit diesem Kommando ausgesendet werden:

./rcpulse.py -p emylo -i 4711 -k A

ELV FS20 Steckdosen steuern

Mit der 868 MHz Version oder dem RaspyRFM Twin können auch die ELV Steckdosen im 868 MHz Band gesteuert und die Fernbedienung empfangen werden.
Die Fernbedienungen können wie folgt empfangen und dekodiert werden:

./rcpulse.py -m 2 -f 868.35

Für ein RaspyRFM Einzelmodul wird -m 1 verwendet. Eine FS20 Steckdose mit obigen empfangenen Parameteren wird so ausgesendet:

./rcpulse.py -m 2 -f 868.35 -p fs20 -i 46434 -u 1 -a 16

Protokoll V: PWM 32 bit

Dieses Protokoll wird u. a. vom Hersteller Pilota Casa verwendet. Die Schrittweite beträgt 600 µS, ein schmaler Impulse entspricht Bit 1, ein breiter Impuls Bit 0.

  • 2 Bit Gerätetyp, 01 = Funktaster
  • 6 Bit Gruppe, Unit, on/off
  • 16 Bit ID
  • 8 Bit immer 1

Steckdosen mit der App PowerSwitch steuern

Die App PowerSwitch kann die kommerziellen Gateways Brennenstuhl Brematic, Connair 433 und Intertechno ITGW-433 über Netzwerk ansteuern. Beim RaspyRFM wird ein Pythonprogramm mitgeliefert welches diese Gateways emuliert und so mit Hilfe der App Funksteckdosen steuern kann.

Empfänger und Fernbedienungen mit Node Red nutzen

Für das Tool Node Red wird eine Implementierung (node-red-contrib-raspyrfm) zur Verfügung gestellt mit dem Schaltabläufe mit Timern usw. einfach graphisch erstellt werden können. Über Node Red mit dem Raspy RFM gibt es einen eigenen Artikel.

Fernbedienungen empfangen

Die Signale aller obenstehenden Empfänger können mit dem RaspyRFM auch empfangen werden:

./rcpulse.py
RFM69 found on CS 0
Init complete.
{'code': '10111100011101011111111110001110', 'timebase': 250, 'group': 0, 'state': 0, 'protocol': 'it32', 'id': 49403902, 'unit': 15}
{'code': '011001010101101111101011', 'timebase': 302, 'state': 1, 'protocol': 'switch15', 'id': 415166, 'unit': 2}
{'timebase': 290, 'code': '0000f0f00fff', 'protocol': 'ittristate'}

Die so empfangenen Codes können wieder direkt mit dem selben Skript gesendet werden.