-
Notifications
You must be signed in to change notification settings - Fork 68
Komplettanleitung Installation smarthome.py, smartVISU, eibd und Onewire auf Debian 7.x oder Ubuntu 14.04
#Allgemeine Hinweise ##Ziel dieser Anleitung Diese Anleitung beschreibt ein komplettes Installieren von Smarthome.py inklusive eibd, 1-Wire und SmartVISU. Getestet wurde unter
- Debian 7.3 64bit (Wheezy),
- Ubuntu 13.10 64bit
- Ubuntu Server Version 14.04.1 32 Bit und 14.04.3 64 Bit (LTS)
Es empfiehlt sich eine 64 Bit Version als LTS (Long Term Support) zu nehmen, weil es mittlerweile einige Zusatzpaket gibt, zu denen keine 32 Bit Installation out-of-the-box existiert (z.B. InfluxDB/Grafana Kombination) und das Basis-System so eine für IT Verhältnisse lange Zeit unterstützt wird.
###Achtung bei neueren Betriebssystemen: Debian 8.x (Jessie) und auch Ubuntu ab 15.04 nutzen nicht mehr das alte System-V init System oder wie im Falle von Ubuntu Upstart sondern Systemd. Das hat den Effekt, das die Scripte zum Start der Services wegfallen und stattdessen nur Konfig-Dateien genutzt werden. In dieser Anleitung ist derzeit nur die Installation entsprechend dem alten Verfahren beschrieben. ###eibd vs knxd Es scheint so, als ob der Download der eibd Komponenten nicht (mehr bzw. immer) funktioniert. Als Alternative bietet sich der knxd an.
##Installieren des Betriebsystemes Die genaue Step-by-Step Installation des Betriebsystemes wird hier nicht beschrieben, das hier ist der falsche Ort dafür. Jedoch werden als Referenz die Paketauswahlen während der Installation hier beschrieben.
Unter Debian folgende Pakete während der Installation auswählen
- Web Server
- SSH Server (wird für SSH z.B. via PuTTY oder Bitvise SSH client benötigt)
- File Server
- Standard system utilities
Unter Ubuntu folgende Pakete während der Installation auswählen:
- Samba File Server
- Open SSH Server (wird für SSH z.B. via PuTTY oder Bitvise SSH client benötigt)
Ihr könnt bei der Installation schon einen user "smarthome" anlegen und weiter unten bei der Installation benutzen
Es würde den Rahmen dieses Dokumentes sprengen, jede mögliche Netzwerkkonfiguration hier zu erklären. Am besten während dem Installieren des Linux OS schon die richtigen Einstellungen vornehmen (DHCP, statische IP, ...). Als Referenz sei jedoch auf diese Seite verwiesen Beim Installieren als VM solltet Ihr darauf achten, das die neue VM auch eine IP aus dem internen Netzwerk bekommt. Bei VirtualBox geht das z.B. über den Verbindungsmodus "bridged".
Da Deutsch für mich eine Fremdsprache ist, bin ich dankbar für jede Korrektur. Auch sonstige Anregungen oder Hinweise auf Fehler sind erwünscht. Gerne auch hier das Wiki direkt verbessern. Ich werde diese Anleitung nach und nach anpassen.
#Einloggen und los geht's
Am besten sich mit einem SSH Client auf dem SmartHome Server einzuloggen und die folgenden Befehle per copy & paste einzuspielen.
Unter OSX dazu einfach eine Kommandozeile öffnen und folgendes eintippen: ssh <ip_des_servers>
.
Unter Linux genau das gleiche, Kommandozeile öffnen und folgendes eintippen: ssh <ip_des_servers>
.
Unter Windows empfehle ich Putty als SSH Client, download hier. Noch komfortabler ist Kitty. Einfach zunächst Putty installieren und umbenennen in Putty.exe.bak. Dann Kitty ins Verzeichnis vom Putty schreiben und umbenennen als Putty.exe.
Natürlich <ip_des_servers>
ersetzen durch die IP Adresse oder den DNS Namen deines Servers.
Da diese Anleitung für Debian und Ubuntu funktionieren soll, und diese Anleitung so einfach wie möglich bleiben soll, werden wir auf sudo
verzichten und unter root arbeiten. Unter Debian müssten wir sudo
ansonsten noch installieren und parametrieren.
##Ubuntu
Einfach den User benutzen, den ihr während der Linux Installation angelegt habt, z.B. "smarthome".
###Zugriff als root erlangen:
Eine root shell öffnet ihr mit
sudo -i
alternativ könnt Ihr auch ein Passwort für root setzen mit
passwd root
und dann zu root wechseln mit
su root
Diese Vorgehensweise wird jedoch für Ubuntu nicht empfohlen. root bei Ubuntu ##Debian Einfach direkt als root einloggen. #smarthome.py installieren
Alle nötigen Pakete für smarthome.py installieren
apt-get update
apt-get -y install dialog openssh-server apache2 php5 php5-json openntpd python3 python3-dev python3-setuptools git-core unzip wget libawl-php php5-curl build-essential
easy_install3 pip
pip install ephem
Solltest du mit einer älteren Distribution arbeiten, bekommst du wahrscheinlich eine Fehlermeldung, dass das Paket php5-json nicht existiert. Das benötigte Paket ist dann aber mit größter Wahrscheinlichkeit sowieso bereits vorhanden. In dem Fall einfach bei der ersten Zeile php5-json weglassen und ignorieren. pip ist der Python Package Manager, ephem ist für Astronomie-Berechnung via Python
Benutzer für smarthome anlegen und ihn in die www-data und sudo Gruppen hinzufügen. Bei dem adduser
Kommando ein Passwort eingeben. Alle anderen Fragen einfach mit bestätigen.
adduser smarthome
usermod -G www-data,sudo -a smarthome
Smarthome.py Dateien auschecken
cd /usr/local
git clone git://github.com/mknx/smarthome.git
chown -R smarthome:smarthome /usr/local/smarthome
Zu smarthome Benutzer wechseln und smarthome.py konfigurieren
su smarthome
cd /usr/local/smarthome/etc
touch logic.conf
Folgende Kommandos immer von der "cat" Zeile an bis zur Zeile unter "EOL" auswählen und an einem Stück ins ssh pasten. Alternativ die Dateien mit "nano" oder sonst einem Editor erstellen. Die smarthome.conf ist natürlich anzupassen. Diese lat / lon Werte werden gebraucht, um unter anderem Sonnenaufgang / -untergang zu berechnen Koordinaten ermitteln Der [knx] Teil kann weggelassen werden, falls kein KNX / EIB benutzt wird. Der [ow] Teil kann weggelassen werden, falls kein 1-Wire benutzt wird.
cat >smarthome.conf <<EOL
# smarthome.conf
lat = 49.66
lon = 5.91715
elev = 380
tz = 'Europe/Luxembourg'
EOL
cat >plugin.conf <<EOL
# plugin.conf
[knx]
class_name = KNX
class_path = plugins.knx
host = 127.0.0.1
port = 6720
# send_time = 600 # update date/time every 600 seconds, default none
# time_ga = 1/1/1 # default none
# date_ga = 1/1/2 # default none
[ow]
class_name = OneWire
class_path = plugins.onewire
[visu]
class_name = WebSocket
class_path = plugins.visu
smartvisu_dir = /var/www/smartVISU
# for Ubuntu 14.04 upwards the base for html has changed
# smartvisu_dir = /var/www/html/smartVISU
[cli]
class_name = CLI
class_path = plugins.cli
ip = 0.0.0.0
update = True
[sql]
class_name = SQL
class_path = plugins.sqlite
EOL
Mit exit
zum root User zurück und startup Script anlegen.
exit
cd /etc/init.d
nano smarthome
Folgenden Inhalt in das Script pasten
#!/bin/sh
### BEGIN INIT INFO
# Provides: smarthome
# Required-Start: $syslog $network
# Required-Stop: $syslog $network
# Should-Start: eibd owserver
# Should-Stop: eibd owserver
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start SmartHome.py
### END INIT INFO
DESC="SmartHome.py"
NAME=smarthome.py
SH_ARGS="-q"
SH_UID='smarthome'
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DIR=/usr/local/smarthome/bin
DAEMON=$DIR/$NAME
SCRIPTNAME=/etc/init.d/$NAME
PIDFILE=/var/run/$NAME.pid
[ -x "$DAEMON" ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
DAEMON_ARGS="$SH_ARGS"
do_start()
{
touch $PIDFILE
chown $SH_UID:$SH_UID $PIDFILE
start-stop-daemon --start --user $SH_UID --group $SH_UID --chuid $SH_UID --pidfile $PIDFILE --startas $DAEMON --test > /dev/null || return 1
start-stop-daemon --start --user $SH_UID --group $SH_UID --chuid $SH_UID --pidfile $PIDFILE --startas $DAEMON -- $DAEMON_ARGS || return 2
ps ax | grep $DAEMON | grep -v grep | awk '{print $1}' > $PIDFILE
}
do_stop()
{
start-stop-daemon --stop --retry=TERM/30/KILL/5 --pidfile $PIDFILE
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
rm -f $PIDFILE 2> /dev/null
return "$RETVAL"
}
do_reload() {
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart)
echo "Restarting $DESC" "$NAME"
do_stop
sleep 1
do_start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac
exit 0
Dateirechte richtig setzen.
chmod 755 smarthome
UBUNTU: Automatisches Starten aktivieren
update-rc.d smarthome defaults
DEBIAN: Automatisches Starten aktivieren
insserv smarthome
#SmartVISU installieren
SmartVISU web Dateien installieren. Beim Erstellen dieser Anleitung war SmartVISU 2.7b gerade aktuell. Vor dem Installieren auf der Projektseite nachschauen und den Pfad gegebenfalls anpassen.
Achtung: Ab Ubuntu 14.04 muss die Installation in /var/www/html erfolgen! Also ist die erste Zeile entsprechend zu ändern.
cd /var/www
rm index.html
wget http://smartvisu.de/download/smartVISU_2.7.zip
unzip smartVISU_2.7.zip
rm smartVISU_2.7.zip
Rechte und Benutzer richtig setzen
chown -R www-data:www-data smartVISU
chmod -R 775 smartVISU
Dann smarthome starten mit
/etc/init.d/smarthome start
Im Log schauen, ob keine Fehlermeldung beim Starten geschrieben wurde. Die einzige, die erscheinen darf, ist ein Verbindungsproblem mit eibd und / oder onewire, falls du die aktiviert hast, da wir beide noch nicht installiert haben.
tail /usr/local/smarthome/var/log/smarthome.log
Dann versuchen, mit einem Browser von einem anderen Rechner aus auf SmartVISU zuzugreifen.
natürlich mit der IP oder dem Name deines SmartVISU Servers ersetzen: http://<ip-des-servers>/smartVISU
Bei "Checking your configuration" sollte alles mit einem grünen Häckchen versehen sein.
Jetzt auf den "Config" Knopf drücken. Damit müsstest du in das SmartVISU Interface gelangen, direkt auf die Config Seite.
Bei I/O Connection "Smarthome.py" auswählen. ACHTUNG: Bei Adresse (URL / IP) die Interface Adresse des Servers eingeben oder den DNS Namen.
Hier NICHT localhost oder 127.0.0.1 eingeben, denn diese Adresse wird vom Client Browser benutzt (Javascripts). Somit muss die Verbindung nicht nur vom SmartVISU Server funktionieren, sondern auch von all deinen Geräten, von denen aus du SmartVISU benutzen willst.
Wenn du mit dem Autogenerator arbeiten willst, dann stelle noch im Tab "Interfaces" die Auswahl "Pages" auf "Smarthome".
Dann ganz unten auf "Save" drücken.
Das Anlegen der Items und der Webseiten wird hier nicht beschrieben, das würde dann doch den Rahmen ein bisschen sprengen :-)
#eibd installieren
Soll kein KNX / EIB benutzt werden, kann dieser Abschnitt natürlich weggelassen werden. Das Repository für die KNX Pakete hinzufügen. Dafür die sources.list Datei editieren
nano /etc/apt/sources.list
und folgendes am Ende reinpasten und mit ctrl-x speichern
deb http://www.auto.tuwien.ac.at/~mkoegler/debian eib main
deb-src http://www.auto.tuwien.ac.at/~mkoegler/debian eib main
eibd installieren
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 7DC4FF45991BF361
apt-get update
apt-get -y --force-yes install bcusdk
eibd configurieren
nano /etc/default/eibd
Folgenden Inhalt reinpasten und mit ctrl-x speichern. Natürlich durch die IP des KNX IP Busadapters tauschen. Ausführliche Informationen zur eibd Einrichtung gibt es hier. Manche KNX Schnittstellen benötigen bei EIB_ARGS="..." noch die Option "--no-tunnel-client-queuing" dazu um keine Telegramme zu verlieren (z.B. Weinzierl IP 730 und baugleiche Schnittstellen (MDT,Eibmarkt)).
EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp"
EIB_ADDR="0.0.1"
EIB_IF="ipt:<ip-des-knx-ip-modules>"
EIB_UID="smarthome"
Als root Benutzer startup Script anlegen.
cd /etc/init.d
nano eibd
Folgenden Inhalt in das Script pasten
#!/bin/sh
### BEGIN INIT INFO
# Provides: eibd
# Required-Start: $syslog $network
# Required-Stop: $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start the eib daemon.
### END INIT INFO
DESC="KNX daemon 'eibd'"
NAME=eibd
EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp"
EIB_UID="smarthome"
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
#Ubuntu: DAEMON=/usr/bin/$NAME
#Debian: DAEMON=/usr/local/bin/$NAME
DAEMON=/usr/local/bin/$NAME
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
[ -x "$DAEMON" ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
DAEMON_ARGS="$EIB_ARGS --pid-file=$PIDFILE --eibaddr=$EIB_ADDR $EIB_IF"
. /lib/init/vars.sh
do_start()
{
touch $PIDFILE
chown $EIB_UID $PIDFILE
start-stop-daemon --start --quiet --chuid $EIB_UID --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1
start-stop-daemon --start --quiet --chuid $EIB_UID --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS || return 2
}
do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
rm -f $PIDFILE 2> /dev/null
return "$RETVAL"
}
do_reload() {
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
#reload|force-reload)
#echo "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
restart)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
echo "Restarting $DESC" "$NAME"
do_stop
sleep 1
do_start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac
exit 0
Eventuell noch den Pfad des Daemon anpassen, das hängt von Eurem System ab. Dateirechte richtig setzen
chmod 755 eibd
UBUNTU: Automatisches Starten aktivieren
update-rc.d eibd defaults
DEBIAN: Automatisches Starten aktivieren
insserv eibd
Daemon starten
/etc/init.d/eibd start
#Installation Onewire Damit Onewire von smarthome.py genutzt werden kann müsst ihr in der plugin.conf den Paragraphen für [ow] eingefügt haben (siehe weiter oben in dieser Anleitung) und die benötigten Komponenten nachinstallieren:
apt-get -y install owhttpd owserver
Evtl. muss die owfs Konfigurationsdatei noch auf den verwendeten Adapter angepasst werden:
nano /etc/owfs.conf
Eine Beispieldatei für einen USB-Adapter wie den weit verbreiteten DS9490R kann z.B. so aussehen:
######################## SOURCES ########################
#
# With this setup, any client (but owserver) uses owserver on the
# local machine...
! server: server = 127.0.0.1:4304
#
# ...and owserver uses the real hardware, by default fake devices
# This part must be changed on real installation
#server: FAKE = DS18S20,DS2405
#
# USB device: DS9490
server: usb = all
#
# Serial port: DS9097
#server: device = /dev/ttyS1
#
# owserver tcp address
#server: server = 192.168.10.1:3131
#
# random simulated device
#server: FAKE = DS18S20,DS2405
#
######################### OWFS ##########################
#
mountpoint = /mnt/1wire
allow_other
#
####################### OWHTTPD #########################
http: port = 2121
####################### OWFTPD ##########################
ftp: port = 2120
####################### OWSERVER ########################
server: port = 127.0.0.1:4304
Wichtig dabei ist vor allem bei den neueren Ubuntu-Versionen, das in der Config nicht localhost steht sondern 127.0.0.1 explizit angegeben wird. Dadurch wird eine Bindung des Ports 4304 an eine normale IP erreicht und nicht an tcp6 wie es sonst der Fall wäre. Mit tcp6 wiederum könnte das Smarthome.py derzeit nichts anfangen.
jetzt die Dienste starten
/etc/init.d/owserver start
/etc/init.d/owhttpd start
Smarthome.py neustarten
/etc/init.d/smarthome restart
#Samba einrichten Es macht Sinn, SAMBA richtig einzurichten, damit man von seinem Rechner auf die Configuration des Smarthome / SmartVISU zugreifen kann. Als root die smb.conf editieren
nano /etc/samba/smb.conf
In der Sektion [global] "workgroup" und "server string" nach Belieben anpassen. Dann am Ende der Datei folgendes einfügen:
[SmartHome.py]
path = /usr/local/smarthome
comment = SmartHome.py Directories
available = yes
browseable = yes
writable = yes
force user = smarthome
force group = smarthome
create mask = 0664
directory mask = 0775
[smartVISU]
path = /var/www/smartVISU
comment = smartVISU Directories
available = yes
browseable = yes
writable = yes
force user = www-data
force group = www-data
create mask = 0775
directory mask = 0775
Auch hier gilt, das der Pfad ab Ubuntu 14.04 angepasst werden sollte:
path = /var/www/html/smartVISU
Jetzt müsste alles installiert sein und alles funktionieren.