LXCCU --> CCU Firmware auf ARM Einplatinencomputer in einem LXC Container

Den dazu gehörenden Thread im Homematic Forum findet ihr hier

Version

gibt es keine mehr da die Wiki ein internes Versionierungssystem hat @Date

Zum Zeitpunkt der Erstellung der Anleitung und der Tests war die Version 2.13.7 der CCU2 Firmware aktuell.

Mit dem Aktuellen Raspbian vom 05.05.2015 wird dringend empfohle die LXCCU 1.9 aus dem Testing Repository zu verwenden da nur dort schon die Eigenheiten der neuen Netzwerk Mods berücksichtigt werden!

Anleitung für was?

Die Installation und Nutzung der Homematic CCU2 Firmware auf einem ARM Einplatinencomputer.

Warum das?

  • Stärkere Hardware mit mehr Schnittstellen für die Zentrale
  • Damit auch die Nutzung von Erweiterungen wie ccu.io und anderen Ressourcen Intensiven Programmen direkt auf der Zentralen Hardware möglich ist.

Hardware Voraussetzungen

  • Raspberry PI oder Cubietruck / Kernel mit LXC Erweiterungen (wurden getestet aber auch andere ARM Hardware mit LXC fähigem Kernel sollte verwendbar sein)
  • RF LAN Gateway oder den RF LAN Konfigurationsadapter
  • Optional HM Wired LAN Gateway sofern Wired auch verwendet wird
  • HM Komponenten

Um die Funktionalität der CCU Firmware sicherzustellen ist zwingend ein RF Lan Gateway erforderlich!

Aktuell gibt es folgende Möglichkeiten wie die LXCCU mit Hardware Kommunizieren kann

Funk Gateways

HM RF Lan Gateway (neu im eckigen CCU2 Gehäuse)

  • + 100% Kompatibel (Alle aktuell am Markt erhältlichen HM Komponenten können genutzt werden)
  • + Firmware Update „over the air“ von neuen Komponenten aus der LXCCU möglich!

HM RF Lan Konfigurationsadapter altes LAN Gateway im runden Gehäuse)

  • + 100% Kompatibel (Alle aktuell am Markt erhältlichen HM Komponenten können genutzt werden)
  • - Kein „over the air“ Firmware update Möglich
  • - Firmware nicht so stabil und wird auch nicht mehr weiterentwickelt

HM-MOD-RPI-PCB Funk Modul Es ist auch möglich das seit September 2015 von ELV Erhältlichen Raspberry PI Funk Aufsteckmodul mit der lxccu zu nutzen.

  • + 100% Kompatibel (Alle aktuell am Markt erhältlichen HM Komponenten können genutzt werden)
  • + Firmware Update „over the air“ von neuen Komponenten aus der LXCCU möglich!

Eine Anleitung dazu findet ihr hier

HM RF USB Stick oder CUL Mit dem im lxccu Repository vorhandenen paket mit dem Namen „hmcfgusb“ den Daemon „hmland“ welcher den USB Stick als „HM RF Lan Konfigurationsadapter“ unter der IP des ARM Einplatinencomputer zur Verfügung stellt. Dieser kann mit der LXCCU genutzt werden mit folgenden einschränkungen:

  • - Keine Verschlüsselten Komponenten nutzbar (KeyMatic, Fensterkontakte, usw..)
  • - Kein „over the air“ Firmware update Möglich

CCU1 Angeblich soll es Möglich sein die Kommunikationsdaemons einer CCU1 mit einer LXCCU zu nutzen, dies ist aus meiner Sicht mehr als Experimentell und wird auch nicht Unterstützt / Supportet.

Grundsätzlich muss hier festgehalten werden das nur das neue HM RF Lan Gateway Zukünftig mit Firmware Updates versorgt und somit alle anderen im Produktiven einsatz nicht zu empfehlen sind!

Software Installation

Erstellt eine Sicherung eurer CCU1 / CCU2 / RCU oder wie auch immer ihr eure CCU am laufen habt indem ihr im Web Interface unter

Systemsteuerung / Sicherheit / Backup Verwaltung

