Hallo!
Ich bin gerade dabei, das Protokoll des "Brennenstuhl Primera-Line
Funkschalt-Set RC 3600" (selbstlernende kodierung) zu analysieren und
komme nicht weiter.
Diese Signale konnte ich bisher von der Fernbedienung aufzeichnen:
(ursprünglich waren sie noch Manchester-kodiert; die letzten beiden
Segmente, "2950 7080", habe ich nicht weiter dekodiert, da sie scheinbar
besonders sind - wahrscheinlich eine Art "Footer")
http://pastebin.com/ujw202CD
C1.1 bedeutet Steckdose "C" einschalten, erstes Paket. D0.4 bedeutet D
aus, viertes Packet. Für jeden Zustand (z.B. A an) sendet die
Fernbedienung abwechselnd genau 4 unterschiedliche Pakete, das Ende der
Pakete (die letzten 4 Bits) konnte ich bereits entschlüsseln, es steht
für den Buchstaben.
Beim ersten Betätigen von "A an nehme ich also beliebig oft das erste
Paket auf, dann, wenn ich "A an" loslasse und erneut betätige, nehme ich
beliebig oft das zweite Paket auf, die Fernbedienung zählt also mit.
Nach dem 4. folgt wieder das 1. usw. Diese Reihenfolge ändert sich
nicht.
Welches nun das 1. Paket ist, habe ich willkürlich festgelegt.
Insgesamt gibt es aber nur 8 unterschiedliche Paket-Anfänge (die ersten
20 Bits), die mal für Ein-, mal für Ausschalten eines Buchstaben stehen.
Laut Handbuch gibt es 2^24 Möglichkeiten:
"" Zum Kodieren des Systems stehen 16.777.216 unterschiedliche Codes zur
Verfügung, die zufällig zugeordnet werden. ""
Da die Pakete aber ohne den Footer nur 24 Bits lang sind, und die
Information zum ein/ausschalten auch enthalten sein muss, stimmt diese
Aussage schonmal nicht ganz.
Wie dem auch sei, was mir Kopfschmerzen bereitet, sind die ersten 20
Bits. Da die ersten 4 Bits konstant sind, gehe ich davon aus, dass sie
eine Art Header bilden, ob sie zu einem eindeutigen Code meiner
Fernbedienung gehören, kann ich nicht sagen, da ich nur eine
Fernbedienung besitze.
Ohne diese ersten 4 Bits sieht das also so aus:
1
0 1 0 0 0 0 1 1 0 1 0 0 0 1 1 0 = 17222 (dez.)
2
0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 1 = 22955
3
0 0 1 1 1 0 1 0 0 0 0 0 0 1 0 1 = 14853
4
1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 0 = 38104
5
1 0 1 0 1 1 1 0 1 1 1 1 1 1 0 1 = 44797
6
0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 = 00228
7
0 1 1 1 0 1 1 0 1 0 1 1 1 1 1 0 = 30398
8
1 0 1 1 1 0 1 1 0 1 0 1 1 1 0 0 = 47964
Da der Steckdose zum Lernen bereits ein Paket genügt, muss in jedem
dieser Ausschnitte die ID der Fernbedienung enthalten sein.
Jetzt die große Frage an die Kryptologen: Wie ist sie kodiert?
Vielen Dank im Voraus für die Beschäftigung mit diesem Problem und ich
freue mich auf Antworten,
Henning
Hallo,
vielen Dank für deine Antwort!
Den verlinkten Thread habe ich ebenfalls gefunden. Allerdings handelt es
sich um ein anderes Brennenstuhl-Protokoll, zumal es eindeutige
On/Off-Bits gibt, die ich von meiner Fernbedienung nicht mitsniffen
konnte. Außerdem gibt es nur eine Paket-Art, meine Fernbedienung sendet
4 unterschiedliche.
Die Reihenfolge der Pakete ist (wahrscheinlich) so richtig, d.h. beim
ersten Drücken wird ein Paket beliebig oft hintereinander gesendet, beim
zweiten Drücken (d.h. nach einen Loslassen) wird ein anderes Paket
beliebig oft gesendet gesendet, welches hinter dem ersten steht usw.
Nach dem letzten kommt wieder das erste.
Beim monotonen Drücken eines Buttons wird nur jedes zweite Paket
gesendet (siehe hier: pastebin.com/ujw202CD - wobei die Reihenfolge dort
nicht richtig ist)
Ich überprüfe die Reihenfolge nochmal durch weitere Tests...
Ja.
Ich hatte es auch schon geschafft, Knopf-Drücke zu simulieren. Das
gefiel mir aber gar nicht, irgendwann fing dann auch die Fernbedienung
an zu spinnen (vermutlich weil ich die Potentiale dieser merkwürdigen
Matrix-Schaltung mangels theoretischer Kenntnisse durcheinander gebracht
habe), jetzt funktioniert sie aber wieder ;)
Schalten kann ich die Steckdosen auch bereits über Funk mithilfe eines
433Mhz Moduls, indem ich die aufgenommenen Codes einfach wieder sende.
Den Steckdosen scheint es auch egal zu sein, dass ich immer nur das eine
Paket und nicht die anderen drei sende, mich interessiert aber dennoch,
was ich dort genau sende und wie die ID der Fernbedienung lautet.
Und wozu die unterschiedlichen Pakete gut sind.
Wegen dem "hatteste die Fernbedienung schonmal auf".
Würde mich interessieren welcher IC das realisiert.
Und so sinnvoll ist der Rotierende Code ja scheinbar nicht, wenn die
Steckdose immer reagiert.
Bei Offener Fernbedienung könnt man mal vor den SAW-Generator mit einem
Logikanalyser (o.ä.) dran.
Dennis Heynlein schrieb:> So richtig kann ich mir nicht vorstellen, daß das Protokoll so komplex> sein soll.> Wie liest du es jetzt ein ?Henning D. schrieb:> Leider habe ich weder einen Logik Analyzer noch ein Oszilloskop
Sehr merkwürdiger Informationsgewinn.
Ich habe die Pins des μC mal durchgemessen, entweder es liegt 3V oder 0V
an. Leider kann ich nicht parallel messen und einen Knopf drücken ;)
Die Fernbedienung wird aber über eine 12V Batterie betrieben.
Zum Erfassen der Pakete habe ich anfangs das Debug-Tool des
Pilight-Projekts (http://www.pilight.org/) verwendet, später habe ich
dazu selbst ein Programm entwickelt, welches die gleichen Ergebnisse
ausgibt.
Mit dem Autor des Pilight-Projekts habe ich bereits über dieses
Protokoll diskutiert (http://www.pilight.org/showthread.php?tid=2). Da
wir es nicht geschafft haben, die ID der Fernbedienung zu enträtseln,
ist es nicht möglich gewesen, einen generischen Protokoll-Handler zu
entwickeln - u.a. darum frage ich hier.
Zum Erkennen der Pakete nimmt das Programm mithilfe der LIRC-Bibliothek
die Pulse-Längen des Ausganges eines 433-Mhz-Receivers auf (also der
Zeitabstand zwischen zwei Flanken) und analysiert Wiederholungen und
sucht nach Footern (also sehr langen Längen).
Die Pulse-Längen werden auf mehrfache von 295 normiert.
Ein Paket stellt den wiederholenden Abschnitt einer solchen Sequenz dar.
Da, wie ich bereits herausgefunden habe, das Brennenstuhl-Protokoll
manchester kodiert ist, wird eine 0 durch ein langes, dann ein kurzes
Signal kodiert, die 1 durch ein kurzes, dann ein langes Signal.
Bestätigt wird dies insbesondere durch die eindeutige Nummerierung der
Buchstaben (C: 1, All: 2, B: 5, D: 6, A: 7), die konstant bei allen 4
auftretenden Paketen ist.
Hier die Rohdaten, obwohl sie informationstechnisch gleichwertig zu den
dekodierten Daten sind: http://pastebin.com/MMDnPVaM>> Sehr merkwürdiger Informationsgewinn.
Meine Aussage oder die gesammelten Daten ohne diese Werkzeuge?
>> Jetzt sag nicht Scanner.
Hmm, was meinst du damit?
Henning D. schrieb:> ohne diese Werkzeuge?
Das da.
Kauf dir mal einen AL für 10 Euro. Gibt es genug Links hier, wie man den
crackt. Sigrok ist auch schon wieder weiter.
1 4 bedeutet eben 1; 3 2 -> 0
Und wenn du mit Mäuseklavier soetwas meinst:
http://siablog.de/files/2009/08/DIP-Switch.png
muss ich dich leider enttäuschen. Dann wüsste ich ja die (binäre) ID ;)
Übrigens: Vielen Dank für deine Mühe!
Die verlinkten Seiten werde ich mir gleich mal anschauen. Tatsächlich
lässt sich auch ab und zu ein dritter Zustand erkennen.
Ich habe die Reihenfolge noch einmal überprüft, jetzt sollte sie
stimmen: http://pastebin.com/VayxBvU1
Die Reihenfolge ist jetzt so, dass, egal welche Taste ich auf der
Fernbedienung drücke, immer ein Paket gesendet wird, welches um 1 größer
ist, beispielsweise:
1
Device: A Status: Off Package Number: 4
2
Device: A Status: Off Package Number: 1
3
Device: A Status: Off Package Number: 1
4
Device: A Status: Off Package Number: 1
5
Device: A Status: Off Package Number: 2
6
Device: A Status: Off Package Number: 2
7
Device: B Status: Off Package Number: 3
8
Device: B Status: Off Package Number: 3
9
Device: B Status: Off Package Number: 3
10
Device: B Status: On Package Number: 4
11
Device: B Status: On Package Number: 4
12
Device: B Status: On Package Number: 4
13
Device: B Status: On Package Number: 1
14
Device: B Status: On Package Number: 1
15
Device: C Status: On Package Number: 2
16
Device: C Status: On Package Number: 2
17
Device: C Status: On Package Number: 2
18
Device: C Status: On Package Number: 3
19
Device: C Status: On Package Number: 3
20
Device: C Status: Off Package Number: 4
21
Device: C Status: Off Package Number: 4
22
Device: D Status: Off Package Number: 1
23
Device: D Status: Off Package Number: 1
24
Device: D Status: On Package Number: 2
25
Device: D Status: On Package Number: 2
26
Device: D Status: On Package Number: 2
27
Device: D Status: On Package Number: 3
28
Device: D Status: On Package Number: 3
29
Device: D Status: On Package Number: 4
30
Device: D Status: On Package Number: 4
31
Device: D Status: On Package Number: 1
32
Device: D Status: On Package Number: 1
Ich habe die doppelt erkannten Pakete nicht entfernt.
Man sieht zumindest, dass nur nach einem Loslassen der Counter erhöht
wird.
In dem Pastebin-Abschnitt, wo die Pakete nach Anfang geordnet sind,
lassen sich interessante Muster erkennen...
Henning:
Leider geht das nicht auf.
"1 4 bedeutet eben 1; 3 2 -> 0"
Mit Excel ist mir ein Drittes Symbol aufgefallen.
"2 4"
Aber wie ich sehe hast du dein Problem gelöst.
Gelöst habe ich es leider immer noch nicht, zum Erkennen habe ich die
bereits aufgezeichneten Pakete verwendet. Das Problem bei dem dritten
Symbol ist, dass es sich nur kaum vom ersten unterscheidet, und das
debug Tool, mit dem ich die Pakete aufgezeichnet habe, rundet auf
vielfache von 295 - wodurch das dritte Symbol schnell zum ersetn wird.
Deswegen will ich jetzt mit meinem eigenen Record-Tool erneut Pakete
aufzeichnen.
Nachdem ich jetzt ca. 190 Messungen mit meinem Debug-Tool durchgeführt
habe (pro Zustands also ca. 19 Messungen, pro Zustands-Paket etwa 5),
bei dem die Werte nicht auf Vielfache von 295 gerundet werden, ist das
dritte Symbol nicht mehr zu finden (http://pastebin.com/nPsYKD7M wenn
jemand die Werte in einem anderen Format haben will, bitte melden).
Ich habe mal alle Werte zusammengefasst, die in das selbe Intervall mit
einer Länge von 80 fallen und jeweils den Mittelwert gebildet:
443.052481256694 (Σ: 2801, σ: 4.271292933725446)
1083.9935783089547 (Σ: 2803, σ: 5.415385002320137)
941.3099762470309 (Σ: 1684, σ: 4.378349915257277)
587.4821852731592 (Σ: 1684, σ: 5.392353253393124)
2953.379679144385 (Σ: 187, σ: 4.870539385709441)
7123.026737967914 (Σ: 187, σ: 6.084461804909552)
332 (Σ: 1, σ: 0)
1127 (Σ: 1, σ: 0)
386 (Σ: 2, σ: 12)
Wenn ich nach den selben Regeln jeweils zwei aufeinanderfolgende Pakete
zusammenfasse, ergibt sich:
443.052481256694, 1084.00856836844 (Σ: 2801)
941.3172905525847, 587.4842543077838 (Σ: 1683)
2953.379679144385, 7123.026737967914 (Σ: 187)
929, 584 (Σ: 1)
332, 1084 (Σ: 1)
386, 1084.5 (Σ: 2)
Die Werte mit Σ < 3 führe ich einfach mal auf die Ungenauigkeit von LIRC
zurück.
Es gibt also die Folge 443, 1084 (=> 1) und 941, 587 (=> 0) und 2953,
7123 (=> Header/Footer).
Ich habe hier mal die 4 Pakete von All On visualisiert, wo man auch sehr
genau sieht, dass die Summe von zwei Pulses immer konstant ist:
http://test.sui.li/oszi/img/16a75eac1d08df2332f4bb87050b2bf3.pnghttp://test.sui.li/oszi/img/033da4f4d344386aedb86cf0aa9498e6.pnghttp://test.sui.li/oszi/img/de55022c23f5d14dc67d673227923676.pnghttp://test.sui.li/oszi/img/206ed11c5b7359f5a8e195e2d984d01c.png
(http://test.sui.li/oszi/ ist übrigens ein sehr interessantes Tool)
Das scheint alles sehr verdreht zu sein, schon hier
(http://pastebin.com/VayxBvU1) unten, wo ich die Pakete nach ihrem
Anfang sortiert habe, fällt Z (=All) und D heraus und sind "verdreht".
(Ich habs als Z kodiert, damit All nicht so ins Auge sticht.)
Übrigens scheint das "Conn Air Home Automation Gateway" aus diesem
Thread
(http://www.simple-solutions.de/forum/viewtopic.php?f=15&t=260&start=255)
tatsächlich das Brennenstuhl RC 3600 Protokoll zu sprechen: Ein Benutzer
am Ende, dem ich auch schon geantwortet habe, hat ein Paket mitsniffen
können (ich habe es mal in die Binärdarstellung konvertiert):
Für ein:
0,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0 + Header
Für aus:
0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0 + Header
Meine Steckdosen lassen sich damit sogar anlernen. Ich kann sogar ein
Bit am Anfang ändern, ich muss es dann aber an beiden Paketen ändern,
damit es noch funktioniert.
Zum Anlernen braucht die Steckdose ein An-Signal.
Ich werde mal noch etwas damit herumspielen, bis ich ein paar
Möglichkeiten durchprobiert habe, kann es aber noch etwas dauern, da das
Anlernen mit ca. 6 Sekunden löschen und 4 Sekunden neu aufnehmen doch
recht lange braucht.
Ich habe übrigens den Brennenstuhl-Support mal angeschrieben, leider
können die mir nicht weiterhelfen ;)
Ich habe durch Brute-Force ein weiteres Paket-Paar gefunden:
An:
1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0
Aus:
1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0
Leider dauert die Suche nach Aus-Paketen sehr lange (für dieses eine
Paket habe ich 16.000 andere gesendet)...
Da ich jede meiner drei Steckdosen mit je drei Codes programmieren kann,
es 4 mögliche Aus-Pakete gibt und die letzten 4 Bits (wahrscheinlich)
bekannt sind, ist die Wahrscheinlichkeit eines Aus-Pakets 1 zu 30.000.
Leider kann ich nur 4 Pakete pro Sekunde senden (mit je 4
Wiederholungen), sodass ich wahrscheinlich gerade mal alle 2 Stunden ein
neues Paket entdecke.
Hinzu kommt, dass ich programmiertechnisch nicht feststellen kann, ob
die Schaltung erfolgreich war.
Billig-Netzteile habe zwar wie Sand am Meer, nur weiß ich leider nicht,
wie ich eine sichere Schaltung baue, um per GPIO die externen
Stromkreise zu überwachen. Reicht es, die Massen aller Netzteile zu
verbinden und jeweils über einen Spannungsteiler den Plus-Pol an einen
GPIO Pin anzuschließen?
Als Plattform nutzte ich den Raspberry Pi und möchte ihn nur äußerst
ungern kaputt machen.
So, ich habe jetzt neue Daten, die vielleicht weiterhelfen.
Nachdem mein Programm nun 3 Tage lang zufällige Pakete gesendet, um am
Ende doch alle 2^20 Kombination ausprobiert hat, habe ich 36 Pakete
entdeckt, die insgesamt drei Steckdosen ausschalten, wobei jede mit 3
On-Codes programmiert wurde.
Hier die Codes mit einer Analyse:
http://pastebin.com/Jh2tzFFT
Als nächstes werde ich nach den weiteren On-Paketen suchen. Immerhin
kann ich die Such-Reihenfolge schon etwas optimieren (also nicht mehr
ganz zufällig), da die ersten 4 Bits vorhersehbar zu sein scheinen.
Die On-Codes habe ich jetzt auch herausgefunden, und alles nochmal
einzeln getestet.
Hier die vollständige Liste:
http://pastebin.com/RgQ4VCyw
Mit den alten Paketen (http://pastebin.com/VayxBvU1) kommen jetzt schon
ein paar Pakete zusammen...
Moin moin, ich bin auch grade dabei ein wenig mit dem Protokoll zu
experimentieren, aber irgendwie bekomme ich die Steckdosen nicht
geschaltet.
Womit hast du die geschaltet? Mit Pilight?
Gruß
Raimund
Hallo,
ja, ich hab das mit Pilight geschaltet. Musste dazu aber ein
benutzdefiniertes Paket versenden, welches ich vorher aufgezeichnet
habe.
Da ich außerdem noch eine json-Schnittstelle haben wollte, habe ich
letztendlich ein eigenes Tool geschrieben.
Wenn Interesse besteht, kann ich das veröffentlichen.
Grüße,
Henning
Henning D. schrieb:> ja, ich hab das mit Pilight geschaltet. Musste dazu aber ein> benutzdefiniertes Paket versenden, welches ich vorher aufgezeichnet> habe.> Da ich außerdem noch eine json-Schnittstelle haben wollte, habe ich> letztendlich ein eigenes Tool geschrieben.> Wenn Interesse besteht, kann ich das veröffentlichen.
Hallo!
Wäre es möglich das aufgezeichnete benutzerdefinierte Paket zu bekommen?
Habe nur eine einzelne unprogramierte Dose ohne Fernbedienung...
Danke!
Lukas
Habe auch solche Steckdosen von Brennenstuhl mit den 4 rollenden Codes.
Hat irgendwer es noch mal weiter probiert einen Sinn hinter den on- und
off-codes zu finden?
Nope. Habe inzwischen meinen Informatik Bachelor und Master gemacht und
hab immer noch keine Ahnung, wie der Code funktioniert. Ich schätze, es
braucht einen Doktor dazu... Ich denke, es wäre einfacher, andere
Steckdosen zu kaufen. Mittlerweile sollten sogar WLAN Steckdosen
einigermaßen erschwinglich sein.
Will mal diesen alten Thread mal wieder hervorheben.
Ich habe jetzt einen Satz von 5 Brennenstuhl RCR-3600 (RC-3600)
Funksteckdosen bekommen und wollte sie
durch meinen Homeserver via FS1000a Sendemodul schalten lassen.
Dank dieses threads hier, und diesen
https://github.com/sui77/rc-switch/pull/4
... habe ich es zum Laufen bekommen.
Die Dosen machen einen soliden Eindruck, sind zwar sperrig aber schalten
ja auch bis zu 4KW.
Zum Anlernen braucht die Steckdose ein An-Signal. (mehr brauchts
nicht!!!)
Dazu den kleinen Knopf 3 sek drücken und dann loslassen.
Die LED leuchtet dauerhaft für ca. 8 sekunden.
In dieser Zeit den Code der ON taste schicken.
Die LED blinkt 3 mal als quittung und der Code ist gespeichert.
Den entsprechenden OFF-Code hat die Dose aus dem ON-Code selber
automatisch ermittelt.
Löschen aller Codes:
kleinen Knopf gedrückt halten bis die LED 5mal blinkt. (ca 8sekunden)
Dann sind alle Codes gelöscht.
Die original zugehörige Fernbedienung arbeitet mit einem "rolling code"
über 4 codes.
Allerdings scheinen die Dosen auch zu funktionieren wenn immer nur ein
und derselbe code gesendet wird.
quasi ganz traditionel ;)
Dank Henning D. haben wir eine Codeliste von gültigen On/Off Codes
(siehe auch meinen Anhang hier)
(ob er jetzt schon Doctor ist ? ;)
Ich hatte anfangs Probleme mit der Codeliste, da nur die ON-Codes
funktionierten.
Ich hab dann mal die Timings für die 1 und 0 -Bits vertauscht und siehe
da, nun gehen auch die OffCodes.
Bit-0 nun lang/kurz, Bit-1 nun kurz/lang.
Ich habe noch nicht ALLE Codes der Liste durchprobiert sondern nur 5
genommen und die gehen.
Hier mal die Timing Spec (ähnlich wie in rcswitch), die zum Senden
verwendet wird:
Format: {Baselength in usecs, sync_h,sync_l,
bit0_h,bit0_l,bit1_h,bit1_l,numbits, repeat}
struct protocol p_rc3600={ 500, 6,14, 2,1, 1,2, 24,4};
Die Baselength ist in usecs. Das Andere sind Faktoren zum
multiplizieren für die Timings.
Also zB: das 0-Bit ist: 500 * 2 = 1000usecs high/on und 500 * 1=500
usecs low/off.
Der Snyc wird am ENDE des Packetes gesendet!
Es ist wichtig den Code mindestens 4-mal wiederholt zu senden damit der
Receiver sich synchronisiert.
have fun ;)
In den 10 Jahren ist viel passiert :)
Hab mich gegen den Doktor entschieden und verwende jetzt ausschliesslich
Shellys und nichts mehr von Brennenstuhl ;)