Unbekanntes Funkprotokoll mit "RC-Switch"auswerten

OP #5419122
Lesenswert?

Hallo.

Ich habe ein Problem bei der Auswertung einer Funknachricht die mit 
einem AC-123-16 Funkhandsender von ANYSANE gesendet wird. (siehe Bild)
Ich möchte das Signal gerne mit einem Arduino und einem 433mhz Empfänger 
auswerten.
Ich benutze im Moment die "rc-switch" Librarry von perivar.
Diese gibt mir aber keine gültiges Signal zurück.
Wenn ich aber auf den Debug-Modus stelle kann ich die Funknachricht in 
den RAW-Werten sehen.

Ich habe die nachricht schon größtenteils entschlüsselt siehe Bild2.

Am Anfang der Nachricht kommt immer ein ganz langes HIGH und ein langes 
LOW.
Danach kommt anscheinend eine Sender-ID (Array3).
Dann kommen zwei Byte "Array4" und "Array" in denen ist des Kanal 
enthalten.
Die letzten beiden Byte enthalten welche taste gedrückt worden ist (Hoch 
Mitte Runter) und eine Prüfsumme.
Beendet wird die Nachricht von einem langen HIGH gefolgt von einem lange 
LOW.
Diese Kombination tritt in der Nachricht selbst nicht auf.

Ausgewertet werden nur "lange" Zustände.

Ich bin mir nicht sicher ob ich das durch Änderung der "rc-switch.cpp" 
abbilden kann.
1
static const RCSwitch::Protocol PROGMEM proto[] = {
2
#endif
3
    {350, {0, 0}, {1, 3}, {3, 1}, {1, 31}, false},   // protocol 1
4
    {650, {0, 0}, {1, 2}, {2, 1}, {1, 10}, false},   // protocol 2
5
    {100, {0, 0}, {4, 11}, {9, 6}, {30, 71}, false}, // protocol 3
6
    {380, {0, 0}, {1, 3}, {3, 1}, {1, 6}, false},    // protocol 4
7
    {500, {0, 0}, {1, 2}, {2, 1}, {6, 14}, false},   // protocol 5
8
    {450, {0, 0}, {1, 2}, {2, 1}, {23, 1}, true},    // protocol 6 (HT6P20B)
9
    {150, {0, 0}, {1, 6}, {6, 1}, {2, 62}, false},   // protocol 7 (HS2303-PT, i. e. used in AUKEY Remote)
10
    {250, {1, 10}, {1, 5}, {1, 1}, {1, 40}, false},  // protocol 8 (Nexa)
11
    {100, {0, 0}, {6, 6}, {6, 12}, {6, 169}, false}, // protocol 9 (Everflourish Single Button)
12
    {100, {0, 0}, {6, 6}, {6, 12}, {6, 120}, false}, // protocol 10 (Everflourish All Buttons)
13
};

Kennt jemand dieses Protokoll und kann mir helfen dieses in der .cpp zu 
deklarieren?

Danke!
Gruß
Stefan
Angehängte Dateien:
Gast #5420776
Lesenswert?

Dein Bild zeigt Leitung 0/1/2/3/4 und du erzählst interessante
Beobachtungen von Array3, Array4 und Array - aber ICH erkenne da
keine Zusammenhänge.

Und die anderen 30 Leute, die da schon draufgeklickt haben, auch
nicht.

Erklär dich vielleicht mal etwas verständlicher in Zusammenhang
mit dem sichtbaren Pegel-Ablauf...???
Gast #5420837
Lesenswert?

Stefan B. schrieb:
> Ich habe ein Problem bei der Auswertung einer Funknachricht die mit
> einem AC-123-16 Funkhandsender von ANYSANE gesendet wird. (siehe Bild)

Dazu wäre es gut, etas über den Nachrichteninhalt der gezeigten 
Mitschnitte zu wissen.

Falls die Dekodierung nur sportlicher Ehrgeiz ist, könntest du 
alternativ auch ein fertiges Kästchen hinstellen - andere haben das 
Protokoll schon nachgebaut ...
http://www.rfxcom.com/RFXtrx433E-USB-43392MHz-Transceiver/en
https://cdn.shopify.com/s/files/1/1253/2717/files/RFXtrx_User_Manual.pdf
#5420932
Lesenswert?

Stefan B. schrieb:
> Ich bin mir nicht sicher ob ich das durch Änderung der "rc-switch.cpp"
> abbilden kann.

Nein. Die genannte Library kann nur Protokolle verarbeiten, die nach 
folgendem Schema arbeiten. Jedes Element (Start-, Daten, Stopbit) 
besteht aus einem H-Teil und einem L-Teil, die in der Länge ein 
bestimmtes Vielfaches eines Grundtaktes ergeben. Das kann ich in Deiner 
Aufzeichnung nicht erkennen.

https://github.com/sui77/rc-switch/wiki/KnowHow_LineCoding
OP #5420992
Lesenswert?

Hallo JJ

Sorry für die schlechte Erklärung!
Ich versuchs nochmal.
Der Sender den ich benutze sendet Zyklisch in kurzen intervallen immer 
die gleiche Nachricht wenn eine Taste gedrückt wird.
Diese Sendeblöcke habe ich mit anderer Software schon separiert, 
normalisiert und als digitalen Verlauf in einem Graphen dargestellt.


Das ist dann in dem Bild z.B. leitung0 und leitung1 zu sehen.
Die Nullen und Einsen in der Grafik markieren einen High bzw Low zustand 
der eine bestimmte Dauer überschreitet
Die anderen Verläufe interessieren erstmal nicht. (stehen aber für taste 
losgelassen)

Zum besseren Verständnis habe ich noch eine Grafik angehängt.

