EDIT 29.11.09: Jetzt mit FHT Heizungssteuerung
Es hat sich in den letzten Jahren in Bezug auf FS20 einiges geändert. Die Anschaffung eines FHT80b2 war Anlass das FHZ System nochmal neu aufzusetzen.
Erstmal die Quellen für mehr Infos:
http://www.koeniglich.de/fhem/fhem.html
http://groups.google.com/group/fhem-users
http://fhz4linux.info/tiki-view_forum.php?forumId=1
http://fhz-forum.de/
http://www.razyboard.com/syste…le-fhz-1000-pc-53111.html
Hardware
Ich nutze einen ELV FHZ1000PC welcher über USB angeschlossen wird.
Die Art der ELV Empfangs- und Sendehardware hat keinen Einfluss auf die Steuerfunktionen (FHZ1300PC,FHZ1000PC-PRO usw.) man kann alles für Linux verwenden. Beschränkungen gibt es nur mit der Standardsoftware unter Windows.
Es ist neuerdings auch möglich Fremdharware (CUL) zu kaufen:
http://shop.busware.de/product…hp/cPath/1/products_id/29
Der CUL unterstüzt mit entsprechender Firmware auch das FS20 Funkübertragungs-Protokoll und kostet weniger (39 Euro).
Die Erkennung der Hardware sollte unter aktuellen Kerneln automatisch funktionieren. Das benötigte Modul heißt ftdi_sio.
Installation FHEM
cd /usr/local/src
cvs -d:pserver:anonymous@cvs.fhem.berlios.de:/cvsroot/fhem login
cvs -z3 -d:pserver:anonymous@cvs.fhem.berlios.de:/cvsroot/fhem co fhem
cd fhem
make install
mkdir /etc/fhem
nano /etc/fhem/fhem.cfg
/etc/fhem/fhem.cfg:
attr global logfile /var/log/fhem/fhem-%Y-%m.log
attr global statefile /var/log/fhem/fhem.save
attr global verbose 5
attr global port 7072
attr global modpath /usr/local/lib
define FHZ FHZ /dev/ttyUSB0
#define schalter FS20 0010 00
#define piri FS20 0000 01
#define heizung FHT 1234
#define heizunglog FileLog /var/log/fhem/heizung.log heizung:.*(temp|actuator|desired).*
Display More
/etc/init.d/fhem:
#!/bin/bash
##############################
# created by Gerhard Pfeffer #
# 20070512 Initial release #
##############################
### config section ###
DEVICENAME="/dev/ttyUSB0" #Name of the USB-Device, which is used for the FHZ
MODULENAME="ftdi_sio" #Name of the Module, which you need for your FHZ
EXECNAME="/usr/local/bin/fhem.pl" #Please enter the absolute path and filename for your executable of fhem
CONFNAME="/etc/fhem/fhem.cfg" #Please enter the absolute path and filename for your configfile of fhem
PORTNUM="7072" #Portnumber which is used for fhem
### end of config section - do not modify anything after this line ###
case "$1" in
start)
ps ax |grep -v grep|grep $EXECNAME > /dev/null 2>&1
if [ "`echo $?`" == "0" ];then
echo "FHEM is already running!"
else
lsmod |grep $MODULENAME > /dev/null 2>&1
if [ "`echo $?`" == "1" ]; then
modprobe $MODULENAME
sleep 1
stty eof undef < $DEVICENAME
fi;
$EXECNAME $CONFNAME
echo "FHEM started!"
fi;
;;
stop)
ps ax |grep -v grep|grep $EXECNAME > /dev/null 2>&1
if [ "`echo $?`" == "0" ]; then
$EXECNAME $PORTNUM shutdown
sleep 1
rmmod $MODULENAME
echo "FHEM stopped!"
else
echo "FHEM is not running!"
fi;
;;
esac
exit 0
Display More
Jetzt kann der Server mit /etc/init.d/fhem gestartet werden. Befehle werden folgendermaßen ausgeführt:
Anlernen Steckdosen
Zuerst muss man den Schalter in der fhem.cfg definieren. Dafür wird folgendes in die Datei eingefügt:
SCHALTER kann hierbei beliebig ersetzt werden und für x können beliebige Zahlen gewählt werden z.B. 1234 12 oder 2222 22.
Z.B.
Dann drückt man so lange den auf der FS-20 Schaltsteckdose befindlichen Knopf, bis er blinkt (oder steckt sie mit gedrücktem Knopf in die Dose) und hastet dann zum PC und gibt folgendes ein
wenn das Lämpchen aufhört zu blinken hat alles funktioniert und man kann die Ssd mit fhem.pl 7072 "set Stehlampe off" und fhem.pl 7072 "set Stehlampe off" an- und ausschalten.
Anlernen Bewegungsmelder
Zuerst muss der PIRI Betriebsbereit sein, d.h. er muss so eingestellt werden, das der BM aktiv sendet. Dann muss er ausgelöst werden (durch einen speziellen Codierungstanz vor dem Sensor )
Im Log kann dann die Adresse ausgelesen werden und in der fhem.cnf Datei eingetragen werden.
Anlernen Heizung
Am FHT80b so lange PROG drücken bis man im Sonderfunktionsmenu ist. Dann Code auswählen und die ersten beiden Zahlenzweierblöcke notieren. ( z.B. 15 23 )
Dann die Blöcke in Hexadezimalzahlen umrechnen (z.B. 0f 17 ) und in die fhem.cnf Datei eintragen:
Dann noch ein Log für die Heizung anlegen:
Nun kann die Heizung wie folgt gesteuert werden:
Probleme
Sollten im Log folgendes auftauchen,
bedeutet das, dass das 8 Bit in der Message durch Implementationsunterschiede der Seriellen Schnittstelle im Kernel abgeschnitten wurde.
Ich habe das quick und dirty umgangen indem ich folgendes an der /etc/init.d/fhem geändert habe:
und diese Datei heruntergeladen habe:
Die hier vorgeschlagene Methode funktioniert bei mir nicht:
Vielen Dank an Rudolf Koenig und die FHEM Community.
AB HIER FOLGT DAS ARCHIV
-----------------------------------------------------------------------------------------------
Hallo,
ich habe mir immer schon gedacht, das es nett wäre auch meine Lampen über den vdr (oder zumindest mit der gleichen Fernbedienung) zu steuern.
EIB kam für mich nicht in Frage da ich keine neuen Leitungen verlegen wollte.
X10 kam nach genauerer Betrachtung auch nicht in Frage da der Einsatz von Unterhaltungselektronik oder Pcs im zu steuernden Netz (bzw. Phase - X10 funktioniert über Stromleitungen - Powerline) nicht ohne Filter möglich ist.. Dadurch entstehen zusätzliche Kosten von etwa 50€ pro Filter.
Als einzige mir bekannte Alternative habe ich FS-20 gewählt, FS-20 basiert auf Funk und ist natürlich nicht dazu geeignet Türen zu öffnen (denn man kann einfach alle FS-20 Funkbefehle abhorchen) aber für ein paar Lampen usw. reicht es schon aus.
Es gibt auch einen Rückkanal, der zur Zeit aber scheinbar nur für Sensor-Module eingesetzt wird, meine Schaltsteckdosen haben jedenfalls keinen.
Es gibt einige im Preis variierende FS-20 Sender (Conrad,Elv,EZcontrol..). Ich habe die "FHZ 1000 PC" von Elv gewählt, da ich keinen günstigeren gefunden habe (79€).
Standardmässig ist bei der "FHZ 1000 PC" keine Software für Linux enthalten, also muss man tricksen.
Im Internet habe ich dann folgende Seiten gefunden:
http://www.tosti.com/FHZ1000PC.html
http://www.koeniglich.de/fhz1000/fhz1000.html
Zuerst muss man die Usb Kernel-Module patchen. Dirk Tostmann hat einen Patch geschieben, welcher in ftdi_sio.h die Product ID des ELV Usb Devices einfügt:
In der Kernel .config muss nun noch CONFIG_USB_SERIAL_GENERIC und CONFIG_USB_SERIAL_FTDI_SIO ausgewählt werden.
Danach Kernel (o. ggf. Module) neu kompilieren und neu starten (evtl. nur Module)
Wenn ich nun die "FHZ 1000 PC" per Usb verbinde sagt "dmesg" folgendes:
usb 1-1.4: new full speed USB device using uhci_hcd and address 10
ftdi_sio 1-1.4:1.0: FTDI 8U232AM Compatible converter detected
usb 1-1.4: FTDI 8U232AM Compatible converter now attached to tty
und "cat /proc/bus/usb/devices"
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#= 10 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=f06f Rev= 2.00
S: Manufacturer=ELV AG
S: Product=ELV FHZ 1000 PC
S: SerialNumber=XXXXXXXX
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 44mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
Nun braucht man Rudolf Koenigs FHZ1000 Server den man hier findet, dieses Perlscript kopiert man in /usr/local/bin und macht es ausführbar.
Für den FHZ1000 Server wird nun noch das Perl Modul Device::SerialPort benötigt. Ausserdem braucht man nun noch eine Konfigurationsdatei, die man z.B. unter $HOME/.fhz1000 anlegen kann. Diese Datei muss noch mit Inhalt gefüllt werden:
# Logfile
logfile /var/log/fhz1000.log
# device ist normalerweise /dev/ttyUSB0 bei mir jedoch /dev/usb/tts/0
# man kann auch einen Systemlink anlegen, der aber bei Neustart
# verschwindet
device /dev/tts/USB0
# Port auf dem der Server läuft
port 7072
# level 5 - Debug
verbose 5
# Zusätzlich müssen noch die Empfänger definiert
# werden. Am einfachsten ist es hier
# Werte zu definieren und die Schaltsteckdosen
# dann nachher anzulernen so spart man sich
# das scannen (falls man überhaupt eine FS20 FB
# zum scannen hat)
define lamp1 0000 00
define lamp2 0000 01
define lamp3 0000 02
Display More
Man kann den Server nun mit der erzeugten Datei starten
Nun drückt man auf seiner FS-20 Schaltsteckdose(Ssd) so lange auf den darauf befindlichen Knopf bis er blinkt (oder steckt die Ssd mit gedrücktem Knopf in die Dose) und hastet dann zum PC und gibt folgendes ein
wenn das Lämpchen an der Ssd nun aufhört zu blinken hat alles geklappt und man kann die Ssd mit "fhz1000 7072 "switch lamp1 on"" und "fhz1000 7072 "switch lamp1 off"" an- und ausschalten. Die gleiche Prozedur kann man natürlich mit weiteren Ssd wiederholen.
Was das mit dem vdr zu tuen hat?
Jetzt kann man das ganze mit lirc dem vdr-lircrc-plugin und irexec in den vdr integrieren und so z.B. die Lampen automatisch dimmen wenn eine DVD abgespielt wird.
Mehr zum FHZ1000 Server gibt es unter http://www.koeniglich.de/fhz1000/fhz1000.html (Auf dieser Seite basiert auch dieses HOWTO)
mapovi
EDIT 29.12.05: Es gibt nun sogar ein fhz4linux wiki unter:
http://fhz4linux.info/tiki-index.php
EDIT 04.01.06: Es gibt einen neuen Server (z.Zt. 1.7)
Hier kann man den neuen Server herunterladen:
http://www.koeniglich.de/fhz1000/fhz1000-1.7.tgz
Dann kopiert man die Datei fhz1000.pl z.B. in "/usr/local/bin" und den Ordner FHZ1000 nach "/usr/local/lib". Nun erstellt man eine Konfigurationsdatei mit folgendem Inhalt:
#logfile -
logfile /var/log/fhz1000.log
savefile /tmp/fhz1000.save
verbose 5
fhzdev /dev/tts/USB0
port 7072
modpath /usr/local/lib
define schalter_1 FS20 0010 00
define schalter_2 FS20 0020 00
define schalter_3 FS20 0030 00
define schalter_4 FS20 0040 00
define dimmer_1 FS20 0050 00
define dimmer_2 FS20 0060 00
define dimmer_3 FS20 0070 00
define piri1 FS20 0000 01
define piri2 FS20 0000 02
notifyon piri1 fhz1000.pl 7072 "set schalter_1 %"
Display More
Bei define gibt es nun zwei Typen von Geräten FS20 und FHT für Funkschalter und Heizungsteuerung, in diesem Beispiel gibt es nur Funkschalter, zu denen auch ein Funkbewegungsmelder (PIRI) gehört.
Die Zahl hinter dem FS20 kann beliebig gewählt werden, sollte aber einfacherweise bei den Piris nur aus den Ziffern 1-4 bestehen.
Zur Kontrolle kann "logfile -" benutzt werden um die Ausgabe auf die Konsole zu bekommen. Dann startet man den Server mit:
Um die Funkschalter mit der FHZ zu koppeln muss der Funkschalter/Dimmer mit gedrückter Taste eingesteckt werden und dann währen die Kontrolllampe am Schalter blinkt bei laufendem FHZ1000 server mit
geschaltet werden.
Die Piris lassen sich koppeln in dem man Knopf "1" + "3" 5 Sekunden drückt und dann 8 mal die "1", dann drückt man "1" + "2" 5 Sekunden und gibt dann dort den Code ein der bei define Piri hinter dem FS20 steht (bei 0000 ist es "1""1""1""1"! sonst einfach übernehmen). Danach löst der Piri diesen definierten Funkbefehl aus der in der fhz1000.conf mit
abgefangen wird. In diesem Fall schaltet sich hier eine Lampe an. Man kann aber beliebige Befehle auslösen:
Wobei % der darauf folgende Zustand ist (on/off).
Die Einbindung im VDR erfolgt über die Commands.conf oder besser über eine lircrc mit irexec, was dann in etwa so aussieht:
begin
prog = irexec
remote = hauppaugefb.lircd.conf
button = ast
delay = 4
repeat = 0
config = /usr/local/bin/fhz1000.pl 7073 "set schalter_3 on" && svdrpsend.pl MESG "Ventilator angeschaltet." > /dev/n$
end
Ein Webinterface (eine von skratzer modifizierte Version von Blue Lava) gibt es auch schon unter:
http://fhz4linux.info/tiki-download_file.php?fileId=9
Man muss die Datei bluelava-v0.4.3.tar.gz im cgi-bin Verzeichnis des Webservers auspacken ein
machen und die Datei bluelava.conf bearbeiten. Für das obige Beispiel sähe dies so aus:
#BlueLava config file
backend "ppower"
x10d_service "hamx10"
table_use_gradient "yes"
label_device_fg "FFFFFF"
ppower_path "/usr/local/bin/fhz1000.pl"
x10d_host "localhost"
bottlerocket_path "/usr/local/bin/br"
label_device_bg "0000FF"
status_color_fg "000000"
default_text_dimmed "888888"
dim_units "5"
label_type_bg "008040"
wish_path "/dev/x10"
status_color_bg "EEEEFF"
table_gradient_colorop "subtract"
bluelava_baseurl "/cgi-bin/bluelava"
flipit_path "/usr/local/bin/flipit"
label_actions_bg "FF0000"
label_actions_fg "FFFFFF"
default_row_color "CCCCCC"
bluelava_html "/usr/lib/cgi-bin/bluelava"
header_color_fg "FFFFFF"
label_type_fg "FFFFFF"
table_gradient_start "F5F5FF"
bluelava_home "/usr/lib/cgi-bin/bluelava"
heyu_path "/usr/bin/heyu"
default_text_color "000000"
table_gradient_colorchange "050501"
header_color_bg "7022FF"
#Room and Device Configuration
room "Zimmer oben"
device "schalter_1" "lamp" "Stehlampe"
device "schalter_2" "lamp" "Laserpod"
device "schalter_3" "appliance" "Ventilator"
device "schalter_4" "lamp" "Blaue Lampe"
device "dimmer_1" "lamp" "Grün"
device "dimmer_2" "lamp" "Rot"
device "dimmer_3" "lamp" "Blau"
Display More
Nun muss man noch in der device.pl in der Zeile 331 und 338 "switch $device $action" in "set $device $action" ändern. Dann sollte das Webinterface unter http://localhost/cgi-bin/bluelava/bluelava.cgi erreichbar sein.
EDIT 12.02.06:
Unter http://www.koeniglich.de/fhz1000/fhz1000.html gibt es nun die Version 1.8 des fhz1000 Servers, der nun auch mit dem HMS Protokoll (Sensoren: HMS100T und HMS100TF) kompatibel ist.
Grüsse
mapovi