Forum: Mikrocontroller und Digitale Elektronik LIDL/BAT Funksteckdose Protokoll reverse-engineering


von Dirk H. (dirk_h)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche derzeit die Funktsteckdosen, die es vor kurzem bei Lidl 
gab, anzusprechen. (Die mit der "Lern-Taste"). Die Steckdosen laufen 
unter der Bezeichnung "RCSAAA3680-AIP20". Obwohl ich auch schon eine 
Website gefunden habe die gegenteiliges behauptet sind diese nicht mit 
dem bekannten xx2262 Chip ausgestattet.

Ich habe mich jetzt im Sender vor das RF-Modul eingeklinkt und schaue 
mir die Daten an, die die FB sendet. Ich habe auch schon mal mit einem 
µC die Daten immitiert und siehe da die Steckdose schaltet. Das 
eigentlich Format ist mir aber noch ein Rätsel.

Ich will noch gar nicht auf einzelne Bits raus ich finde grundlegendere 
Sachen schon komisch. Vllt. habt ihr ja Ideen was das soll.

Im Anhang seht ihr die gesendeten Daten. Der erste Teil wird 3x 
gesendet, der 2.Teil 5x. Es sind aber die selben Daten. Nur der 
Sync-Impuls (oder was ich dafür halte) und die Zeiten sind 
unterschiedlich. Was soll das?

Zeiten 1.Teil Sync: 400µs hi, 2,2ms low.
Daten: kurzer puls 380µs, langer puls 1,1ms

Zeiten 2.Teil Sync: 3ms Hi, 7ms low
Daten: kurzer puls 500µs , langer puls 1ms

Außerdem bin ich mir nicht sicher über die Codierung. Ist einfach nur 
über lang/kurz codiert oder könnte das auch Manchester sein? Wie finde 
ich das raus? Würden solche Sync-Pulse bei Manchester überhaupt Sinn 
machen?

Ich hoffe ihr könnt etwas helfen, Danke

Dirk

ps: Der erste Teil wird 3x gesendet, der zweite TEil 5x. Im Übergang 
wird der 2. Teil einfach direkt hinter dem ersten gesendet.

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Dirk H. schrieb:
> Würden solche Sync-Pulse bei Manchester überhaupt Sinn machen?

Der Empfänger muss sich, unabhängig von der Codierung und ggf. einer 
Synchronisierung, auf das Signal einpegeln.

Ansonsten ist es schwierig, von einem einzelnen Telegramm auf die 
Codierung zu schließen. Da müßte man wohl mal ein paar verschiedene 
Telegramme angucken und auch die Basisadresse ändern.

von Uwe (Gast)


Lesenswert?

Kannst Du mal ein Foto des Chips schicken?
Vllt kann ich dann weiterhelfen.

Gruß Uwe

von [Frank] (Gast)


Angehängte Dateien:

Lesenswert?

@Dirk

Wenn man da ein Raster darüber legt, kann man durchaus ein regelmaßiges 
Muster erkennen. Im ersten Teil ist das Pulsverhältnis 1xT ein, 3xT aus, 
bzw. umgekehrt 3xT ein, 1xT aus. Dann kommt der Sync mit 4xT ein und 
14xT aus, anschließend die Daten mit 1xT ein, 2xT aus bzw. umgekehrt.

Frank

von Dirk H. (dirk_h)


Lesenswert?

Erstmal Danke an alle die sich schon beteiligt haben.

@Uwe Ein Foto vom IC wird leider nicht weiterhelfen - höchstens wenn du 
auch die typischen Beschaltungen kennst. Das IC ist ein SOIC14 - leider 
keine Bezeichnung drauf.

@Frank Danke für die Mühe. Das es im ersten Teil 1T aus 3T ein ist hatte 
ich irgendwie noch gar nicht so gesehen.

Aber warum sollte man das ganze in zwei so unterschiedlichen Formaten 
senden?
Darauf kann ich mir keinen REim machen..

von Jürgen S. (jurs)


Lesenswert?

Dirk H. schrieb:
> Aber warum sollte man das ganze in zwei so unterschiedlichen Formaten
> senden?
> Darauf kann ich mir keinen REim machen..

