EnOcean Pi 868 on Raspberry Pi 3 mit FHEM und romor/enocean-mqtt

Die EnOcean Testumgebung

Nachdem ich mich jetzt entschieden habe mir das Thema EnOcean mal genauer anzuschauen, war es an der Zeit sich ein Testszenario zu überlegen. Am Ende sollte dann die Entscheidung stehen, voll auf diese Technologie zu setzen und ggf. weiter in Hardware (EnOcean / KNX Gateway) zu investieren. Ziel war es dabei, eine repräsentative Testumgebung zu schaffen, welche mir die folgenden Tests ermöglicht:

Testziele

  • Testen der Signalstärke im Haus (Kommt das Signal überall an?)
  • Technische Einbindung von Geräten (Sensoren und Aktoren)
    • unverschlüsselt und verschlüsselt
  • Schnittstellen zu anderen Systemen
    • Loxone Miniserver
    • MQTT / Node-Red

 

Die für den Test benötigte Hard- und Software sollte natürlich kostengünstig sein, so dass bei einem negativen Tests kein teurere Müll produziert wird.

Zwei Integrationsszenarien

Während der Planung und Durchführung habe ich softwareseitig für zwei Integrationsszenarien entschieden.

Szenario A. : FHEM kennt man ja im Prinzip, wenn man sich schoneinmal mit Home-Automation beschäftigt hat. Im Kontext EnOcean hat FHEM aber bereits eine vollständige Integration an Board. Zudem ist FHEM auch ein offenes System, welches sehr gut mit anderen Systemen kommunizieren kann.

Szenario B. : romor/enocean-mqtt: Beim browsen durch Github (Link) bin ich auf dieses Projekt aufmerksam geworden. Im Prinzip alles was man braucht in klein und schlank. Geht direkt auf die Hardware und leitet die Meldungen über MQTT an einen Broker weiter. Also ausprobieren…

Update: Spannend finde ich auch die Module von http://busware.de/tiki-index.php?page=PIGATOR


Hardware:

Im Rahmen der Recherche bin ich dann auf den EnOcean Pi 868 aufmerksam geworden. Dieser ist für kleines Geld zu haben und kann direkt auf einen Raspberry gesteckt werden. Gesagt, getan.

– Raspberry Pi3 am LAN über Ethernet (Link)

– EnOcean Pi with TCM 310 Gateway Controller (Link)