auf „Backup erstellen“ Klickt und die datei auf eurem Rechner speichert! (Dies kann einige Minuten dauern…)

Vorbereitung der Hardware

Raspberry PI

Der Originale Raspbian Kernel untertütz seit anfang July 2014 LXC Virtualisierung deshalb muss der Kernel aktualisiert werden um dies sicherzustellen und das geht so:

apt-get update && apt-get install lsb-release rpi-update -y
rpi-update
reboot

Cubietruck

Es gibt ein Debian Image (ab Version 1.9) von Igor Pecovnik in welchen bereits auch die benötigten Kernel Module für die LXC Virtualisierung Integriert sind, dieses könnt ihr hier herunterladen und nach seiner Anleitung auf dem CT einrichten: http://www.igorpecovnik.com/2013/12/24/cubietruck-debian-wheezy-sd-card-image/

Banana PI

Das Debian Image von Igorfür den Banana PI enthält auch schon alle Notwendigen Kernel Module für die LXC Virtualisierung. http://www.igorpecovnik.com/2014/09/07/banana-pi-debian-sd-image/

Installation der LXCCU Stable

Jetzt kommen wir dank bullshit zum leichtesten Teil der Anleitung, entweder seht auf dieser Seite nach. http://www.lxccu.com

Oder führt gleich folgenden Befehl als root / mit root Rechten auf eurem Einplatinencomputer zur installation der Stabilen version aus:

wget -nv -O- http://www.lxccu.com/setup.sh | bash -

Installation der LXCCU Testing

Um die aktuelle LXCCU aus dem Testing repository direkt zu installieren:

export LXCCUTESTING="on"; wget -nv -O- http://www.lxccu.com/setup.sh | bash - 

Update der LXCCU

zum Aktualisieren reicht es folgendes auf dem Host System zu machen:

apt-get update && apt-get upgrade

Dann wird wenn es eine neue Version gibt das paket lxccu aktualisiert, bei diesem wird das Dateisystem der aktuelle LXCCU als tar gesichert und dann ein komplett neuer Container erstellt, bei welchem aber nach dem erneuten Download und Patchen die vorhanden Konfiguration eingespielt wird. Zur Sicherheit sei aber jeden Empfohlen vorher eine Sicherung über den Web GUi zu machen!

Erste Schritte mit der LXCCU

IP Adresse der LXCCU herausfinden

Die LXCCU holt sich Automatisch per DHCP eine IP Adresse, es ist sinnvoll diese in eurem Router zu Reservieren, wie das geht hängt von eurem verwendeten Router ab. Oder ihr führt auf dem Raspi oder Cubietruck folgenden Befehl aus:

lxccuinfo

oder

cat /var/lib/lxc/lxccu/root/usr/local/etc/config/netconfig\
|grep -i CURRENT_IP=|cut -d "=" -f 2

RF Lan Gateway einbinden

Nach dem ersten aufruf des Web Interfaces der LXCCU solltet ihr ein RF LAN Gateway hinzufügen dies kann unter

Einstellungen / Systemsteuerung / LAN Gateway / Hinzufügen

gemacht werden, je nachdem ob ihr das alte (nun LAN Konfigurations Adapter genannte) Gerät oder das neue Gateway habt müsst ihr dies in der Auswahl berücksichtigen (beim neuen darf in der aktuellen Firmware Version des Gateways keine IP adresse des Gateways angegeben werden sondern nur die Seriennummer und der Sicherheitsschlüssel!) Dannach bitte die LXCCU über

Systemsteuerung / Zentralen Wartung / Neu Starten

Neustarten, damit das Gateway übernommen wird, der neustart startet nur den LXC Container neu und nicht den ganzen Einplatinencomputer!

Sicherung eurer CCU einspielen

Unter

Systemsteuerung / Sicherheit / Backup Verwaltung

auf Durchsuchen Klicken, die Sicherung der alten CCU auswählt und dann auf „Backup einspielen“.

SSH Zugang Freischalten und Kennwort vergeben

Unter

Systemsteuerung / Sicherheit / SSH

