Über Funksteckdosen...

Einleitung

Vor einiger Zeit war ich mit meinem 11-jährigen Sohn im Baumarkt, um diverse Farben für anstehende Renovierungsarbeiten zu kaufen. Meinen Sohn interessierte das weniger, er hielt sich auffallend lange im Bereich mit den Rauchmeldern und Funksteckdosen auf. Zum Schluss schwatzte er mir ein güstiges 3er-Set ab, er hatte wohl eine konkrete Vorstellung, wofür er genau 3 Steckdosen brauchte...

Es stellte sich dann heraus, dass das gewählte Modell (Set 2300W RW30) sich nicht in der Liste ([1], [2] und [3]) der computer-steuerbaren Steckdosenmodelle befindet, wogegen das ebenfalls verfügbare 2er-Set eines anderen Herstellers dazu in der Lage gewesen wäre. Diese Situation hat dann meinen persölichen Ehrgeiz geweckt, die Steckdosen doch von einem Computer aus zu steuern. Die einfachste Lösung, die Fernsteuerung selbst mit dem Computer zu verbinden (sie also zu kannibalisieren), soll nicht in Betracht gezogen werden...

REV Ritter Funksteckdosen-Set

Das gekaufte Funksteckdosen-Set ist von REV Ritter. Bei [4] findet sich ein Blog-Eintrag zur Ansteuerung von Funksteckdosen (Sets) mit dem Arduino. Es wird einmal der vergebliche Versuch beschrieben mit einem Set von REV Ritter klarzukommen, und dann der eher gangbare Weg mit einem Set von Elro.
Mein Billig-Set ist hingegen von REV Ritter und benutzt den HS2260A-R4 im Sender sowie den HS2272C-L4 im Empfänger. Von beiden sind die Datenblätter nur auf Chinesisch erhältlich ;)

Allerdings findet sich auf [5] der Hinweis, dass es diese (bzw. verwandte) Chips auch von anderen Herstellern mit einem jeweils anderen Prefix gibt, in diesem Fall hat der Hersteller Princeton Technology Corp. mit dem Prefix PT englischsprachige Datenblätter zum Download beispielsweise auch bei [7].

Aus den gesammelten Datenblättern sowie den Abbildungen/Tabellen in den chin. Datenblättern geht hervor, dass die verwendete Chip-Paarung (im DIP-Gehäuse) 10 Adress-Bits und 2 Daten-Bits benutzt. Aufgrund der Tristate-Kodierung der Adressen, werden damit 59.049 (= 3**10) verschiedene Kodierungen unterstützt. Durch Vergleich der Chip-Beschaltung auf den Platinen von Sender bzw. Empfänger mit dem jeweiligen Datenblatt, lassen sich die Codes für das vorliegende Exemplar herausfinden... Einige der Datenblätter enthalten auch Timing-Diagramme, was auch noch einen anderen Weg des Reverse-Engineering eröffnet, nämlich den das Timing aufzunehmen (Speicher-Oszilloskop) und zu interpretieren wie es bei [6] beschrieben wird.

Wie funktioniert's ?

Den Funkamateur interessieren natürlich einige technische Kenndaten und vor allem die Implementierung des Funkprotokolls. Die üblichen Funksteckdosen arbeiten im 433 MHz ISM-Band (433,05 - 434.76 MHz) mit einer Sendeleistung (des Handsenders) von typisch 10mW und benutzen OOK (On-Off Keying) also die einfachste Form der digitale Amplitudenmodulation ASK (Amplituden-Umtastung). Die Längen der 'an'- und 'aus'-Perioden sowie deren zeitliche Abfolge bestimmt, ob eine logische '0', '1' oder sogar ein tristate Signal 'F' übertragen wird. Es liegt also eine 3-wertige Logik vor. Bei der betrachteten Familie von Encoder-/Decoder-Chips werden 12 Adress- bzw. Datenbits sowie ein Sync-Bit übertragen. Die jeweilige Chip-Bezeichnung legt fest, wieviele der Bits für die Adresse sind und wieviele für die Daten. Weiterhin ist die Grundlänge eines Pulses ein Parameter, der durch die externe Beschaltung der Chips bestimmt wird. Sie muss natürlich für Sender und Empfänger identisch festgelegt sein. Weiterhin werden die Pulstelegramme zur Sicherheit immer mehrfach übertragen. Hier [7] findet sich beispielsweise etwas zur Codierung des verwendeten Funkprotokolls.

