Python für die CCU3

By André Lison 5 comments

Wenn die Homematic-Installation wächst, wachsen auch die Möglichkeiten und Ideen rund um die Automatisierung. Mit Homematic-Script sind kleine und kurze Programmierungen auf der CCU zwar möglich, aber es ist recht mühsam und fehleranfällig und vor allem stösst man schnell an Grenzen.

Hier wäre eine ausgewachsene Programmiersprache von Vorteil. Wer nicht C/C++ cross-compilieren möchte landet schnell bei Javascript/Node oder Python. Zu Node.js werde ich in der Zukunft einen gesonderten Post erstellen. Hier beschäftige ich mich mit der Installation von Python auf der CCU3.

Mit pmatic existiert bereits eine hervorragende API inklusive einer read-to-use Installation von Python für die CCU2. Leider funktioniert das darin enthaltene Python nicht auf der CCU3.

Buildroot

Es wird ein Linux-Rechner benötigt, Ubuntu-Docker-Image oder eine Virtual Box mit Linux tuns aber auch. Wer Linux auf Intel/AMD-Systemen verwendet, benötigt die buildroot-Umgebung um python für den ARM der CCU3 zu kompilieren. Um Kompatibilitätsproblemen von vornherein aus dem Weg zu gehen, verwende ich dieselbe Version, welche auch für den Build der CCU3-Firmware verwendet wurde: 2018.08.2

Nach dem Auspacken, kann die Konfiguration beginnen:

cd buildroot-2018.08.2
make menuconfig

Das sollte dann so aussehen:

Wichtig sind die „Target options“. Die Settings sollten so aussehen:

Mit <Exit> wieder eine Ebene höher gehen und in „Toolchain“ rein. Dort folgendes ändern:

  • C library = „glibc“
  • Kernel Headers = „Linux 4.14.x“
  • Enable C++ support
  • Enable compiler OpenMP support (wird für Python nicht benötigt)

Jetzt kommt das eigentlich Python an die Reihen. Von der Hauptnavigation in „Target packages“ gehen und unter „Interpreter languages and scripting“ python3 auswählen. Im den Unterpunkten „core python3 modules“ und „External python modules“ kann man nach Belieben und Bedarf sich auch direkt einige Python module kompilieren lassen.

Abschliessend wird die Konfiguration mit <Save> gespeichert und dann mit <Exit> verlassen.

Jetzt sollte alles fertig für den Build sein. Dieser funktioniert nur online, da er einige Quellen während des Builds aus dem Internet zieht.

make clean all -j 4

Der Build dauert recht lange. Je nach Hardware kann man daher teilweise parallel kompilieren. Im Beispiel lasse ich den Build parallel auf 4 Kernen laufen. Und trotzdem sollte man Zeit mitbringen…

Wenn alles sauber durchgelaufen ist, befindet sich die Python-Umgebung unter ./output/build/python3-3.6.3. Sie kann nur per scp auf die CCU3 kopiert werden, am besten unter /usr/local/.

Als letzten Schritt muss noch der Suchpfad für den Linker erweitert werden, damit er auch die Python-libs findet. Normalerweise würde dies in der /etc/ld.so.conf eingetragen. Leider ist das CCU3-root-filesystem readonly, so dass nur eine weniger elegante Variante übrig bleibt:

ssh root@<your CCU3 IP>
# cd /usr/local/python3-3.6.3
# vi python.sh

Dort folgendes einfügen:

!/bin/sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/python3-3.6.3
export PATH=$PATH:/usr/local/python3-3.6.3
python

Speichern und testen:

# chmod 750 python.sh
# ./python.sh
 Python 3.6.3 (default, Aug 18 2019, 15:15:35) 
 [GCC 7.3.0] on linux
 Type "help", "copyright", "credits" or "license" for more information.
                        

Wenn obiger Output erscheint, hat alles geklappt. Im Moment ist das python noch nicht sehr nützlich, da eine schöne Einbindung in das WebUI fehlt. Genau das werde ich in einem weiteren Post vorstellen.

Nachtrag: Für ganz Mutige gibt es statt dem obigen Script noch die Möglichkeit, das root-Filesystem der CCU3 read-write zu mounten und dann die notwendigen Änderungen vorzunehmen. Aber Vorsicht, das ist für Ungeübte eine Operation am offenen Herzen.

# mount -o remount,rw /
# ln -s /usr/local/python3-3.6.3/python /usr/bin/python3.6
# ln -s /usr/bin/python3.6 /usr/bin/python
# vi /etc/profile.d/python.sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/python3-3.6.3
export PATH=$PATH:/usr/local/python3-3.6.3
# mount -o remount,ro /

Einmal noch aus- und wieder einloggen und python sollte funktionieren.

5 Comments

Michael Otto

Dez 12, 2019, 11:10 am Antworten

Hallo,

danke für die Anleitung, hat bei mir alles funktioniert. Wann kommt Teil 2? Insbesondere würde mich interessieren, wie man Python-Module zB mit Pip nachinstallieren kann.

MO

admin

Dez 12, 2019, 9:10 pm Antworten

Hallo Michael,

Ich habe schnell einen Post zur pip-Installation veröffentlicht. Beachte bitte auch die Ergänzung zum ursprünglichen Post.

Grüsse
André

Mariano

Mrz 3, 2020, 10:22 pm Antworten

Hi André.

Danke für den Artikel.

Darf ich noch eine andere Frage bei Dir loswerden? Ich würde gerne die Ereignisse auf meiner CCU 3 mit möglichst wenig Aufwand in die Cloud übertragen. Dort würde ich gerne die Messwerte, wie zB Temperatur etc. auswerten. Ultimativ würde ich die Daten, zB als textuelle Logs, in S3 speichern. Da wäre ich aber flexibel und es muss nicht neartime sein.

Hast Du einen Tipp, wie ich das mit möglichst wenig Aufwand bewerkstelligen kann?

admin

Mrz 3, 2020, 9:05 am Antworten

Hallo Mariano,

da gibt es mehrere Möglichkeiten. Ich verwende RedMatic mit einer InfluxDB und Chronograf zur Speicherung und Visualisierung. Falls Du etwas warten kannst, ich habe dazu einen Post in Vorbereitung… Ausserdem gibt es noch den CCU-Historian oder Du schreibst Dir selbst etwas mit pmatic.

Viele Grüsse,
André

André Lison

Jun 6, 2020, 5:58 pm Antworten

Hallo Mariano,

wie versprochen hier der Beitrag: https://homematic-blog.lison.ch/messdaten-mit-redmatic-in-einer-influxdb-speichern/

Viele Grüsse,
André

Schreibe einen Kommentar