Bitte einen Hacken bei SSH Aktivieren machen und ein SSH Kennwort vergeben, dies ist zum normalen Betrieb nicht notwendig aber wenn es Probleme gibt ist dies oft der einfachere Weg auf die Zentrale zuzugreifen wenn der Web GUI nicht mehr Funktioniert!

Alternative könnt ihr euch per SSH auf euren Rapsberry pi mit folgenden Befehl auch auf die LXCCU verbinden:

lxc-console -n lxccu -t 1 

Siehe LXCCU Tips und Tricks am Ende dieser Anleitung

Add On Installation

Die kann nun einfach unter

Systemsteuerung / Zusatzsoftware

im GUI der LXCCU gemacht werden.

CUL Stick mit der LXCCU verwenden

Seit der LXCCU Version 1.6 sind alle USB Geräte auch in den LXC Container verfügbar, deshalb funktioniert der CUL Stick seither ohne weiteres.

Meine Homematic de verwenden

Damit der Zugriff auf meine-homematic.de Funktioniert muss folgendes auf dem ARM Einplatinencomputer direkt ausgeführt werden:

echo "tun" >> /etc/modules
sed -i 's|echo SerialNumber=$l1 > $USER_DIR/ids|#echo SerialNumber=$l1\
 > $USER_DIR/ids|g' /var/lib/lxc/lxccu/root/opt/mh/startup.sh
sed -i 's|echo BidCoS-Address=$l2 >> $USER_DIR/ids|#echo BidCoS-Address=$l2\
 >> $USER_DIR/ids|g' /var/lib/lxc/lxccu/root/opt/mh/startup.sh

Dann muss noch die IDS Datei aus der CCU2 in die LXCCU kopiert werden, dies kann einfach mit:

scp root@<ip der ccu2>:/etc/config/addons/mh/ids /var/lib/lxc/lxccu/root/usr/local/etc/config/addons/mh/ids

gemacht werden und nach einem reboot des Raspberry / Cubietruck ist der VPN Zugang Funktionsfähig.

Diese Anpassungen müssen nach jedem LXCCU Update wieder gemacht werden! Deshalb empfehle ich die ids Datei der Originalen CCU2 auch noch zu Sichern!

Update von lxccu 1.0.6 auf eine neuere Version

wir haben nun eine eigenen Domain und damit ihr eure LXCCU nach dem 13.05.2014 updaten könnt müsst ihr die sources.list anpassen, dies geht am einfachsten mit:

echo "deb http://www.lxccu.com/apt-repository/ wheezy main" > \
/etc/apt/sources.list.d/lxccu.list && apt-get update

Viel Spaß mit eurer LXCCU!

Raspberry PI installieren

Es gibt zwei Varianten wie die LXCCU auf einen Raspberry installiert werden kann.

Raspbian

Holt euch ein aktuelles Raspbian Image von der Ofiziellen Raspberry Pi Homepage und kopiert dieses auf die SD Karte wie in der Anleitung Beschrieben.

Der Originale Raspbian Kernel untertütz seit anfang July 2014 LXC Virtualisierung deshalb muss der Kernel aktualisiert werden um dies sicherzustellen und das geht so:

apt-get update && apt-get install lsb-release rpi-update -y
rpi-update
reboot

Raspbian Netinstall

Es gibt inzwischen auch eine Netinstall Variante für den Raspberry PI welche nur die wichtigsten Pakete Installiert hat und dadurch sehr schnell und schlank gegen die inzwischen sehr Überladene Raspbian Variante ist.

Diese könnt ihr hier finden: https://github.com/hifi/raspbian-ua-netinst

Eine Grundinstallation belegt gerade einmal 190 bis 500MB auf der SD Karte und keine über 2 GB wie das Raspbian Original Image…

CCU Firmware Tips und Tricks

Anzeige von devconfig button im Web UI

per ssh auf die CCU verbinden und folgenden Befehl ausführen:

echo CP_DEVCONFIG=1 >> /etc/config/tweaks

oder per ssh auf die LXCCU verbinden und:

echo CP_DEVCONFIG=1 >> /var/lib/lxc/lxccu/rootfs/usr/local/etc/config/tweaks

