Funkdaten mitloggen und simulieren

Facebooktwittergoogle_pluspinterestlinkedinmailFacebooktwittergoogle_pluspinterestlinkedinmail

Oft kommt an den Punkt Daten einer Fernbedienung oder ähnlichem simulieren zu wollen. Ein kleines Howto zeigt, in einfachen Schritten, wie man rangehen muss.

Vorbereitungen

Jede Entwicklung benötigt Hard- sowie Software. Die in dieser Anleitung benutzten Dinge sind:

Hardware

bild-von-busware-deCUL-Stickwww.busware.de/tiki-index.php?page=CUL

Der CUL-Stick ist das Herzstück dieser Anleitung. In der aktuellen Version 3 kann er 868 sowie 433 MHz empfangen sowie senden. Ältere Sticks (V2) können auf dieser Bandbreite nur senden und müssen für 868 extra konfiguriert werden. Zum Daten mitschneiden geht die V2-Version leider nicht, zum Daten simulieren jedoch schon.

Auf dem CUL-Stick befindet sich ein TI CC1101– bzw CC1100-Transceiver. Der CUL V2-Stick hat lediglich einen Die empfohlene Firmware ist culfw (siehe weiter unten).

Es reicht 1 Stick, um jedoch zu Testen empfiehlt sich noch ein zweiter.


Software

  • Linux Debian

Alle Schritte, inbesondere die dafür benutzte Software, im Howto sind utner Debian ausgeführt. Ein anderes OS wird auch gehen.

Die Firmware, um CUL zum Laufen zu bringen ist, heißt culfw. Sie kann schon viel und wird stetig weiterentwickelt. So kann man selbst noch einige Features einbauen.

Um Daten zu empfangen oder senden braucht man ein Programm wie z.B. CuteCom.

  • Scriptsprache wie PHP

Als Skriptsprache zur Interpretation und der Daten wird in dieser Anleitung PHP genommen.


CUL-Stick installieren / flashen

Der erste Schritt ist die Installation des CUL-Sticks. Je nachdem welche Version man hat sind verschiedene Schritte zu tun.

CUL V2

Der CUL-Stick kommuniziert standardmäßig nur auf 433 MHz. Wenn das zu untersuchende Gerät auf 868 MHz funkt, muss vorher noch einiges in der Firmware eingestellt werden. Dazu die ersten Schritte hier.

Danach kann normal geflashed werden.

Zum Aufzeichnen (und späteren Interpretieren) ist der CUL V2 NICHT geeignet. Er kann lediglich Daten senden und kann als Fernbedienung zum Testen genutzt werden.

  1. Unter www.culfw.de/culfw.html#Links die aktuelle Version des culfw (Der Firmware von CUL) runterladen und entpacken. Derzeit ist es die 1.52.
  2. Im culfw-Verzeichnis /culfw/clib die Datei cc1100.c die Zeilen für FREQ2, FREQ1 und FREQ0 ändern:
  3. Kompiliere das Projekt neu. Führe im Ordner i>/culfw/Devices/CUL folgenden Befehl aus.
  4. Es ist möglich, dass beim Kompilieren folgender Fehler passiert: Dann müssen die Header-Files der avr-libs geändert und Schritt 2 wiederholt werden. Ändere die Datei power.h in /user64/avr/include/avr wiefolgt:
  5. Jetzt kann man den CUL-Stick mit der fertigen culfw-Version flashen. Dabei wird beim Anstecken des Sticks der Taster zum Flashen gedrückt und erst längere Zeit später losgelassen. Wenn die LED nicht blinkt, ist der CUL-Stick im Flash-Modus. Wenn doch, muss er wieder abgezogen und erneut mit Drücken der Taste drangesteckt werden.
    Man kann auch nachschauen, ob der CUL-Stick im Flash-Modus ist, indem man folgenden Befehl ausführt: Wenn unter anderem die Geräte-ID 03eb:2ffa Atmel Corp. gefunden wird, ist der CUL-Stick im Flash-Modus.
    Jetzt kann die Firmware aus dem Ordner /Devices/CUL heraus geflashed werden:
  6. Nach dem Flashen ist ein Gerät /dev/ttyACM0 oder ähnlich vorhanden.

Daten aufzeichnen

CuteCom benutzen

Nachdem der CUL-Stick die richtige, aktuelle Firmware draufhat, muss man ihn mit CuteCom zum Laufen kriegen. CuteCom kommuniziert dabei mit dem CUL-Stick und sagt, was dieser machen soll.

Vorher sollte man sich noch die Befehlsreferenz von culfw unter www.culfw.de/commandref.html anschauen.

In diesem Bereich wird immer vom ttACM0 die Rede sein. Wenn man mehrere CUL-Sticks installiert hat ist es jeweils der ttyACM1, ttyACM2 usw.

Zuerst muss man CuteCom starten. Um auf das ttyACM0 zuzugreifen benötigt es SuperUser-Rechte. Dafür also:

Im CuteCom müssen folgende Parameter gesetzt werden:

Parameter Wert
Device /dev/ttyACM0
Hex output gechecked

Mit einem Klick auf Open Device wird die Verbindung hergestellt. Jetzt kann mit dem CUL-Stick kommuniziert werden.

Dazu hier ein paar Tests und Erklärungen.


Version

