So richtig Spaß macht ein Smart-Home-System erst dann, wenn es mit anderen Komponenten kommunizieren kann.
Da viele Systeme zur Kommunikation Funkverbindungen nutzen ist es nur logisch FHEM so bald wie möglich ebenfalls Funk-fähig zu machen.
Die meisten Sensoren und Aktoren im Smart-Home Bereich setzen dabei neben W-Lan und Bluetooth auf Frequenzen im 433- oder 866-Mhz Bereich.
Die beiden letzten werden dabei auch gerne von diversen Funkwetterstationen, Rolladensteuerungen, Motorsteuerungen, etc genutzt.
Um FHEM nun Funk-fähig zu machen gibt es zwei Wege:
1. Ihr kauft euch einen fertigen USB zu Funk Adapter der zwar fertig aufgebaut aber auch teuer ist.
2. Ihr baut euch einen USB-zu-Funk-Adapter selber und spart dabei eine menge Geld.
Selber bauen ist in diesem Fall kein Problem, denn dazu gibt es wieder ein prächtiges Open-Source Projekt:
Den nanoCul.
Der nanoCul ist ein USB-zu-Funk-Adapter der aus einfachen Standardkomponenten selber zusammengelötet und programmiert werden kann. Wie der Zusammenbau funktioniert habe ich in diesem Artikel beschrieben.
Sicherheitshinweise
Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/
Affiliatelinks/Werbelinks
Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂
Voraussetzungen
Hilfreiche Artikel:
Bevor mit der Installation des nanoCuls begonnen werden kann solltet ihr den RaspberryPi soweit vorbereitet haben, dass dieser über Putty erreichbar und FHEM auf ihm installiert ist.
Die folgenden drei Artikel beschreiben was zu tun ist um den RaspberryPi soweit vorzubereiten:
RaspberryPi – Einrichten für Nerdiys!
RaspberryPI – Die Erste Konfiguration!
Das eigene Smart-Home – Installation und einstieg in FHEM
RaspberryPi – Den RaspberryPi über SSH steuern
Benötigtes Material:
-keins-
Benötigtes Material:
In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.
Aufbau des nanoCul
Der nanoCul besteht im Wesentlichen aus vier wichtigen Komponenten:
1. Dem CC1101 Funkmodul: Dieses gibt es sowohl für 433Mhz als auch für 866Mhz
2. Einem Pegelwandler: Da das CC1101 Funkmodul(3,3V) und der Arduino Nano(5V) mit unterschiedlichen Logik-Pegeln arbeiten müssen diese jeweils angepasst werden.
3. Einem Arduino Nano: Ein Mikrocontroller, der relativ einfach über die USB-Schnittstelle zu programmieren und zu betreiben ist.
4. Der Platine auf der alles miteinander verlötet ist.
5. Optional: Ein Gehäuse damit das Ganze auch geschützt ist.
nanoCul an den RaspberryPi anschließen



AVR C-Cross Compiler installieren
Um die Firmware(quasi das Betriebssystem des nanoCul) auf unsere Bedürfnisse anzupassen, müssen wir sie selbst kompilieren. Dazu müssen wir als erstes den AVR C-Cross Compiler installieren.
Nachdem ihr euch per Putty auf dem RasPi eingeloggt habt geht dies mit folgendem Befehl.
sudo apt-get install make gcc-avr avrdude avr-libc
Während der Installation kann es zu nachfragen kommen ob ihr damit einverstanden seid, dass durch die Installation zusätzlicher Speicherplatz belegt wird. Diese Nachfrage bestätigt ihr mit einem „j“ und Enter. Die Installation wird dann fortgesetzt.
nanoCul- Firmware herunterladen
Um nun die aktuelle Firmware für den nanoCul runterzuladen müsst ihr zuerst den aktuellen Link dazu raussuchen. Geht dazu auf: https://sourceforge.net/p/culfw/code/HEAD/tarball


