433MHz sniffer

  • Hallo, es gibt ja bei derm Paket 433MHzUtils einen RF-Sniffer, der decodiert auch meine Funksteckdosen-Fernbedienung. SOweit so gut. Nun moechte ich aber auch andere Protokolle dekodieren, also z.B. die FUnksensoren der Wetterstationen, etc. Die senden auf dergleichen Frequenz, haben aber einen anderen Datenaufbau.


    Gibt es einen erweiterten RFSniffer, der auch diese Protokolle unterstützt?


    (Ich kann durch schnelles Auslesen des GPIOs (us) sehen, dass die Wettersensoren funken, das SIgnal kommt also an, muss nur dekodiert werden...)

  • Naja, es gibt fuer einzelne Prokolle durchaus schon dekoder, aber noch keine Universallösung. Jedenfalls soweit ich das rausfinden konnte.


    Man liesst den GPIO-Status (0 oder 1) alle 1 Mikrosekunden aus, besser natuerlich noch schneller, aber mit möglichst gleichmaessiger rate. Dann zaehlt man immer die Mikrosekunden zwischen den Pegelwechseln. Man bekommt dann eine Zahlenfolge a1/b1 a2/b2 ... und so weiter, a immer die anzahl der Mikrosekunden fuer ein high und b fuer low. Daraus kann man dann im Prinzip die Bitfolge dekodieren (je nach übertragunfs-Protokoll) und aus den Bits dann den gesendeten Wert (auch je nach Protokoll). Der Start eines signals ist leicht zu erkennen, dann hat man ein relativ langes b.

  • Ne sorry wend,
    aber wenn es so einfach wäre ...
    Da kommen evtl. Rolling Codes ins Spiel, Manchester codierte Daten, proprietäre Protokolle der einzelnen Hersteller (die wollen ihre Stationen verkaufen, und nicht, dass Du die Daten mit dem Raspi liest), Datenpakete mit Hash codes, crc Summen, ...
    Ausserdem: wer weiß, das Du da von Deinen GPIOs ausliest ... das kann alles mögliche sein.


    Vergiß es, wenn Du keine Unterlagen zu den Funken hast.
    Das ist ja auch der Grund, warum es eben noch keine Universal-Lösung gibt.


    Ich hab' mal versucht, das Steuersignal (8 Pins) für ein "custom lcd" einer Waage mit einem Arduino zu analysieren. Meine naive Vorstellung damals: ich leg' 100 g auf die Waage, dann 200 g und guck, was sich ändert. Dann wieder 100 g, ... usw.
    Nach ca. einer Woche habe ich den Mist in die Ecke geschmissen. Selbst da ist scheinbar was proprietäres im Spiel, obwohl das erst mal ganz einfach klingt. Irgend eine Logik konnte ich jedenfalls nicht erkennen.


    cu,
    -ds-

  • Hm, Ok, ich verstehe. Immerhin gelingt es fuer einige Protokolle, das zu dekodieren. Ob man dafuer immer gleich einen SDR benötigt? Gut, dann hat man analoge Signale, die sind mitunter sauberer, aber die Digitalen vom einfachen kleinen 433MHz receivermodul müssten doch auch gehen...
    Naja, ich kanns jaso nebenbei mal versuchen....

  • Klar ... gegen probieren spricht ja auch nix ...
    "nur noch dekodieren" ... das klang halt so erwartungsvoll ... so wie "ach, kein Problem, nur ein bisschen Bits schaukeln" ... :)


    Ich wollte Dich nur vorwarnen, dass Du bestimmt auch mal mit einem vollkommen unlogischen Datenwirrwarr konfrontiert wirst ;)


    Die Anbieter haben halt ein gewisses Interesse daran, dass nur ihre eigenen Produkte untereinander kommunizieren können.


    cu,
    -ds-

  • Ja. Aber wo ich so drueber nachdenke: Das waere ein gutes Projekt fuer den Raspi+433MHZ Sender und Empfaenger: EIn universalübersetzer, so dass alle Temperatursensoren mit allen Wetterzentralen, Homematic etc kommunizieren können.

  • OK, ich habe eine erste Version des 433MHZ Universalsniffer fertig.



    Er funktioniert mit einem kleinen 433MHz Empaengerplatinchen, der Ausgang ist an GPIO 27 angeschlossen. Die Ausgabe des Sniffers sieht für einen
    Funkl-Feuchte- und Temperatursensor so aus:

    Code
    ..1x0xxxx10xxxx.1xxx0x..x.x1x00 101010100 1100000000010000110100 300434 rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
    ..1x0xxxx10xxxx.1xxx0x..xx.1xx0 10101010 11000000000100001100100 600864 rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr


    und fuer die Signale der Fernbedienung für die Funkschaltsteckdosen so:

    Code
    000000000001010100010100* 000000000001010100010100  0
    000000000001010001010100* 000000000001010001010100  0
    000000000001010101011111* 000000000001010101011111  0


    Das erste Wort ist jeweils das empfangene Telegramm, dekodiert aus den Pulsweiten und laenge der Abstaende. Es gibt

    Code
    "*" Langer Puls
    "0" und "1" Pulsweite variiert, aber gleiches Raster
    "." und "x" Pulsweite und Raster variiiert.


    Mehr Sensoren habe ich gerade nicht zum testen da.


    Nun zum Programm.
    Makefile:

    Code
    all: gpio_read
    gpio_read : gpio_read.c timer.c
    gcc gpio_read.c timer.c  -o gpio_read -lbcm2835


    Es wird nur der C-Compiler benötigt und die Library bcm2835-1.50, die man vorher installieren muss.


    Anregungen und Verbesserungen sind gerne gesehen. Den Code haenge ich den Anhang.


    Jetzt geht es ans dekodieren der Bitmuster.
    [hr]
    Infos zur verwendeten Hardware:
    433MHz Empfaengermodul: https://raspiprojekt.de/en/buy…faengermodul-433-mhz.html
    angeschlossen an GPIO 27 und eine kleine Antenne:
    https://www.amazon.de/Antenne-Helical-Antenne-Fernbedienung-Arduino-Raspberry/dp/B00SO651VU (Affiliate-Link)


    Kosten zusammen ca. 2,14 EURO.
    [hr]
    Nochwas: Das Programm muss mit sudo gestartet werden, da sonst der 1MHz Timer nicht funktioniert.

    Code
    sudo ./gpio_read


    [hr]
    Und zu guter letzt: Die verwendetet library gibt es hier:
    http://www.airspayce.com/mikem/bcm2835/
    Automatisch zusammengefügt:
    [hr]
    Hier kommt ein tarball mit dem code. Sendet mir gerne die Ausgaben bei Euren Funksensoren...

    Files

    • usniffer.tar.gz

      (1.97 kB, downloaded 612 times, last: )

    Edited once, last by wend ().


  • Fuer den es interessiert: Ich habe nun meine beiden Funksensoren dekodiert und das ganze läuft. Die Daten werden nun in eine Datei geschrieben.


    Besteht die Möglichkeit von dir den Quellcod für die Funktionierenden Sensoren zu bekommen?
    Welchen Typ von Funksensor hat du zum laufen bekommen?


    DANKE

  • Ich haenge ein Update des Quelltextes mal an.
    Die eine Wetterstation war von TCM, AUs dem Jahr 2006 oder 2007, die andere ein Noname Produkt, auch schon ca 8 Jahre alt.


    Ich fürchte, dass man bei allen anderen Sendern die Bits und die dekodierunge erraten muss.

  • Servus,


    ... Ich habe nun meine beiden Funksensoren dekodiert und das ganze läuft. ...


    Wow ... gratuliere :thumbs1:



    ... Ich fürchte, dass man bei allen anderen Sendern die Bits und die dekodierunge erraten muss.


    schon, gell?
    Aber immerhin ...


    Schönes (Rest-)Wochenende noch,
    -ds-


  • Ich haenge ein Update des Quelltextes mal an.
    Die eine Wetterstation war von TCM, AUs dem Jahr 2006 oder 2007, die andere ein Noname Produkt, auch schon ca 8 Jahre alt.


    Ich fürchte, dass man bei allen anderen Sendern die Bits und die dekodierunge erraten muss.


    DANKE


    nun konnte ich wenigstens einen meiner Fühler auswerten, nun fehlen noch 8 anderre mal sehen ob ich weiter komme

  • Wie bereits erwähnt bei den aktuellen Geräten hast du immer mehr mit Rolling Codes zu tun da kann man nix mehr "einfach so" herausfinden.
    Maximal wenn man die Hardware die dahinter steht selber hackt was oft sehr aufwendig ist.

  • Hallo Leute,
    kann jemand mal für absolute Neulinge beschreiben wie ich den Universalsniffer installieren und nutzen kann?


    Wäre echt cool.


    Danke

  • Die drei Quelldateien müssen compiliert werden, so wie oben beschrieben. Dort ist auch ein Makefile, damit geht es kinderleicht:

    Code
    make


    Installieren ist nicht nötig. Das Programm wird dann einfach dort aufgerufen, wo es entstanden ist, also

    Code
    sudo ./gpio_read


    Das steht aber eigentlich oben schon. Wo sind denn genau Deine Probleme?

    Edited once, last by wend ().

  • Hi,
    vielen Dank für die schnelle Antwort.


    Also ich habe bereits die 433Utils genutzt welche in vielen Tutorials beschrieben werden damit konnte ich hier z.B. eine 433 Mhz Fernbedienung problemlos auslesen, jedoch konnte ich damit nicht die Signale meines 433 Mhz Rauchmelders empfangen.


    Wenn ich nun den Universal Sniffer starte bekomme ich folgende Ausgabe, jedoch werden keinerlei Werte angezeigt wenn ich Fernbedienung oder Melder bediene.


    Code
    sudo ./gpio_read
    12345678901234567890123456789012
  • Nun ja, da wird offenbar nix empfangen. Ist denn der Empfaenger am richtigen GPIO angeschlossen? Welchen Empfaenger nimmst u denn? Wie ist er beschaltet, hat er eine Antenne?