Hallo Leute, Wir basteln im Moment ein kleines haus automatisierungssystem und wollten jetzt noch ganz simpel Funk Steckdosen hinzufügen! Dazu haben wir dieses Set gekauft: http://www.ebay.com/itm/300693889810 Wir wollen nun den Code den der kleine IC in der Funkverbedienung an sein Sende Modul schickt (1 Leitung) selber generieren und nur das Modul benutzen! Ich habe dazu den Code mit Oszi aufgenommen, versteh aber nicht genau wie wir den "dechiffrieren" können… ich hab schon verschiedene Ansätze versucht.. Vor allem bleibt der erste Teil immer 100% identisch und nur die letzten "12" Bits (?) ändern sich je nach Tastendruck. Hier die Bilder (in ner kl zip.) vielleicht erkennt ja jemand von euch direkt was… gruß David
Hallo, gehe mal davon aus, daß am Anfang die Geräteadressen stehen und am Ende die Steuersequenz folgt. Wen Du mal Tante Google befragst, wirst Du Antworten auf Deine Fragen finden. Der Code liegt ziemlich offen. VG. Uwe
Hallo, einfach mal einen Empfänger aufmachen, dort sind meist IC's im DIL-Gehäuse drin, und dort findet sich auch ein Datenblatt nebst Übertragungscode. Sascha
David S. schrieb: > Ich habe dazu den Code mit Oszi aufgenommen, versteh aber nicht genau > wie wir den "dechiffrieren" können… ich hab schon verschiedene Ansätze > versucht.. > Vor allem bleibt der erste Teil immer 100% identisch und nur die letzten > "12" Bits (?) ändern sich je nach Tastendruck. Der erste Teil ist einfach der Sync und die ID der Fernbedienung, der zweite Teil die Adresse der Steckdose, das Kommando und (wahrscheinlich) ein oder zwei Prüfbits. Das ergibt sich aus der Überlegung, was zum Betrieb eines solchen Systems sinnvoll und nötig ist. Die Decodierung sollte sehr einfach sein. "An" und "Aus" von derselben FB für dieselbe Steckdose wird nur sehr wenige Bits toggeln lassen, dabei ist ganz sicher das eine nötige Kommandobit und mindestens ein Prüfbit, sofern es welche gibt. "An" für Steckdose1 und "an" für Steckdose2,3,4 derselben FB wird auch auch nur sehr wenige Bits togglen lassen, das Kommandobit wird aber nicht dabei sein. Das dürfte damit identifiziert sein und auch mindestens eins der Prüfbits. Aus der Betrachtung der restlichen Bits kann man leicht eine Vermutung über die Codierung der Steckdosenadresse ableiten. Insbesondere, wenn man dann auch noch das "alle an"-Kommando hinzunimmt. So viele Möglichkeiten gibt es ja nicht, in den wenigen verfügbaren Bits eine Geräteadresse zu codieren. Vermutlich ist die ganze Sache manchestercodiert (oder was ähnliches selbsttaktendes), so daß das, was du als 12 "Bit" siehst, netto wohl nur sechs sind. Wahrscheinlich ein Bit für's Kommando, drei oder vier Bit für die Steckdosenadresse und ein oder zwei Prüfbits.
Hallo Leute, danke für eure Tips, ich habe jetzt "dechiffriert" und zum laufen gebracht!! Folgende Unterfunktion funktioniert (zumindest mit meinen) FunkSteckdosen, wenn an 'radioPin' das Funkmodul angeschlossen wird! Danke nochmal für eure Hilfe vielleicht bringt dem ein oder anderem der was ähnliches machen will mein Code etwas:
1 | #define LOGIC_HIGH_DELAY_US 450
|
2 | #define LOGIC_LOW_DELAY_US (3*LOGIC_HIGH_DELAY_US)
|
3 | #define ENTIRE_START_SILENCE_DELAY_US 6750
|
4 | |
5 | void sendRemoteSignal(int number, bool turnOn) |
6 | {
|
7 | // remoteID ist eine Constante die mittels Oszilloskop ermittelt wurde.
|
8 | // nach der Start Sequenz werden die 2 RemoteID Bytes zunächst einmal normal
|
9 | // danach nochmals aber invertiert rausgeschickt.
|
10 | // INSGESAMT werden somit nach der Start & Silence Sequenz 5 Bytes geschickt wovon die ersten 4 immer Identisch sind.
|
11 | uint16_t remoteID = 0xB4AF; |
12 | |
13 | // ControlByte = Letztes Byte wird entsprechend aus Number und turnOn codiert:
|
14 | // die Nr (0-7) wird um 1 geshifftet; diese 4 Bits dann kopiert, invertiert und an die Stellen 4-7 im Controlbyte eingefügt
|
15 | // Das stellt Sieht dann so aus N für number Bit, n für invertiers number bit
|
16 | |
17 | // controlByte : | nnn1,NNN0 | <-- Das entspricht dem Komando zum Einschalten der Steckdose NNN
|
18 | byte controlByte = number<<1; |
19 | controlByte = controlByte | (((~controlByte)<<4)&0xF0); |
20 | |
21 | // ~controlByte : | NNN0,nnn1 | <-- Das entspricht dem Komando zum AUS-schalten der Steckdose NNN
|
22 | if (!turnOn) controlByte = ~controlByte; |
23 | |
24 | // START (Sync) SEQUENZ: 1010 -------------------------------------------------------------
|
25 | for (int i=0;i<2;i++){ |
26 | digitalWrite(radioPin, HIGH); |
27 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
28 | digitalWrite(radioPin, LOW); |
29 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
30 | }
|
31 | // SILENCE SEQUENZ: 11111110000000 --------------------------------------------------------
|
32 | digitalWrite(radioPin, HIGH); |
33 | delayMicroseconds(ENTIRE_START_SILENCE_DELAY_US/2); |
34 | digitalWrite(radioPin, LOW); |
35 | delayMicroseconds(ENTIRE_START_SILENCE_DELAY_US/2); |
36 | |
37 | // Standart Sequenz die sich nicht ändert (4 Bytes: 0xB4AF) in 2 for Schleifen ------------
|
38 | for (int i=15;i>=0;i--){ |
39 | digitalWrite(radioPin, HIGH); |
40 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
41 | digitalWrite(radioPin, LOW); |
42 | |
43 | if ((remoteID>>i)&0x0001){ |
44 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
45 | }
|
46 | else { |
47 | delayMicroseconds(LOGIC_LOW_DELAY_US); |
48 | }
|
49 | }
|
50 | for (int i=15;i>=0;i--){ |
51 | digitalWrite(radioPin, HIGH); |
52 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
53 | digitalWrite(radioPin, LOW); |
54 | if (!((remoteID>>i)&0x0001)){ |
55 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
56 | }
|
57 | else { |
58 | delayMicroseconds(LOGIC_LOW_DELAY_US); |
59 | }
|
60 | }
|
61 | // ControlByte Codiert rausschicken ------------------------------------------------------
|
62 | for (int i=7;i>=0;i--){ |
63 | digitalWrite(radioPin, HIGH); |
64 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
65 | digitalWrite(radioPin, LOW); |
66 | |
67 | if ((controlByte>>i)&0x0001){ |
68 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
69 | }
|
70 | else { |
71 | delayMicroseconds(LOGIC_LOW_DELAY_US); |
72 | }
|
73 | }
|
74 | |
75 | // Zum Schluss: BIT einmal noch HIGH Setzten = ENDe --------------------------------------
|
76 | digitalWrite(radioPin, HIGH); |
77 | delayMicroseconds(LOGIC_HIGH_DELAY_US); |
78 | digitalWrite(radioPin, LOW); |
79 | |
80 | }
|
81 | |
82 | // ___________________________________________________________________
|
Sascha Weber schrieb: > einfach mal einen Empfänger aufmachen, dort sind meist IC's im > DIL-Gehäuse drin, und dort findet sich auch ein Datenblatt nebst > Übertragungscode. Das innerhalb von Geräten Schaltpläne stecken, ist leider schon vor vielen Jahrzehnten aus der Mode gekommen. :-( Gruss Harald
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.