Meine Idee:
Der Hersteller hat vermutlich irgendwann mal das Sendeprotokoll seiner 
Funksteckdosen geändert, z.B. weil er einen Chiplieferanten gewechselt 
hat. Und damit Kunden, die sowohl alte als auch neue Funksteckdosen des 
Herstellers im Einsatz haben, nicht mit zwei verschiedenen 
Fernbedienungen hantieren müssen, senden die neuen Fernbedienungen 
sowohl das alte als auch das neue Protokoll aus.

von Matthias Larisch (Gast)


Lesenswert?

Jürgen S. schrieb:
> nicht mit zwei verschiedenen
> Fernbedienungen hantieren müssen, senden die neuen Fernbedienungen
> sowohl das alte als auch das neue Protokoll aus.

Macht sich ein Hersteller wirklich so viele Gedanken? Das wäre ja toll 
:)

Ist denn sicher, dass die gemessenen Zeiten stimmen, also war die 
Abtastrate des LA's hochgenug?

Es ist wirklich interessant, dass die Abweichungen der beiden 
Signalzeiten so gering sind. Da sollte man fast noch erwarten, dass die 
meisten Chips beides verstehen. Eventuell wars ja wirklich sowas, dass 
der Empfängerchip gerwechselt werden musste. Ich würde dann allerdings 
eher sagen, dass der Hersteller noch alte Steckdosen loswerden musste - 
niemals sonst hätte man den Aufwand getrieben, die Pakete 2x zu senden, 
eher hätte man bei der ersten Aussendung die Pakete angepasst.

Probier mal, deine Steckdose mit jeweils nur einem der Pakete zu senden. 
Sollte bei der Theorie dann ja funktionieren.

Die Daten selbst werden sehr einfach kodiert sein. Mich irritiert ein 
wenig die kurze Bitfolge (24 Bit wenn ich mich nicht verzählt habe). Du 
könntest einfach in der Mitte jedes Slots (eine gesamte Periode) sampeln 
und dann direkt 1 oder 0 auslesen.

von Harald W. (wilhelms)


Lesenswert?

Matthias Larisch schrieb:

> Macht sich ein Hersteller wirklich so viele Gedanken? Das wäre ja toll
> :)

Wenn es für Ihn so billiger ist...
Gruss
Harald

von Reinhard R. (reirawb)


Angehängte Dateien:

Lesenswert?

Hier mal zur Information ein paar Links zur Technik der handelsüblichen 
Funksteckdosen:
http://avr.börke.de/Funksteckdosen.htm
http://thomaskropf.at/index.php?option=com_content&task=view&id=19&Itemid=28
http://iow.wagner-ibw.de/rfctrl.html

Ich selbst habe mir basierend auf dieser Technik einen 
Vierfach-Schaltempfänger im Hutschienengehäuse für meine 
Wohnzimmerbeleuchtung gebaut. Der Empfänger ist aus einer defekten 
Funksteckdose.

Reinhard

: Bearbeitet durch User
von Dirk H. (dirk_h)


Angehängte Dateien:

Lesenswert?

So ich habe mal etwas weiter probiert.

Es reicht tatsächlich wenn man nur den ersten Teil sendet.

Als nächsten Schritt habe ich jetzt versucht das zu rekonstruieren. Also 
kein "Playback" mehr abfahren sondern das Signal selbst generieren.

Leider noch nicht so erfolgreich. Diese Steckdosen scheinen es mit dem 
Timing doch relativ genau zu nehmen - oder ich mache noch etwas falsch.

