Funksteckdose mit Lernfunktion durch Arduino ansteuern, kein Tri-State

Hallo zusammen,

ich habe mir gestern bei Lidl ein Funksteckdosen Set gekauft.

Hier der Link zu der Modellanleitung.

Leider kann ich dies nicht auf dem gewohnten Weg mittels Tri-State ansteuern.

Zudem erhalte ich zwei verschieden Codes wenn ich mehrmals ein Taste auslese:

Hier mal der Code für Channel A

Wenn ich die Taste einmal drücke

ON

14:13:39.480 -> Decimal: 1112537811 (32Bit) Binary: 01000010010011111111101011010011 Tri-State: not applicable PulseLength: 702 microseconds Protocol: 2

14:13:39.617 -> Raw data: 7016,476,1520,1468,524,476,1516,476,1516,480,1516,472,1520,1472,520,476,1520,476,1524,1464,524,472,1520,476,1516,1472,520,1472,524,1480,516,1468,1096,396,352,1140,1096,396,1092,400,348,1140,352,1140,352,1092,400,1092,396,352,1140,352,1140,1092,400,1092,400,348,348,1144,352,1140,348,1148,348,

OFF

14:13:45.977 -> Decimal: 946772115 (32Bit) Binary: 00111000011011101001100010010011 Tri-State: not applicable PulseLength: 702 microseconds Protocol: 2

14:13:46.113 -> Raw data: 7016,476,1520,472,1516,1472,520,1472,524,1468,524,476,1516,476,1516,476,1516,476,1516,1472,520,1472,520,476,1516,1472,524,1468,524,1468,524,476,352,1140,348,1140,1096,396,352,1140,352,1140,352,1140,348,1140,396,352,1136,352,1140,352,1136,356,1136,352,1136,1096,352,1136,352,1144,348,1144,352,

Wenn ich allerdings die Taste gedrückt halte kommt noch folgender Code:

ON

14:15:56.687 -> Decimal: 467037587 (32Bit) Binary: 00011011110101100110110110010011 Tri-State: not applicable PulseLength: 702 microseconds Protocol: 2

14:15:56.825 -> Raw data: 7020,472,1520,472,1520,472,1520,1464,528,1464,528,472,1520,1468,528,1464,524,1464,528,1468,524,476,1516,1468,528,472,1520,1468,528,1464,524,472,348,1144,344,1148,1088,400,1088,404,344,1148,344,1144,348,1144,404,1088,400,1092,400,344,1148,1088,400,1092,400,348,348,1144,344,1148,348,1148,344,

14:15:57.140 ->

14:15:57.233 -> Decimal: 1112537811 (32Bit) Binary: 01000010010011111111101011010011 Tri-State: not applicable PulseLength: 702 microseconds Protocol: 2

14:15:57.369 -> Raw data: 7020,472,1520,1464,528,472,1520,472,1520,476,1516,472,1524,1464,524,472,1516,476,1520,1464,528,472,1520,472,1520,1468,524,1476,516,1468,524,1468,344,1148,1096,396,344,1144,344,1148,344,1144,348,1144,348,348,1144,348,1140,348,1144,1088,400,1092,400,1092,400,1088,352,1144,344,1144,348,1148,348,

14:15:57.689 ->

14:15:57.735 -> Decimal: 467037587 (32Bit) Binary: 00011011110101100110110110010011 Tri-State: not applicable PulseLength: 701 microseconds Protocol: 2

14:15:57.873 -> Raw data: 7020,472,1520,472,1516,476,1516,1468,524,1468,528,472,1516,1468,524,1476,528,1464,524,1468,528,472,1520,1464,524,472,1520,1468,524,1468,524,472,344,1144,1092,396,1092,404,1088,400,348,1144,344,1144,348,352,1140,348,1140,352,1140,1092,400,348,1140,348,1144,1092,348,1144,348,1144,344,1148,348,

14:15:58.195 ->

14:15:58.241 -> Decimal: 1112537811 (32Bit) Binary: 01000010010011111111101011010011 Tri-State: not applicable PulseLength: 701 microseconds Protocol: 2