Der vollständige Befehl würde bei der aktuellen Version(556) zum Beispiel so aussehen:
wget https://sourceforge.net/projects/culfw/
Der RasPi lädt die Datei daraufhin herunter und zeigt den Fortschritt in einer kleinen Animation an.
Firmware entpacken
Die heruntergeladene Firmware versteckt sich nun noch in einem Zip-Archiv. Um weiter damit arbeiten zu können müssen wir sie zuerst entpacken.
Dies geht (mit der aktuellen Version) mit dem Befehl:
unzip culfw-code-566-trunk.zip
Sollte sich die Version(im Beispiel die 566) mittlerweile geändert haben müsst ihr den teil hinter dem „unzip“ entsprechend nach eurer Version anpassen.
In den Ordner mit der Firmware wechseln
Nun müsst ihr in den soeben, durch das Entpacken erstellten Ordner wechseln.
Der Befehl dazu lautet:
cd culfw-code-566-trunk/culfw/Devices/nanoCUL
Hier ist wieder der Teil mit der „566“ zu beachten, ob sich die Version bei euch eventuell geändert hat
board.h richtig einstellen
Bevor wir die Firmware kompilieren, müssen wir die Parameter dazu
richtig einstellen. Dies geschieht in der Datei „board.h“. Diese liegt
in dem Ordner in den ihr gerade gewechselt seid.
Mit dem Befehl
sudo nano board.h
gelangt ihr in den Text-Editor „nano“ und könnt damit die Datei
„board.h“ bearbeiten.
Nicht erschrecken: Die Konsolen-Ansicht verschwindet und es sieht alles ein wenig anders aus.
Hier lassen sich nun diverse Parameter einstellen. Zum Beispiel die Taktfrequenz des Mikrocontrollers oder auch die Funkfrequenz des Funk-Moduls.
Falls ihr ein Funk-Modul mit 433Mhz verwenden wollt und euer Mikrocontroller bzw. das Arduino Board einem Arduino entspricht braucht ihr hier nichts zu ändern.
Falls ihr jedoch ein Funk-Modul mit 866Mhz verwendet müsst ihr folgenden Teil ändern.
Navigiert mit den Pfeiltasten eurer Tastatur zu der Stelle „#define HAS_CC1100_433“ und schreibt davor „//“.
Dies kommentiert diesen Teil aus und sagt dem Compiler, dass er die
Firmware so zusammenbauen soll, dass sie nicht für einen 433Mhz sondern
für einen 866Mhz Funkadapter konfiguriert werden soll.
Um eure Änderungen in der Datei board.h zu speichern drückt auf STRG+X, dann auf
„j“ (weil ihr die geänderte Datei speichern wollt) und anschließend auf
Enter. Nano schließt sich daraufhin und ihr seid wieder in der Konsole.
Firmware zusammenbauen (lassen)
Dieser Schritt ist leicht. Der Befehl dazu lautet:
make
Dieser Befehl bewirkt, dass die von euch gerade konfigurierte Firmware nun kompiliert wird. Das heißt der für uns Menschen lesbare Code wird in die Maschinensprache übersetzt und kann dann im nächsten Schritt in den Mikrocontroller des nanoCul programmiert werden.
Firmware einprogrammieren
Nachdem die Firmware kompiliert wurde geht es nun daran diese in den Mikrocontroller des nanoCul zu programmieren.
Dazu müsst ihr den folgenden Befehl eingeben:
make program
Der Mikrocontroller wird programmiert und der programmierte Code danach noch einmal überprüft.
ID des nanoCul herausfinden
Um den nanoCul nun in FHEM anzumelden müssen wir als erstes seine eindeutige ID in Erfahrung bringen.
Dies ist wichtig, da es sonst zu Konflikten kommen könnte wenn zum Beispiel zwei nanoCuls an einem RaspberryPi angeschlossen sind. (z.B. weil man einen für 433Mhz und einen für 866Mhz betreiben will).
Um nun die richtige ID zu erhalten sollte neben dem nanoCul nichts an den RaspberryPi angeschlossen sein.
Die ID des nanoCul erfährt man dann mit folgendem Befehl:
ls /dev/serial/by-id
Daraufhin wird eine ID ausgegeben. In meinem Fall ist es die „usb-1a86_USB2.0-Serial-if00-port0“. Diese ID kann bei euch natürlich anders lauten. Diese ID müssen wir uns nun merken, da sie für den nächsten Schritt benötigt wird
nanoCul in FHEM anmelden
Um den nanoCul nun in FHEM anzumelden müsst ihr auf die Weboberfläche von FHEM wechseln. Dort ist im oberen Bereich ein Eingabe Feld über das wir die Definition des nanoCul eingeben können.
Diese Defintion lautet:
define nanoCUL CUL /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@38400 1234
Dabei steht „nanoCul“ für den Namen eures nanoCuls in FHEM. Ihr könnt hier also auch einen anderen Namen auswaehlen.
„CUL“ beschreibt die Funktion des definierten Geräts und darf nicht geändert werden.
„/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0“
steht für die Schnittstelle zum nanoCul. Hier müsst ihr nun drauf
achten, dass ihr die im vorherigen Schritt ermittelte ID verwendet.
„@38400“
steht für die Baudrate(~Geschwindigkeit) mit der FHEM mit dem nanoCul
kommuniziert. Dieser Wert muss 38400 entsprechen.
„1234“ ist ein Code der eigentlich nur benötigt wird wenn der nanoCUL FHT Diagramme
senden soll. Dann muss dieser entsprechend angepasst werden. So oder so muss dieser mit angegeben werden.




