Skip to content

Komplettanleitung Installation smarthome.py, smartVISU, eibd und Onewire auf Debian 7.x oder Ubuntu 14.04

bmxp edited this page Mar 13, 2016 · 2 revisions

#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.

Debian

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

Ubuntu

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

Netzwerk Konfiguration

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".

Schreibfehler, Grammatikfehler oder "schlechtes Deutsch"

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.