14:15:58.421 -> Raw data: 7020,472,1520,1464,528,472,1516,472,1524,468,1520,472,1520,1464,528,472,1520,472,1520,1464,528,472,1520,472,1520,1464,528,1464,528,1464,528,1464,524,1468,524,1464,528,1468,524,1464,528,1464,528,472,1520,1464,528,468,1520,1472,520,1464,528,472,1520,1464,528,472,1524,464,1524,1460,528,1464,532,

14:15:58.739 ->

OFF

14:16:14.076 -> Decimal: 946772115 (32Bit) Binary: 00111000011011101001100010010011 Tri-State: not applicable PulseLength: 701 microseconds Protocol: 2

14:16:14.213 -> Raw data: 7020,472,1520,472,1528,1460,520,1468,524,1468,524,476,1516,472,1520,472,1520,472,1520,1464,528,1464,528,472,1516,1468,524,1468,528,1468,524,472,1092,400,348,1144,348,1140,1092,400,344,1144,352,1140,344,348,1140,1092,400,1092,400,1092,396,352,1140,1092,400,348,352,1140,348,1144,344,1152,352,

14:16:14.534 ->

14:16:14.581 -> Decimal: 201025747 (32Bit) Binary: 00001011111110110110100011010011 Tri-State: not applicable PulseLength: 702 microseconds Protocol: 2

14:16:14.719 -> Raw data: 7016,472,1520,472,1520,472,1516,472,1520,1464,528,472,1520,1464,528,1468,524,1464,528,1464,528,1464,528,1464,528,1464,528,472,1520,1464,528,1468,1088,404,344,1144,1092,404,340,1148,344,1144,348,1144,348,348,1144,1088,400,1092,400,348,1144,344,1144,1092,400,348,348,1144,344,1144,348,1148,348,

14:16:15.037 ->

14:16:15.082 -> Decimal: 946772115 (32Bit) Binary: 00111000011011101001100010010011 Tri-State: not applicable PulseLength: 702 microseconds Protocol: 2

14:16:15.220 -> Raw data: 7016,472,1520,472,1520,1464,528,1464,524,1476,520,472,1516,476,1516,476,1520,472,1516,1468,524,1468,528,472,1520,1468,524,1464,528,1468,524,476,352,1140,348,1144,1092,396,348,1144,344,1144,348,1144,348,1144,396,352,1140,348,1140,352,1140,348,1140,348,1144,1088,348,1144,348,1144,348,1144,352,

14:16:15.541 ->

14:16:15.587 -> Decimal: 201025747 (32Bit) Binary: 00001011111110110110100011010011 Tri-State: not applicable PulseLength: 701 microseconds Protocol: 2

14:16:15.768 -> Raw data: 7020,472,1520,472,1516,476,1520,472,1516,1468,524,476,1520,1464,524,1468,528,1464,524,1468,528,1464,524,1468,524,1468,524,472,1520,1464,528,1464,528,472,1520,1464,528,1464,528,472,1520,1464,528,472,1520,472,1516,472,1524,1460,528,1464,528,472,1520,1464,528,472,1516,476,1520,1464,528,1464,532,

14:16:16.089 ->

Zudem gibt es noch eine Master Taste, welche alle ein und ausschaltet.

Ich habe bis jetzt mal versucht den Dezimal wert und den Binärwert zu senden. Auch die verschiedenen nacheinander. Leider hat das nicht funktioniert.

Kann mir jemand vielleicht sagen, wie ich den Tri-State ermitteln kann oder was ich falsch mache?

Mit welcher Software, welcher Hardware?

Und was bitte ist dein gewohnter Weg ?

Das ich die Tri-State ermittle mittels dem Arduino recive Sketch und anschißend einfach ein tri-Stete sende. Dieser Code scheint bloße mehr variabel zu sein. Kurzgesat es reicht nicht einen Empfangen Code zu reproduzuieren.

Du redest in Räteln. Eine allgemeinverständlichere Beschreibung erhöht die Chance, daß Du noch hilfreiche Antworten bekommst.

Und bitte auch die gestellten Fragen beantworten.