ausführen.

Dann den WebUI neu laden nicht vergessen!

LXCCU Tips und Tricks

Netzerk Beispiel-Konfiguration

Ein Network Bridge ist im Prinzip ein Virtueller Netzwerkswitch, genaueres könnt ihr hier nachlesen

Wenn es Netzwerkproblem gibt und ihr in eurem Netzwerk einen DHCP Server (z.B. einen Router) habt sollte die Datei:

/etc/network/interfaces

wie folgt aussehen:

auto lo
iface lo inet loopback
 
auto lxccubr0
iface lxccubr0 inet dhcp
  bridge_ports all

Wenn die IP Adresse Statisch sein soll dann so:

auto lo
iface lo inet loopback
 
auto lxccubr0
iface lxccubr0 inet static
  address x.x.x.x
  netmask x.x.x.x
  gateway x.x.x.x
  bridge_ports all

Das bridge_ports all würde auch eventuell vorhandene andere Schnittstellen (wie z.B. das wlan0) mit in die Netzwerkbrüke aufnehmen.

Es ist unbedingt Nötig das das Paket:

apt-get install bridge-utils

Installiert ist damit eine Bridge die ihr für LXC braucht auch Funktiniert!

Web UI Probleme

Wenn nicht alle Seiten Korrekt angezeigt werden (z.B. in der Systemsteuerung) ist es schon vorgekommen das ein Antivirus dies Verhindert hat! Siehe hier.

Container auflisten

lxc-list

Container stoppen

lxc-stop -n NAME

Container starten als Dienst

lxc-start -n NAME -d

Container starten Interaktiv

Gerade bei Problemen ist dies sehr Nützlich da ihr hier dann alle Konsolenmeldungen der CCU Firmware sehen könnt! –> Aber Achtung ein schließen der SSH Konsole beendet auch die LXCCU!

lxc-start -n NAME

Console des Containers öffnen

lxc-console -n NAME -t 1

um aus dieser LXC Console wieder auf das Host System zurückzukommen drücken Sie folgende Tastenkombination [STRG]+[a] und dann [q]

IP Adresse der LXCCU herausfinden

Auf dem Einplatinencomputer direkt folgenden Befehl ausführen:

lxccuinfo

1.7.2 Hotfix um ein Backup im Webgui wiederherzustellen

Verbindet euch per ssh auf die konsole des Raspi (Host) und führt folgenden Befehl aus:

wget -O /var/lib/lxc/lxccu/root/www/config/cp_security.cgi http://cdn.lxccu.com/cp_security.txt

Eine Sicherung Manuell wiederherstellen

kopiert die Sicherung der CCU auf die Speicherkarte des Host systems (Raspberry PI oder …) in den Ordner

/tmp

dort entpackt ihr diesen zuerst mit

tar xvf *.sbk

dann kopiert ihr die Datei

cp usr_local.tar.gz /var/lib/lxc/lxccu/root/

wechselt dort hin und extrahiert diese

tar xzvf usr_local.tar.gz
rm usr_local.tar.gz

Dann macht am besten aus dem Web GUI einen Neustart der LXCCU oder sonst hart mit

lxc-stop -n lxccu
lxc-start -n lxccu -d

Wie eine Automatische Zeitgesteuerte Sicherung eurer CCU erstellt werden kann könnt ihr in dieser Anleitung nachlesen!

Was tun wenn die LXCCU nicht automatisch startet?

Überprüft ob der Symbolische Link in /etc/lxc/auto angelegt wurde:

ll /etc/lxc/auto/
insgesamt 0
lrwxrwxrwx 1 root root 25 Aug 17 15:35 lxccu -> /var/lib/lxc/lxccu/config

Wenn nicht könnt ihr diesen mit:

ln -s /var/lib/lxc/lxccu/config /etc/lxc/auto/lxccu

Anlegen.

Bei einem Backup System ist es auch sehr empfehlenswert gerade den Link /etc/lxc/auto/lxccu zu löschen, nicht das nach einem neustart des Backup Systems der LXC Container automatisch gestartet wird und sich dann zwei LXCCU um die LAN Gateways streiten… http://homematic-forum.de/forum/viewtopic.php?f=26&t=10702