Zur Ansteuersoftware

Man muss nicht lange suchen, um geeignete Ansteuersoftware für die Funksteckdosen zu finden, sowohl für den Arduino als auch für den Raspberry Pi gibt es unzählige Fundstellen im Internet. Alles basiert auf der Arduino-Bibliothek RCswitch [9], die dann für den Raspberry abgewandelt wurde [9]. Für Letzteren gibt es zwei Implementierungen, eine (das 'Original') und eine zweite, die eine Erweiterung der ersteren darstellt [10], welche auch die Protokolle mit der Tristate-Kodierung unterstützt. Die Version für den Arduino tut das von Anfang an.

Eigentlich ist das Erzeugen der korrekten Pulse ja trivial, die RCswitch-Bibliothek bzw. ihre Derivate zeichnen sich durch eine 2. Abstraktionsschicht aus, die direkt auf die möglichen Schalterstellungen der Funksteckdosenmodelle eingeht, d.h. der Benutzer ruft direkt die für sein Modell geschriebene Ein-/Ausschaltfunktion auf, ohne sich um die aus der Schalterstellung resultierende Kodierung des Chips kümmern zu müssen. Für die gekauften, neueren Modelle von REV Ritter ist eben noch keine Implementierung zu finden.

Empfängerboard

Zur Bestimmung der einzelnen Empfängercodes wurden Sender und alle Empfänger (Steckdosen) einmal geöffnet. Mit Hilfe der Informationen in den o.g. Datenblättern und dem Platinenlayout, lässt sich der jeweilige Code bestimmen.

Empfaengerplatine, Leiterbahnseite

In das Foto wurden die Pins des Empfängerchips HS2272* sowie ihre Pegel eingezeichnet.
Berücksichtigt man weiterhin, daß die Codes mit dem Adressbit A0 voran gesendet werden, so ergibt sich für diesen Empfänger (#3) der Code:

     00FF FFF1 00 D1 D0 SYNC
     
also A0 .. A4 sowie A7 bis A9 dienen zur individuellen Adresseinstellung, wobei A5 .. A6 durch das Layout fest auf 'FF' eingestellt sind. Die Untersuchung der anderen Steckdosen fördert auch das Adressierungsschema aller Empfänger dieses Sets zutage:
      A* : 0123 4567 89
     -------------------
      #1 : 00FF FFFF 0F
      #2 : 00FF FFFF F0
      #3 : 00FF FFF1 00
     
A7 ist also entweder offen (= F) oder liegt auf Vcc (= 1). Es zeigt sich durch Ausprobieren verschiedener Codes, dass der Zustand von D0 bestimmt, ob die Steckdose an (= 1) oder aus (= 0) ist. Der Zustand von D1 selbst interessiert dabei nicht.

Senderplatine, Leiterbahnseite

Im Sender selbst (hier habe ich weniger nachgemessen...) gibt es Lötbrücken für die Adressleitungen A0 .. A6 (insgesamt 7 Lötbrücken) und A7 ist anderweitig beschaltet. Diese werden auf der Platinenunterseite mit "1" .. "7" bezeichnet ("1" = A0). Bei meinem Modell bedeuten geschlossene Brücken immer '0', d.h. es sind hier nur wenige System-Codes möglich. Womöglich muss/kann man an anderer Stelle, geschlossenen Brücken auf '1' umkonfigurieren oder es gibt eine 2. Layout-Variante der Sender.
Der verbaute HS2260-R4 hat laut Datenblatt die Adressleitungen A0 .. A7 sowie die Datenleitungen D0 .. D3, so dass anzunehmen ist, dass D2 und D3 des Senders für A9 und A8 bei dem Empfänger 'zuständig sind. Die Taster des Senders, zusammen mit der Diodenmatrix stellen offenbar die geeigneten Codes für A7 sowie D0 .. D3 dar, so dass die gewünschte Funktionen bei dem jeweiligen Empfänger ausgelöst wird.

Blockschaltbild des Senders (Encoders) PT2260

Diese Ausführungen sollten klarer werden wenn man sich das Datenblatt [10] zum Encoder-Chip anschaut (hier von einem alternativen Hersteller), inbesondere das hier abgebildete Blockschaltbild.

Referenzen