Intertek-Funksteckdose schalten (gelöst)

Hallo zusammen,
ich verzweifle gerade an der Codierung von Intertek-Funksteckdosen (gekauft bei Action).
Sie haben keine DIP-Schalter und sind selbstlernend.
Einsetzen möchte ich rc switch library.

Mein Problem fängt schon mit dem Auslesen der Codes an.
Dafür benutze ich einen Arduino Nano und als Empfängermodul ein RXB6. Die Spannung habe ich über einen Keramikkondensator geglättet.

Ok, soweit so gut.
Also alles angeschlossen, eine Steckdose mit der Fernbedienung angelernt und nun das Ergebnis mit ReceiveDemo_Advanced von viermal einschalten, das mich verwirrt:

Decimal: 4276500 (24Bit) Binary: 010000010100000100010100 Tri-State: F00FF00F0FF0¤ PulseLength: 315 microseconds Protocol: 1
Raw data: 9792,352,944,972,312,340,944,344,940,344,948,336,948,340,952,964,324,332,956,964,320,328,956,336,948,328,960,324,960,324,964,956,332,324,960,324,960,312,968,948,344,312,972,948,340,308,976,316,972,

Decimal: 4276500 (24Bit) Binary: 010000010100000100010100 Tri-State: F00FF00F0FF0 PulseLength: 317 microseconds Protocol: 1
Raw data: 9828,316,976,944,340,308,976,316,964,320,972,312,972,312,972,948,336,320,972,948,336,312,976,316,972,312,972,312,972,312,972,944,344,316,972,308,976,312,972,944,344,312,972,948,340,308,976,316,976,

Decimal: 4276500 (24Bit) Binary: 010000010100000100010100 Tri-State: F00FF00F0FF0 PulseLength:
315 microseconds Protocol: 1
Raw data: 9796,348,936,972,312,344,944,340,948,336,948,336,948,344,948,964,324,332,952,964,324,332,948,336,956,332,960,324,960,328,960,952,336,320,964,320,964,328,972,940,344,312,972,944,340,316,976,308,976,

Decimal: 4276500 (24Bit) Binary: 010000010100000100010100 Tri-State: F00FF00F0FF0 PulseLength: 317 microseconds Protocol: 1
Raw data: 9836,308,976,944,340,316,972,312,972,312,968,316,968,320,964,952,340,312,972,948,340,316,976,308,972,312,972,312,972,320,972,940,344,312,972,312,972,320,972,940,344,312,972,948,336,316,976,308,976,

Dezimalwert, Protokoll und Pulslänge sind immer gleich, aber beim Tri-State-Code und bei den Raw-Daten gibt es Abweichungen. D.h. beim Tri-State-Code gibt's manchmal merkwürdige Sonderzeichen hintendran. Sind das Störungen?
Eine 17,3cm-Antenne hab ich jetzt noch nicht dran, aber der Empfang ist ja prinzipiell da...

Zusatzproblem:
Wenn ich dann versuche den empfangenen Code von einem weiteren Arduino aus zu senden, wird der zwar schön vom Nano empfangen und im Serial-Monitor angezeigt, aber die Steckdosen interessiert das herzlich wenig. Das Senden habe ich mit Dezimal-, Binär- und Tri-State-Code probiert.

Ich hoffe, ein Experte hier kann mir zumindest einen Tipp geben.
Viele Grüße
Stefan

Nimm man zum Senden nur den dezimal-Code.

Und du must im Setup des Senders auch die Pulselänge (bei dir 315) festlegen.

Das kannst du ja in der Demo zu Library nachlesen.
Dann sollte das funktionieren.

Nur den Dezimal-Code habe ich probiert. Auch die Pulslänge habe ich gesetzt. Leider beides ohne Erfolg.

Rogof:
Nur den Dezimal-Code habe ich probiert. Auch die Pulslänge habe ich gesetzt. Leider beides ohne Erfolg.

Dann zeige mal deinen Sketch. Bitte hier in Code-Tags posten. (Schaltfläche </>)

Und was meinst du hiermit:

Die Spannung habe ich über einen Keramikkondensator geglättet.

Hier ist das Sendersketch. Nichts Aufregendes:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(2);
  // Optional set pulse length.
   mySwitch.setPulseLength(314);
  pinMode(13, OUTPUT);   //Pin 13 soll Ausgang sein     
}

void loop() {

  /* Same switch as above, but using decimal code */
  digitalWrite(13, HIGH);
  mySwitch.send(4276501, 24);
  delay(1000);  
  digitalWrite(13, LOW);
  mySwitch.send(4276500, 24);
  delay(1000);  

  delay(20000);
}

Einmal Empfänger mit 100nF Keramik-Kondensator
und einmal Sender mit 47µF Elko.