Im Anhang seht ihr mein Playback (grün). Das Playback bringt die 
Steckdose zum schalten, mein selbst generiertes Signal (rot) nicht :(

Habe ich irgendwas übersehen oder ist das jetzt gefrickel bis die Zeiten 
irgendwann hoffentlich passen?

Das Playback wurde übrigens mit 5kSPS aufgenommen und die Abtastrate des 
LA ist 100kSPS

Danke und Gruß
Dirk H.

von Matthias Larisch (Gast)


Lesenswert?

Hast du genug Ruhe vorm Sync? Die Zeiten können eigentlich nicht so sehr 
genau genommen werden, aber miss trotzdem nochmal mit etwas mehr als 5 
kSps nach.

Zudem wäre es schön, wenn du mal von der Originalfernbedienung 2-3 Codes 
aufnimmst, um zu schauen, wo der Kanal kodiert ist.

Wir haben hier ja konstante Bitzeiten - deswegen wird vermutlich ähnlich 
dem WS2812 gesampled: Eine Low-High-Flanke startet ein Bit-Frame, nach 
1/2-3/4 der Bitzeit wird gemessen und auf High/Low geprüft. Dies ist 
direkt der Wert des Bits. Von daher sollte dein Signal an sich passen, 
wobei eben die High-Pulse etwas kürzer aussehen.

von Dirk H. (dirk_h)


Lesenswert?

@ Matthias

ich glaube das hast du falsch verstanden. Die Abtastrate des obigen 
Bildes ist 100kSPS.

(Die grüne Kurvenform wurde mal (vorher) mit 5kSPS aufgenommen und diese 
Samples werden vom µC einfach stumpf rausgehauen in der grünen Kurve 
(Die Samples in ein Array und das wird ausgegeben).

Ruhe ist bei beiden Kurven gleich wenig vor dem Sync. Das kann von daher 
meiner Meinung nach nicht das Problem sein. Außerdem wird der Frame ja 
3x wiederholt. (Ein Frame ist bei den Lücken bei 40ms und 80ms zu Ende)

Trotzdem Danke.

von Peter A. (peterand)


Lesenswert?

Hello group! Sorry for not speaking German.

Recently added a project in GitHub that acts as a remote control for the 
BAT/Lidl sockets. The URL is https://github.com/peterand/BATsender.git

It was possible to successfully learn my socket to accept the code
extracted from steckdose_a_ein.png contributed by Dirk H.

If you want to try, use the "hidden" command N X<LF>

Grüße aus dem kalten Finnland
Peter

von Wolfgang K. (donkracho)


Lesenswert?

Die am 31.03.2016 bei Aldi Nord angebotenen QUIGG Funksteckdosen 
arbeiten mit dem gleichen Sender-Chip (14pol. IC ohne Kennzeichnung). 
Das Protokoll weicht von den mir bislang bekannten Protokollen ab. Die 
Übertragung ist aber vergleichbar.

Sync 1 Takt on 13 Takte off
1 Takt  on / 3 Takte off  (von mir als 1 Bit mit Wert 0 interpretiert)
3 Takte on / 1 Takt  off  (von mir als 1 Bit mit Wert 1 interpretiert)

Ein Bit besteht aus jeweils 4 Takten. Ein Sync wird von 3 Bytes gefolgt, 
diese Sequenz wiederholt sich 4 mal, dann erfolgt wie in diesen Thread 
schon beschireben 4 mal eine andere Codierung, die aber für die 
Funksteckdosen irrelevant ist.

Ich komme auf eine vergleichbare Tabelle wie Peter Andersson und habe 
diese als Google Tabelle veröffentlicht (Der Sync ist nicht enthalten 
sondern nur die 3 Byte Nutzdaten):

https://docs.google.com/spreadsheets/d/1wj45nixe7wJFUo6hKv2yjUJmjJ3gLxPeX_J6cbSyuHc/pubhtml

Das erste Nibble scheint ein Art 'HausCode' zu sein. Das letzte Nibble 
könnte man als Kanal interpretieren. Wichtig ist noch, dass die ersten 
beiden Nibble die folgenden 3 Nibble vom Wert her festlegen (das ist 
auch bei den Codes von Peter Andersson zu beobachten).

Mir erschließt nicht die Logik dieser Codes und wie man zu einen On-Code 
den Off-Code bestimmt. Kann mir da jemand auf die Sprünge helfen?

Wichtiges zur Funktion der Steckdosen: Diese sind lernfähig und können 
durchaus gleichzeitig auf mehrere Kanäle angelernt werden. Um eine 
Programmierung zu löschen muss die Steckdose vom Netz getrennt werden 
und nach den Einstecken blinkt die LED langsam. Drückt man in dieser 
Zeit eine Aus-Taste der Fernbedienung 'vergisst' sie die Programmierung 
für den entsprechenden Kanal. Bei Master-Aus 'vergisst' sie alle 
Programmierungen und muss neu angelernt werden. Das Anlernen erfolgt 
indem man während der LED-Blink-Phase eine An-Taste der Fernbedienung 
drückt. Ob das auch mit unterschiedlichen Fernbedienungen funktioniert 
habe ich noch nicht ausprobiert. Die Reichweite und 
Schalt-Zuverlässigkeit ist besser als als bei als bei anderen 
Steckdosen, die ich bislang besessen habe. Sie sind laut Kennzeichnung 
bis 250V/16A tauglich. also durchaus ein Schnäppchen.

Ich möchte damit über einen Arduino UNO meine Gartenbewässerung und 
Gartenbeleuchtung steuern.

: Bearbeitet durch User
von Wolfgang K. (donkracho)


Lesenswert?

Noch ein Nachtrag (ich kann den Beitrag oben nicht mehr ändern)

Der Sync ist 1 Takt on und 7 Takte off (nicht wie oben angegeben 13 
Takte off)

Ich habe inzwischen ein einfaches Arduino Programm geschrieben und etwas 
experimentiert:

Ich kann auch die Codes von Peter Andersson verwenden und erstaunlicher 
Weise mit der Master Off Taste meiner Fernbedienung, die eine ganz 
andere Startsequenz hat, wieder löschen.

Die Dauer eines Taktes darf bei meinen Steckdosen zwischen 308 bis 379ms 
liegen. Die Taktzeit selber ist also ziemlich unkritisch, nur die 
Tastverlältnisse 1:7 (Sync), 1:3 (0) und 3:1 (1) sollten eingehalten 
werden.

Eine Codesequenz mit jeweils vorangehendem Sync wiederhole ich 4 mal 
(die weiteren 4 abgewandelten Codes meiner Fernbedienung lasse ich weg), 
das funktioniert allerfeinst quer durch das ganze Haus mit Wänden 
dazwischen. Als SendeModul verwende ich eines dieser simplen AM-Module 
an 5V mit 17,3mm Wendelantenne.

Die Frage, wie die Codes zu deuten sind und wie man zu einen An-Code den 
Aus-Code berechnet bleibt aber nach wie vor.

von Forist (Gast)


Lesenswert?

Wolfgang K. schrieb:
> Die Frage, wie die Codes zu deuten sind und wie man zu einen An-Code den
> Aus-Code berechnet bleibt aber nach wie vor.

Wenn du für eine Steckdose den von der FB gesendeten An- und Aus-Code 
zeigst, vielleicht auch die für zwei oder drei Steckdosen, fällt hier 
vielleicht jemand was ein. So als in den Raum gestellte Frage ist das 
eher schwieriger.

von Wolfgang K. (donkracho)


Lesenswert?

In meinem ersten Post war ein Link zu den Codes versteckt:
https://docs.google.com/spreadsheets/d/1wj45nixe7wJFUo6hKv2yjUJmjJ3gLxPeX_J6cbSyuHc/pubhtml

Die Codes von Peter Andersson sind un nachfolgendem Link zu finden:
https://github.com/peterand/BATsender/blob/master/BAT_Lidl_codes.txt

von Wolfgang K. (donkracho)


Angehängte Dateien:

Lesenswert?

Anbei noch ein Scetch für den Arduino UNO, der mit meinen Steckdosen 
funktioniert. Damit beim Senden des Codes keine Zeit in der 
Hauptschleife verbraten wird, verwendet die send_code Routine 
Interrupts.

Die Interrupts sind nicht mit in der Arduino IDE gebräuchlichen 
Funktionen implementiert. Daher ist der Code nicht portabel und wird nur 
mit einem 16 MHz ATmega328P (z.B. UNO) funktionieren.

Edit: Im oben angehängten Source hat der Fehlerteufel leider 
zugeschlagen. Der Code für Channel 3 off lautet: 0x88481CL

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.