Ein Funkmodul für den Raspberry: RaspyRFM

Mit dieser Low-Cost-Funk-Erweiterung „RaspyRFM-II“ für den Raspberry PI ist es möglich die Telegramme von vielen verschiedenen funkunterstützten Geräten (Funkthermometer, Energiekostenmessgerät, Handsender, Funksteckdosen) zu empfangen und zu senden. Das Aufsteckmodul besteht aus einem RFM69CW Funkmodul, welches direkt mit der SPI Schnittstelle des Raspberry PI verbunden ist. Mit einem Python-Modul kann man das Funkmodul sehr einfach in eigenen Projekten angesprochen werden, um die Daten z.B. an Smartmetering- (Volkszaehler.org oder openenergiemonitor.org) oder Hausbussysteme (FHEM) übergeben zu können.

Beispiele für funkunterstützte Geräte

  • Funksteckdosen (z.B. FS20, Intertechno, Brennenstuhl, Logilight, emylo, Hama, uvm.)
  • Funkthermometer (z.B. TX29-IT, TX35-IT, TX62-IT)
  • Funkenergiekostenmessgeräte (z.B. EMT7110, Voltcraft EC3000)
  • MAX! Heizungsthermostate
  • uvw.

Eigenschaften

  • Frequenzbereich 434 MHz oder 868 MHz
  • Modulationsarten OOK und FSK
  • SPI Schnittstelle, programmierbar in C, C++, Python…
  • Sendeleistung 13 dBm max.
  • SMA Antennenbuchse
  • Pythonmodul mit Programmierbeispielen mitgeliefert

Neu: Doppelmodul

Nun ist auch ein Doppelmodul verfügbar, welches jeweils ein Modul für 434 MHz und 868 MHz enthält. Damit kann über die beiden SPI Kanäle des Raspberry PIs auf zwei unterschiedlichen Frequenzbändern gearbeitet werden. Auf Anfrage kann das Modul auch mit zwei 868 MHz Modulen bestückt werden, etwa um TX29 und TX35 Module gleichzeitig empfangen zu können.

RaspyRFM Doppelmodul

Installation

sudo apt-get install git-core python-dev python-pip
git clone https://github.com/Phunkafizer/RaspyRFM.git
cd RaspyRFM
sudo pip install -e .

Dann noch mit

sudo raspi-config

die SPI Schnittstelle aktivieren und den Raspberry PI neu starten.

Anschlussbelegung

Das RaspyRFM wird auf den Raspberry PI von Pin 17 – 26 gesteckt.

Raspberry    -> RaspyRFM
------------------------
17           -> 3,3 V
18 (GPIO 24) -> DIO1 bei Einzelmodul, DIO0 von Modul #2 bei Doppelmodul
19 (MOSI)    -> MOSI
20           -> GND
21 (MISO)    -> MISO
22 (GPIO 25) -> DIO0
23 (SCK)     -> SCK
24 (CE0)     -> NSS Modul #1
25           -> GND
26 (CE1)     -> DIO2 bei Einzelmodul, NSS von Modul #2 bei Doppelmodul

Software

Neben dem oben erwähntem Pythonmodul für das RaspyRFM enthält das Repository einige Anwendungen:

LaCrosse Funktemperatursensoren empfangen

Für die LaCross-Sensoren (TX29, TX35, etc.) gibt es eine Dekoderklasse welche die Daten aus dem Funktelegram gewinnt. Zu Funkthermometern mit dem RaspyRFM gibt es einen eigenen Artikel. Im Softwarepaket ist außerdem eine Anwendung enthalten mit der die empfangenen Messwerte in einem Webinterface dargestellt werden können. Dies ist in diesem Artikel genauer erklärt.

