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, …)
  • Funkthermometer (z.B. TX29-IT, TX35-IT, TX62-IT)
  • Funkenergiekostenmessgeräte (z.B. EMT7110)

Eigenschaften

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

Neu: Doppelmodul

In Kürze ist 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.

RaspyRFM Doppelmodul

Installation

Auf einer aktuellen Raspbian-Installation ist GPIO für Python bereits installiert. Weiterhin wird py-spidev benötigt:

sudo su
apt-get install git-core python-dev
apt-get install python-pip
pip install spidev

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.

17 -> 3,3 V
18 (GPIO 24) -> DIO0 Slave / DIO1 Master *1
19 (MOSI) -> MOSI
20 -> GND
21 (MISO) ->MISO
22 (GPIO 25) -> DIO0 Master
23 (SCK) -> SCK
24 (CE0) -> NSS Master
25 -> GND
26 (CE1) -> NSS Slave oder DIO2 *2

*1 DIO1 über Jumper SJ1
*2 DIO2 über Jumper SJ2

Software

Es gibt eine in Python geschriebene Klasse, mit der das Modul sehr einfach parametriert werden kann (Frequenz, Baudrate, Bandbreite, Frequenzhub, Modulationsart, …). Hier ist ein Initialisierungsbeispiel:

from rfm69 import Rfm69
import rfm69

rfm = Rfm69()

rfm.SetParams(
  Freq = 868.300, #MHz center frequency
  Datarate = 9.579, #kbit/s baudrate
  ModulationType = rfm69.FSK, #modulation
  SyncPattern = [0x2d, 0xd4], #syncword
  Bandwidth = 200, #kHz bandwidth
  LnaGain = 0x80,
  Preamble = 2 #Preamblelength in bytes
)

LaCrosse Funktemperatursensoren

Für die LaCross-Sensoren (TX29, TX35, etc.) gibt es außerdem eine Dekoderklasse welche die Daten aus dem Funktelegram gewinnt. Zu Funkthermometern gibt es einen eigenen Artikel. Der Code um alle in Reichweite befindlichen Sensoren anzuzeigen sieht so aus:

data[]

while 1:
  data = rfm.ReceivePacket(7)
  obj = rawsensor.CreateSensor(data)
  print(str(obj))

Funksteckdosen

Über Funksteckdosen mit dem RaspyRFM gibt es einen eigenen Artikel.

Modul im Shop

RaspyRFM

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

    • 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

  1. 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 Peter,

      eine neue Charge Leiterplatten ist schon, bestellt so dass es den RaspyRFM 868 in einigen Wochen wieder geben wird.

      Schöne Grüße
      Stefan Seegel

  2. Frage:
    Gibt es fuer das RaspyRFM-II Modul den Beispiel-Code auch in c (c++)
    MfG
    und den besten Wünschen fuer 2016
    L. Weiss

    • Hallo Jörg,

      Du kannst mir der mitgelieferten connair.py ein Brennenstuhl Brematic emulieren, damit funktioniert auch der Power-Switch.eu.

  3. 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…

  4. 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

  5. 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

  6. Hallo Herr Seegel,

    gibt es schon ein Beispiel wie damit Daten an das openenergiemonitor-Projekt (also an emoncms) übergeben werden können?

    Beste Grüße,
    Martin

Schreibe einen Kommentar