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.
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
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é
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?
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é
Hallo Mariano,
wie versprochen hier der Beitrag: https://homematic-blog.lison.ch/messdaten-mit-redmatic-in-einer-influxdb-speichern/
Viele Grüsse,
André
Hallo André,
vor vier Jahren habe ich aktiv an der pmatic-Entwicklung teilgenommen. Ich hatte die Software für einige Devices und eine Routine zur Berechnung des Sonnenstandes geschrieben. Leider hat Lars Michelsen die Entwicklung aufgegeben.
Jetzt habe ich Deinen Blog-Eintrag gelesen und frage mich, ob Du pmatic auf der CCU3 benutzt? Weißt Du vielleicht, ob irgendjemand pmatic weiterpflegt? Leider kenne ich keine bessere Python-API für Homematic.
Schöne Grüße
Rolf
Hallo Rolf,
pmatic kenne ich und finde es extrem gelungen, es gibt wirklich keine bessere Python-API. Wie Du schon sagst, gibt es meines Wissens nach keinen Port auf die CCU3. Natürlich könnte man das machen, aber mir fehlt einfach die Zeit. Falls Du dafür noch Energie aufbringen könntest, würde ich nach Kräften unterstützen.
Viele Grüsse,
André
Hallo André
Vorweg, ich hab noch nicht begonnen, irgend etwas von deiner Anleitung umzusetzen, aber das sieht alles echt super aus. Bin schon gespannt, ob ich das als kompletter Newbie in diesen Sachen auch hinbekommen werde.
Aber zu meinen Fragen:
1) Wenn ich das hier und die pip Integration einrichte, kannst du sagen, ob damit pybecker funktionieren wird/sollte? https://pypi.org/project/pybecker/
2) Hast du mit dem Artikel zur WebUI Integration auch schon begonnen? Wenn die pybecker Integration funktioiert, wäre es natürlich super, wenn man das auch „relativ“ komfortable direkt aus der WebUI nutzen könnte.
Vielen Dank schon mal für deine tolle Arbeit
Schöne Grüße
Norbert
Hallo Norbert,
sorry für die späte Antwort! Pybecker habe ich nicht ausprobiert, sehe aber auch nicht, warum es nicht funktionieren sollte. Bin auf Deine Erfahrungen gespannt. Die WebUI-Integration ist noch nicht fertig und ich werde auch so schnell nicht dazu kommen. Leider!
Viele Grüsse,
André
Norbert ich fände das gut wenn du das hinbekommst 😀