433 MHz-Protokoll einer Funksteckdose - komme nicht hinter die Logik

Hallo zusammen,

ich versuche gerade mehrere Funksteckdosen im Garten mit Hilfe eines Arduinos und einem 433 MHz-Sender zu steuern. Bei einem Modell funktioniert dies auch ohne Probleme mit Hilfe der rcswitch-Library. Beim anderen finde ich allerdings keinen Weg, die Steckdose anzusteuern. Es handelt sich um einen OASE FM-Master. Auf der Platine ist der Chip 12F508I verbaut (Datenblatt).
Die Platine sieht folgendermaßen aus:

Beim Drücken der Taste wird ein ca. 7000µs langer Startpuls gesendet (LOW). Dann folgen 49 verschiedene HIGH und LOW-Pegel, wobei diese unterschiedlich lang sind. High-Pegel sind entweder ca. 820µs oder ca. 1650µs lang. LOW-Pegel 920µs oder 1774µs.

So sieht z.B. die Abfolge für das Einschalten der obersten Steckdose aus (Der Einfachheit halber HIGH als 1 und LOW als 0:

Startbit,1 lang,0 kurz,1 kurz,0 kurz,1 lang,0 lang,1 lang,0 lang,1 kurz,0 kurz,1 kurz,0 kurz,1 lang,0 kurz,1 lang,0 lang,1 lang,0 kurz,1 kurz,0 kurz,1 lang,0 kurz,1 lang,0 kurz,1 lang,0 lang,1 lang,0 kurz,1 kurz,0 lang,1 lang,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 kurz,1 kurz

Ausgeschaltet wird hierüber:

Startbit,1 kurz,0 kurz,1 kurz,0 kurz,1 lang,0 lang,1 lang,0 lang,1 kurz,0 kurz,1 kurz,0 kurz,1 lang,0 kurz,1 lang,0 lang,1 lang,0 kurz,1 kurz,0 kurz,1 lang,0 kurz,1 lang,0 kurz,1 lang,0 lang,1 lang,0 kurz,1 kurz,0 lang,1 lang,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 kurz,1 kurz,0 lang,1 lang

Für die zweite Steckdose sind die Codes folgendermaßen:
An:

Startbit,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 kurz,1 kurz,0 lang,1 lang,0 kurz,1 kurz,0 kurz,1 lang,0 lang,1 lang,0 kurz,1 kurz,0 kurz,1 lang,0 kurz,1 lang,0 lang,1 lang,0 kurz,1 kurz,0 kurz,1 lang,0 kurz,1 lang,0 lang,1 lang,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 kurz,1 kurz,0 lang,1 lang,0 lang,1 kurz,0 lang,1 kurz

Aus:

Startbit,1 kurz,0 kurz,1 kurz,0 kurz,1 lang,0 lang,1 lang,0 lang,1 kurz,0 kurz,1 kurz,0 kurz,1 lang,0 kurz,1 lang,0 lang,1 lang,0 kurz,1 kurz,0 kurz,1 lang,0 kurz,1 lang,0 kurz,1 lang,0 lang,1 lang,0 kurz,1 kurz,0 lang,1 lang,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 lang,1 kurz,0 kurz,1 kurz,0 lang,1 lang,0 lang,1 kurz

Die detaillierten Auswertungen mit jeweils zwei Messungen pro Taste habe ich mal hier hochgeladen:
[1. Set](http://www.jdombrowski.de/OASE weiss.xls)
[2. Set](http://www.jdombrowski.de/OASE schwarz.xls)

Könnt ihr mir helfen? Manchester-Code kann ich ziemlich sicher ausschließen und auch sonst bin ich leider auf keine Lösung gekommen. Die Steckdosen haben keine Dip-Schalter, sondern werden mit Hilfe des Drückens einer Reset-Taste an der Steckdose und danach einer beliebigen Taste am Handsender eingelernt.

Vielen Dank im Voraus!

Ich hab mit meinen 433er Protokollsheets und deinen Daten ein bisschen rumgespielt.
Habe das ganze nach Pulslänge analysiert. Villeicht hilft dir der Ansatz weiter:

1=High 900
2=High 1700
3=Low 800
4=Low 1700

P.S.: Der IC ist ein µC :wink:
An der Stelle ist erst mal Ende.

Danke für die Hilfe. Einen ähnlichen Ansatz hatte ich auch schon. Evtl. könnten die Pulse 23 - 30 die Codierung sein. Aber ich finde nirgends einen Teil, der die einzelnen Steckdosen identifiziert und auch keinen Teil der klar für an und aus stehen könnte?

PS: Danke für die Hinweis, da habe ich mich schwammig ausgedrückt :wink:

Müssen an den Steckdosen An und Aus eingelernt werden?
Oder geht es mit eine der beiden Tasten?

Der Handsender kann mit einer beliebigen Taste angelernt werden. Man muss also nur eine der acht Tasten drücken um alle Steckdosen einzulernen.

Kleiner Nachtrag:
Habe gerade versucht das Original-Signal mal ganz blöd nachzustellen. Hat auch nicht funktioniert. Folgender (eigtl. ja recht einfacher) Quelltext:

static int a_aus[] = {7000,1692,904,828,908,1696,1776,1684,1776,820,912,824,912,1684,916,1680,1776,1684,920,816,920,1676,908,1684,912,1688,1776,1684,908,824,1776,1688,1772,820,1776,824,1776,820,1780,820,1776,820,1780,820,1772,820,1768,824,908,828};
static int a_an[] = {7010,824,904,820,912,1692,1776,1688,1776,820,932,816,924,1668,928,1672,1792,1672,932,800,940,1664,940,1656,916,1656,1772,1692,908,824,1772,1688,1772,828,1772,820,1776,828,1772,820,1776,824,1768,824,1768,832,896,832,1768,1696};

void setup()
{
Serial.begin(115200);
pinMode(7, OUTPUT); //433 MHz-Sender an Pin 7
pinMode(13,OUTPUT); //Status-LED an Pin 13
}

void loop() {
  for (int j=0;j<10;j++) { //zur Sicherheit Signal 10mal senden
    for (int i=0; i<25;i++) { //25*2 = alle 50 Pulse
      digitalWrite(7,LOW); //erster Puls ist LOW
      delayMicroseconds(a_an[i*2]); //Dauer erster Puls
      digitalWrite(7,HIGH); //zweiter Puls ist HIGH
      delayMicroseconds(a_an[i*2+1]); //Dauer zweiter Puls
    }
  }
  digitalWrite(13,HIGH); //Status LED an
  delay(5000); //Pause von 5 Sekunden um Ergebnis zu sehen
  for (int j=0;j<10;j++) { //siehe oben
    for (int i=0; i<25;i++) {
      digitalWrite(7,LOW);
      delayMicroseconds(a_aus[i*2]);
      digitalWrite(7,HIGH);
      delayMicroseconds(a_aus[i*2+1]);
    }
    Serial.println(j);
  } 
  digitalWrite(13,LOW);
  delay(5000);  
}

Könntest du vielleicht mal darauf schauen, ob da ein Fehler drin ist? Ober habe ich vielleicht schon beim Auslesen einen Fehler gemacht?

Funktioniert doch? Nach welchem Fehler soll ich suchen?!?

Es schaltet nur leider nicht. Kann es sein, dass da beim Auslesen ein Fehler passiert ist?
Habe das Skript aus diesem Beitrag von jurs leicht modifiziert verwendet: Tchibo Wetterstation 433 MHz - Dekodierung mal ganz einfach - Deutsch - Arduino Forum

Zwischen den Paketen gehört eine Pause rein.
Beim einfachen Kopieren der Pulszeiten, hat sich bei mir rausgestellt, dass die Zeiten korrigiert werden mussten, da mein Sender (RFM12) etwas träger war.
Die Korrektur habe ich mit einem zweiten Empfänger rausgemessen.

Wie lange würdest du die Pause setzen? Dann HIGH oder LOW? Wird das dann nicht so erkannt, dass einer der Pulse länger ist? Oder dann einfach ein kurzer LOW und ein kurzer HIGH?

Habe leider keinen zweiten Arduino da, mit dem ich das ausmessen könnte. Um wieviel musstest du denn die Signale korrigieren? Habe einen FS1000A.

Nochmals vielen Dank für deine Unterstützung!

Waren ca 100 µs. Wie der FS reagiert, kann ich nicht sagen.
Wie lange die Pause ist, musst du messen.
Sendet der Handsender kontinuierlich bei gedrückter Taste? Sendet er x-Pakete bei kurzem Drücken?

Beim Drücken der Taste wird ein ca. 7000µs langer Startpuls gesendet (LOW).

Wie kann denn ein Startpuls LOW sein? Gibt der Empfänger dir ein Inverses Signal ??

Hi,
habe vor einiger Zeit auch an dem Protokoll für die Conrad Funksteckdosen bzw. Funklichschalter gesessen die ebenfalls mit 433Mhz arbeiten.
Als erstes Stichwort will ich dir die Manchestercodierung an die Hand geben: Manchester-Code – Wikipedia
Die Conradsender bzw Empfänger arbeiten damit und es soll wohl sehr verbreitet sein, zumindest kann ich meine Steckdosen damit schalten ^^
Ich habe mir was eigenes gebastelt nach dem ich den Tipp mit dem Manchestercode bekommen hatte, die Jungs von RC-Switch: GitHub - sui77/rc-switch: Arduino lib to operate 433/315Mhz devices like power outlet sockets.
haben aber auch ne super Library mit ausführlichen Beispielen heraus gebracht die ich nur empfehlen kann, sie kann sowohl senden als auch empfangen!

Einen Tipp habe ich noch, ich habe damals an den ausgang des Microcontrollers der zum eigentlichen sender führt ein Kabel gelötet und das dann über einen klinkenstecker in meine Soundkarte geführt und die Massen verbunden, so konnte ich mit Audacity die länge der Pulse auslesen bzw habe sie dann erstmal manuel in den binärcode übersetzt.
ES BESTEHT ABER DIE MÖGLICHKEIT DAS DIE SOUNDKARTE SCHADEN NIMMT, DAHER GENAU ÜBERLEGEN OB MAN DIESEN SCHRITT WAGT!
Meine Fernbedinungen senden bei jedem Tastendruck den Code 5 mal.

Gruß Marc

Marc_H:
Einen Tipp habe ich noch, ich habe damals an den ausgang des Microcontrollers der zum eigentlichen sender führt ein Kabel gelötet und das dann über einen klinkenstecker in meine Soundkarte geführt und die Massen verbunden, so konnte ich mit Audacity die länge der Pulse auslesen bzw habe sie dann erstmal manuel in den binärcode übersetzt.
ES BESTEHT ABER DIE MÖGLICHKEIT DAS DIE SOUNDKARTE SCHADEN NIMMT, DAHER GENAU ÜBERLEGEN OB MAN DIESEN SCHRITT WAGT!

Das ist prinzipiell eine gute Idee. Beim beliebten Online-Auktionshaus gibt es auch günstige USB-Soundkarten, zum Teil ab 2,70 Euro. Auch hier gilt: Verwendung auf eigene Gefahr, kommt nicht auf den Gedanken die Netzspannung der Steckdose darzustellen. :wink:
Wer häufiger digitale Signale auswerten will, kann sich auch einen Logic Analyzer kaufen. Derzeit nutze ich diesen: http://www.watterott.com/de/SCANALOGIC-2-EDU-KIT
Man kann so auch mehrere Kanäle belauschen, außerdem bietet die Software einen größeren Funktionsumfang.

Hier gibts evtl. noch einige hilfreiche Details:

http://simple-solutions.de/forum/viewtopic.php?f=15&t=260&sid=b45a109012d4be8d21100dbde6b3350b