Home > Tutorials > Hausautomatisierung mit FHEM Teil 1 – CUL Stick Selbstbau – 868MHz CUL am Raspberry Pi

Hausautomatisierung mit FHEM Teil 1 – CUL Stick Selbstbau – 868MHz CUL am Raspberry Pi

Wie versprochen widme ich mich diesen Monat verstärkt dem Thema Hausautomatisierung mit CUL und der Software FHEM, geplant habe ich ein mehrteiliges Tutorial zum Thema. In diesem Artikel schaffe ich die Grundlage zum Betrieb eines Hausautomatisierung-Systems auf Basis des Raspberry Pi, ich baue mir einen eigenen CUL.

Der CUL dient zum Senden und Empfangen von Funknachrichten auf 433 bzw. 868MHz und somit zum steuern von etlichen verfügbaren Geräten, auf 433MHz wird das Protokoll Intertechno unterstützt, auf 868MHz kann das Protokoll Homematic und FS20 gesprochen werden. Ich verwende, da ich in vergangenheit schon viele andere Artikel zu 433MHz Steuerung mit dem Pi geschrieben habe, in diesem Artikel die Variante mit 868MHz.

Wer nicht gerne bastelt und lötet kann den CC1101-USB-Lite 868MHz CUL Stick von Busware auch fertig kaufen, ist mit Gehäuse und Antenne aber schnell 80-90€ los. Da mir das zu teuer war und ich gerne bastle habe ich mir einen eigenen CUL Stick auf Basis eines Arduino Nano und eines CC1101 RF1101SE 868MHz Funkmoduls gebaut.

Benötigte Komponenten

Neben Lötequipment, dem Raspberry Pi mit Standard Zubehör,auf welchem wir später den FHEM Server laufen lassen und den CUL Stick anschließen bzw. Programmieren, wird zum Bau eines folgendes benötigt:

Das macht für das Material ohne Versandkosten ungefähr 30€, ich habe mir die Sachen zum Großteil beim Elektrofachhändler um die Ecke besorgt um Versand zu sparen.

Der Zusammenbau des CUL

Kontrolliert bevor ihr beginnt bitte ob bei eurem Arduino und Funkmodul die Pinbelegung mit meiner übereinstimmt, falls nicht müsst ihr entsprechende Anpassungen vornehmen. Der Aufbau ist recht einfach.

Arduino Nano Funkmodul
Pin 17 – VCC 3,3V Pin 1 – VDD
Pin 14 – D11 Pin 3 – SI (MOSI)
Pin 16 – D13 Pin 4 – SCK
Pin 15 – D12 Pin 5 – SO (MISO)
Pin 5 – D02 Pin 6 – GDO2
Pin 13 –  D10 Pin 7 – CSn (SS)
Pin  6 – D03 Pin 8 – GDO0
Pin 4 – GND Pin 9 GND
nicht belegt PIN 2 & 10

Im linken Bild findet Ihr die PINs des Arduino, im Rechten Bild die PINs meines Funkmoduls

arduino nano pins Selbstbau CUL rf1101se Pinbelegung

Das ursprüngliche Layout aus dem FEHM WiKi habe ich mit der Fritzing Software auf eine Lochstreifenplatine übertragen (CUL-Sebstbau Fritzing Datei), das Layout ist hinsichtlich der Größe bestimmt nicht optimal, ich verwende aber am liebsten Lochstreifen. Wichtig! Die schwarzen Kreuze markieren die Stellen an welchen der Streifen (Leiterbahn) der Platine durch einen Schnitt / Cut unterbrochen werden muss. Als Unterschied zum FEHM Layout habe ich die Spannungsteiler mit 4,7k / 10k Widerständen eingebaut da die Eingänge des Funkmoduls nur 3,3V vertragen.

Update: Im nachhinein habe ich bemerkt das ich die Buchsenleiste für das Modul eine Reihe weiter weg (links) vom Nano hätte platzieren müssen, die beiden liegen übereinander. Korrigiert das am besten bei euch!

Fritzing-Plan

