Photovoltaik und Co: OWL CM160 USB
Anschluß des OWL CM160 an meinen Linux Rechner
OWL CM160 +USB ist ein Stromzähler nach dem Zangenamperemeter Prinzip. In Kombination mit der bekannten Spannung kann über die Strommenge auch die Leistung errechnet werden. Die Installation sollte durch einen erfahrenen Elektriker vorgenommen werden. Dazu sind die Sensoren im Bereich des Hausanschlusses um die Leitungen zu legen. Die Strommengen im Bereich des Hausanschluss / des Schaltschrank können tödlich sein. Alle Sensoren müssen gleich angelegt sein. Mit "gleich" meine ich in die gleiche Stromrichtung zeigen lassen.
Der beim Linux Kernel befindliche cp210x Treiber funktioniert ohne patchen nicht am CM160. Der Treiber muss daher gepatched werden. Dies ist wohl auch der Grund weshalb das CM-160 Modul nicht bei Fhem in der Standard Installation mit installiert wird.
Diese Anleitung ersetzt nicht das Mitdenken. Keine Garantie, denn diese Beschreibung erhebt keinen Anspruch auf Vollständigkeit und ersetzt auch keine Erfahrung im Umgang mit einem GNU/Linux System. Ich hab das jetzt hier mal geschrieben um der einen oder anderen Person einen Stolperstein oder auch Fallstrick aus dem Weg zu räumen.
Die von mir heute (24.09.2018) verwendeten Dateien befinden sich hier.
Vorbereitungen für das Kernel Modul
Es sind die Header und die Sourcen des Linux Kernels zu installieren. Desweiteren werden die üblichen Tools zum bauen eines Kernels benötigt:
- make
- cmake
- gcc
- automake
- libusb-dev
- diff
- u.s.w. (diese Liste ist nicht vollständig)
Die .config des installierten Linux Kernels sollte wenn möglich auch parat liegen (wenn alles vorher richtig gemacht wurde liegt eine entsprechende config Datei im Verzeichnis /boot/ ), die vereinfacht das Bauen des Kernels mit den Modulen, die zum Start des Systems erforderlich sind.
Welche Version vom Linux Kernel Ihr im Einsatz habt, sagt Euch folgendes Kommando:
uname -r
Empfehlung: einmal einen Kernel selbst ohne Fehler bauen. Der Lerneffekt ist gross und anschließend sind auch alle Tools zum erstellen eines eigenen Moduls installiert.
/etc/init.d/fhem stop
rmmod cp210x # entlädt das Modul vom Linuxkernel
im Verzeichnis der Linux Sourcen
cd drivers/usb/serial
Die Datei cp210x.c muss noch gepatched werden:
patch -p3 cp210x.c < cp210x_owl.diff
Es gibt auch ein Makefile, das nur dieses eine Modul baut. Wenn man dieses Makefile im Home/cp210x/ Verzeichnis kann man das Modul auch alleine bauen:
make -f ~/cp210x/Makefile
Anschließend kopiert man das Original Modul im Verzeichnis /lib/modules/[kernel-version]/kernel/drivers/usb/serial weg (quasi als Fallback/Sicherung):
cp cp210x.ko cp210x.ko-org
Dann kann man die neue Version zu den anderen Kernel Modulen kopieren:
cp cp210x.ko /lib/modules/[kernel-version]/kernel/drivers/usb/serial/
Viele Linux Distributionen liefern mit den vorinstallierten Kerneln initramdisks aus, wo die Module, die zum Start des Rechners benötigt werden, als virtuelle Diskette mitgegeben werden. Bei meinem Debian erstellt mir folgendes Kommando eine aktualiserte solche Diskette:
update-initramfs -u
reboot
Alternativ kann man ggf auch das alte Modul entladen:
rmmod cp210x
und mit:
modprobe cp210x
neuladen. Modprobe dient eigentlich zum Testen eines Moduls. So geladen ist das Modul aber nicht bootfest aktiviert. Damit dieses Modul zukünftig auch sicher bei einem Neustart des Systems geladen wird, muss dieses noch in der /etc/modules eingetragen werden:
echo cp210x >> /etc/modules
Mit dmesg heraus finden an welchen Device nun der CM160 anliegt:
dmesg | egrep 'serial|ttyUSB|cp201x
Z.B. wäre ein gutes Device /dev/ttyUSB0 oder /dev/ttyUSB1 Das hängt davon ab, in welcher Reihenfolge die USB Geräte erkannt werden. Ggf. wenn es Probleme mit der Reihenfolge gibt kann man auch als Device in Fhem verwenden (der genau String muss vorher noch ermitteln werden, ich nutze diese Methode bisher nicht, sei nur der Vollständigkeit halber erwähnt):
define Strommonitor CM160 /dev/serial/by-id/usb-Silicon_Labs_Owl_Wireless_Electricity_Monitor_USB_version_connected_0077CF1A-if00-port0@256000
Anschließend Fhem wieder starten und Konfigurieren:
/etc/init.d/fhem start
Wie das mit dem Konfigurieren geht steht im nächsten Artikel.