– EnOcean Schalter (Hier habe ich einen FT55-WG von Eltako genommen. (Link)

 

Der Eltako FT55-WG hat einen PTM215 DB Chip, welcher im Prinzip auch das Signal verschlüsseln kann. Es wird mit einer Einfachwippe (AN/AUS) und einer Doppelwippe (2 x AN/AUS) geliefert. (ggf. Foto einbauen)

Netzeil (Link auf Netzteil einbauen)

  • Dies ist ein Punkt den ich Anfangs unterschätzt habe. Je nachdem wie viele Erweiterungsmodule auf dem Raspi genutzt werden, geht der Strombedarf deutlich in die Höhe. Gegenüber dem Pi3 benötigt der Pi3 durch den schnelleren Prozessor, Bluetooth, etc. auch mehr Strom. Eine Unterversorgung wird in der Benutzeroberfläche Pixel durch einen gelben Blitz angezeigt. Nachdem ich an einem 5 Volt 1A Netzteil mit zwei USB Ausgängen parallel noch einen Arduino angehängt hatte konnte ich den Blitz sehen.
  • Gerade wenn man einige Erweiterungen  auf dem Raspi hat, sollte man mindestens ein 2A Netzteil verwenden. Hier und da ließt man sogar die Empfehlung auf 2,5 A zu gehen.

EnOcean Modul und Pins

Zur Kommunikation mit dem Raspberry Pi verwendet der EnOcean Pi die serielle Schnittstelle (UART) mit dem Pin 8 (GPIO14) zum Senden und Pin 10 (GPIO15) zum Empfangen von Daten. Für die Spannungsversorgung benötigt das Modul 3,3 V (Pin 1) und GND (Pin 6). Das Modul wird einfach beginnend bei dem ersten Pin des Raspi J8 Interfaces gesteckt.

Nun „verdeckt“ das Modul auch alle anderen Pins, weshalb eine Nutzung von z.B. SPI oder I2C nicht mehr direkt möglich ist.

Als ein Nachteil des EnOcean Pi kann gesehen werden, dass wegen der Platine die Pins inklusive #26 (die ersten 13 Reihen) des Raspberry Pi nicht mehr zugänglich sind und eine Vermittlung der empfangenen Daten über SPI oder I²C (Pin 3 und 5) deshalb nicht mehr möglich ist.

 


Software:

  • Raspbian – RASPBIAN STRETCH WITH DESKTOP
    • Version: November 2017
    • Release date: 2017-11-29
    • Kernel version: 4.9

Aufgabenstellung:

  1. Installation eines Raspberry Pi3 mit EnOcean Pi with TCM 310 Gateway Controller
  2. Integration eines EnOcean Funktasters (Eltako FT55-wg)
  3. Testen der beiden Alternativen
    • Die Betätigung des Tasters wird über FHEM erkannt und eine Meldung wird über UDP an den Loxone Miniserver weitergegeben.
    • Die Betätigung des Tasters wird über die  romor/enocean-mqtt erkannt und es wird ein MQTT Message an den mosquitto broker geschickt, welcher dann über Node-Red abgefragt wird.

Grundlegende Konfiguration

VNC Installation

Ich nutze VNC sehr gerne für den Remote Zugriff auf den Linux Desktop, obwohl es nicht immer ein gutes Image hat. Da mir in diesem Kontext die Sicherheit erstmal egal ist, habe ich VNC auf dem Raspberry eingeschaltet. Als ich den Raspi aber Headless (also ohne Monitor, Tastatur und Maus) betreiben wollte habe ich festgestellt, dass die Auflösung sehr gering ist wenn der HDMI Stecker nicht im Raspi steckt. Nach etwas Recherche bin ich auf diesen Post (Link) aufmerksam geworden, der dann auch die Lösung darstellte.

Die Date /boot/config.txt muss um die folgenden Einträge erweitert werden. Wobei der Wert bei hdmi_mode aus dieser Tabelle (Link) abgelesen werden kann.

hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=85

UART Schnittstelle freiräumen

Zwei Dinge müssen freigeräumt werden

  1. Der Consolen Output liegt standardmäßig auf dem seriellen Port. So kann man z.B. mit einem Rechner mit serieller Schnittstelle und einem Terminalprogramm direkt an die Console. Diese Funktion muss vom seriellen Port entfernt werden.
  2. Bluetooth muss weg
1. Abschalten der Console

Das EnOcean Interface arbeitet über die serielle Schnittstelle (UART – Universal Asynchronous Receiver Transmitter)

In Raspian ist die UART Schnittstelle (Universal Asynchronous Receiver Transmitter), also die serielle Schnittstelle, für den Zugang auf die Console konfiguriert. (http://elinux.org/RPi_Serial_Connection). Da der GatewayController diese Schnittstelle benötigt, muss die Console Funktion deaktiviert werden. (siehe xxx).

Dazu muss die Definition des Interfaces in der Datei geändert werden.

sudo nano /boot/cmdline.txt

Der Inhalt sieht für gewöhnlich so aus:

 
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=3df2195c-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

Hier nochmal die Config untereinander. Die zweite Zeile (console=serial0,115200) muss ersatzlos gelöscht werden. Eine kleine Erklärung gibt es hier (Link).

 
dwc_otg.lpm_enable=0
console=serial0,115200 
console=tty1 
root=PARTUUID=3df2195c-02 
rootfstype=ext4 
elevator=deadline 
fsck.repair=yes 
rootwait 
quiet 
splash 
plymouth.ignore-serial-consoles 
2. Abschalten von Bluetooth

Neben dem Abschalten der Console empfiehlt sich auf das Abschalten von Bluetooth. Mehr dazu hier (Link) und hier (Link). Ein schöner Thread zu diesem Thema auch hier (Link).

Um die Bluetooth Schnittstelle zu deaktivieren, muss der Datei /boot/config.txt die folgende Zeile hinzugefügt werden. Dabei wird ein Overlay des Device Trees geladen (Link)

dtoverlay=pi3-miniuart-bt

3. Raspi aktualisieren

Es empfiehlt sich an dieser Stelle sicherzustellen, dass das System softwareseitig aktuell ist.

sudo apt-get install rpi-update
sudo rpi-update 
sudo reboot

Jetzt sind die Grundlagen für die beiden Integrationsszenarien gegeben. Diese Stelle ist also der Aufsatzpunkt für Szenario A und B. 
Im Prinzip kann man auch beide Szenarien parallel installieren, wenn man vor der Nutzung romor/enocean-mqtt den FHEM Service beendet.

Integrationsszenario A – Installation FHEM

Im ersten Szenario dienst FHEM als Schnittstelle zwischen EnOcean und dem Loxone Miniserver. FHEM hat konkret die Aufgabe, die Aktionen auf dem Schalter (Eltako FT55-WG) per EnOcean zu empfangen und ein entsprechendes UDP/IP Paket an den Miniserver schickt.

FHEM hat deutlich mehr externe Schnittstellen, doch stellen die virtuallen Eingangsverbinder von Loxone aktuell die kostengünstigste Lösung dar. Für andere Protokolle wie z.B. KNX müsste zusätzlich noch Hardware angeschafft werden. Diese virtuellen Eingangsverbinder dienen dann als Initiatoren für die weitere Logik, die im Loxone Miniserver programmiert wird.

Da FHEM auch direkt das MQTT Protkoll unterstüzt, werde ich im Integrationsszenario B testen wie eine Schnittstelle mit MQTT (Mosquitto) und Node-Red aussehen kann. Mit node-red ist es dann möglich, die Logik mehr im Node-Red abzubilden und den Loxone Miniserver mehr als einen erweiterten Aktor, welcher nur die Befehle ausführt,  zu sehen.

 

Die Installation von FHEM kann im Prinzip genau wie in der Online Dokumentation zu lesen ist (Link) durchgeführt werden. Ich habe in den folgenden Kapiteln die Abweichungen dokumentiert.

1. Voraussetzungen

Vor der Installation von FHEM habe ich einige Pakete Pakete über apt-get installiert, damit die FHEM Installation fehlerfrei durchläuft.

sudo apt-get install perl libdevice-serialport-perl libio-socket-ssl-perl libcgi-pm-perl libwww-perl libjson-perl sqlite3 libdbd-sqlite3-perl libtext-diff-perl libssl-dev

https://forum.fhem.de/index.php?topic=60608.0

Installation der Crypto Bibliotheken

Das EnOcean Protokoll unterstützt auch eine Verschlüsselung des Signals. Details hierzu unter (Link) – Abschnitt Security features. Die dazu notwendigen Bibliotheken sollten vor der Installation von FHEM installiert werden. Dabei gibt es zwei Möglichkeiten,

  1. Installation über apt (sudo apt-get install libcrypt-rijndael-perl libcrypt-random-source-perl)
  2. Installation über CPAN Perl paketmanager

Ich persönlich habe nur die Option 2. ausprobiert, wozu die folgenden Schritte umgesetzt werden müssen. Mit CPAN dauert es zwar deutlich länger, weil hier noch einige Module kompiliert werden müssen, aber dafür ist es immer das neueste Release.

CPAN aufrufen

cpan
<Wenn Fragen kommen, immer Enter>

Da rauschen dann eine Menge Meldungen vorbei und am Ende steht meistens, dass man erstmal CPAN aktualisieren sollte. also .. (Achtung: CPAN groß schreiben)

install CPAN

Da rauschen dann wieder eine Menge Meldungen durch und dann

reload cpan

Dann die Shell schließen, neu öffnen, cpan starten und die folgenden Module installieren.

install Math::Pari
-> yes
install Crypt::Random
install Crypt::Rijndael
2. FHEM Installation

Hier bitte erstmal schauen, welches Release gerade aktuell ist und dann den Dateinamen ggf. anpassen. Aktuell ist es 5.8.

cd ~
wget http://fhem.de/fhem-5.8.deb
sudo dpkg -i fhem-5.8.deb

Mit der Installation der Module in Schritt 1 lief die Installation bei mir dann kommentarlos erfolgreich durch. Sollte es doch eine Meldung über fehlende Module geben, so können diese über das folgenden Kommando nachgezogen werden:

sudo apt-get install -f
3. Update FHEM

Nach der initialen Installation sollten manuell ein FHEM update initiiert werden. Dies geschieht über den Befehl update in der Kommandozeileneingabe unter http://localhost:8083/fhem

Danach empfiehlt sich ein Reboot des Raspberry.

4. Log-File prüfen, ob das EnOcean Modul (TCM_ESP3_0) erkannt worden ist.

Nach dem Boot sollte geprüft werden, ob das TCM Modul korrekt erkannt und intialisiert worden inst. Unter http://localhost:8083/fhem im Menü links auf „unsorted“ gehen und beim Gerät „TCM_ESP3_0“ sollte der Status „initialized“ stehen. Wenn hier nur „open“ steht, dann bitte nochmal booten. Sollte das Gerät hier noch immer nicht angezeigt werden, dann bitte nochmal alle Schritte von „UART Schnittstelle freiräumen“ durchgehen und prüfen.

Nach dem Klick auf „TCM_ESP3_0“ sollte das Gerät folgendermaßen dargestellt werden.

 

Nun bitte nochmal das Log-File prüfen. Hauptmenü -> Logfile. Hier sollte es ungefähr so aussehen.

 

 

 

 

Wenn im Hauptmenü auf der linken Seite noch kein Menüpunkt mit „EnOcean“ vorhanden ist, ist das normal. Das wird erst angezeigt, wenn das erste Gerät angelernt ist.

5. Anlernen von Geräten

Da das TCM Modul jetzt vollständig initialisiert worden ist, können wir damit beginnen die Geräte anzulernen. Dazu muss das TCM Modul erstmal in einen Empfangsmodus gesetzt werden, damit es die neue Hardware einlernen kann. Dazu muss in die FHEM Kommandozeile das folgenden Kommande eingegeben werden. Im ersten Schritt wird das PTM215 Modul ohne Verschlüsselung angelernt. Hierzu muss in der Kommandozeile der folgende Befehl eingegeben werden.

set TCM_ESP3_0 teach 600

Die 600 bedeutet, dass der Modus für 600 Sekunden bestand hat. Während dieser Zeit sollte ein Taster (egal welcher) auf dem PTM215 aktiviert werden. Danach sollte im Log-File das folgende erscheinen.

 

An der zweiten Zeile kann man klar erkennen, dass keine Verschlüsselung beim Anlernprozess angewandt worden ist. Jetzt kann man im Hauptmenü auch den Eintrag „EnOcean“ finden, unter dem dann alle EnOcean Geräte dargestellt werden. Dort ist auch der neu angelernte Schalter mit der zuletzt gedrückten Taste zu sehen.

 

 

 

 

Rocker Kanal- und Statusbezeichnungen

Im den Schalter (Rocker) zu verstehen ist es wichtig, die Belegung und Namensgebung zu kennen. Das Bild links ist der offiziellen Dokumentation (Link) entnommen. Und ja, die Status heißen 0 (Null) und I (Buchstabe i groß). Ich habe das anfangs nicht verstanden, und tue es bis heute nicht, aber es ist so. So hat der Schalter zwei Kanäle mit zwei unterschiedlichen Schaltvorgängen.

 

 

 

 

 

 

Anlernen des PT215 mit Verschlüsselung

Bevor das Anlernen beginnen kann, muss der PT215 erstmal in den Verschlüsselungsmodus gesetzt werden. Dies ist im Benutzerhandbuch (Link) im Kapitel 2.3 beschrieben. Dort wird auch beschrieben, wie man den Modus wieder verlassen kann. Auf jeden Fall müssen die beiden Wippen vorher abgebaut werden.

Security Modus einschalten:

  • A0 & AI mit linkem Zeigefinder und Mittelfinger runterdrücken.
  • Mit dem Daumen der rechten Hand den „Energy Bow“ zweimal kurz hintereinander drücken.

Der PTM215 ist nun im Security Mode und kann wie bekannt über den folgenden Befehl eingelernt werden.

set TCM_ESP3_0 teach 600

Nach der Ausführung des Befehls muss die oben beschriebene Tastenkombination zum Wechsel in den Security Mode nochmal gedrückt werden. Im Log sollte dann folgendes zu sehen sein.

 

 

 

 

Leider funktioniert der Schaltvorgang bei mir nicht so richtig. Im Log-file wird die Meldung „EnOcean EnO_FEF9591B security ERROR: Cryptographic functions are not available“ ausgegeben, obwohl alle notendigen Module über CPAN installiert worden sind.

Ich habe es auch nach mehrmaligen Versuchen nicht geschafft eine Verschlüsselung so zu etablieren, dass alles funktioniert. Ich habe daher an dieser Stelle abgebrochen. Im FHEM Forum habe ich dazu eine Frage gestellt, wenn dort jemand eine Lösung hat werde ich dieses hier aktualisieren.

Da die Verschlüsselung im Rahmen der Testumgebung für mich jetzt nicht so relevant war, habe ich nicht weiter nachgeforscht. Bei einem professionellen EnOcean Gateway habe ich aber natürlich die Erwartungshaltung das die Verschlüsselung funktioniert.

6. Weitergabe der Tastenereignisse

Der Loxone Minitserver ist für UDP Nachrichten über virtuelle Eingangsverbinder recht empfänglich. Im

FHEM für UDP Nachrichten enablen

Dazu habe ich mich an dieses sehr gute Tutorial (Link) orientiert.

&amp;lt;/pre&amp;gt;

sub UDP_Msg($$$)
{
my ($dest,$port,$cmd) = @_;
my $sock = IO::Socket::INET-&amp;gt;new(
Proto =&amp;gt; 'udp',
PeerPort =&amp;gt; $port,
PeerAddr =&amp;gt; $dest
) or die "Could not create socket: $!\n";
$sock-&amp;gt;send($cmd) or die "Send error: $!\n";
return "send $cmd";
}

Notifier einrichten

fhem.cfg ganz unten. A0 und AI, weil das der Status des Schalters ist.

define OnOffToLoxone notify .*:(A0|AI) {OnOffToLoxone("$NAME")}

Event Routine

Jetzt muss erneut die Konfigurationsdatei „myUtilsTemplate.pm“ über das Hauptmenü „Edit Files“ mit der folgenden Routine erweitert werden. Am besten einfach unten ranhängen.


#OnOffToLoxone
#device:
#1 state(0,1)
#2 pct(0-100)
sub OnOffToLoxone($)
{
my ($device) = @_;
my $state = ReadingsVal("$device","state","-1");
# { Log 1, "Device: $device State: $state" }
if ($state eq "on") {
$state = "1";
}
if ($state eq "off") {
$state = "0";
}
my $pct = ReadingsVal("$device","pct","-1");

#fhem("set $device: $state $pct");
UDP_Msg("192.168.0.10" , "7000" , "$device: $state $pct");
}

Eingangskontrolle auf dem Loxone Miniserver

Im Loxone den UDP Monitor anschalten

 

 

 

 

 

 

Tip: USB Erkennung ausschalten.

Ich habe schon häufiger gelesen, dass die automatische Erkennung von USB Geräten beim Systemstart Probleme bereiten kann. Es wird daher empfohlen, den „initialUsbCheck“ in der  fhem.cfg auszukommentieren.

# Disable this to avoid looking for new USB devices on startup
#define initialUsbCheck notify global:INITIALIZED usb create
Tip: edit config aktivieren

Um die fhem.cfg aus dem Browser über „Edit files“ -> „fhem.cfg“ editieren zu können, muss dies vorher aktiviert werden und das geht so.

  1. Im Hauptmenü auf „unsorted“
  2. Dann auf „Web“
  3. Unten bei „attr Web“ „editConfig“ auswählen und den Wert rechts daneben auf 1 und dann attr drücken.
Tip: Zeit richtig setzen

Damit die Logs, inbesondere die von FHEM, auch das richtige Datum und Uhrzeit haben, empfiehlt sich die Konfiguration des NTP (Link). FHEM Experten schwören wohl auf einen NTP Start vor FHEM (Link).

What’s next?

Integrationsszenario B – Installation rumor/mqtt-

Im nächsten Post binden wir FHEM über MQTT an Node-Red an.

bis dann

Karl

Links

https://www.enocean.com/fileadmin/redaktion/pdf/white_paper/wp_Raspberry_talks_EnOcean.pdf

https://wiki.fhem.de/wiki/Raspberry_Pi_3:_GPIO-Port_Module_und_Bluetooth

Tools:

https://pinout.xyz/