Widerstände auflötenDie Buchsenleisten für den Nano und das Funkmodul auf die Platine löten, die Cuts / Schnitte bei der 2×5 Buchsenleiste für das Funkmodul am Besten vor dem Löten machen!Vorgegangen bin ich wie folgt:

  1. Die weiteren Schnitte / Cuts wie eingezeichnet machen (mit einem Cutter oder Skalpell zwei Schnitte machen und dann das Kupfer dazwischen rauskratzen / raus schneiden)
  2. Verkabelung mit Klingeldraht
  3. LED als letztes auflöten, ich habe anstelle die LED direkt aufzulöten den Rest meiner Buchsenleiste verwendet (das lange Bein ist Plus und liegt am Widerstand an)
  4. Platine zuschneiden

Das Ergebnis sieht ohne Zuschnitt der Platine bei mir so aus. Update: Nachträglich habe ich einen Fehler bemerkt und behoben, die Bilder sind aktualisiert (haben etwas mehr durchtrennte Leiterbahnen als im Fritzing, daher nicht wundern). Als weitere Variante habe ich einen CUL aus zwei Platinen gebaut falls mal das Modul anders verwendet werden soll oder man im Gehäuse Flexibel sein möchte (Bild 3).

 CUL Selbstbau  CUL Selbstbau Rückseite  CUL-Selbstbau-Variante2

Die CUL Firmware aufspielen

Nachdem ihr euer CUL fertig gelötet habt könnt ihr die notwendige Firmware auf den Nano aufspielen, auf dem Arduino werkelt übrigens ein ATmega328 Micro Controller mit 16 MHz, dieser übernimmt für uns die Kommunikation mit dem Funkmodul (SPI) und dem Raspberry Pi (Serial over USB). Die Firmware ist als Open Source Projekt unter GPL veröffentlicht und unterstützt eine ganze Reihe an Protokollen und Geräten, das interessanteste für mich ist eine HomeMatic Unterstützung.

Voraussetzungen

  • Raspberry Pi mit dem üblichen Zubehör und installiertem Raspbian Betriebssystem (zum Einsteiger Guide)
  • Zum flashen der Firmware solltet ihr den Arduino am Besten von der Platine nehmen.

Meldet euch via SSH auf eurem Raspberry Pi an, als erstes installieren wir dann die notwendige Software

Dann laden wir uns den Code der Firmware über den subversion client aus dem Sourceforge Repository

Da ich ein 868MHz Modul verwende muss ich, bevor die Firmware Compilliert und auf den Nano aufgespielt wird, noch eine Konfiguration editieren

Die Zeile “#define HAS_CC1100_433” muss durch anfügen von /* am anfang und */ am Ende der Zeile auskommentiert werden, danach sieht die Datei so aus.

board-h-configuration

Speichert die Änderung mit STRG+X, Y und ENTER.

Jetzt kompilieren wir die Firmware, wer einen Raspberry Pi 2 hat kann den Vorgang durch anhängen des Parameters “-j 4” deutlich beschleunigen. Bei älteren Modellen lasst den Parameter einfach weg.

Der Kompiler hat nun die Firmware als Datei ausgespuckt “nanoCUL.hex”, diese wollen wir nun auf unseren Nano schreiben. Verbindet euren Nano via USB Kabel mit dem Raspberry Pi. Prüft ob der Nano korrekt verbunden ist:

Bei mir wird der USB-Serial Chip (FTDI) des Nano direkt erkannt

arduino-nano-am-raspberry-pi

Da der Nano korrekt verbunden ist schreiben wir die Firmware mit folgendem Befehl

Das flash Programm “avrdude” meldet nach erfolgreichem Abschluss “avrdude done.  Thank you.”

Inbetriebnahme des CUL am Raspberry Pi

Vorbereitung

Nach dem Flashen und dem Aufstecken der Module auf das Board sollte die LED ungefähr einmal pro Sekunde blinken die PWR LED des Nano sollte dauerhaft an sein, falls nicht stimmt die Taktfrequent nicht oder in der Schaltung liegt ein Fehler vor.

CUL-Platine-mit-Arduino-und-Funkmodul-am-raspberry-pi

Die Kommunikation zwischen Pi und Board über USB Serial müssen wir noch testen, das erledigen wird über das Terminal Programm Minicom.

Wir müssen herausfinden welchen tty Port die USB Serial Verbindung bekommen hat, Steckt hierzu den USB ab wartet kurz und steckt ihn wieder an, danach suchen wir nach dem zugewiesenen Port.

Bei mir wird folgendes ausgegeben, ich verwende daher ttyUSB0