Hallo Wofgang
Ist sportlicher Ehrgeiz!
433mhz ist natürlich falsch es müsste 433MHz heißen.
Dieser Empfänger wurde verwendet (Bild2).
Angehängte Dateien:
#5421053
Lesenswert?

Entschuldigung. Die aufeinanderfolgenden langen Impulse, die ich 
"gesehen" habe sind in Wirklichkeit Bitwechsel zwischen "0" und "1". War 
wohl noch nicht ganz wach.
Trotzdem wird das mit der rc-switch wohl nicht funktionieren, weil die 
Library mit 32Bit-Werten arbeitet, also auch nur Codes mit max. 32 Bits 
senden und empfangen kann.
Schau Dir mal folgendes Projekt an. Da wird auch erklärt, wie man die 
Impulse vermisst und den Impulszug generiert:

http://www.dserv01.de/howtos/funksteckdose-fernsteuern-mit-arduino/
OP #5425114
Lesenswert?

Hallo,

ich muss mich hier nochmal melden und um Hilfe bitten.

Wie schon weiter oben erwähnt ist eine Auswertung mittels RC-SWITCH 
nicht direkt möglich.

Wenn ich in der RCSwitch.cpp DEBUG aktiviere bekomme ich den kompletten 
Signalverlauf auf die Serielle Schnittstelle ausgegeben
1
4898,573,614,190,205,589,589,202,205,572,227,573,206,599,602,191,588,194,218,574,611,188,203,601,204,590,587,191,601,191,202,597,202,606,585,193,600,193,200,592,200,600,585,192,228,577,201,592,585,211,585,193,220,579,611,194,199,594,199,577,215,579,200,600,611,196,200,594,200,578,199,593,201,597,203,602,202,575,217,577,598,197,201,598,202,577,227,577,200,594,199,592,201,577,222,578,200,608,201,592,201,576,216,577,201,598,611,193,202,592,582,194,599,198,606,194,584,220,200,579,212,580,199,594,199,601,583,194,225,579,597,877,

Den Programmteil der die Ausgabe macht habe ich auch gefunden:
1
#ifdef DEBUG
2
  if (p > 7) // debugging protocols 8 and 9
3
  {
4
    Serial.println();
5
    Serial.print(F("Testing if this is protocol "));
6
    Serial.print(p);
7
    Serial.print(F(" using "));
8
    Serial.print(changeCount);
9
    Serial.print(F(" timings. PauseLengthInPulses: "));
10
    Serial.print(pauseLengthInPulses);
11
    Serial.print(F(". Delay: "));
12
    Serial.print(delay);
13
    Serial.print(F(". Delay tolerance: "));
14
    Serial.print(delayTolerance);
15
    Serial.print(F(". Received Bitlength: "));
16
    Serial.print(receivedBitlength);
17
    Serial.print(F(". First Data Timing Index: "));
18
    Serial.print(firstDataTiming);
19
    Serial.println();
20

21
    Serial.print(F("Raw timing data: "));
22
    for (unsigned int p = 0; p < changeCount; p++)
23
    {
24
      Serial.print(RCSwitch::timings[p]);//Hier werden die Werte übergeben.
25
      Serial.print(F(","));
26
    }
27
    Serial.println();

Mein Problem ist es dieses Array ins Hauptprogramm zu übergeben damit 
ich es auswerten kann.
Wie kann ich diese Werte übergeben damit ich sie in der MAIN-Loop 
verarbeiten kann?

Danke für eure Hilfe!
Angehängte Dateien:
#5425485
Lesenswert?

Wie schon geschrieben, kann rc-switch derart lange Bitfolgen von Haus 
aus nicht erzeugen. Die brutalstmöglich einfache Lösung wäre, ein Array 
mit allen Zeiten (im Flash) anzulegen und in einer Schleife immer 
delay_us mit dem jeweiligen Wert aufzurufen und dann den Port-Pin zu 
toggeln. Am Anfang den Pin entsprechend des Startpegels setzen.
OP #5426059
Lesenswert?

Mario M. schrieb:
> Wie schon geschrieben, kann rc-switch derart lange Bitfolgen von Haus
> aus nicht erzeugen. Die brutalstmöglich einfache Lösung wäre, ein Array
> mit allen Zeiten (im Flash) anzulegen und in einer Schleife immer
> delay_us mit dem jeweiligen Wert aufzurufen und dann den Port-Pin zu
> toggeln. Am Anfang den Pin entsprechend des Startpegels setzen.

Hallo Mario,

Ich möchte ja keine Bitfolge erzeugen.
Ich will ja nur die Nachricht vom der Fernbedienung empfangen, Auswerten 
welcher Kanal und Welche Taste und das ganze dann per W-LAN an meinen 
Homeserver übergeben. Dazu würde ich oben genannten Empfänger und einen 
WEMOS-D1-Mini verwenden.
Deshalb war meine Idee, wenn schon der Signalverlauf richtig empfangen 
wird, diesen einfach an die Main-LOOP zu übergeben, auswerten und ein 
UDP-Paket versenden.
Ich scheitere aber im Moment schon dran das ARRAY "timings[]" in die 
Hauptschleife zu bekommen.
#5426193
Lesenswert?

Stefan B. schrieb:
> Wie schon weiter oben erwähnt ist eine Auswertung mittels RC-SWITCH
> nicht direkt möglich.

vielleicht wird rolling code genutzt, dann wäre es unmöglich zu 
dekodieren.
vielleicht ist es aber nur was selbstkreiertes auch da sehe ich schwarz.

Es gibt so viele Codearten

einen kleinen Einblick bekommt man hier
https://www.mikrocontroller.net/articles/IRMP

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren