<<<< Zurück

Die RC Experteneinstellungen - Sniffer Fenster

Wenn die SPIT_GPIO Software ein Funkprotokoll nicht kennt, können Sie versuchen das Protkoll über die Experteneinstellungen selbst herauszufinden.
Dies ist ein kleines Puzzlespiel, Wenn das Funkprotokoll ein wenig den Standards entspricht, hat man eine Chance das Protokoll herauszufinden.

Keine Chance hat man bei sehr speziellen Protokollen, die von den Herstellern komplett außer der Reihe entworfen wurden oder wechselnden Codes, wie bei Autoschlüsseln.
Es kann auch sein, dass die Funkfrequenz Ihres Gerätes nicht bei 433 MHz liegt, dann haben Sie auch keine Chance.



Um ein Funkprotokoll manuell herauszufinden, sollte man wissen, wie solch ein Protololl aufgebaut ist.
Im Folgenden wird kurz der logische Aufbau eines Funkprotokolls erläutert.

Anmerkung für Fachleute:
Die folgende Erklärung für die Codierung ist nicht ganz richtig. Es geht hier nicht darum, den eigentlichen Code zu ermitteln, sondern ein aufgezeichnetes Protokoll wiederzugeben.

Wie ist ein 433 MHz Funkprotokoll aufgebaut?

Die meisten Handsender senden eine bestimmte Code-Sequenz zu einem Funkempfänger (Funksteckdose, Gadget, ...).
Hierzu sendet der Handsender eine Folge von An-Aus (High-Low) Signalen:



Der Sender und der Empfänger haben dabei ausgemacht, wie die High-Low-Signale gesendet werden sollen - diese Vereinbarung ist das sogenannte Protokoll.

Damit ein Empfänger weis, welcher Knopf bei einem Funksender gedrückt wurde, muss hinter den High-Low-Signalen ein Code versteckt sein.
Da ein Sender nur An (High) und Aus (Low) senden kann, muss dieser Code mit den Zeiten von High und Low zusammenhängen.

Damit die Zeiten von High und Low richtig eingeordnet werden können, wird eine kleinste Dauer (Grunddauer) vereinbart - die Pulselänge.
Die High-Zeiten und die Low-Zeiten sind dann immer Vielfache der Pulslänge.
 
Da ein Handsender oft mehrere Codes oder denselben Code mehrfach überträgt, muss es eine Trennung zwischen zwei gesendeten Codes geben!
Diese Trennung zeigt dem Empfänger, wann ein Code beginnt.

Die Trennung oder die Synchronisation:

Eine Trennung wird einfach durch eine kuzes High Signal und einer lange Pause (lange Zeit Low) bewerkstelligt. Das kurze High-Signal und die lange Pausenzeit sind jeweils immer ein Vielfaches der Pulselänge (vereinbarte Grunddauer)!



Sieht der Empfänger solch eine Pausensequenz, so weis er, dass nun der Code folgt und zwar bis zur nächsten Trennung / Synchronisation.



Die Zeiten für die Synchronisation wurden auch vereinbart, sie sind ein Bestandteil des Protokolls.

Das Übermitteln von Informationen - der Code:

Um Informationen zu übermitteln, wird ausgemacht, dass einem Paar (High-Signal, Low-Signal) ein bestimmter Wert zugewiesen wird.
Welcher Wert es genau ist, wird durch die Länge des High-Signals und die Länge des Low-Signals bestimmt. Die Längen sind wieder Vielfache der Pulslänge.

Die meisten Sender/Empfänger haben nur die Werte (0 und 1) vereinbart, es gibt jedoch auch Sender/Empfänger, die noch einen dritten Wert (2) verwenden.
So könnte z.B. Folgendes verinbart sein:

 = 0  einfache Pulslänge HIGH + dreifache Pulslänge LOW (1,3)

= 1  dreifache Pulslänge HIGH + einfache Pulslänge LOW (3,1)

Bei Sender/Empfängern mit einem dritten Wert (2) könnte der Wert so aussehen:
= 2   einfache Pulslänge HIGH + sechsfache Pulslänge LOW (1,6)

Nehmen wir mal an, dass unser Handsender 4 Knöpfe besitzt, dann muss der Code mindestens 4 Unterscheidungen ermöglichen. Nehmen wir weiterhin an, dass nur zwei Werte 0 und 1 vereinbart wurden.
Für die 4 Unterscheidungen müssen mindestens zwei Werte x y übermittelt werden, zB. 00 = Knopf 1, 01 = Knopf 2, 10 = Knopf 3 und 11 = Knopf 4.

Für den Knopf 1 (01) sieht dann unser Funksignal folgendermaßen aus:
Trennung   -   0   -   1   -   Trennung

Trennung / Synchronisation = (1,9)

Für die anderen Knöpfe wird dasselbe Protokoll verwendet, nur der Code ist jeweils unterschiedlich.

Wie man sieht, kann man die Vereinbarung für einen Wert als Paar (Vielfaches der Pulslänge HIGH , Vielfaches der Pulslänge LOW) angeben.
Auch die Trennung / Synchronisation lässt sich als Paar (Vielfaches der Pulslänge HIGH , Vielfaches der Pulslänge LOW) angeben.

Die Beschreibung eines Protokolls enthält die Vielfachen der Pulslänge für die Synchronisation (High,Low) und für jeden Wert (High,Low).
Viele Geräte verwenden dasselbe Protokoll, sie haben eventuell eine andere Pulslänge vereinbart und der übermittelte Code ist unterschiedlich.

Je nach vereinbarter Pulslänge benötigt man für die Übertragung einer Information länger oder kürzer.
Ist in unserem Beispiel z.B.eine Pulslänge von 100 Mikrosekunden ausgemacht, so benötigt unser Signal (1+9+1+3+3+1) = 18 Pulslängen = 1800 Mikrosekunden.

Die Ausnahme - das invertierte Protokoll

Es gibt Protokolle dieren Aufbau gespiegelt ist, die invertierten Protokolle..
Die Synchronisation beginnt mit einem langen LOW-Signal gefolgt von einem kurzen High-Signal (Low,High). Erst nach dem kurzen High-Signal kommen die Werte (Code) , deren High Low Signal ebenfalls umgekehrt ist (Low,High).



Für die nachfolgend beschriebene Erkennung eines Protokolls ist eigentlich nur wichtig, dass die Werte nicht direkt nach der langen Pause (Low-Signal) beginnen, sondern eine Stelle später beginnen, nach dem kurzen High-Signal der Synchronisation.

Zusammenfassung:

Ein Funksignal besteht immer aus Paaren von (High, Low)  Zeiten. Die Zeiten sind immer Vielfache der vereinbarten Pulslänge.
Sender und Empfänger haben immer dasselbe vereinbart.
Daten (Code) bestehen aus einer Folge von Werten / von Paaren (High,Low). Zwischen einer Folge von Werten ist immer ein Synchronisations Paar (High,Low).

Bei einem invertierten Protokoll sind (High,Low) vertauscht und die Synchronisation beginnt mit einem langen Low-Signal. Die Daten/Werte fangen erst nach dem kurzen High-Signal der Synchronisation an.

Eine Protokollbeschreibung besteht aus der Angabe für die Pulslänge und den (High,Low) Paaren für die Synchronisation und für die verwendeten Werte. Zudem muss noch angegeben werden, ob das Protokoll invertiert ist oder nicht.

Die Funkprotokolle in der Realität:

In unserem Beispiel haben wir nur eine sehr kleine Information (zwei Werte) übertragen. In der Realität sind die übertragenen Informationen deutlich länger. Meist wird noch eine Kennung für ein bestimmtes Gerät übertragen usw.
Häufig werden mindestens 24 Werte für eine Übertragung verwendet.

Wie kommt man auf ein Protokoll, wenn es nicht bekannt ist?

Das Ziel ist die Paare in Vielfachen der Pulslängen für die Synchronisation und die jeweilgen Werte herauszufinden.



Wenn ein Knopf am Handsender gedrückt wird, so nimmt die SPIT_GPIO (Sniffer) Software die realen Zeiten der empfangenen Signale auf.
So ensteht eine lange Folge von Zeiten  Diese Folge von Zeiten kann man anschauen, indem man auf   klickt.


 
Anmerkung: Alternativ wird durch Klicken auf   zusätzlich eine Datei mit den Zeitwerten angelegt. Die Datei findet man unter /home/pi/RCSniffer_RawData.txt.
Wenn man die Datei RCSniffer_RawData.txt mit dem TextEditor öffnet, lassen sich die Zeiten etwas übersichtlicher anschauen.

Da unter Umständen viel Rauschen im Funksignal ist, wird es vor oder/und nach dem eigentlichen Funksignal einige andere Werte geben, die nichts bedeuten.
Durch Störungen und ungenaue Messung sind die aufgemommenen Zeiten nicht immer genau das Vielfache der Pulslänge. Dies macht die Sache etwas komplizierter, weil ein wenig geschätzt werden muss.
Es reicht nicht solch eine Zeitenfolge aufzuzeichen und komplett wiederzugeben, da wäre zuviel Unsinn dabei.
Man muss schon versuchen das Protokoll herauszubekommen, das später vom Sender möglichst sauber gesendet wird.

Schritt 0: Daten aufzeichnen

Halten Sie den Handsender sehr nahe an die Platine (den Empfänger)  und drücken Sie einen Knopf auf dem Handsender.
Direkt danach klicken Sie auf  , um die aufgezeichneten Zeiten zu sehen.

Schritt 1: Synchronisation (lange Zeiten) suchen

Nach obiger Beschreibung besteht die Synchronisation aus einem kurzen High-Signal gefolgt von einem sehr langen Low-Signal.
Bei einem invertierten Protokoll ist es umgekehrt.
In der Liste muss nach langen Zeiten gesucht werden, die in ähnlicher Länge wiederkehren. Zwischen zweier solcher langen Zeiten sollten immer dieselbe Anzahl anderer Zeiten liegen.
Da für eine Information durchaus 24 Werte und mehr übertragen werden können, sollten mindestens 48 andere Zeiten oder mehr dazwischen liegen.
Lange Zeiten mit wenigen Zeiten dazwischen oder sehr unterschiedlich lange Zeiten kann man als Rauschen vernachlässigen.

Schritt 2: Ähnliche Zeiten herausfinden

Für eine Übertragung/Information werden folgende Zeiten auftreten:
2 Zeiten für das Synchronisationspaar
2 Zeiten für den Wert 0,
2 Zeiten für den Wert 1
und eventuell 2 Zeiten für den Wert 2.

Die Zeiten sind immer Vielfache von einer Pulslänge, die aktuell noch nicht bekannt ist!!!
Es können durchaus weniger Zeiten auftreten, wenn die Vielfachen der Pulslängen im Protokoll oft gleich sind.
Im Bild oben sind z.B. die Vielfachen der Pulslänge für die Synchronsation (1,31), für den Wert 0 (1,3) und für den Wert 1 (3,1)
Es sind also nur drei Zeiten vorhanden:
Zeit A: 1xPulslänge
Zeit B: 3x Pulslänge
Zeit C: 31 x Pulslange.

Zwischen den langen Synchronisations-Zeiten müssen Zeiten gesucht werden, die ähnlich lang sind. Aus den jeweils ähnlichen Zeiten kann jeweils ein Mittelwert gebildet werden.
So erhält man eine bestimmte Anzahl von Zeiten/Mittelwerten.

Schritt 3: Pulslänge abschätzen