Hallo
Wer oder Was ist ein "Tri-State" in dem Kommunikationsprotokol?

Erstmal danke dass Ihr geantwortet habt,

ich verwende folgende Library

dort gibt es ein Example Sketch, mit welchem ich ein 433 MHz signal, welches von der Fernbedienung gesendet wird empfange und dementsprechend interpretieren kann.

Die Ausgabe auf dem Serialprint habe ich in meiner Initialen Fragen dargestellt.

Dort bekomme ich einmal einen Dezimalwert, Bitlänge, Binärwert, Tri-State (ich weiß selber nicht was das genau ist), PulseLength und die RAW data (kann ich auch nichts mit anfangen)

Bis her hatte ich von den Empfangen Signalen den Tri-State genommen und diesen mit der Library wieder gesendet, also ein ON und Off Sinal. Leider sind jetzt die neuen Steckdosen etwas komplexer und dieser Tri-State kann von dem Sketch nicht mehr ermittelt werden. Das ausweichen mittels Senden von Binary oder Dezimal Data hat leider nicht funktioniert. Muss ich den Code irgendwie entschlüsseln o.ä.?

Das weiß ich selber nicht genau, ich vermute dort ist das Wort und die Pulslänge codiert.

Funksignal der Fernbedienung einlesen und anschließend wieder senden.

Ich hatte leider deine Frage über sehen,
also ich verwende einen 433 Mhz Empfänger und Sender.
Die Software ist die RCSwitch Library.

Diese Library ist def. nicht geeignet um neuartige und lernfähige Funksteckdosen anzusprechen.
Da ich bisher noch keine derartigen Steckdosen verwendet habe, fehlt mir der richtige Tipp.
Aber du könntest ja mal nach einer Lösung für deine Steckdosen, die wir nicht kennen, im Netz googeln.

Was ist der Grund, dass diese Library dafür nicht geignet ist? Kann ich diese eventuell Anpassen?
-> gegooglet habe ich schon, meine letzte Hoffnug wäre dass ich vom Hersteller vielleicht ein Datenblatt bekomme.

Also ich habe mir gerade mal den code der Library angesehen, dort werden über all integer verwedet, kann es sein, dass meine Werte zu einem Überlauf führen? siehe int - Arduino Reference
z.b. 3,670,966,683 > 2,147,483,647 könnte es vielleicht reichen die Library so umzuschreiben, das nur noch Long verwendet wird?

Das wäre mir neu. Der Code wird als long verarbeitet.

Ich habe mir aber nochmals deine Daten im Eingangspost angesehen. Da werden doch einheitliche dezimal Werte übertragen. Dann sollte das doch funktionieren.
14:13:39 und 14:15:57 stimmen die dezimal überein.

Sorry, ich hatte deine Funkschalter mit rolling Code verwechselt.

Ok dann ist das schon mal kein Fehler.

Ja die Codes sind gleich. Es werden immer abwechselnd zwei Codes pro Taste gesendet. Bloß scheint das nicht zu reichen.
Ich könnte mal mit einer Schleife versuchen die PulsLengeth etwas auszuolten und verschiede Muster der einzelnen Codes zu senden.
Ich werde dann mal mein Sketch hier hoch laden sobald ich das fertig habe.

Hioer mal mein Code mit dem ich duch Schleifen versuche Fehler wie in der PulseLength oder dem Portokoll zu finden.
Leider hat das nicht gereicht.
Hat jemand noch einen Idee wie man das vielleicht brute forcen kann?

#include <RCSwitch.h>
RCSwitch rc = RCSwitch();


void setup() {
 rc.enableTransmit(4); //pin d2
 /*rc.setPulseLength(185);
 rc.setRepeatTransmit( 20);
 Serial.begin(115200);
 Serial.println("Start");*/

}