Wenn alles funktioniert denkt daran eure FHEM-Konfiguration abzuspeichern indem ihr in der linken Leiste auf „Save Config“ klickt.
Ihr solltet also nun einen nanoCul an euren RaspberryPi angeschlossen und in FHEM angemeldet haben.
Viel Spaß mit dem Projekt
Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂
P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂
Hi,
sorry – I am not able to download the correct file.
I tried to create the board.h file on the raspberry by just copy the code from the website, but when I try to start the „make“ process, the output is „nothing to be done for ‚board.h‘.
So can you please update your nice how-to by the new link to the updated file?
Thank you very much!
Hi Frank,
could you please tell me which file you can not download? 🙂
The culfw firmware seems to be downloadable.
Best regards
Fabian
Hi Fabian,
if I click on your link (https://sourceforge.net/p/culfw/code/HEAD/tarball) the following error appears:
„Commit [r568]
We’re having trouble finding that snapshot. Would you like to resubmit?“
Unfortunately I cannot add a screenshot to this comment…
Thank you!
Hi Frank,
I tried this again and it looks that the link is working for me. Maybe you can try a different browser (for me it works in Google Chrome)? As soon as I open this link it starts the download of the fila located at: https://sourceforge.net/code-snapshots/svn/c/cu/culfw/code/culfw-code-r568-trunk.zip
This is the firmware file you are looking for. So in case it is still not working you can use this link. 🙂
Best regards
Fabian
Hi Fabian,
great, now it works 🙂
Thank you very much for your support!
Best Regards
Frank
Hi Frank,
glad to hear that it works now. 🙂
You’re welcome.
Best regards
Fabian
Hallo Fabian,
zunächst vielen Dank für diese grandiose Anleitung, mit der auch ich als völlig ahnungsloser Anfänger zurecht komme.
Leider laufe ich beim Befehl „make“ auf einen Fehler:
ecki@raspberrypi:~/Downloads/culfw-code-r569-trunk/culfw/Devices/nanoCUL $ make
Compiling C: ../../clib/somfy_rts.c
../../clib/somfy_rts.c: In function ‘send_somfy_rts_frame’:
../../clib/somfy_rts.c:200:85: error: stray ‘#’ in program
my_delay_us(30415 + (((frame[6] >> 7) & 1) ? 0 : somfy_rts_interval_half)); # 129341
^
../../clib/somfy_rts.c:200:87: warning: statement with no effect [-Wunused-value]
my_delay_us(30415 + (((frame[6] >> 7) & 1) ? 0 : somfy_rts_interval_half)); # 129341
^
../../clib/somfy_rts.c:202:1: error: expected ‘;’ before ‘}’ token
}
^
make: *** [makefile:328: ../../clib/somfy_rts.o] Fehler 1
Hast Du mir vielleicht einen Tip?
Danke
Ecki
Hi Ecki,
das sieht mir nach einem Fehler in den Programmbestandteilen der Firmware aus. Die Datei somfy_rts.c hat in Zeile 202 wohl ein RProblem weshalb das Paket nicht gebaut werden kann. Damit müsstest du dich leider an die Entwickler der Firmware wenden. 🙂
Beste Grüße
Fabian
Hallo Fabian,
zunächst vielen Dank für diese grandiose Anleitung, mit der auch ich als völlig ahnungsloser Anfänger zurecht komme.
Leider laufe ich beim Befehl „make“ auf einen Fehler:
ecki@raspberrypi:~/Downloads/culfw-code-r569-trunk/culfw/Devices/nanoCUL $ make
Compiling C: ../../clib/somfy_rts.c
../../clib/somfy_rts.c: In function ‘send_somfy_rts_frame’:
../../clib/somfy_rts.c:200:85: error: stray ‘#’ in program
my_delay_us(30415 + (((frame[6] >> 7) & 1) ? 0 : somfy_rts_interval_half)); # 129341
^
../../clib/somfy_rts.c:200:87: warning: statement with no effect [-Wunused-value]
my_delay_us(30415 + (((frame[6] >> 7) & 1) ? 0 : somfy_rts_interval_half)); # 129341
^
../../clib/somfy_rts.c:202:1: error: expected ‘;’ before ‘}’ token
}
^
make: *** [makefile:328: ../../clib/somfy_rts.o] Fehler 1
Hast Du mir vielleicht einen Tip?
Danke
Ecki