Forum: Mikrocontroller und Digitale Elektronik Wie lese ich die die Codierung von Funkdaten?


von Olli Z. (z80freak)


Lesenswert?

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 ? ;-)

von Harald W. (wilhelms)


Lesenswert?

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.

von Timmo H. (masterfx)


Lesenswert?

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

von Andreas S. (igel1)


Lesenswert?

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
von Wolfgang (Gast)


Lesenswert?

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.

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

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
von Oberlehrer (Gast)


Lesenswert?

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?

von Olli Z. (z80freak)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Olli Z. (z80freak)


Lesenswert?

> 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.

von Wolfgang (Gast)


Lesenswert?

Oberlehrer schrieb:
> Und wo gibt es die Software dazu?

Guck mal unter sigrok

von Olli Z. (z80freak)



Lesenswert?

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
von Wolfgang (Gast)


Lesenswert?

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.

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

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
von Wolfgang (Gast)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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...

von Olli Z. (z80freak)


Lesenswert?

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...

von Wolfgang (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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...

von Olli Z. (z80freak)


Lesenswert?

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.

von Michael U. (amiga)


Lesenswert?

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

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
von Wolfgang (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Andreas S. (igel1)


Lesenswert?

@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

von karl klammer (Gast)


Lesenswert?

Such mal nach "Saleale"

von c-hater (Gast)


Lesenswert?

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...

von Andreas S. (igel1)


Lesenswert?

@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

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
von Olli Z. (z80freak)


Lesenswert?

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!

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

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...

von Bolko (Gast)


Lesenswert?

Glückwunsch Olli!
Du hast das Ziel in ziemlich kurzer Zeit erreicht!

Viele Grüße

Igel1

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
von Wolfgang (Gast)


Lesenswert?

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.

von Martin P. (billx)


Lesenswert?

Alternativ kauf dir einen passenden USB DVB-T stick mit dem passenden 
realtek chipsatz .... RTL SDR kosten so 10 eu

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
von Max Forist (Gast)


Lesenswert?

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?

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.