Um später die Paare von Vielfachen zu ermitteln, muss erst einmal die Pulslänge geschätzt werden. Im Prinzip ist die Pulslänge der größte gemeinsamme Teiler aller gefundenen Zeiten/Mittelwerte.
Da die Zeiten nur gemittelt sind, kann man ein wenig herumspielen  um die Pulslänge möglichst passend zu ermitteln. Eine Pulslänge kann durchaus in einem Bereich von ca. 15 - ca. 600 Mikrosekunden liegen.
Die Pulslänge muss nicht genau geschätzt werden, es reicht eine Näherung.
Alle ermittelten Mittelwerte müssen durch die geschätzte Pulslänge ganzzahlig teilbar sein - wenigstens näherungsweise.

Schritt 4:  Paare bestimmen und eintragen

Wie oben beschrieben besteht die Synchronisation aus einem kurzen High-Signal und einem langen Low-Signal.
Also ermittelt man das Synchronisationspaar folgendermaßen:
Anmerkung: bei einem invertierten Protokoll  kommt erst die lange Low-Zeit und dann die kurze High-Zeit.
Klicken Sie auf  , dann werden die Bezeichner für High und Low getauscht.

Direkt nach der langen Zeit fängt der erste Wert (0 oder 1 oder 2) an:
Anmerkung bei einem invertierten Protokoll fängt der erste Wert erst nach der kurzen High-Zeit der Synchronisation an, nicht direkt nach der langen Low Zeit.
(lange Zeit Low, kurze Zeit High, Werte ....)

So geht man paarweise durch die Liste der Zeiten und sucht nach einer neuen Kombination von (High,Low) Paaren.
Meist wird man nur drei Kombinationen finden (Synchronisation, Data 0 und Data1). In einigen Fällen gibt es noch eine vierte Kombination für Data 2.

Die ermittelten Vielfache der Pulslänge werden jeweils in die entsprechenden Felder eingetragen:

Wurden für einen Wert z.B. 'Data 2' keine Zeiten gefunden, so trägt man einfach 0 ein.

Anmerkung: Bei einem invertierten Protokoll muss  ausgewählt werden.

Schritt 5 Testen

Halten Sie den Handsender  wieder sehr nahe an die Platine und drücken Sie auf denselben Knopf wie vorher.
Wurde das Protokoll richtig geschätzt, so müsste jetzt eine Folge von Werten erkannt werden:


Klicken Sie auf . Das Sniffer Fenster wird geschlossen und Sie können im Einstellungsfenster mit dem Test-Knopf kontrollieren, ob Ihr Empfänger reagiert.
Falls keine Wertefolge erkannt wird oder Ihr EMpfänger nicht reagiert, müssen Sie mit den Schritten 3 und 4 etwas herumspielen und die Schätzung etwas verändern.
Sie können auch von vorne beginnen, vielleicht war die Aufzeichnung der Daten aufgrund von Störungen zu ungenau.

Ein konkretes Beispiel:

Hier sehen Sie ein Beispiel von aufgezeichneten Zeiten eines Handsenders:

Schritt 1 Synchronisation suchen
Es finden sich zwei lange Zeiten mir genügend anderen Zeiten dazwischen: 11981 und weiter unten 11987-
Die Zeiten für die Synchronisation sind mit 'sync' markiert.

Schritt 2 ähnliche Zeiten suchen
Betrachtet man die Zeiten, so fallen folgende drei Zeiten auf:
Zeit A:  (401, 374, 371, 404, 373,..)  Mittelwert ca. 385
Zeit B:  (1187, 1178, 1183, 1144, 1158,....) Mittelwert ca.  1170
Zeit C: die langen Synchronisationszeiten (11981, 11978) Mittelwert ca.  11980
Andere Zeiten sind nicht vorhanden.

Schritt 3 Pulslänge abschätzen
Der größte geminsamme Teiler der drei ermittelten Mittelwerte ist ca. 390
Zeit A Mittelwert 385 geteilt durch 390 = 0,98 -> ca. 1
Zeit B Mittelwert 1170 geteilt durch 390 = 3
Zeit C Mittelwert 11980 geteilt durch 390 = 30.71 -> ca. 31

Dies geht nicht genau auf, aber eine Näherung reicht hier.

