## fhem.pl - Hinweise zu GNU/Linux

Anmerkung: Abhängig von der verwendteten Distribution (Debian, openSuSE, etc.) sowie der Version des Linux Kernels müssen Sie einige der im folgenden beschriebenen Schritte ausführen. Als erstes sollten Sie versuchen, die Anleitung ohne Änderungen zu befolgen. Wir haben die Kernel-Entwickler davon überzeugt, alle (bekannten) ELV-Geräte standardmäßig freizuschalten. Ab Kernel 2.6.24.2 (z.B. openSUSE 11) sind die folgenden Veränderungen nicht mehr notwendig. Sie können Ihre aktuelle Kernel-Version durch Aufruf von `uname -r` in Erfahrung bringen.

Ein Gerät
Wenn Sie nur ein Gerät (FHZ1000PC, FHZ1300PC, EM1010PC, WS300, ...) an Ihren GNU/Linux Server anschließen, können Sie das normale Kernelmodul ftdi_sio verwenden, das Gerät wird jedoch erstmal nicht erkannt werden. Dazu müssen Sie den Hersteller- und den Produkt- Code herausfinden: `
# lsusb
...
Bus 002 Device 002: ID 0403:e0e8 Future Technology Devices International, Ltd
...
`
Abhängig von Ihrer Distribution ändern Sie jetzt bitte die Datei `/etc/modprobe.conf` oder `/etc/modprobe.conf.local`. Fügen Sie folgende Zeile hinzu:
`
options ftdi_sio vendor=0x0403 product=0xe0e8
`
Ändern Sie Hersteller und Produkt entsprechend der Ausgabe von lsusb. Anschließend laden Sie das Modul mit folgendem Aufruf neu:
`
# modprobe ftdi_sio
`

Mehrere Geräte
Bei Verwendung mehrerer USB-Geräte (FHZ1000PC, FHZ1300PC, EM1010PC, WS300, ...) funktioniert die oben beschriebene Methode nicht. Sie müssen das Kernelmodul ftdi_sio kernel anpassen, damit es funktioniert. Das folgende Beispiel bezieht sich auf openSuSE 10.1. Sie müssen die kernel-source-version (RPM) Ihres aktuellen Kernels installieren (Ausgabe mit: `uname -r`). Danach gehen Sie wie folgt vor:
`
# cd /usr/src/linux
# make cloneconfig
# make modules_prepare
# cp /boot/symvers-2.6.*-default.gz /usr/src/linux
# mv symvers-2.6.*-default.gz Module.symvers.gz
# gunzip /usr/src/linux/Module.symvers.gz
# make modules_prepare
# cd drivers/usb/serial
` Für den EM1010PC ergänzen Sie gegebenfalls folgende Zeile: `
# vi ftdi_sio.h
...
#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */
#define FTDI_ELV_EM1010PC_PID 0xE0EF /* EM 1010 PC */
`
Entfernen Sie nun die Kommentarzeichen bei den entsprechenden Zeilen entfernt, um Ihre Geräte zu aktivieren: `
# vi ftdi_sio.c
...
{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_ELV_EM1010PC_PID) },
...
`
Entfernen Sie /* and */ für Ihre Geräte und speichern Sie die Datei.
`# cd /usr/src/linux
` Es gibt nun drei Möglichkeiten:

`# mv Module.symvers Module.symvers.notneeded # make M=drivers/usb/serial` | ... die verwendeten usb serial Module bauen. Auf Geräten mit geringer Rechenleistung wie der ARM-Based NSLU2 reicht es aus, nur die benötigten Module zu kompilieren.
| `# make modules` | ... alle Module kompilieren (kann einige Zeit dauern).
`# make driver/usb/serial/ftdi_sio.ko` | ... nur das Modul ftdi_sio.ko zu bauen. Diese Methode scheint aber nicht immer zu funktionieren.

Wenn Sie die Module erzeugt haben, führen Sie folgende Kommandos aus:
`
# cd /lib/modules/yourKernelVerion/kernel/drivers/usb/serial
# cp ftdi_sio.ko ftdi_sio.ko_backup
# cp /usr/src/linux/drivers/usb/serial/ftdi_sio.ko .
`
Zur Aktivierung müssen Sie Anwendungen (z.B. fhem) stoppen, die die Gerätedatei /dev/ttyUSB benutzen und das Modul entladen und erneut laden.
`
# rmmod ftdi_so
# modprobe ftdi_so
`
Sie sollten nun verschiedene ttyUSB Gerätedateien sehen: `
# ls -l /dev/ttyUSB*
crw-rw---- 1 root uucp 188, 0 2007-02-11 23:00 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 2007-02-11 23:00 /dev/ttyUSB1
`

Device links
Wenn einzelne Geräte fehlen oder nach einem Reboot, kann es bei der Verwendung mehrerer USB-Geräte (FHZ, EM, WS...) passieren, dass sich die Reihenfolge der Liste /dev/ttyUSBn ändert.
Mit Hilfe von UDEV können ab Kernel-Version 2.6 statt der Nummern virtuelle Bezeichnungen vergeben werden.
Fügen Sie folgende Zeilen in die Datei `/etc/udev/rules.d/10-udev.rules` ein (evtl. müssen Sie die Datei erstellen):
Bis udev-Version 103:
`KERNEL=="ttyUSB*", SYSFS{product}=="ELV FHZ 1300 PC", SYMLINK+="elv_fhz1300pc"
KERNEL=="ttyUSB*", SYSFS{product}=="ELV EM 1010 PC", SYMLINK+="elv_em1010pc"
`
Ab einschließlich Version 103 wurde "SYSFS" durch "ATTRS" ersetzt:
`KERNEL=="ttyUSB*", ATTRS{product}=="ELV FHZ 1300 PC", SYMLINK+="elv_fhz1300pc"
KERNEL=="ttyUSB*", ATTRS{product}=="ELV EM 1010 PC", SYMLINK+="elv_em1010pc"
`
Um die Pfade `/dev/elv_fhz1300pc` oder `/dev/elv_em1010pc` in Ihrer FHEM Konfiguration verwenden zu können, muss das Kernel-Modul ftdio_sio per "rmmod"/"modprobe" neu geladen werden.

Perl Device::SerialPort
Unter debian müssen Sie evtl. das Perl-Modul "Device::SerialPort" nachinstallieren:

      apt-get install libdevice-serialport-perl

Logfile config
Eine Rotation der Datei fhem.log (logrotation) erreichen Sie durch Erweitern der Datei /etc/logrotate.conf:

      /var/log/fhem.log {
        missingok
        weekly
        copytruncate
        rotate 5
        compress
      }