Das mit dem Glätten hab ich hier her:

an den Sender solltest du auf jedem Fall einen 173mm Draht als Antenne anschließen.

Das mit der Antenne ist für größere Reichweiten richtig, aber zum Testen und bei Reichweiten um 5 Meter ist die Antenne nicht nötig.

Hast du denn auch den richtigen Pin am Arduino verwendet?
Im Sketch ist das leider nicht so eindeutig.

Und du solltest mit der Pulslänge mal ein wenig testen, ich hatte schon Funksteckdosen, da musste ich auch verschiedene Pulslängen ausprobieren, bis es funktionierte.

Angeschlossen ist das auf jeden Fall richtig.
Dafür hab ich mir ja den 2. Arduino danebengesetzt, der die ganze Zeit mitempfängt und der zeigt mir auch den richtigen Code, Pulslänge und Protokoll im Serial-Monitor an.
Ich hab auch schon mal in einer Schleife die Pulslänge ab 200 in 10er Schritten hochzählen lassen. Hat leider auch nix gebracht.

Passende Antennen sind übrigens im Zulauf, aber das dauert noch was, bis die da sind.

Rogof:
Angeschlossen ist das auf jeden Fall richtig.
Dafür hab ich mir ja den 2. Arduino danebengesetzt, der die ganze Zeit mitempfängt und der zeigt mir auch den richtigen Code, Pulslänge und Protokoll im Serial-Monitor an.
Ich hab auch schon mal in einer Schleife die Pulslänge ab 200 in 10er Schritten hochzählen lassen. Hat leider auch nix gebracht.

Passende Antennen sind übrigens im Zulauf, aber das dauert noch was, bis die da sind.

Dann fällt mir aktuell nichts mehr ein.

Die neuste Library hast du?

Sonst hier:

Zum Testen sind die Antennen unwichtig. Wenn du die gewendelten genommen hast, das Geld hättest du dir sparen können. Ein Stück Draht (173 mm) ist da besser.

Arrrgh, das mit der Library-Version war ein guter Hinweis. Warum auch immer habe ich einen anderen Stand gehabt.
Jetzt empfange ich von der Fernbedienung auch was ganz anderes:

3mal einschalten bringt:

Decimal: 39755422 (28Bit)
Binary: 0010010111101001111010011110
Tri-State: not applicable
PulseLength: 486 microseconds
Protocol: 2
Raw data: 10172,256,252,1260,252,256,248,1264,252,252,252,1264,252,252,1264,252,260,244,1260,256,244,256,248,1272,244,256,248,1272,244,256,248,1272,256,248,1268,244,260,248,1268,244,244,264,240,1272,244,1268,244,268,240,264,240,1272,1356,260,284,256,1360,

Decimal: 4276501 (24Bit)
Binary: 010000010100000100010101
Tri-State: F00FF00F0FFF­^­^:
PulseLength: 314 microseconds
Protocol: 1
Raw data: 9772,288,996,936,360,288,1000,292,1004,280,1000,292,1008,280,1000,936,356,292,996,936,360,288,1004,288,1000,288,1000,292,1000,288,1000,936,360,284,1004,288,1000,288,1000,936,364,284,1000,932,364,284,1008,924,368,

Decimal: 40835062 (28Bit)
Binary: 0010011011110001011111110110
Tri-State: not applicable
PulseLength: 486 microseconds
Protocol: 2
Raw data: 10176,256,252,1264,248,260,248,1272,240,264,240,1272,252,256,1264,252,256,248,1264,248,244,260,244,1272,252,260,236,1268,248,268,236,1272,256,248,1272,244,256,248,1268,248,236,264,240,1276,240,1272,240,272,236,264,240,1280,1352,260,284,256,1360,

Decimal: 4276501 (24Bit)
Binary: 010000010100000100010101
Tri-State: F00FF00F0FFF^­Š­^:
PulseLength: 314 microseconds
Protocol: 1
Raw data: 9768,292,1000,936,360,284,1000,288,1004,288,1000,288,1000,292,996,936,356,292,1004,932,356,288,1000,292,1000,292,996,292,1004,288,1000,932,364,284,1004,284,1004,292,996,932,364,284,1004,932,360,288,1004,928,364,

Decimal: 40124578 (28Bit)
Binary: 0010011001000100000010100010
Tri-State: not applicable
PulseLength: 485 microseconds
Protocol: 2
Raw data: 10176,260,244,1276,240,264,240,1280,236,264,240,1276,260,244,1276,240,260,244,1276,236,232,276,232,1284,228,284,220,1288,228,280,224,1284,272,232,1288,228,276,228,1292,224,224,284,220,1292,224,1292,220,288,220,284,220,1300,1368,244,300,240,1376,