apps/lacrosse.py
Found RaspyRFM twin
RFM69 found on CS 1
Init complete.
{'batlo': False, 'timestamp': '2021-01-11T23:28:34', 'AFC': 0, 'init': False, 'T': (-17.0, 'C'), 'RSSI': -108, 'RH': (78, '%'), 'ID': 'b0'}
{'batlo': False, 'timestamp': '2021-01-11T23:28:34', 'AFC': 0, 'init': False, 'T': (19.4, 'C'), 'RSSI': -107, 'RH': (46, '%'), 'ID': 'c0'}
{'batlo': False, 'timestamp': '2021-01-11T23:28:34', 'AFC': 0, 'init': False, 'T': (15.1, 'C'), 'RSSI': -87, 'RH': (31, '%'), 'ID': 'f8'}
{'batlo': False, 'timestamp': '2021-01-11T23:28:35', 'AFC': 0, 'init': False, 'T': (19.0, 'C'), 'RSSI': -103, 'RH': (47, '%'), 'ID': '88'}
{'batlo': False, 'timestamp': '2021-01-11T23:28:36', 'AFC': 0, 'init': False, 'T': (-0.8, 'C'), 'RSSI': -104, 'RH': (77, '%'), 'ID': '64'}
{'batlo': False, 'timestamp': '2021-01-11T23:28:36', 'AFC': 0, 'init': False, 'T': (19.1, 'C'), 'RSSI': -98, 'RH': (53, '%'), 'ID': '54'}
{'batlo': False, 'timestamp': '2021-01-11T23:28:37', 'AFC': 0, 'init': False, 'T': (19.2, 'C'), 'RSSI': -104, 'RH': (47, '%'), 'ID': '24'}

Funksteckdosen steuern & empfangen

Zum Thema Funksteckdosen mit dem RaspyRFM gibt es einen eigenen Artikel. Mit der Anwendung rcpulse können 433 MHz Funksteckdosen gesteuert und Fernbedienungen empfangen werden.

Wetterstation Davis Vantage Vue

Bei Wetter Scharnhausen gibt es ein interessantes Projekt bei dem die Daten der Wetterstation Davis Vantage Vue empfangen werden, und so Temperatur, Windrichtung- und geschwindigkeit, Feuchtigkeit und Regen misst. Im Quellcode von Wetter Scharnhausen muss nur der IRQ Pin von 16 auf 22 geändert werden.

Artikel zum RaspyRFM Funkmodul:

Modul im Shop

RaspyRFM