Folgender Befehl schaut, welche culfw-Version installiert ist. Es sollte V 1.46 oder größer sein.


Ankommende Daten anzeigen

Ein wichtiger, hier benötigter, Befehl ist das Daten aufzeichnen. CuteCom wird alle Daten anzeigen, die empfangen wurden. Der Befehl sieht folgendermaßen aus:

<RR> sind dabei 2 hexadezimale Zahlen, die z.B. wiefolgt aussehen könnten:

Befehl Beschreibung
X00 keine Daten anzeigen
X07 alle ankommenden Daten anzeigen
X08 steigende (r) und fallende (f) Flanke sowie Nachrichtenende (.) anzeigen
X10 Zeit zwischen 2 Flanken anzeigen
X80 Signalstärke anzeigen (a … schlecht -> p … gut)

Wenn man mehr Einstellungen aktiv haben möchte, addiert man einfach die einzelnen Elemente. Wir wollen sowohl Signalstärke und die Zeitdauer zwischen zwei Flanken sowie die Flanken selbst anzeigen:

Wenn Daten gesendet werden kriegen wir beispielsweise folgende Antwort:

Dies sind alles ASCII-Zeichen, insgesamt 5 Stück. Sie heißen folgendes:

Befehl Beschreibung
62 72 7e 66 2d Zuerst wird die Signalstärke gesendet. 62 ist ein b – Somit eine schlechte Signalstärke. Der Verlauf sieht folgendermaßen aus: [schlecht]abcdefghijklmnop[gut].
62 72 7e 66 2d Als ASCII-Zeichen ist dies ein r somit, beginnt hier die steigende Flanke.
62 72 7e 66 2d Dies ist die Zeitdauer, wie lang der Wert auf „1“ bleibt.
62 72 7e 66 2d Dies ist die fallende Flanke, als ASCII-Zeichen ein f.
62 72 7e 66 2d Zuletzt kommt die Zeitdauer, wie lang der Wert auf „0“ bleibt.

Diese Daten können jetzt über lange Zeit aufgenommen werden. Dann werden sie kopiert und in einem Skript weiterverarbeitet.


Daten interpretieren

Ein kleines selbstgebautes Skript wird jetzt benötigt. Wir haben beispielsweise folgende Daten:

config.php

In der config.php werden wichtige Einstellungen zur Skriptbenutzung gespeichert.


index.php

Folgende Datei gibt lediglich ein Eingabefenster der Daten.


index2.php

Die ganze Skript-Logik steckt in der index2.php. Hier werden die Daten angezeigt und verarbeitet.

Das ist lediglich ein Beispiel-Skript, daraus kann später noch mehr gemacht werden.

Sich wiederholende Befehle müssen nicht immer die gleiche Zeitdauer bei dem Wert „0“ oder „1“ haben. Manchmal ist er „50ms“ auf „1“, manchmal nur „40ms“. Deswegen lohnt es sich mehrere Male eine Befehl mitzuloggen und einen Mittelwert zu nehmen.


Daten verstehen

Für jeden, der eine bestimmte Anzahl von Tasten hat, die er nachbauen will (wie bei einer Fernbedienung), reicht es bis hierhin. Jetzt können alle Daten erzeugt, geloggt und angezeigt werden. Dieser Punkt kann für diese Leute übersprungen werden.

Wer jedoch eigene Daten erzeugen will, muss das System verstehen, wie die bereits empfangenen Daten erzeugt wurden sind. Das kann mitunter sehr kniffelig sein.

Daten werden meist nicht in Rohform gesendet um z.B. gleichanteilsfrei zu sein. Als Beispiel zur Dekodierung der Daten nehme ich den Manchester-Code. Hier passiert folgende Umwandlung:

gesendete Daten wirkliche Daten
01 0
10 1

Jede 01 ist somit eine 0 – jede 10 ist somit eine 1. Der Manchester-Code ist eine einfache Variante um Daten zu kodieren. Normalerweise hat man es mit schwereren, nirgendwo dokumentierten, Verfahren zu tun. Es ist ein rätselraten und kann nur mit eine großen Menge an Daten erraten werden.


Daten simulieren

Der letzte Schritt ist das Ausprobieren, ob es funktioniert, wenn man ähnliche Daten sendet und versucht die Fernbedienung zu sein. Dafür eignen sich beide CUL-Sticks (V2 oder V3). Man kann sogar, wenn man beide hat, schauen, ob der gewünschte Befehl geschickt wurde.

Der Sendebefehl bei culfw heißt wiefolgt: (siehe www.culfw.de/commandref.html)

In der Referenz steht beschrieben, wie man die einzelnen Längen des „0“ oder „1“-Wertes setzt. Danach sollte das gewünschte Signal ankommen.

Ein Kommentar

  1. Hallo,

    ich habe ein RaspberryPI und heute das CC1101 Transiver Modul bekommen. Mit Minicom und Ihren Blog konnte ich zumindestens irgendwas empfangen. Senden konnte ich auch irgendwas. Kontrollieren tue ich das mit der SDRSharp Software + DVB-T USB Empfänger.
    Ich erhofte mir eigentlich ohne FHEM die ein Datenpaket als Datei ab zu speichern um es dann weiter verarbeiten zu können.

    Irgend eine Idee für mich?

    MfG
    Andree

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.