Decimal: 4276501 (24Bit)
Binary: 010000010100000100010101
Tri-State: F00FF00F0FFF^­Š­^;
PulseLength: 315 microseconds
Protocol: 1
Raw data: 9772,292,1000,932,356,292,996,296,1000,292,996,292,1004,288,996,940,348,296,1000,936,352,296,996,292,1000,292,1000,288,1000,292,1004,932,360,284,1004,288,1000,288,1008,928,356,292,1000,932,360,288,1008,928,364,

Beim Einschalten werden jetzt 2 Befehle gesendet. Einer mit 28 bit und einer mit 24bit-Protokoll. Und der 28bit-Befehl scheint auch noch zu variieren. Jetzt bin ich völlig verwirrt...

Das sieht nach rolling Code aus, da fehlt mir allerdings die Erfahrung um hier weitere Infos und Tipps zu geben.

Auf jeden Fall schon mal vielen Dank für deine Hilfe. Ich werd heute Abend mal weiter rumprobieren. Jetzt hab ich wenigstens nen Ansatzpunkt.

Rogof:
Auf jeden Fall schon mal vielen Dank für deine Hilfe. Ich werd heute Abend mal weiter rumprobieren. Jetzt hab ich wenigstens nen Ansatzpunkt.

Ja, ok und gerne.
Evtl. kommt ja noch einer vorbei, der damit Erfahrung hat.
In jedem Fall viel Erfolg.

Jippieh! Es Läuft!

Was ist der Trick an der Sache?
Die Intertekdosen brauchen 2 Signale zum Einschalten und 2 zum Ausschalten!

Meine gesnifften Werte:
Einschalten der Dose, die mit Button A angelernt wurde:
zuerst immer

  1. Decimal: 4276501 (24Bit) PulseLength: 315 microseconds Protocol: 1
    dann kommen
  2. Decimal: 40835062 (28Bit) PulseLength: 486 microseconds Protocol: 2
  3. Decimal: 40124578 (28Bit) PulseLength: 479 microseconds Protocol: 2
  4. Decimal: 38524438 (28Bit) PulseLength: 476 microseconds Protocol: 2
  5. Decimal: 39755422 (28Bit) PulseLength: 472 microseconds Protocol: 2

Beim ersten Drücken an der Fernbedienung wird 1 und 2 gesendet, beim zweiten Drücken 1 und 3 und so weiter. Wenn 1 und 5 gesendet wurden, wird wieder vorne mit 1 und 2 angefangen.

Das Ausschalten ist so ähnlich, allerdings wird zuerst mit Potokoll2 gesendet und dann 1:
Decimal: 40672262 (28Bit) PulseLength: 486 microseconds Protocol: 2
Decimal: 38622394 (28Bit) PulseLength: 486 microseconds Protocol: 2
Decimal: 41870874 (28Bit) PulseLength: 475 microseconds Protocol: 2
Decimal: 39585422 (28Bit) PulseLength: 476 microseconds Protocol: 2

Decimal: 4276500 (24Bit) PulseLength: 315 microseconds Protocol: 1

Jetzt zum Senden:
Das Schöne ist, von den Protokoll-2-Befehlen braucht man nicht jeweils alle 4, sondern einer reicht. völlig egal welcher. So muss man sich nicht merken, welcher zuletzt benutzt wurde.

Mein Sende-Sketch sieht nun also so aus:

#include <RCSwitch.h>

RCSwitch mySwitch24 = RCSwitch();
RCSwitch mySwitch28 = RCSwitch();

void setup() {

  Serial.begin(9600);
  
  // Transmitter is connected to Arduino Pin #10  
  mySwitch24.enableTransmit(10);
  mySwitch28.enableTransmit(10);

  // Optional set protocol (default is 1, will work for most outlets)
  mySwitch24.setProtocol(1);
  mySwitch28.setProtocol(2);

  // Optional set pulse length.
   mySwitch24.setPulseLength(314);
   mySwitch28.setPulseLength(475);
  
  
  // Optional set number of transmission repetitions.
  // mySwitch.setRepeatTransmit(15);
  pinMode(13, OUTPUT);   //Pin 13 soll Ausgang sein  
}

void loop() {
  digitalWrite(13, HIGH);
  mySwitch24.send(4276501, 24);
  mySwitch28.send(40124578, 28);
  digitalWrite(13, LOW);
  delay(1000);  

  digitalWrite(13, HIGH);
  mySwitch28.send(40672262, 28);
  mySwitch24.send(4276500, 24);
  digitalWrite(13, LOW);
  delay(1000);  

  delay(1000);
}

Super, Dankeschön für die Rückmeldung.

Gerne