HowTo: FHEM – nanoCul installieren

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

Um den nanoCul an den RaspberryPi anzuschließen müsst ihr den nanoCul mit dem RaspberryPi über ein USB Kabel verbinden. Das kann(je nach Ausstattung des verwendeten Arduino Nano) ein Mikro- oder Mini- USB Kabel sein.
USB Kabel in den RaspberryPi einstecken. (Welchen USB Port ihr am RaspberryPi verwendet ist egal.)
USB Kabel in den nanoCul einstecken. Sobald euer RaspberryPi eingeschaltet ist sollte am nanoCul nun auch mindestens eine LED leuchten. Wenn euch das stört könnt ihr die LED auf dem nanoCul entweder mit Klebeband abdecken, mit einem gut deckenden Stift übermalen oder auch auslöten.

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

Dort wird als erstes ein Download-Fenster aufpoppen. Diese schließt ihr, denn ihr wollt den Code ja auf den RaspberryPi laden und nicht auf euren Computer.
Nun kopiert ihr euch den Download Link indem ihr mit der rechten Maustaste auf „direct link“ und dann auf „Link-Adresse kopieren“ klickt. Der Link befindet sich nun in eurer Zwischenablage und ihr könnt ihn in Putty einfügen. Bevor ihr in Putty auf Enter klickt müsst ihr allerdings noch ein „wget“ davor setzen damit der RasPi auch weiß, dass er die in dem Link angegebene Datei herunterladen soll.

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.

Habt ihr eure Definition eurer ID entsprechend „zusammengebaut“ müsst ihr diese nur noch ins Textfeld in FHEM übertragen und Enter drücken.
Ihr werdet dann auf diese Übersicht des soeben angelegten nanoCULs umgeleitet. Hier könnt ihr alles wichtige den nanoCul betreffend einstellen.
Um nun aber erst mal zu testen ob der nanoCul erfolgreich erkannt wurde stellt ihr bei „get nanoCul …“ auf „get nanoCul version“ und klickt auf „get“.
Ihr solltet dann eine Meldung wie zum Beispiel: „nanoCUL version => V 1.67 nanoCUL868“ erhalten. Falls ihr hier keine Antwort erhaltet überprüft nochmal die ID eures nanoCul wie in Schritt 9 beschrieben. Ansonsten hilft es auch manchmal den nanoCul noch mal vom RaspberryPi zu trennen und neu zu verbinden oder den nanoCul noch einmal neu zu programmieren. Auch ein neustart des RasPi’s löst das problem oft.

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

Buy Me a Coffee at ko-fi.com       

11 Kommentare

  1. 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!

  2. Pingback: Fhem Cul Anmelden
  3. Pingback: Cul In Fhem Anmelden
  4. 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

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

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

Kommentar hinterlassen

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.