Hallo, ich lese nun schon seit Tagen im Internet irgendwelche Forenbeiträge und Websites zum Thema. Ich möchte den Funkcode meiner Steckdosen entschlüsseln und dann selbst senden. Dabei geht es mir mehr um das gewusst wie als ein konkretes Ziel. Zur Verfügung habe ich einen billigen China 433Mhz Sender und Empfänger, div. Arduinos, einen PC mit Soundeingang und Audacity, ein einfaches Oszilloskop ohne Speicher. Ich verstehe einfach nicht wie man vom empfangenen Signal nun auf die Takte und die Codes kommt. Würde sich hier jemand bereit erklären mir das zu erläutern und zwar so das ICH es auch verstehe ? ;-)
Olli G. schrieb: > Ich möchte den Funkcode meiner Steckdosen > entschlüsseln und dann selbst senden. Du kennst schon den Link IRMP hier im Forum? Ob Du den auch verstehst, können wir nur schwer beurteilen.
Die einfachen 433/868 MHz Dinger moduliereb mein nur ein niederfrequentes Signal via AM.. Wenn du an dem Eingangspin vom Sender misst sieht man meist 3 bis x Bits. Das geht dann auch noch mit billigen scope
Paßt IRMP auch zu Funksteckdosen? Wußte ich noch gar nicht. @Olli Goasn: Ich empfehle folgenden Link: http://avr.börke.de/Funksteckdosen.htm Anschließend kannst Du Dir gerne meinen damaligen Thread zu diesem Thema durchlesen: Beitrag "RFM12 schaltet Funksteckdose (nicht)" Ich habe dort mit einem RFM12-Funkmodul den Code meiner Funksteckdosen dechiffriert und beschreibe die Vorgehensweise in diesem Thread. Im Nachhinein würde ich allerdings kein RFM12 mehr dafür verwenden, sondern eher einen Baustein, die für AM-Modulation optimiert ist - das hätte mir viele Mühen erspart. Außerdem empfehle ich Dir dafür einen billigen Logic-Analyzer, damit Du Deine Codesequenzen gut aufnehmen und analysieren kannst. Ist sogar besser geeignet als ein Speicher-Oszi. Mit letzterem geht's aber auch. Ohne Speicheroszi und ohne Logic-Analyzer ist's schwierig - Du müßtest die Signale dann mit dem Arduino abtasten und dann analysieren. Geht sicherlich auch, ist aber aufwändig. Viele Grüße Igel1
:
Bearbeitet durch User
Olli G. schrieb: > Zur Verfügung habe ich einen billigen China 433Mhz Sender und Empfänger, > div. Arduinos, einen PC mit Soundeingang und Audacity, ein einfaches > Oszilloskop ohne Speicher. Vielleicht solltest du zu Weihnachten in einen Logikanalysator investieren, auch wenn der aus China wohl erst nächstes Jahr hier ist - dafür weniger als 8€ (z.B. ebay 221915442368). Die einfachst Möglichkeit das Signal abzugreifen, ist in der Fernbedienung vor der Senderstufe. Du kannst auch einfach in der Fernbedienung nachsehen, was da für ein Encoder-IC drin sitzt und dann den Code entsprechend der Beschreibung im Datenblatt generieren.
Hallo. Habe den Sender geöffnet. Da ist leider nur ein "klecks" drin, kein erkennbares IC. Jedoch der typische "DRI 433.92" Chip. Ich habe mit dem Oszi mal ein wenig rumgestochert und das Signal gefunden. Hier mal ein paar Bilder. Abgenommen mit Line-In am PC. Einmal mit Audacity und einmal mit SoftScope. Leider sind die Kurven wohl aufgrund der Kondensatorkopplung am Eingang etwas vermatscht. Aber immer noch wesentlich besser als die vom Funkempfänger-Modul.
:
Bearbeitet durch User
Wolfgang schrieb: > Vielleicht solltest du zu Weihnachten in einen Logikanalysator > investieren, auch wenn der aus China wohl erst nächstes Jahr hier ist - > dafür weniger als 8€ (z.B. ebay 221915442368). Die einfachst Möglichkeit > das Signal abzugreifen, ist in der Fernbedienung vor der Senderstufe. Und wo gibt es die Software dazu?
Ich hab mal einen LA mittels Arduino-Sketch nachgebaut. Auf http://ols.lxtreme.nl gibt es das, mit passender SUMP-Kompatibler Software. Leider ist der etwas zickig und hat auch nur einen oder zwei Kanäle auf dem Arduino. Für einfaches basteln würde der aber reichen.
Wenn der Sender Kodierschalter hat für die Adresse, könnte es einer aus der grossen PT2262/HX2262 Serie sein. Das Coding könnte ungefähr stimmen. Andreas S. schrieb: > Paßt IRMP auch zu Funksteckdosen? > Wußte ich noch gar nicht. Im Moment nicht (wobei BOSE auch Funkfernbedienungen hat), aber eine Erweiterung scheint mir durchaus möglich zu sein, vor allem, weil IRMP schon recht robuste Empfänger Routinen intus hat.
> Wenn der Sender Kodierschalter hat für die Adresse, könnte es einer aus > der grossen PT2262/HX2262 Serie sein. Leider nein, der hat einen kleinen Taster auf dem steht "Neuer Code". Wie ich oben schrieb ist nichts erkennbar. Das Teil ist von Aldi von vor, ach, 6-8 Jahren.
Also, hier noch die Daten vom Logic Analyzer. Im ersten Bild ist eine Sequenz zu sehen, bei der ich der ersten EIN-Taster einmal kurz betätigt habe. Mir scheint als würde sich das Muster nach drei Paketen wiederholen. Die einzelnen Pakete habe ich dann nochmals vergrößert angefügt. P.S.: Habe mir gerade einen LA aus Ebay bestellt. Ebenfalls 9,-€ aber aus Freilassing (ganz in meiner Nähe), d.h. den werd ich nächste Woche haben.
:
Bearbeitet durch User
Olli G. schrieb: > Mir scheint als würde sich das Muster nach drei Paketen wiederholen. Sehe ich nicht so. Vergleiche vom 1. und 4. Paket mal Anzahl der Pulse und Dauer vom vorletzten Puls.
Ist das vorstellbar das das Signal derart komplex aufgebaut ist? Bislang dachte ich das der Sender das Signal einfach mehrmals wiederholt, damit es auch sicher beim Empfänger ankommt. Hier scheint es sich ja um 4 verschiedene Datenpakete zu handeln?! Und da ich nur einmal kurz gedrückt habe, würde es dann auch wirklich nur einmal gesendet... Zur Vollständigkeit habe ich das 4. Datenpaket auch nochmal angehangen.
:
Bearbeitet durch User
Olli G. schrieb: > Hier scheint es sich ja um 4 verschiedene Datenpakete zu handeln?! Irgendwie soll die Steckdose ja nicht schalten, wenn der Nachbar sein Auto öffnet. Da werden schon einige Adressbits dabei sein. Wie viel ändert sich denn von dem Code, wenn man die zugehörige "Aus" Taste drückt?
Andreas S. schrieb: > Im Nachhinein würde ich allerdings kein RFM12 mehr dafür verwenden, > sondern eher einen Baustein, die für AM-Modulation optimiert ist - das > hätte mir viele Mühen erspart. Inwiefern? Das einzige Problem mit einem RFM12 hat man eigentlich dabei, wenn man die Sendefrequenz einer gegebenen Funk-FB ermitteln will. Und zwar deshalb, weil der RFM12 einfach mal zu empfindlich ist, sich also allein per Software nicht hinreichend taub machen läßt, um ein eindeutiges globales RSSI-Minimum ermitteln zu können. Um das zu erreichen, muß man entweder den Sender ziemlich weit weg tragen (in der Praxis ziemlich unpraktikabel) oder die Effizienz der Antenne temporär massiv verringern (sehr schwierig, auch weil sich dann gern andere Teile des Layouts als parasitäre Antennen betätigen, geht also nur, wenn man das von vornherein in's Layout eingeplant hatte). Allerdings ist auch die Bestimmung der exakten Sendefrequenz nach meiner Erfahrung am Ende auch völlig unwichtig. Es kommt nämlich praktisch immer exakt die Mitte des 433MHz-Bands als Ergebnis raus. Jedenfalls ist mir noch nie eine AM-Funk-FB über den Weg gelaufen, die was anderes als Sendefrequenz benutzt hätte... Und der ganze Rest ist sowieso absolut trivial. Die Datenrate des Payloads ist so gemächlich, dass man jedes einzelne verschissene Bit noch problemlos mit dem Auge erkennen kann, das stellt also absolut keinerlei Herausforderung für einen heutigen µC dar. > Außerdem empfehle ich Dir dafür einen billigen Logic-Analyzer, damit Du > Deine Codesequenzen gut aufnehmen und analysieren kannst. Ist sogar > besser geeignet als ein Speicher-Oszi. Mit letzterem geht's aber auch. > Ohne Speicheroszi und ohne Logic-Analyzer ist's schwierig Quatsch. Für das in diesem Zusammenhang relevante Zeug hat man alles nötige bereits im RFM12 und im AVR8. Man muss beides eben einfach nur souverän benutzen können. Nix für Lib-Verwurster, die vielleicht sogar noch heftige Problemen bei der Benutzung der selbstgewählten Programmiersprache haben...
Hallo c-hater. Du scheinst ja über fundierte Kenntnisse zu verfügen. Aber kannst Du bitte auch was zum Thema beitragen? Alles was du in vielen Worten schriebst klingt nach überheblicher dampfplauderei. Wenn das hier unter Deinem Niveau ist, dann schreib besser nichts. Sorry...
Olli G. schrieb: > Alles was du in vielen Worten schriebst klingt nach überheblicher > dampfplauderei. Da hast du wohl die Worte noch nicht verinnerlicht. c-hater schrieb: > Und der ganze Rest ist sowieso absolut trivial. ... Mit anderen Worten: Wenn es um die Bedienung einer Steckdose geht, kann man die paar Bits, so wie man sie mit dem LA erkennt, in den µC klöppeln und bei Bedarf an das Sendemodul rausspucken. Dafür braucht man überhaupt nicht zu verstehen, was da für eine Kodierung dahinter steckt. Und die Steckdose wird es auch nicht interessieren.
Olli G. schrieb: > Aber kannst Du bitte auch was zum Thema beitragen? Das habe ich. Du begreifst das nur nicht. Das allerdings ist dein Problem, nicht meins... > Alles was du in > vielen Worten schriebst klingt nach überheblicher dampfplauderei. Tja, von so richtig ganz unten sieht wohl schon die unaufgeregte sachliche Darstellung der Ergebnisse nur einfacher Handwerksarbeit (wie sie jeder andere tatsächliche Programmierer sicherlich genauso leicht leisten könnte) wohl wie "Überheblichkeit" aus...
Lest doch bitte von Anfang an. Das Primärziel ist etwas zu lernen, nicht die Steckdose zu schalten. Wer das nicht will, dem steht es frei den Thread einfach zu ignorieren.
Hallo, na dann lerne doch... z.B. daß man bei ASK (amplidude shift keying oder sp ähnlich) meist Manchester-Codierugnen benutzt, weil man Flankenwechsel braucht, um den Bittakt zurückzugewinnen. Eine Folge 0-Bits wäre sonst einfach kein Träger oder eine Folge 1-Bits ein Dauerträger. Da finde dann mal die Anzahl der Bits raus. Daß man die Geräte irgendwie kenntlich macht, also adressiert, damit sich das richtige Gerät zuständig fühlt. Das findet man z.B. durch Lesen über solche Sachen raus. Aus den Flankenwechseln eine Codierung rekonstruieren zu wollen, setzt voraus, daß man ahnt, was einen Erwarten könnte. Was C-hater sagen will: man kann einfach die Längen der 0 und 1 Pulse abspeichern (wie im Sample) und dann genauso wieder senden. Bei den simplen Codes von Steckdosen u.ä. klappt das eben einfach so. Wir haben 1987 auf diese Weise die Zugangskarten unserer Zugangskontrolle von Honeywell dupliziert, um gelöschte Karten wieder herstellen zu können ohne nicht vorhandenes Westgeld bemühen zu müssen. Honeywell meinte, daß der Code selbst nicht zu kacken wäre. Ein paar recht gute Leute haben ziemlich lange über den Bitmustern gegrübelt. Vermutung letztlich: eine Systemkennung aus x Bits und eine Zufallszahl pro Karte. Die Station (8-Bit-Rechner von 1979) hatte verdächtig viel Eprom... Gruß aus Berlin Michael
Michael U. schrieb: > z.B. daß man bei ASK (amplidude shift keying oder sp ähnlich) meist > Manchester-Codierugnen benutzt, weil man Flankenwechsel braucht, um den > Bittakt zurückzugewinnen. Das Blöde daran ist nur, dass die obigen Signale gar nicht Manchester-codiert sind. Es ist auch kein Pulse-Width- oder Pulse-Distance-Width-Protokoll, welche meist bei IR-Fernbedienungen benutzt wird. Das einzige, was übrigbleibt, ist ein bitserielles Protokoll. Das ist bei IR- und bei Funkfernbedienungen aber eher ungewöhnlich. Ich nehme an, dass die 4 Blöcke ein- und dieselbe Information tragen - wobei jedoch die Bits anders kodiert werden - z.B. invertiert. Das wird bei IR-Fernbedienungen auch oft gemacht, um das Protokoll "sicherer" zu gestalten. Ich glaube, da muss man noch etwas daran tüfteln... oder man stellt den Grips aus, und kodiert das Signal einfach 1:1 nach. Dann läufts halt nur mit genau diesen Funksteckdosen und der Nachbar bleibt vor eventuellen Experimenten verschont.
:
Bearbeitet durch Moderator
Frank M. schrieb: > Das einzige, was übrigbleibt, ist ein bitserielles Protokoll. Die Bits bei einer Funkfernbedienung parallel zu übertragen, wird schwierig, solange man nicht zu Modulationsarten mit mehreren Bits in einem Symbol greift.
Olli G. schrieb: > Das Primärziel ist etwas zu lernen, nicht die Steckdose zu schalten. Dann mußt du wohl oder übel mit etwas mehr als einem einzigen Code-Wort rausrücken, z.B. Wolfgang schrieb: > Wie viel ändert sich denn von dem Code, wenn man die zugehörige "Aus" > Taste drückt?
Wolfgang schrieb: > Frank M. schrieb: >> Das einzige, was übrigbleibt, ist ein bitserielles Protokoll. > > Die Bits bei einer Funkfernbedienung parallel zu übertragen, wird > schwierig, solange man nicht zu Modulationsarten mit mehreren Bits in > einem Symbol greift. Mit "bitseriellem Protokoll" meinte ich das, was ein gewöhnlicher UART ausspuckt. Ist aber ungewöhnlich bei IR und Funk, weil die Taktinformationen hier nur byteweise oder gar nur wortweise (je nach Framelänge) rüberkommen. Siehe hier: https://www.mikrocontroller.net/articles/IRMP#Kodierungen Weder Pulse-Distance noch Pulse-Width noch eine Kombination aus beiden greifen. Auch Biphase (Manchester) ist nicht das, was man da oben sieht.
:
Bearbeitet durch Moderator
Olli G. schrieb: > Zur Vollständigkeit habe ich das 4. Datenpaket auch nochmal angehangen. Das 4. ist dem 1. Datenpaket zwar sehr ähnlich, aber nicht dasselbe. Ich sehe da insgesamt 1 Startbit der Länge 1 37 Datenbits 1 Stopbit unbekannter Länge Wenn man die High-/Low-Signale untereinander vergleicht, gibt es kein Bit zwischendurch, welches in allen 4 Frames ein- und denselben Zustand hat. Das heisst, es gibt keine weiteren Start- oder Stopbits "mittendrin". Die minimale Pulslänge ist 1, die maximale Pulslänge ist mindestens 8. Dazwischen sieht man noch beliebig andere Werte. Anders ist es bei den Pausen: Hier gibt es nur die Längen 1 und 3. Hier glaube ich, kann man ansetzen.
@Olli Goasn: Wo genau hast Du das Signal abgenommen? Im Sender? Bist Du Dir sicher, daß das Signal vom LA das Signal korrekt nachbildet? Will sagen: ist das Triggerlevel passend gesetzt? Könntest Du uns eine Sequenz spendieren, wo Du den LA und Dein Oszilloskop parallel das Signal aufzeichnen läßt? Ansonsten hilft es evtl. wenn Du uns noch mehr Codesequenzen als Futter gibst. Viele Grüße Igel1
Olli G. schrieb: > Lest doch bitte von Anfang an. Das Primärziel ist etwas zu lernen, nicht > die Steckdose zu schalten. Dan lerne doch. Du hast da einen AVR8 und ein RFM12. D.h.: alles was nötig ist im die von mir aufgezeigten Schritte nachzuvollziehen. Dein Problem ist einfach nur, das du keine Ahnung hast, wie man mit einem eigentlich für ASK gedachten Modul AM empfangen kann. Und bei der Bewältigung dieses Problems wird dir nur eins helfen können: die eigene massive Aufschlauung. Erster Schritt: Finde heraus, wie ASK eigentlich funktioniert. Zweiter Schritt: Finde heraus wie man dem für ASK designten Chip die nötigen Informationen zum Sampling einer AM-Quelle entlockt. Dritter Schritt: Finde heraus, wie man den für ASK designten Chip dazu bringt, AM zu senden. Wenn man das grundsätzliche Verständnis der Sachverhalte hat, ist das alles nicht wirklich schwierig. Zumal selbst Leute, die ohne Wichsvorlagen garnix können, ihre Wichvorlagen durchaus finden könnten (z.B. in den Quelltexten von Ethersex). OK, man muß den Kram auch dann immer noch wenigstens verstehen, um ihn sinnvoll anwenden zu können... Was da ganz sicher drinsteht, ist mein "dritter Schritt". Das habe ich nämlich schon verwendet, bevor ich die Schritte 2 und 3 für einen RFM12 selber erarbeitet hatte...
@Olli Goasn: Wenn Du meinen oben verlinkten Thread liest, wirst Du sehen, dass ein RFM12-Modul nicht sonderlich gut für Deine Zwecke geeignet ist: Beitrag "Re: RFM12 schaltet Funksteckdose (nicht)" Obwohl ich damals mit dem RFM12 mein Ziel erreicht hatte, rate ich Dir von dieser Vorgehensweise ab - auch wenn sie c-hater mit deftigen Worten hier bewirbt. Und: ich denke, ich weiß, wovon ich spreche, da ich sie live ausprobiert habe - Du kannst es im Thread gut nachlesen. Viele Grüße Igel1
c-hater schrieb: > Dan lerne doch. Du hast da einen AVR8 und ein RFM12. Nein, er hat keinen RFM12, sondern nur einen OOK/ASK-China-Empfänger. Lies nochmal das Eingangsposting. > Dein Problem ist einfach nur, das du keine Ahnung hast, wie man mit > einem eigentlich für ASK gedachten Modul AM empfangen kann. Ein RFM12 ist eigentlich nur für FSK gedacht. Man kann ihn aber modifizieren, dass man auch ASK damit empfangen kann - zumindest den RFM12B. Ich glaube, Du wirfst da was durcheinander. ASK ist schon das richtige hier. Der China-Empfänger ist soweit okay. Dein Hinweis, nach "Wichsvorlagen" zu suchen, führt auf den falschen Weg.
:
Bearbeitet durch Moderator
Die abgebildeten Signale sind direkt am Sender abgenommen (Steuerleitung zum Funkmodul). Ich bin aber nicht sicher ob das alles so richtig ist, daher warte ich noch auf den bestellten LA. Womöglich ist das Signal auch invertiert, werde das mit dem Hameg Oszi nochmal nachprüfen. Wie geschrieben habe ich ein billiges China ASK Funkmodul, nix besonderes. Da kann man nix programmieren, nur einen TTL Data abzapfen. Ich werde jetzt erstmal versuchen die 1/0 Laufzeiten aufzuzeichnen und diese auf das Sendermodul zu geben und mal sehen ob die Steckdose schaltet. Erst wenn ich sicher bin, das die Signalverarbeitung stimmt, schaue ich mir die Codierung nochmal an. Danke igel1, der Thread wahr sehr informativ!
Hallo zusammen, eines vorab: Ich kann nun meine Steckdose schalten! Aber das wichtigste ist: Ich habe VIEL neues gelernt. !!!!! Danke Euch allen !!!!! Die oben gezeigten Strukturen sind alle Käse. Heute kam mein bestellter super-billig-China-LA für 8€ (Saleae). Das Ding ist ein Futzel, aber die Software ist für den Hausgebrauch schonmal echt klasse. Damit konnte ich die Signal wirklich entschlüsseln. Folgendes kam dabei raus: Schalten: * Ein Tastendruck erzeugt eine Sequenz aus 4 gleichen Übertragungen. * Jede Übertragung ist 39 ms lang. * Der Abstand zwischen jeder Übertragung beträgt 74 ms. * Das kürzeste Signal (HIGH oder LOW) ist 0,65 ms lang. Dimmen: * Beim Dimmen wird die Schaltsequenz mit einem Abstand von 1,113s immer wieder übertragen. Die Codierung: Taste 1 An: 1011011011011011011011011011011011011 011011011001011011011001 Taste 1 Aus: 1011011011011011011011011011011011011 011011011011011011011011 Taste 2 An: 1011011011011011011011011011011011011 001011011001011011001001 Taste 2 Aus: 1011011011011011011011011011011011011 001011011011011011001011 Taste 3 An: 1011011011011011011011011011011011011 011001011001011011011011 Taste 3 Aus 1011011011011011011011011011011011011 011001011011011011011001 Taste 4 An 1011011011011011011011011011011011011 001001011001011011001011 Taste 4 Aus 1011011011011011011011011011011011011 001001011011011011001001 Taste Master An 1011011011011011011011011011011011011 001001001001011011011011 Taste Master Aus 1011011011011011011011011011011011011 001001001011011011011001 Taste Dimmen HELLER 1011011011011011011011011011011011011 001001001011001011001001 Taste Dimmen DUNKLER 1011011011011011011011011011011011011 001001001001001011001011 Vielleicht wird ja jemand schlau draus. Ich erkenne nur das die erste Sequenz immer gleich ist. Das schaut für mich eher nach einem Sync-Signal aus anstelle eines Codes. -------- Dann habe ich folgenden Code zum testen auf einem Arduino geschrieben:
1 | int funk = 2; |
2 | |
3 | void setup() { |
4 | // put your setup code here, to run once:
|
5 | pinMode(funk, OUTPUT); |
6 | digitalWrite(funk, LOW); |
7 | }
|
8 | |
9 | void loop() { |
10 | |
11 | int i; |
12 | int s; |
13 | char sendSeq[] = "1011011011011011011011011011011011011011011011001011011011001"; |
14 | |
15 | for (s = 1; s <= 4; s++) |
16 | {
|
17 | for (i = 0; i < sizeof(sendSeq) - 1; i++) |
18 | {
|
19 | if (sendSeq[i] == '1') { |
20 | digitalWrite(funk, HIGH); |
21 | } else { |
22 | digitalWrite(funk, LOW); |
23 | }
|
24 | delayMicroseconds(650); |
25 | }
|
26 | digitalWrite(funk, LOW); |
27 | delay(74); |
28 | }
|
29 | |
30 | delay(5000); |
31 | }
|
Den Pin "D2" vom Arduino habe ich auf den "DATA"-Pin des 433Mhz-Senders gelegt. "GND" vom Sender an "GND" vom Arduino und "VCC" vom Sender an eine externe Spannungsquelle (+12V). "GND" der externen Spannungsquelle habe ich ebenfalls mit "GND" vom Funkmodul verbunden. Mehr ist es nicht. Software hochladen und schwubs schaltet sich die Steckdose ein :-) Leider habe ich dabei fast meinen China-Nano gegrillt, weil ich zuvor das Funkmodul mit VCC an die +5V vom Nano-Board geklemmt habe. Das Modul zieht aber so viel Strom, das die kleine SMD-Schottky-Diode am USB-Port des Nano-Boards zu rauchen begann. Als ich die externe Spannungsquelle anschloss war alles gut. Ich denke auch das +12V besser für die Reichweite sind als +5V. Laut Datenblatt verträgt der Sender auch so viel. So, als nächstes schnappe ich mir ein weiteres Funkset. Ich habe noch 3 Stück davon, alles unterschiedliche Hersteller und Alter. Mein Ziel wäre es eine Fernbedienung zu bauen, mit der ich alle Funksteckdosen schalten kann. Dazu müsste ich eine der FBs ausweiden und einen SMD-Arduino samt Funksender einbauen. Mal schaun...
Glückwunsch Olli! Du hast das Ziel in ziemlich kurzer Zeit erreicht! Viele Grüße Igel1
Olli G. schrieb: > eines vorab: Ich kann nun meine Steckdose schalten! Glückwunsch :-) > * Ein Tastendruck erzeugt eine Sequenz aus 4 gleichen Übertragungen. > * Jede Übertragung ist 39 ms lang. > * Der Abstand zwischen jeder Übertragung beträgt 74 ms. > * Das kürzeste Signal (HIGH oder LOW) ist 0,65 ms lang. Sehr gut. Mit diesen Infos kann ich das Protokoll in IRMP einbauen. > Die Codierung: > > Taste 1 An: > 1011011011011011011011011011011011011 011011011001011011011001 Das ist zwar zutreffend und Du kannst so damit arbeiten, aber tatsächlich ist das Signal noch einfacher, als Du denkst. Man sieht hier, dass niemals mehr als die doppelten Signallängen vorkommen, d.h. niemals mehr als 00 oder 11 hintereinander. Ich dachte zuerst, es wäre daher ein Manchester-Code. Leider enthalten Deine Zahlenfolgen aber unter anderem unmögliche Zustände beim Manchester-Code. Somit scheidet dieser schon mal aus. Wenn man es sich aber in 3er Gruppen anschaut, gibt es nur 2 mögliche Kombinationen: 101 = 0 100 = 1 Deine Folge oben in 3er Gruppen entspricht dann:
1 | 101 101 101 101 101 101 101 101 101 101 101 101 Geräteadresse |
2 | 101 101 101 100 101 101 101 100 Kommando |
3 | 1(0)(0) Stoppbit |
Dabei habe ich die letzte 1 aus Deinem linken Block noch in den rechten Block gezogen und noch zwei (im Scan unsichtbare) 0en für das Stoppbit angefügt. Damit ergibt sich die Bitfolge:
1 | 0 0 0 0 0 0 0 0 0 0 0 0 Adresse = 0x0000 |
2 | 0 0 0 1 0 0 0 1 Kommando = 0x11 |
3 | 1 Stoppbit |
Die ersten 12 Bits bilden die Geräte-Adresse und sind hier immer gleich. Es unterscheiden sich daher nur die Kommandos mit einer Länge von 8 Bit. Und hier die Kommando-Werte für alle Tasten: > Taste 1 An: > 1011011011011011011011011011011011011 011011011001011011011001 101 101 101 100 101 101 101 100 = 00010001 Kommando = 0x11 > Taste 1 Aus: > 1011011011011011011011011011011011011 011011011011011011011011 101 101 101 101 101 101 101 101 = 00000000 Kommando = 0x00 > Taste 2 An: > 1011011011011011011011011011011011011 001011011001011011001001 100 101 101 100 101 101 100 100 = 10010011 Kommando = 0x93 > Taste 2 Aus: > 1011011011011011011011011011011011011 001011011011011011001011 100 101 101 101 101 101 100 101 = 10000010 Kommando = 0x82 > Taste 3 An: > 1011011011011011011011011011011011011 011001011001011011011011 101 100 101 100 101 101 101 101 = 01010000 Kommando = 0x50 > Taste 3 Aus > 1011011011011011011011011011011011011 011001011011011011011001 101 100 101 101 101 101 101 100 = 01000001 Kommando = 0x41 > Taste 4 An > 1011011011011011011011011011011011011 001001011001011011001011 100 100 101 100 101 101 100 101 = 11010010 Kommando = 0xD2 > Taste 4 Aus > 1011011011011011011011011011011011011 001001011011011011001001 100 100 101 101 101 101 100 100 = 11000011 Kommando = 0xC3 > Taste Master An > 1011011011011011011011011011011011011 001001001001011011011011 100 100 100 100 101 101 101 101 = 11110000 Kommando = 0xF0 > Taste Master Aus > 1011011011011011011011011011011011011 001001001011011011011001 100 100 100 101 101 101 101 100 = 11100001 Kommando = 0xE1 > Taste Dimmen HELLER > 1011011011011011011011011011011011011 001001001011001011001001 100 100 100 101 100 101 100 100 = 11101011 Kommando = 0xEB > Taste Dimmen DUNKLER > 1011011011011011011011011011011011011 001001001001001011001011 100 100 100 100 100 101 100 101 = 11111010 Kommando = 0xFA > Vielleicht wird ja jemand schlau draus. Siehe oben. Man kann da die Signalbildung noch weiter vereinfachen, wenn man die An-/Aus-Kommandos gegenüberstellt. Aber das würde hier zu weit führen. Nur eine kurze Andeutung: Das obere Nibble und das untere Nibble haben vom Wert her die Differenz "eins" zur konträren Taste. Da steckt also noch weitere Redundanz (vermutlich invertierte Bits) drin, die der Datensicherheit dienen soll. Ich werde mal in einer ruhigen Minute versuchen, das System zu durchschauen. Dann werden die Kommando-Codes wahrscheinlich noch eine Ecke einfacher. Aber erstmal reicht diese 3er Gruppierung. > Ich erkenne nur das die erste Sequenz immer gleich ist. Ja, da steckt die Geräteadresse drin. Schließlich sollen Deine Steckdosen ja nicht die baugleichen Funksteckdosen des Nachbarn stören. > Das schaut für mich eher nach einem Sync-Signal aus anstelle eines > Codes. Kann sein, dass von den 12 Bit die ersten 4 Bit als Sync zu verstehen sind und dann 8 Bit für die Geräteadresse übrigbleiben. Dann wäre das folgende Muster plausibel: 4 Sync-Bits + 8 Adress-Bits + 8 Kommando-Bits + 1 Stopp-Bit Das kann man aber nur analysieren, wenn man noch ein zweites baugleiches Funkset hat. Oder hat Deine Funksteckdosen-Fernbedienung DIP-Schalter, um die Adresse einzustellen? > Dann habe ich folgenden Code zum testen auf einem Arduino geschrieben: Sehr schön. Ich weiß nicht, ob Du das oben dargestellte System in Deinen Source einbauen möchtest. Das Programm wird dann zum Encodieren der Codes ein wenig komplizierter, die Systematik, die dahintersteht, aber verständlicher. Ich werde das mal in einer ruhigen Minute so in den IRMP einbauen. > So, als nächstes schnappe ich mir ein weiteres Funkset. Ich habe noch 3 > Stück davon, alles unterschiedliche Hersteller und Alter. Du wirst wahrscheinlich feststellen, dass die Dinger alle verschiedene Kodierungen benutzen ;-) > Mein Ziel wäre > es eine Fernbedienung zu bauen, mit der ich alle Funksteckdosen schalten > kann. Dann wirst du mit Deinen "01010010..."-Strings nicht mehr so einfach auskommen. Denn die Dinger werden nicht nur andere Kodierungen, sondern auch andere Timings haben.
:
Bearbeitet durch Moderator
Olli G. schrieb: > Ich erkenne nur das die erste Sequenz immer gleich ist. Das schaut für > mich eher nach einem Sync-Signal aus anstelle eines Codes. Ohne Sycn-Signal kann Funkkommunikation auch nicht funktionieren, da der Empfänger nach Aktivierung des Senders etwas Zeit für seine ALC braucht und danach noch eine Chance haben muss, den Anfang der Nachricht zu erkennen.
Alternativ kauf dir einen passenden USB DVB-T stick mit dem passenden realtek chipsatz .... RTL SDR kosten so 10 eu
Frank M. schrieb: > Man kann da die Signalbildung noch weiter vereinfachen, wenn > man die An-/Aus-Kommandos gegenüberstellt. Aber das würde hier zu weit > führen. Ich hab jetzt noch etwas genauer hingeschaut. Wenn man die 8 Kommando-Bits ein wenig gruppiert und die darin enthaltenen Werte als LSB liest, dann:
1 | TTT Z ??? P |
2 | Taste 1 Aus: 000 0 000 0 Taste TTT = 0 Z=aus P=even |
3 | Taste 1 An: 000 1 000 1 Taste TTT = 0 Z=an P=odd |
4 | |
5 | Taste 2 Aus: 100 0 001 0 Taste TTT = 1 Z=aus P=even |
6 | Taste 2 An: 100 1 001 1 Taste TTT = 1 Z=an P=odd |
7 | |
8 | Taste 3 Aus 010 0 000 1 Taste TTT = 2 Z=aus P=odd |
9 | Taste 3 An: 010 1 000 0 Taste TTT = 2 Z=an P=even |
10 | |
11 | Taste 4 Aus: 110 0 001 1 Taste TTT = 3 Z=aus P=odd |
12 | Taste 4 An: 110 1 001 0 Taste TTT = 3 Z=an P=even |
13 | |
14 | Taste Master Aus: 111 0 000 1 Taste TTT = 7 Z=aus P=odd |
15 | Taste Master An: 111 1 000 0 Taste TTT = 7 Z=an P=even |
16 | |
17 | Taste Dimmen HELLER: 111 0 101 1 Taste TTT = 7 Z=aus P=odd |
18 | Taste Dimmen DUNKLER: 111 1 101 0 Taste TTT = 7 Z=an P=even |
Die ersten 3 Bits (TTT) bilden die Tasten-Nummer, Z ist der Zustand (ein-/aus), das letzte Bit P ist die Parity, nämlich, ob die Anzahl der 1en in den ersten 7 Bit gerade oder ungerade ist. Ich wusste doch, dass hier eine Redundanz drinsteckt :-) Aber die 3 Bits, die ich mit ??? gekennzeichnet habe, verstehe ich noch nicht... Interessant wäre auch, was passiert, wenn man für TTT mal die Werte 4, 5 oder 6 schickt. Könnte sein, dass man damit auch 2er Gruppen und nicht nur 4er Gruppen von Steckdosen ein- und ausschalten kann ;-)
:
Bearbeitet durch Moderator
karl klammer schrieb: > Such mal nach "Saleale" Wonach? Kriegst du keine 6 Buchstaben fehlerfrei hingeschrieben oder war das der automatische Fehlergenerator von deinem Smart-Irgendwas?
Danke für die tollen Anregungen Frank! Ich bin noch nicht so weit wie Du, was das lesen und verstehen dieser Codes angeht... Inzwischen habe ich aber mit meiner Methode 3 Funksets im "Griff". Einer davon hat auch nen HX2262 drin. Der sendet nach dem eigentlichen Kommando noch ein weiteres Signal, auf das alleine die Steckdose nicht reagiert und komischerweise auch ohne es einwandfrei schaltet (siehe zweite Sequenz im Bild). Hast Du dazu vielleicht eine Idee? Ich bin bislang so vorgegangen, das ich den Handsender geöffnet und das DATA-Pin gesucht habe (Oszi). In der Regel haben die Sender ja den bekannten "433,92" MHz-Baustein und dort ist Pin 1 der Dateneingang. Hier wird man immer fündig. Den habe ich dann mit dem Logicanalyzer eingelesen. Dann habe ich das kürzeste Signal (bei mir waren Puls und Pause bislang immer gleich) gesucht und die Sequenz als '0'en und '1'en runtergeschrieben, je nachdem wie lang sie eben waren. Auch wenn das so klappt, hat das mit dem Verständnis des Codes noch nicht viel zu tun. Da will ich noch dazulernen. Ich habe inzwischen verstanden, das man über Funk nicht einfach 0 und 1 als "Träger an", "Träger aus" senden kann, da es keine Sychronisation gibt wie bei der Seriellen Schnittstelle und es daher eine Sequenz für eine logische 0 und eine Sequenz für eine logische 1 gibt. Die Kunst ist es, diese Sequenzen aus dem Signal zu ermitteln. Der Empfänger kann bestenfalls aus der länge des Trägersignals bzw. der Pausen einen Code erstellen. Auch gibt es aufgrund der elektr. Eigenschaften meist ein Start-Bit bzw. Einschwingphase in Form eines Sync-Signals. Dennoch könnte ich jetzt aus dem obigen Signal mehrere Varianten herauslesen. Ich könnte z.B. aus der steigenden Flanke (von 0 auf 1) einen Takt erkennen, da er immer im gleichen Abstand kommt. Er dauert immer 1,35 ms, was 740 Hz entspräche. Manche 1-Phasen sind etwas länger, aber nie so lang das sie bis ans Ende des Pulses reichen und mit dem nachfolgenden "verschmelzen" könnten (75% Duty-Cycle). Sowas könnte man als Pulsbreitenmodulation beschreiben. Hier könnte ich jetzt behaupten, das jeder Takt ein Bit darstellt. Somit hätte das Signal eine Länge von 25 Bit. Ein kurzer Puls (25& Dutycycle) könnte man als logische "0" und ein langer Puls (75% Dutycycle) als logische "1" werten. Dann wäre die transportierte Information: 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 In diesem Code könnten jetzt noch Start/Stop/Parität-Bits oder Prüfsummen stecken um ihn zu härten.
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.