46 Gedanken zu „Ein Funkmodul für den Raspberry: RaspyRFM“

  1. Guten Tag Herr Seegel,
    offenbar ist auf dem RaspyRFM-II nicht die high power Variante des RFM69 installiert, so dass „nur“ eine Sendeleistung von +13dBm erreicht werden kann.
    Gibt es denn auch Pläne, das RFM69HW zu verbauen? Ist das RFM69HW pinkompatibel zu dem verbauten RFM69?

    Vielen Dank!

    mfg
    D. Fries

  2. Tatsächlich ist eine Art Scanner als Softwarebeispiel dabei. Dabei werden OOK Impulse empfangen und mit einigen verbreiteten Protokollen abgeglichen und ggf. dekodiert. Da es zahlreiche Protokolle gibt kann ich nicht sagen ob das mit den Velux-Rollläden klappt.

    • Hallo Herr Seegel,

      ich habe Ihr Funkdoppelmodul RaspyRFM-II (Bestellnummer #7575 vom 16. Januar 2021) gekauft. Meine ersten Schritte habe ich mit der Variante 433 MHz gestartet. Parallel zu Ihrem Modul habe ich mit dem Microcontroller BQZLR (https://www.amazon.de/433Mhz-Wireless-Transmitter-Receiver-Module/dp/B00EQ1U5XQ?ref_=ast_sto_dp) gesnifft. Die Ergebnisse sind leider nicht vergleichbar :
      Ihr Funkmodul liefert:
      rx: {‚protocol‘: ‚tristate‘, ‚class‘: ’switch‘, ‚params‘: {‚code‘: ‚0FFF0FFFFFFF‘}}
      rx: {‚protocol‘: ‚logilight‘, ‚class‘: ’switch‘, ‚params‘: {‚id‘: 86357, ‚unit‘: 3, ‚command‘: ‚off‘}}
      rx: {‚protocol‘: ‚pcpir‘, ‚class‘: ’switch‘, ‚params‘: {‚id‘: 31, ‚unit‘: 14, ‚command‘: ‚on‘}}

      Ergebnis des alternativen Microcontroller ist:
      [DECcode: 1381717, BINcode: 000101010001010101010101]
      Adr./ Id/ Code (oder wie auch immer es zu nennen ist): 000101010001
      Steckdose (A bis D), in diesem Fall: 01010101
      On/Off: 0101
      Ich hätte folgende Fragen oder besser gesagt bitte ich um Hilfe bei volgenden Fragen:
      1: könnten Sie mir die Ergebnisse erklären? Ich fürchte nämlich, dass eine „Übersetzung“ nicht direkt möglich ist.

      2: in Ihrer Anleitung, bzw. in apps/rcprotocols.py verwenden Sie diverse Parameter (s. unten) können Sie mir diese kurz erklären, bzw. Hinweise geben, wo ich weitere Infos finde?
      PARAM_ID = (‚i‘, ‚id‘)
      PARAM_HOUSE = (‚o‘, ‚house‘)
      PARAM_GROUP = (‚g‘, ‚group‘)
      PARAM_UNIT = (‚u‘, ‚unit‘)
      PARAM_COMMAND = (‚a‘, ‚command‘)
      PARAM_CODE = (‚c‘, ‚code‘)
      PARAM_DIPS = (‚d‘, ‚dips‘)

      3: kann man Ihr Doppelmodul parallel betreiben? Wozu dient die Angabe der ModulNr. (Parameter „–module“)? Für dual RaspyRFM soll 1-2 eigegeben werden.

      Ich danke Ihnen für jegliche Hilfe im Voraus.

      Ota Vales
      ota@vales.one

      • Hallo Herr Vales, vielen Dank für Ihre Nachricht.

        Zu 1: Es gibt zahlreiche Verfahren wie eine lose Reihe von Bits dargestellt werden kann, etwa dezimal, hexadezimal, Reihenfolge der Bitwertigkeit, uvm. Noch dazu geben in den meisten Fällen die Hersteller die genauen Protokolldefinitionen nicht heraus, so dass es deswegen keine einheitliche Darstellungsform geben kann.

        Zu 2: Die Parameter und welche davon verwendet werden hängen vom benutztem System ab. Beim Intertechno-32 Protokoll etwa gibt es nur ID (fest in der Fernbedienung kodiert), Unit (Kanal 1-3/4) und Command (on/off). Das Brennenstuhl RCS1000 verwendet einen DIP Schalter, dessen Stellung mit dem Parameter DIPS angegeben werden kann. Die alten Intertechno-Steckdosen haben jeweils ein Drehrad für Hauscode und Unit. In rcprotocols.py kann man bei den jeweiligen Gerätetypen nachsehen welche Parameter verwendet werden.

        Zu 3: Das Doppelmodul kann parallel betrieben werden. Der Parameter module gibt an welche Chipselect-Leitung verwendet wird. Bei einem einfachen Modul ist das immer -m 1. Wenn Sie etwa das lacrosse Script mit einem Doppelmodul verwenden wollen muss -m 2 angegeben werden damit der zweite Funkchip auf dem Modul angesprochen wird. Gleichzeitig können Sie z. B. rcpulse.py starten, welches durch -m 1 auf die 433 MHz „Hälfte“ des Doppelmoduls zugreift.

        Schöne Grüße
        S. Seegel

        • Hallo Herr Seegel,

          danke vielmals für Ihre Antwort. Ich habe aber immer noch Fragen.

          Ich fasse mich kurz. Ich habe versucht, ein weiteres Protokoll zu implementieren. Der Empfang funktioniert zu 100%, das Senden zu 00%.

          Frage 1:
          Gibt es bei spidev oder sonstwo eine wichtige Konfigurierung , die ich machen muss? (ich bin kein spi-Experte und habe daher auch Ihr Produkt gekauft)

          Frage 2:
          Wenn ich das Ergebnis der Pulstranformation (s. meine Analyse unten) als Bitstring über meinen Microcontroller BQZLR verschicke, funktioniert es.

          Was muss ich berücksichtigen, bzw. was habe ich falsch gemacht?

          Ergebnis meine Analyse/Hintergrundinformation:
          Im Dokument https://www.seegel-systeme.de/2015/09/05/funksteckdosen-mit-dem-raspberry-pi-steuern/ beschreiben Sie die Protokolle, bzw. die Transformation von Bit-Codes zu Pulsen. So z.B. bei Logilight Funksteckdosen:
          24 Bit Daten, jedes Bit besteht aus High-/Low-Bits der Länge 4, repräsemntiert durch „1“ bzw. „0“. D.h. z.B. Daten-Bit „1“ ([3, 1]) wird als eine Bitreihenfolge 1110 repräsettiert (mal Zeitkonstante ergibt die Pulse).
          Syncpuls = [1, 31] hiesse „ein High-Puls und 31 Low-Pulse“.
          Das ergibt: 1000 0000 0000 0000 0000 0000 0000 0000
          Das ergibt in Summe die Bit-Länge von 128, bzw. Länge der Variable self._ookdata (= bytearray()) von 16 Bytes (== 128 Bits)

          Danke Ota Vales

          • Hallo Herr Vales,

            1. Wenn grundsätzlich Daten mit dem RFM69 ausgetauscht werden können (Register schreiben und lesen) ist von der Seite alles in Ordnung.
            2. Am besten wäre es die Aussendungen, etwa mit einem einfachen SDR, zu vergleichen. Ich hatte einen Fall wo eine Funksteckdose recht wählerisch bei der verwendeten Zeitbasis war, aber das ist nur eine von vielen Möglichkeiten. Den Abstand zwischen den Framewiederholungen nehmen manche Geräte auch genauer als andere. Ihre Erläuterungen sind soweit korrekt.

            Schöne Grüße
            S. Seegel

        • Hallo Herr Seegel,

          danke für Ihre Antwort. Leider bin ich immer noch erfolglos.

          Ich habe es mit meinem anderen SDR bereits am Anfang verglichen. Es funktioniert bestens, Ihr System empfängt und erkennt die Befehle auch richtig. Genauso die Befehle der Fernbedienung.

          In der Zwischenzeit habe ich mir ein Osciloskop besorgt. Ich habe erwartet, daß ich auf dem Pin 19 (MOSI) das Ergebnis der Transformation als Pulse mit meinem Osciloskop anschauen kann. Stattdessen sehe ich einen nicht näher identifizierbaren Muster von High/Low-Pulses. Egal, ob ich etwas sende oder nicht?!?
          Ich hätte folgende Fragen:
          1. Was sieht man auf den Pins MOSI bzw. MISO?
          2. Kann ich irgendwo das Endergebnis der Transformation als ein moduliertes OOK-Signal sehen?
          3. Kann sein, dass die HW kaputt ist?

          Was soll ich tun? Was würden Sie mir raten?
          Danke Ota Vales

          • Hallo Herr Vales,

            das Funkmodul kommuniziert mit dem Raspberry PI über eine SPI Schnittstelle, über welche die zeitdiskret abgetasteten Daten aus einem Zwischenspeicher (FIFO) im Funkmodul ausgelesen werden. Das nicht dekodierte OOK Signal wird nicht an den Raspberry geschickt wie bei einfachen 433 MHz Funkmodulen.

            Schöne Grüße
            S. Seegel

  3. Hallo,

    Die App PowerSwitch auf Android hat die Möglichkeit RaspyRFM als Gateway einzustellen. Meine Frage, muss ich zum Ansteuern Nach Installation auf dem Rasberry noch zusätzlich irgendwas Programmieren? Denn Die Kodierung für die Steckdosen (z.B. Brennstuhl) Stelle ich ja in der App ein. Muss ich die zusätzlich noch im Raspberry einstellen?

    • Hallo,

      auf dem Raspberry muss nur das connair Skript laufen, welches beim RaspyRFM dabei ist. Weitere Einstellungen zu den Steckdosen ist auf dem Raspberry nicht nötig, das wird alles In der PowerSwitch App gemacht.

  4. Hallo,

    als Neuling auf diesem Gebiet bitte ich um die Beantwortung der folgende Frage:

    Sie bieten das Modul mit 434 MHz an. Ist es trotzdem möglich, problemlos mit Sendern, die 433 Mhz verwenden, zu kommunizieren oder muss hier noch zusätzlich etwas eingestellt werden ?

    Beste Grüße
    Christoph Held

    • Hallo Herr Held,

      es gibt eine Unzahl an verschiedenen Sendern, die sich durch Modulation, Baudrate, Frequenzhub, Protokoll u.a. unterscheiden, so dass die Frage pauschal nicht beantwortet werden kann. Sie können mit Kenntnis dieser Parameter selber die Ansteuerung für das RFM69 programmieren. Die Frequenz 433 MHz ist an sich kein Problem.

      Schöne Grüße
      S. Seegel

  5. Hallo,

    Kann ich das 868 Modul genau wie einen CUL-Stick der Firma Busware an meinem RPI betreiben um es für FHEM zu nutzen?
    Ich habe bereits eine 433 CUL mit Intertechno Schaltern im Einsatz und möchte nun zusätzlich Homematic Kompeneten verwenden.

    • Hallo Axel,

      hardwareseitig würde das gehen, es gibt aber noch keine Softwareunterstützung dafür. Man bräuchte z.B. ein Pythonskript, welches mit einer Socket die CUL Kommandos für das RFM69 umsetzt. Vielleicht finden sich ja (bei FHEM) ein paar Mitstreiter die das zusammen umsetzten können.

      Grüße
      Stefan Seegel

  6. Hallo,

    zur Info:

    die Software scheint das spi-bcm2708 Modul zu benötigen, das oftmals nicht mehr automatisch geladen wird. (Bei normal aktiviertem SPI mittels dtparam=spi=on wird spi-bcm2835 geladen, das 2708 ist nicht ladbar.)

    Deshalb in die config.txt:
    dtoverlay=spi-bcm2708-overlay

    Falls man z.B. in openElec die libs verwenden möchte ohne lange zu compilen:

    GPIO:
    http://www.barryhubbard.com/raspberry-pi/howto-raspberry-pi-install-rpi-gpio-openelec-rev-a-b-b/
    SPI:
    https://github.com/TIGAL/BBB-mikroBUS-Cape/raw/master/Examples/py-spidev/build/lib.linux-armv7l-2.7/spidev.so

    Und beides in den python Scripts laden wie im GPIO Artikel beschrieben…

  7. Hallo, ist schon absehbar, wann es das RaspyRFM-II mit 868 MHz wieder geben wird? Im Shop ist es momentan als „nicht verfügbar“ gekennzeichnet. Würde gern eins bestellen!

    Vielen Dank und beste Grüße,

    Peter

    • Hallo,
      es wird eine Pythonbibliothek mitgeliefert um das RFM69 ansprechen zu können. Zusätzlich gibt es Beispielcode, um Funkthermometer zu empfangen und um Intertechno Funksteckdosen steuern zu können.
      Schöne Grüße
      S. Seegel

Schreibe einen Kommentar