OTA Firmware Update mit der LXCCU

Wenn Sie eine neue OTA Fähige Homematic Komponente haben und die LXCCU ab der Version 1.7 (CCU2 Firmware 2.9.12) sowie ein neues LAN Gateway nutzt (das Eckige!) können Sie ein Firmware update wie folgt durchführen:

  • Laden Sie von der EQ3 Seite das Firmware update für die Komponente herunter
  • Öffnen sie das WEB GUI der LXCCU und gehen nach Einstellungen / Geräte-Firmware und wählen dort nach dem Klick auf [NEU] die Datei aus.
  • Sollten Sie neben dem NEUEN LAN Gateway auch ein altes betreiben müssen Sie in den Einstellungen / Systemsteuerung / LAN Gateways bei der zum Update vorgesehenen Komponente das neue Gateway auswählen!
  • Nun können Sie einfach unter Einstellungen / Geräte bei der Komponente auf [Einstellungen] Klicken und sollten rechts oben einen [update] botton sehen. Nach dem drücken wird die Firmware Aktualisiert und die Komponente neu gestartet.

Ob die Komponente Automatisch in den Bootloader Modus geschalten werden kann oder ob dies manuell gemacht werden muss können Sie in der Beschreibung der Komponente nachlesen!

Das HM-MOD-RPI-PCB RF Funk Modul mit der lxccu verwenden

Dieses Funkmodul von ELV als Bausatz vertrieben kann direkt auf einen Raspberry PI (1 oder 2) aufgesteckt werden und „bildet“ das Interne Funkmodul der Originalen CCU2 nach. Natürlich können noch weitere Funk LAN Gateways verwendet zusätzlich werden.

Das Funk Modul gemäß der Anleitung zusammenlöten und auf dem Raspi aufstecken wenn dieser Stromlos ist (egal ob vor oder nach dem Installieren des Patches!)

Dann einfach folgende Befehle in einer ssh shell mit root rechten ausführen:

wget http://cdn.lxccu.com/hm-mod-rpi-pcb_lxccu.sh
chmod +x hm-mod-rpi-pcb_lxccu.sh
./hm-mod-rpi-pcb_lxccu.sh install

oder zum Entfernen einfach

./hm-mod-rpi-pcb_lxccu.sh uninstall

Das Script erstellt von allen Dateien die es verändert eine Sicherung die im Falle einer späteren Deinstallation wiederhergestellt werden!

Nachdem ein Wiederherstellen der Sicherung auch die von diesem script veränderte rfd.conf überschreibt muss es also nach jedem zurückspielen einer Sicherung wieder ausgeführt werden, dann wird aber nur der rfd verändert… –> einzige Ausnahme ist wenn sie eine Sicherung einer lxccu wo sie kein hm-mod-rpi-pcb Modul verwendet haben wiederherstellen, denn dort fehlt das Interface 0 und kann aber einfach mit dem WebUI erstellt werden indem Sie dort unter Einstellungen / Lan Gateways erneut auf Übernehmen Klicken und die lxccu neu starten!

Dieses hier verlinkte script funktioniert nur mit dem Raspberry PI und erspart euch einige manuelle Schritte und ist eine Hilfe für Anfänger, jeder kann sich den code ansehen und die Befehle wenn er sie nicht kennt überprüfen!

Troubleshooting

Funktionstest

Wenn Sie mehrere RF Interfaces haben einfach die LAN Gateways vom Netz und oder Strom nehmen die LXCCU neu starten und dann auf „Anlernen“ Klicken. Sollte dies Funktionieren ist auch das Interface Funktionsfähig.

Folgende Anpassungen müssen auf einem Raspberry unter Raspbian erfolgt sein:

  • Reset File Service

Testen mit:

service hm-mod-rpi-pcb start
  • Reset File Inhalt prüfen
cat /var/lib/lxc/lxccu/root/dev/ccu2-ic200

Ergebnis soll 0 oder 1 sein!

  • /etc/inittab