Die Kommunikation mit dem Board findet mit 38400 Baud und der Serial Konfiguration 8N1 statt (8 Daten Bits, N Parity Bit und 1 Stop Bit). Die Minicom füttern wir daher mit den passenden Parametern

Navigiert mit den Pfeiltasten zu “Serial Port Setup” und macht folgende Einstellungen, speichert danach mit “Save setup as dfl“. /dev/ttyUSB0 müsst ihr natürlich entsprechend mit eurem Port ersetzen.

minicom-settings-cul

Beendet wird minicom übrigens mit CTRL+A und dann X. Wenn wir nun minicom starten und ein V (es muss ein großes V, also Shift+V) senden erhalten wir die Firmware Version zurückgeliefert und die Kommunikation funktioniert.

Dann Senden wir SHIFT+V und ENTER und erhalten eine Antwort

minicom-mit-cul-testen

Somit haben wir einen Funktionsfähigen selbstgebauten CUL mit 868MHz welchen wir über unseren Raspberry Pi ansteuern und auslesen können.

Wer das Problem hat das der Clone Nano nach einem Reboot des Raspberry Pi nicht erkannt wird hat einen mit fehlerhafter Hardware erwischt, Abhilfe gibt es im Betirag “Reboot Problem beheben“.

Weitere Tutorials aus dieser Serie

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (1 votes, durchschnittlich: 5,00 von 5)
Loading...

Über raspberry.tips