Schritt 4 Paare bestimmen und Vielfache der Pulslänge eintragen
Synchronisation High (erste Zeit kurz )  401 / 390 ergibt ungefähr 1
Synchronsation Low (zweite Zeit lang) 11981 / 390 ergibt ungefähr 31
Also entspricht das Synchronisationspaar in Vielfachen der Pulslönge (1,31)

Direkt nach der langen Zeit geht man die Reihe paarweise durch und sucht Kombinationen:
Zeit für High ist mit * markiert
Zeit für Low ist mit '** markiert
Das erste Paar (1187 *, 374**) entspricht in Vielfachen der Pulslänge  (1, 3)
Die nächsten zwei Paare sind gleich aufgebaut.
Das vierte Paar (404 *, 1144 **) entspricht in Vielfachend der Pulslänge (3,1)
weitere Kombinationen sind nicht vorhanden.

Die gefundenen Kominationen kann man nun eintragen.


Für Data 2 haben wir keine Zeiten gefunden, hier wird einfach 0 eingetragen.

Wenn ein Wert eingetragen wurde, müssen Sie die Return-/Eingabetaste drücken oder ein anderes Feld klicken, damit der Wert übernommen wird.

Hinweis: Würde es sich um invertiertes Protokoll handeln,
so würde die Synchronisation mit aus 11981, 1187 bestehen und die Markierungen im Beispiel wären um eins nach unten verschoben:
11981 sync High
1187 sync Low
374 * High
1178 **  Low
Dann würde man aber mit (372,404) in den Zeilen 604 und 605 und (1158,1174) in den Zeilen 608 und 609 weitere Kombinationen benötigen, das geht nicht schön auf.
Deshalb nehmen wir in unserem Beispiel an, dass es sich um ein normales Protokoll handelt.

Schritt 5 Testen
Halten Sie den Handsender  wieder sehr nahe an die Platine und drücken Sie auf denselben Knopf wie vorher.
Wurde das Protokoll richtig geschätzt, so müsste jetzt eine Folge von Werten erkannt werden:


Jetzt können Sie auf klicken um das Ergebnis zu übernehmen. Im Einstellungsfenster können Sie mit dem Test-Knopf kontrollieren, ob Ihr Empfänger reagiert.

Falls keine Wertefolge erkannt wird oder der Empfänger nicht reagiert, müssen Sie mit den Schritten 3 und 4 etwas herumspielen und die Schätzung etwas verändern.
Sie können auch von vorne beginnen, vielleicht war die Aufzeichnung der Daten aufgrund von Störungen ungenau.

Tipp: Die Software merkt sich die letzte Experteneinstellung.
Wenn Sie mehrere kryptische Sender besitzen und zwischenzeitlich andere Experteneinstellungen ausprobieren, können Sie eine schon verwendete (gespeicherte) Einstellung für einen Handsendeknopf öffnen und dann das
Sniffer Fenster wieder schließen.  Damit ist diese Experteneinstellung wieder die letzte und Sie können diese für einen anderen Knopf Ihrer Fernbedienung verwenden.
Eine andere Alternative wäre, die Kombinationen aufzuschreiben und dies zu Ihrem Handsender zu legen!

Ein weiteres, kniffliges  Beispiel:

Für Funksteckdosen von delayCON wurden folgende Zeiten gemessen:
Hier gibt es drei Kombinationen von Wertepaaren:
Roter Kreis: (290 High, 2634 Low)
gelbe Kreise: (308 High, 1280 Low) und (296 High, 237 Low)
das bedeutet, dass der Code aus drei Werten besteht und man für Data 0, Data 1 und Data 2 Kombinationen von Pulslängen eintragen muss.
Diese Zeitfolge ist etwas knifflig, mit folgenden Werten hat es funktioniert:
geschätzte Pulslänge 60
Synchronisation (5, 173)
Data 0: (5, 4)
Data 1: (5, 21)
Data 2: (5, 44) - roter Kreis


<<<< Zurück