Überprüfen mit:

tail -n 1 /etc/inittab

sollte dieses Ergebnis liefern (das # ist das Wichtigste!)

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
  • /boot/cmdline.txt

Überprüfen mit:

cat /boot/cmdline.txt

mit folgendem Ergebnis:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
  • rfd.conf

Überprüfen mit:

cat /var/lib/lxc/lxccu/root/usr/local/etc/config/rfd.conf

Ergebnis:

# This File was automatically generated
# TCP Port for XmlRpc connections
Listen Port = 2001

Log Destination = Syslog
Log Identifier = rfd

Persist Keys = 1

#PID File = /var/rfd.pid
#UDS File = /var/socket_rfd

Device Description Dir = /firmware/rftypes
Device Files Dir = /etc/config/rfd
Address File = /etc/config/ids
Key File = /etc/config/keys
Firmware Dir = /firmware
Replacemap File = /firmware/rftypes/replaceMap/rfReplaceMap.xml

[Interface 0]
Type = CCU2
Serial Number = 123456789
Description = CCU2-Coprocessor
ComPortFile = /dev/ttyAPP0
AccessFile = /dev/null
ResetFile = /dev/ccu2-ic200

Wenn all die oben genannten Einstellungen gesetzt sind Muss das Modul sofern es Funktionstüchtig ist erkannt werden und das Starten des Anlernmodus im Web Ui ohne Fehlermeldung möglich sein!

[Interface 0] in der rfd.conf ist weg

Leider löscht das WebUi beijedem Klicken auf Übernehmen das [Interface 0] welches das Interne ist aus der Konfiguration…

Deshalb einfach noch einmal das Script mit „install“ laufen lassen, dies fügt das Interface 0 wieder ein.

Nicht bereit beim Zugriff auf das Web UI

Wenn das normale Web UI auch nach langer Wartezeit (Je Nach Hardware und Installation kann es schon bis zu 5 Minuten dauern) nicht erscheint kann es an einer fehlerhaften rfd.conf liegen! Im Zweifelsfall die rfd.conf auf den Standard kürzen dies kann von einer root shell auf dem Host system wo die LXCCU installiert ist einfach mit:

vi /var/lib/lxc/lxccu/root/usr/local/etc/config/rfd.conf

geöffnet werden und dort dann den Inhalt auf folgendes abändern:

# This File was automatically generated
# TCP Port for XmlRpc connections
Listen Port = 2001

Log Destination = Syslog
Log Identifier = rfd

Persist Keys = 1

#PID File = /var/rfd.pid
#UDS File = /var/socket_rfd

Device Description Dir = /firmware/rftypes
Device Files Dir = /etc/config/rfd
Address File = /etc/config/ids
Key File = /etc/config/keys
Firmware Dir = /firmware
Replacemap File = /firmware/rftypes/replaceMap/rfReplaceMap.xml

[Interface 0]
Type = CCU2
Serial Number = 123456789
Description = CCU2-Coprocessor
ComPortFile = /dev/ttyAPP0
AccessFile = /dev/null
ResetFile = /dev/ccu2-ic200

Das Repository auf Testing umstellen

Wenn ihr die Entwicklung unterstützen wollt und auch bei den Tests mithelfen möchtet könnt ihr euch die Testversionen installieren indem ihr das Repository auf Testing ändert.

Bitte nicht auf eurem Produktiv System machen! Und immer vorher eine Sicherung zumindest euere LXCCU Konfiguration erstellen!

Ändert die Zeile der Datei:

/etc/apt/sources.list.d/lxccu.list

von

deb http://www.lxccu.com/apt/ wheezy main optional

auf

deb http://www.lxccu.com/apt/ testing main optional

Wenn ihr dann euer System Aktualisiert bekommt ihr aus dem lxccu repository alle testing Pakete!

apt-get update && apt-get upgrade

Deinstallation

da die Installation des lxccu Paketes auch diverse System Dateien verändert (Netzwerk Konfiguration) ist eine saubere Deinstallation im Moment nicht Möglich.

Deshalb empfehle ich eine neuinstallation des ARM Systems in diesem Fall.