19 Kommentare

  1. Hi, gute Anleitung, leider habe ich beim flashen ein Problem. Ich bekomme folgende Meldung:
    #@if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi
    #@if test ! -d /sys/class/gpio/gpio18; then echo 18 > /sys/class/gpio/export; fi
    #echo out > /sys/class/gpio/gpio17/direction
    #echo out > /sys/class/gpio/gpio18/direction
    #echo 0 > /sys/class/gpio/gpio17/value
    #echo 0 > /sys/class/gpio/gpio18/value
    #sleep 1
    #echo 1 > /sys/class/gpio/gpio17/value
    #sleep 1
    #echo 1 > /sys/class/gpio/gpio18/value
    avrdude -D -p atmega328p -P /dev/ttyUSB0 -b 57600 -c arduino -U flash:w:nanoC UL.hex

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.01s

    avrdude: Device signature = 0x1e950f
    avrdude: reading input file “nanoCUL.hex”
    avrdude: input file nanoCUL.hex auto detected as Intel Hex
    avrdude: writing flash (22034 bytes):

    Writing | ###### | 12% 0.86savrdude: stk500_recv(): programmer is not responding
    make: *** [program] Fehler 1

    Was kann ich da machen? Ich habe am Windows PC mit Arduino Software kein Problem ein Beispiel scretch zu schreiben.

    Danke für Dein Feedback

    • Hast du auf FT232RL geachtet?

      “Beim Arduino Nano sollte man darauf achten das er FTDI Chip (FT232RL) und nicht ein CH340G Chip hat. Grund dafür ist der CH340G kann nur unter Windows 7/8 geflascht werden. Dann kann er einmal in ein Linuxsystem eingebunden werden (keine eindeutige ID). Wer also mehr als einen Cul / JeeLink Ersatz nutzen möchte sollte darauf achten das er ein FTDI Chip nutzt.”
      Quelle: http://blog.gummibaer-tech.de/cul-stick-868433-im-selbstbau/

  2. Das Tutorial gefällt mir gut.
    – Hinweise zum Kauf :-)
    – Hinweis (oft vergessen) Funkmodul verrägt 3,3 Volt nur am Eingang (Spannungsteiler nötig).
    Vielleicht wären die drei Spannungsteiler schon in der “Schemaplatine” gut.

    Wir hatten früher für die Lochrasterplatine kleine Handbohrer und die Bahn zu trennen. Ein Bohrer ca. 3mm tut es auch.
    Mit den Cutter schneidet man sich so leicht.

  3. Hallo, ich bin heute zum ersten mal auf dieser Website und bin einfach nur begeistert. Über die Suche nach OpenElec bin ich hier gelandet, fand aber auch die Ausautomation sehr interessant.
    Meine Frage, ich bin leider im Programmieren nicht fit, kann man nicht z.B. eine Wetterstation von Pollin zur Auswertung von Wetterdaten über die USB Schnittstelle heranziehen. http://www.pollin.de/shop/dt/MjM0OTYxOTk-/Haustechnik/Wetterstationen_Thermometer/Funk_Wetterstation_TFA_NEXUS.html. Dann hätte man alles für z.B. Markisen Steuerung und vielleicht schon für eine Solarsteuerung, da die Außentemperatur ja auch vorliegt.
    Ich selbst suche zusätzlich auch nach einer guten Heizungssteuerung, ist soetwas geplant?
    Ich kenne eine Steuerung auf Atmega Basis, Micro SPS, die mit variablen Elementen vom Schaltplanprogramm Eagle arbeitet.
    Da hätte ich vielleicht auch das eine oder andere zu bieten, was man in Projekte einfließen lassen könnte.

  4. Hi!

    was ich nicht ganz versteh, der arduino nano hat doch sowieso einen ausgang von 3,3V?

    Pin 17 – VCC 3,3V

    warum nicht da das modul anschließen oder verstehe ich da etwas falsch?

    lg

    • Ist im Schaltplan anscheinend schon korrigiert. Bitte achtet auf den 10K Widerstand, ist im Schaltplan falsch, gelötet auf der Platine richtig. Gehört zwischen Pin7 und Pin1 (=Pin2) des 2×5 nicht zwischen Pin7 und Pin9.

  5. Danke für das starke Tutorial! Habs erst nach anderen Beschreibungen probiert und bin fast verzweifelt – bin auf diesem Gebiet ein Anfänger und da sind ständige Mißerfolge demotivierend – hier klappte alles sofort!
    Hab die Seite abgespeichert.

    Beste Grüße und ein schönes Weihnachtsfest von Andreas

  6. Hallo – erstmal danke für die Super Anleitung. Mein CUL funktioniert soweit sehr gut – habe das ganze mit einem HM-CC-RT-DN probiert und war vom Ergnis begeistert.

    Jetzt zum Problem:
    Hab mir noch weitere Thermostate zugelegt ( selber Typ) bekomme keinen einzigen davon angelernt. Wo liegt mein Fehler? Muss ich das Erste Thermostat erst umbenenne oder sowas? Ich verzweifel solangsam :(

    Hoffe auf Hilfe

    Grüße
    WhiteExe

  7. Hallo an alle,
    toller Beitrag!
    Habe 2 Nano V3 mit FTDI chipsatz, die mit einigen Testskripten mit der Arduino IDE gut laufen.
    nanoCUL konnte ich auch gemäss Anleitung erfolgreich flashen ohne Fehlermeldung. Leider läuft die FW im Anschluss
    dann nicht. Die rote LED blinkt sehr schnell und nach einem Ab-und-An-Stecken (USB) dann gar nicht mehr.
    Per Terminal kann ich mich nicht verbinden, weder mit Minicom, noch mit Screen (Status: Disconnected), obwohl der Port stimmen müsste.
    dmesg | grep tty liefert dann:
    tim@fractal:~$ dmesg | grep tty
    [ 0.000000] console [tty0] enabled
    [489962.973195] usb 1-9: FTDI USB Serial Device converter now attached to ttyUSB0
    [490319.256375] ftdi_sio ttyUSB0: failed to get modem status: -19
    [490319.256468] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
    [490326.790064] usb 1-9: FTDI USB Serial Device converter now attached to ttyUSB0
    [490579.025197] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
    [490594.524172] usb 1-9: FTDI USB Serial Device converter now attached to ttyUSB0
    [491029.632903] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
    [491034.708272] usb 1-9: FTDI USB Serial Device converter now attached to ttyUSB0
    [491456.491775] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
    [492499.189808] usb 1-9: FTDI USB Serial Device converter now attached to ttyUSB0

    Dachte erst, ich habe das Funkmodul (RF1100SE 433) falsch verddrahtet, aber wenn ich nur den Nano ohne jegliche
    Anschlüsse nehme und flashe, habe ich den selben Befund.

    Habe auch mal #define HAS_16MHZ_CLOCK in der board.h auskommentiert, half aber auch nichts.

    An welchen settings oder sonstigem könnte es noch liegen?

    Vielen Dank im Voraus,
    Beppo

  8. PS: mit meinem Busware CUL 868 kann ich problemlos eine Terminal Session aufbauen, das klappt wunderbar

    • PSPS: wenn ich im Terminal was eingebe, leuchtet nun die rote RX-LED – er empfängt also was, kriege aber keine Antwort (z.b. auf V). muss also an der FW selbst was faul sein.
      Grüsse, Beppo

      • Hey,

        ich habe ähnliches Problem, CUL wird erkannt und intitialisiert, Version und CCCONF Abfrage funktioniert auch, BIS ich den rfmode auf HM ändere, danach auch nur noch wildes blinken und keine Antwort mehr.

        Hast Du das Problem irgendwie in den Griff bekommen?

        VG

  9. Hallo,

    habe Deine Anleitung Schritt für Schritt befolgt. Flashen hat funktioniert. Leider bekomme ich jedoch keine Verbindung zum CUL mit minicom.

    Und in fhem wird auch nichts angezeigt. Wo könnte der Fehler liegen?

    VG
    Timo

  10. Falls noch jemand Probleme beim Flashen hat, folgendes hilft:

    Wenn das Arduino per USB nicht erkannt wird (lsusb), dann Pin 25 und 26 am FT232RL zusammenlöten, das ist auf der rechten Seite der 3te und 4te Pin von Oben.

    Wenn das Flashen am Raspi ständig sporadisch mit Error-Meldung abbricht, liegt das möglicherweise daran, dass das bereits installierte LxCCU oder das RF-Modul von ELV (HM-MOD-RPI-PCB) die Störung verursacht. Am besten ein blankes Rasbian ohne das aufgesteckte RF-Modul zum flashen verwenden.

  11. Falls jemand wie ich stundenlang damit verbringt, die Version erfolglos via “minicom” auszulesen: Die Hardware Flow Control muss auf “Nein” umgestellt werden. In der ansonsten genialen und einfachen Anleitung ist die Hardware Flow Control noch auf Yes.

    Vielen dank für die Mühe, wirklich gute Arbeit!

    • Klasse Anleitung. Bitte noch wie von Nick angemerkt die “FLOW Controll” im Bilder ändern. Auch ich bin fast verzweifelt warum es nicht geht die Version auszulesen. Danke Nick für den Hinweis.

  12. Moin,

    Danke für die Klasse Anleitung! Mein Selbstbau-CUL ist fertig und funktioniert, ohne dass ich über großartige Elektronik-Kentnisse verfüge. Allerdings ist für mein FHEM-Raspi nur Platz auf dem Dachboden, und das Signal im Erdgeschoss (2 Betondecken dazwischen) ist leider zu schwach… Sendestärke zu erhöhen funktioniert offenbar im HM-Modus nicht, und eine andere Antenne zu nehmen ist mangels SMA-Buchse auf dem “echten” 868 MHZ Modul leider nicht möglich. Hast Du spontan irgendeine Idee, wie ich das Signal doch noch verstärkt kriege?

  13. Ich habe da nochmal eine Frage, du hast drei unterschiedliche Aufbauten. Die oben beschriebene, dann ein Update und es gibt das Fritzing.zip. Welche ist den nun die Richtige ? Im .zip sind weitere Wiederstände “verbaut” ? Welche Bauanleitung nehme ich den wenn die China Ware da ist ?

  14. Hallo, habe mir einen bereits fertigen selbstmau Cut nano gekauft. Nun wollte ich die Firmware nach der Anleitung erneuern.

    pi@raspberrypi:~/culfw-code/culfw/Devices/nanoCUL $ make program
    #@if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi
    #@if test ! -d /sys/class/gpio/gpio18; then echo 18 > /sys/class/gpio/export; fi
    #echo out > /sys/class/gpio/gpio17/direction
    #echo out > /sys/class/gpio/gpio18/direction
    #echo 0 > /sys/class/gpio/gpio17/value
    #echo 0 > /sys/class/gpio/gpio18/value
    #sleep 1
    #echo 1 > /sys/class/gpio/gpio17/value
    #sleep 1
    #echo 1 > /sys/class/gpio/gpio18/value
    avrdude -D -p atmega328p -P /dev/ttyUSB0 -b 57600 -c arduino -U flash:w:nanoCUL.hex
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

    avrdude done. Thank you.

    makefile:217: recipe for target ‘program’ failed
    make: *** [program] Error 1

    Wie kann ich an dem Cut sehen was installiert ist bzw. wie kann ich die Firmware neu aufspielen.

    Mit freundlichen Grüßen

Schreibe einen Kommentar

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