void loop() {
  rc.setPulseLength(185);
  rc.setRepeatTransmit( 20);
  Serial.begin(115200);
  Serial.println("Start");

  //Old Power outlets with known funktion
  //ON
  //A
  //rc.sendTriState("00FF0FFF0101");
  delay(1000);
  //B
  //rc.sendTriState("00FF0FFF1001");
  delay(1000);
  //C
  //rc.sendTriState("00FF0FF10001");
  rc.send("000001010001011100000011");//works
  delay(1000);
  //D
  //rc.sendTriState("00FF0F1F0001");
  delay(1000);
  //E
  //rc.sendTriState("00FF01FF0001");
  delay(1000);


  //OFF
  //A
  //rc.sendTriState("00FF0FFF0110");
  delay(1000);
  //B
  //rc.sendTriState("00FF0FFF1010");
  delay(1000);
  //C
  //rc.sendTriState("00FF0FF10010");
  rc.send("000001010001011100001100");//works
  delay(1000);
  //D
  //rc.sendTriState("00FF0FF10010");
  delay(1000);
  //E
  //rc.sendTriState("00FF0F1F0010");
  delay(1000);

  //new Power Outlets with mysterios code
  for(int i=1; i<=12;i++){//loop for protokol from 1 to 12
    for(int j = 695; j < 710;j++){ //loop for pulse from 695 to 710 microseconds
      Serial.println("i,j");
      Serial.println(i);
      Serial.println(j);
      
      rc.setPulseLength(j);
      rc.setProtocol(i);
      delay(10);
      rc.send("01010111011010010110110110010011");
      delay(10);
      rc.send("01010111011010010110110110010011");
      delay(10);
      rc.send(1466527123, 32);
      delay(10);
      rc.send(2045667539, 32);
      delay(10);
      
      
      
 
    }
  }


  

}

Irgendwie wurde gerade meine Nachricht gelöscht.
Also dann hier noch mal.
Der Code schlatet einmal meine bekannten Steckdosen um Fehler in der Hardware zu vermeinden!
Das funktioniert, auch mit dem Binärcode was ich zuvor nicht geschafft hatte.
Der letzte Teil soll mittels Brute Force den Richtigen Pulse und das Protokoll finden. -> funktioniert nicht!

#include <RCSwitch.h>
RCSwitch rc = RCSwitch();


void setup() {
 rc.enableTransmit(4); //pin d2
 /*rc.setPulseLength(185);
 rc.setRepeatTransmit( 20);
 Serial.begin(115200);
 Serial.println("Start");*/

}

void loop() {
  rc.setPulseLength(185);
  rc.setRepeatTransmit( 20);
  Serial.begin(115200);
  Serial.println("Start");

  //Old Power outlets with known funktion
  //ON
  //A
  //rc.sendTriState("00FF0FFF0101");
  delay(1000);
  //B
  //rc.sendTriState("00FF0FFF1001");
  delay(1000);
  //C
  //rc.sendTriState("00FF0FF10001");
  rc.send("000001010001011100000011");//works
  delay(1000);
  //D
  //rc.sendTriState("00FF0F1F0001");
  delay(1000);
  //E
  //rc.sendTriState("00FF01FF0001");
  delay(1000);


  //OFF
  //A
  //rc.sendTriState("00FF0FFF0110");
  delay(1000);
  //B
  //rc.sendTriState("00FF0FFF1010");
  delay(1000);
  //C
  //rc.sendTriState("00FF0FF10010");
  rc.send("000001010001011100001100");//works
  delay(1000);
  //D
  //rc.sendTriState("00FF0FF10010");
  delay(1000);
  //E
  //rc.sendTriState("00FF0F1F0010");
  delay(1000);

  //new Power Outlets with mysterios code
  for(int i=1; i<=12;i++){//loop for protokol from 1 to 12
    for(int j = 695; j < 710;j++){ //loop for pulse from 695 to 710 microseconds
      Serial.println("i,j");
      Serial.println(i);
      Serial.println(j);
      
      rc.setPulseLength(j);
      rc.setProtocol(i);
      delay(10);
      rc.send("01010111011010010110110110010011");
      delay(10);
      rc.send("01010111011010010110110110010011");
      delay(10);
      rc.send(1466527123, 32);
      delay(10);
      rc.send(2045667539, 32);
      delay(10);
      
      
      
 
    }
  }


  

}