-
Notifications
You must be signed in to change notification settings - Fork 68
Installation SmartHome.pi
|
Auf Basis des Raspberry.pi bietet das hier besprochene Image smarthome.py ein Framework zur Hausautomation. Dieses bietet von Haus aus die Möglichkeit verschiedene Logiken zu realisieren. Zusätzlich ist es mittels Plugins möglich, weitere Funktionen hinzuzufügen.
Eine detaillierte Aufstellung der vorhandenen Plugins findet sich auf http://mknx.github.io/smarthome/plugins/. Im Text werden hauptsächlich folgende Plugins eingesetzt:
- Das Plugin KNX, welches die Interaktion mit dem KNX Bus mit Hilfe des eibd ermöglicht, welcher im Folgenden noch näher beschrieben wird.
- Das Plugin Visu, welches die Smartvisu https://code.google.com/p/smartvisu/ für eine Visualisierung mit einbindet.
- Zusätzlich das Plugin 1-Wire, welches den Zugriff auf den 1-wire Bus ermöglicht. Damit lassen sich kostengünstige Sensoren nutzen.
„Der Raspberry Pi ist ein kreditkartengroßer Einplatinencomputer, der von der Raspberry Pi Foundation entwickelt wurde.
Die Platine enthält im Wesentlichen das Ein-Chip-System BCM 2835 von Broadcom mit dem 700-MHz-Hauptprozessor ARM1176JZF-S sowie 256 MB Arbeitsspeicher. Im Oktober 2012 erhielt das Model B ein Upgrade und wird mit 512 MB Arbeitsspeicher ausgeliefert.[1] Das Modell B hat zudem eine Ethernet-Schnittstelle und einen zweiten USB-Anschluss. Linux und andere Betriebssysteme, welche die ARM-Architektur unterstützen, können installiert werden. Eine Festplattenschnittstelle ist nicht vorhanden. Stattdessen können Speicherkarten (SD bzw. MMC) als nicht-flüchtiger Speicher oder externe Festplatten und USB-Sticks über den USB-Port benutzt werden.“
Für das aktuelle Image hat folgende HW Voraussetzung
Für das aktuelle Image hat folgende HW Voraussetzung
- Raspberry PI Model B
- USB-Netzteil
- SD Speicherkarte 2 GB SD card - recommended:
- 20MB/s
- SLC Flash
- 4 or 8 GB
- Laut http://elinux.org/RPi_SD_cards sind nicht alle SD-Karten mit dem Raspberry Pi kompatibel; insbesondere einige "Class 10"-Karten sind wohl etwas problematisch
- Gehäuse (optional aber sinnvoll ). Achtung: Bei Verwendung eines Standardgehäuses mit dem ROT ist Bastelei angesagt (s.u.). Besser ist hier ein Spezialgehäuse für den ROT http://shop.busware.de/product_info.php/products_id/80
- Eine Konnektivität zu KNX. Dies kann über die optional ROT (RTC-OneWire-TPUART (EIB/KNX) extension for Raspberry Pi http://busware.de/tiki-index.php?page=ROT aufgebaut werden oder eine andere Alternative (siehe Konnektivität zum KNX)
- Vorhandenes Netzwerk (will ich hier nicht weiter drauf eingehen: Internet Zugang, Router, Switch….)
- Kostenübersicht mit Beispielen einer Bezugsquelle (um ein Preisgefühl zu geben):
- Raspberry Pi Model B , Netzteil 1,5A, ModmyPi - Gehäuse Schwarz als Bundle bestellt bei Raspishop.de - 49,99 Euro incl Versand.
- ROT -87,42 Euro incl. Versand und Paypal
- Bestellt bei www.busware.de
- SD-Karte 6,99 Euro bei amazon.de
- Gesamtkosten: 144,40 Euro
- Alternatives Gehäuse für ROT Extension unter http://shop.busware.de/product_info.php/products_id/80, 14,00€
Die Komponenten kommen einzeln, sind aber Prinzipiell relativ leicht zusammenzubauen.
Bei der ROT –extension ist es etwas Gefummel, da auf der Platine zu wenig Patz ist. Siehe http://busware.de/tiki-index.php?page=ROT_Installation für Details und Einbauanleitung.
Die nächste Fummelei für die ROT Extension kommt beim Gehäuse, denn das Standardgehäuse, welches ich bestellt hat, sieht die ROT Extension bzw. genauer gesagt die Ports nicht vor.also muss es „erweitert“ werden. Dazu muss für den KNX-anschluss sowie für den RJ-11 Anschluss des 1-wire eine Aussparung geschaffen werden. Die genaue Vorgehensweise hängt vom Gehäuse ab, ich hab es mit meinem elektrischen Schleifbock gemacht, war kein Hexenwerk.
In jedem Fall muss eine Konnektivität zum KNX hergestellt werden. Dazu gibt es verschiedene Optionen:
- KNX IP Interface der bekannten Anbieter (Weinzierl, ABB, MDT…). Hierbei ist darauf zu achten, dass ältere Modelle nur eine gleichzeitige Verbindung erlauben, neuere bis zu 5. Das ist wichtig, da z.B. direkte IP-Kommunikation verschiedener Geräte nicht gleichzeitig möglich ist, diese kann aber über die Routerfunktion des Pi dennoch ermöglicht werden. Dazu gehen diese weiteren Geräte nicht direkt auf das Interface, sondern über EIBD und nutzen die Router-Funktion
- KNX IP Router der bekannten Anbieter. Wie oben, jedoch ohne die Einschränkungen gleichzeitiger Verbindungen.
- Über ROT (RTC-OneWire-TPUART (EIB/KNX) extension for Raspberry Pi. Hiemit kann der PI direkt an den KNX-Bus angeschlossen werden und funktioniert ebenso als Router (mit etwas eingeschränkter Funktionalität ggü. o.a. Routern, siehe Serverdienste auf dem Raspberry.Pi ). Dieses ermöglicht dafür aber eine direkte Anbindung an den Pro 1-Wire Bus. Zu beachten ist dabei, dass es sich hierbei um keine offizielle Unterstützte Lösung handelt. Wer also auf Nummer sicher gehen will nimmt eine der anderen Lösungen.
- Eigenbau FT1.2 Adapter für Raspberry Pi http://selfbus.myxwiki.org/xwiki/bin/view/Selfbus/FT12_Raspi .
- Vorhandene, oft genutzte Geräte mit etabliertem Zugang zum KNX:
- Homeserver:
- Wenn der IP-Zugriff vom Homeserver von GIRA mit RS232 Schnittstelle (EIBlib) bereits vorhanden ist, kann zwar die ETS darüber kommunizieren, der PI unterstützt jedoch nur die KNXlib. D.h. man braucht einen zusätzliches Interface.
- WireGate 1 Multifunktionsgateway
- Mit KNX USB Interface.
- Über o.a. Interface / Router
- …..?
- Homeserver:
- ….?
Ist eine Einbindung von 1-wire Sensoren gewünscht, muss hierzu ebenso eine Verbindung aufgebaut werden. Dies kann erfolgen entweder über
- die ROT-Extension für Rasperry Pi (siehe oben). Diese Extension erlaubt neben der direkten KNX-Anbindung auch ine direktes anbinden an den Pro 1-Wire Bus.
- 1-Wire Busmaster / USB Hostadapter an der USB Schnittstelle des Raspberry Pi
- Das Wiregate, welches eine eigenständige KNX-Anbindung mitbringt. Die Kommunikation mit dem hier angeführten Image erfolgt dann über KNX, oder direkter Zugriff auf owserver auf dem wiregate (Habe ich nicht austesten können, da ich kein wiregate zur Verfügung habe),
Folgende Serverdienste müssen auf dem Raspberry pi laufen:
- Smarthome.py
- Die eigentliche Visualisierung smartvisu
Mittels Plugin werden verschiedene andere Services eingebettet:
Für den Betrieb als KNXnet/IP Gateway muss man auf dem Raspberry Pi den eibd 'http://www.auto.tuwien.ac.at/~mkoegler/index.php/eibd installieren (Ist bereits Bestandteil des gelieferten Images).
Eibd bietet über einen TCP/IP und/oder Unix Domain Sockets Zugriff auf den EIB-Bus mittels eines einfache Protokolls.
Zusätzlich kann eibd als limitierter EIBnet/IP Tunneling und/oder Routing Server dienen. Einschränkung hierbei kann nur eine KNX Adresse als Quelle des EIBnet/IP Clients benutzt werden. Diese Adresse wird zwischen mehreren möglichen Routing- oder Tunnelverbindungen geteilt. Zum EIBnet/IP client wir benutzt, zum EIB/KNX bus wird die Adresse des Interface Devices verwandt. eibd mapped diese beiden Adressen (ähnlich NAT for TCP/IP).
Weitere Dokumentation hier: http://surfnet.dl.sourceforge.net/project/bcusdk/sdkdoc/sdkdoc-0.0.5.pdf
Enabling the EIBnet/IP Server disables the normal bus monitor function (vBusmonitor still works). It supports all interfaces supported by eibd. In an experiment, the ETS read successfully the device infos over EIBnet/IP Tunneling to a chain of some eibds connected through EIBnet/IP Tunneling and a TPUART at the last.
Für eine Anbindung des Wiregates owserver und owhttpd http://owfs.sourceforge.net/owhttpd.1.html.
Die nachfolgende Grafik fasst nochmal alles sehr schön in einem Überblick zusammen:
http://mknx.github.io/smarthome/_static/img/big_picture.pdf
- Aktuelles Image downloaden unter
- http://sourceforge.net/projects/smarthome/files/ http://github.com/mknx/smarthome/archive (aktuell Release 0.9). (in meinem Fall auf den windows-PC).
- Datei entpacken
- Image auf die SDHC Krate schreiben (z.B. mit win32diskimager http://sourceforge.net/projects/win32diskimager
- SDHC Karte einsetzen
- Verkabelung anschliessen:
- KNX des ROT an den Bus und LED Leuchten bestätigt,
- HDSC Karte mit Image rein (siehe hierzu Details weiter unten) einstecken,
- Ethernet Kabel einsteecken und an einen Switch ins Netzwerk hängen,
- HDMI Kabel an einen Monitor (kann auch direkt von einem andernen PC .B. per „Putty“ oder „WinSCP“ darauf zugregriffen werden, hierzu
- Kabel vom Steckernetzteil (welches eingesteckt sein sollte ) einstecken
- Los geht’s, der PI bootet. Beim 1. Booten muss dazu üblicherweise ein HDMI-Monitor und eine USB-Tastatur angesteckt sein, um den Raspberry Pi zu konfigurieren. Soll der Raspberry Pi jedoch ohne Monitor/Tastatur gebootet und konfiguriert werden, so kann eine serielle Konsole verwendet werden, über einen anderen Rechner z.B. über WinSCP. Dafür müßt ihr dann die IP-Adresse eures Pi kennen. Wird beim booten angezeigt, ansonsten über euren dhcp-Server.
- Logon ist jetzt möglich, initital User=admin pw=admin
- Sicherheitshalber sollte das password als erstes geändert werden
- Hier eine Übersicht der gängigsen Konsolenbefehle http://www.admintalk.de/konsolenbefehle.php
- Als erste Aktion sollte der code aktualisiert werden. Dazu https://smartcontrol.local (oder falls es Probleme damit gibt https://IP:8080) in den server eingeben und nach passworteingabe erscheint hier „Update System“ klicken 230x237px
- Von hier aus könnt ihr auch die den Status der wesentlichen Prozesse sehen und starten bzw. neu-starten sowie das System neu booten oder die Konfiguration sichern.
Folgende Directories sind von Bedeutung:
Hier werden die defaulkt paramter der verwendeten Services gesetzt. Z.B. in der Datei eibd für den eibd-service.
Hier sind die ausführbaren serviceaufrufe
*.pid zeigt die Prozess-Id des jeweiligen (laufenden) Services an. Damit kann dann z.B. der prozess per kill bendet werden.
Hier findet sich die PID für smarthome.py
Hier finden sich die log-files, wenn debug für smarthome.py eingeschaltet wurde
Mit den Dateien smartvisu.conf und visu.conf kommen standarmäßige Beispile für die Item-Definition. Diese müssen auf die eigenen Bedürfnisse angepasst werden. Der Name der Datei ist zweitrangig, ausschlaggebend ist die Endung mit *.conf, es werden alle Dateien berücksichtigt. Variablen und Identifier dürfen nicht mehrfach vergeben werden, auch nicht in unterschiedlichen Dateien.
In diesem Directory werden die Logiken abglegt
Sämtlich verfügbare Plugins werden hier in einem eigenen Directory abgelegt. Hier befinden sich ggf. auch spezielle weitere Tools für das jeweilige Plugin
Hier finden sich einige zusätzliche Tools. Aufruf mit Python xxx.py z.B. „python owmonitor.py“ monitored den 1-wire-bus.
Source Files für die Autogenerierung der smartvisu
Die Konfiguration des Gesamtsystems umfasst mehrerer Komponenten
Als erstes richten wir Eibd ein, um SmartHome.py als Schnittstelle benutzen zu können. Dies ist eigentlich sehr simple. Wir bearbeiten einfach die Datei
/etc/default/eibd
Unter Verwendung einer IP-Schnittstelle sollte die Datei dann so bearbeitet werden (die IP müßt ihr euren Gegebenheiten anpassen)
Folgende Schnittstellen werden von eibd unterstützt: http://sourceforge.net/apps/trac/bcusdk/wiki/SupportedHardware
Bei Verwendung eines 'IP-Interfaces'
EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp" #EIB_ADDR="0.0.0" EIB_IF="ipt:192.168.1.190" EIB_UID="1000"
Bei Verwendung einer 'USB-Schnittstelle' sollte folgendes drin stehen. Wobei ich dies selber noch nicht getestet habe
EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp" EIB_ADDR="0.0.1" USBID=$(findknxusb | grep device: | cut -d' ' -f2) EIB_IF="usb:$USBID"
Bei Verwendung der 'ROT Erweiterung'
EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp" EIB_ADDR="0.0.1" EIB_IF="tpuarts:/dev/ttyAMA0"Dann jeweils Speichern der Datei.
Eibd mit folgendem Befehl neu starten
/etc/init.d/eibd restart
Ob das erfolgreich war und Ihr Verbindung zum Bus habt, könnt Ihr testen indem Ihr eine Gruppenadresse folgender maßen ansprecht. (erste Zeile für EIN, zweite für AUS...HINWEIS: 0/0/67 mit einer aktiven GA austauschen)
groupswrite ip:localhost 0/0/67 1
groupswrite ip:localhost 0/0/67 0
Das 1-Wire kann in erster Linie genutzt werden, Sensoren wie Temperatur, Luftfeuchtigkeit, Wind usw. kostengünstig anzubinden.
Voraussetzung des Zugriffes auf 1-wire ist das laufen des OWFS, normalerweise im Imahge so enthalten.
Zu überprüfen durch den Befehl (in putty): „owdir /“ . Dieser zeigt an, ob der service läuft und ob der 1-wire Busmaster installiert ist (Für ROT also /bus.1)
Eigentlich müsste auf dem Pi auch noch der owhttpd laufen. Er müsste unter htttp://ip.deines.pi.xx:3001/ erreichbar sein.
Wenn nicht /etc/init.d/owhttpd start per console eingeben.
1-wire Verbindung am ROT
Hierzu benötigst du einen RJ11 Stecker.
Front view plug / Stecker von vorn
3-yellow (+5V - 350mA fused) / 4-green (OW return) / 5-red (OW) / 6-black_or_white (GND)
Für die Fehlersuche ist ein einfaches Multimeter ggf. hilfreich, um die Spannung auf dem 1-wire zu messen bzw. die ordentliche Verbindung des ROT. Nach ewiger Fehlersuche konnte ich so einen Verbindungsfehler des ROT finden:
Achtung: Bei dem ROT muss auf eine saubere Verbindung zum Raspberry.pi geachtet werden!! Dieser wird, wie in der Beschreibung ausgeführt, auf den PI gesteckt. Ich hatte das Problem, dass die Verbindung nicht stabil war (mittels Multimeter die Kontakte auf dem Pi und dem ROT durchmessen, hierbei war bei mir bei einigen Pins keine Verbindung; dadurch z.B. keine Stromversorgung des 1-wire. Abhilfe konnte nur durch sanftes Verbiegen der Pins erreicht werden.) Tip: Der Hersteller sagte mir auf Nachfrage, dass dieses Problem bei einer Charge bekannt sei und hat den ROT anstandslos ausgetauscht. Se
Tbd.
DS18B20 Temperatur-Sensor Dallas
Dieser Temperatursensor macht das „Thermo-Management“ mit einem direkten digitalen Ausgang leicht. Der Sensor ermöglicht ein direktes, digitales Auslesen der gemessenen Temperatur, ohne dass ein A/D-Wandler benötigt wird und ist kalibriert. Der Sensor beinhaltet ein digitales Thermometer und verfügt darüber hinaus über Funktionen wie Thermostat, programmierbarem, digitalen Thermostat oder Speicher
Kosten ca. 1-2€ je Stück
Nach Anschluß an den 1-wire –bus muss der Sensor noch dem System bekannt gemacht werden durch Eingabe des Befehls
echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-1/new_device
in der Konsole. Da ich bei idem verwendeten Image hiermit Problem hatte (permission denied), hat im Endeffekt dieser Befehl geholfen:
echo "echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-1/new_device" | sudo bash
Die korrekte Funktionsweise kann entweder über einen Internetbrowser (Voraussetzung der owhttpd-server ist gestartet) http://ip.meines.pi.xx:3001
[[image:Picture 1|216x195px]] hier ist „28.AFADE0040000” mein Sensor. Durch Doppelklick auf die Adresse kann der sensor ausgelesen werden.
Alternativ über die Konsole:
owdir /bus.1
ergibt z.B.:
Die hier gefundenen Adresse muss später in der smartvisu eingetragen werden.
Hier eine Anleitung für einen einfachen Start http://code.google.com/p/smartvisu/wiki/HowToStart
Hier findet Ihr die offizielle Dokunmentation: http://mknx.github.io/smarthome/config
Folgende Ergänzungen sinf ggf. auch hilfreich:
Hier kann der Standort definiert werden. Um die richtigen Koordinaten zu finden hilft http://www.cache-test-dummies.de/karten/koordinaten-eines-ortes-online-anzeigen
/usr/smarthome/etc/plugin.conf
Hier werden Plugins definiert, siehe SmartHome.py - Plugins
Diese müßt ihr u.a. immer dann anpassen wenn Ihr z.B. den smartVISU Ordner umbenennt oder beispielsweise Plugins von Smarthome.py einbinden wollt. Um Plots (Diagramme) auf der Visu einzubinden müßt ihr diese 3 Zeilen in die plugin.conf einfügen.
[sql]
class_name = SQL
class_path = plugins.sqlite
Ein Beispiel ist das KNX Plugin, das wohl alle von uns benötigen
Datei /usr/smarthome/etc/logic.conf
Hier werden Logiken definiert.
evtl. wird hier später noch etwas ergänzt, im Moment verweise ich auf die offizielle Dokumentation, da ich logiken noch nicht angegangen bin.
Hier werden alle Größen/Objekte/Elemente definiert. Beispielsweise der Status der Haustür, die Temperatur im Wohnzimmer, ... Dies ist erstmal ganz unabhängig vom KNX. Es können aber auch Objekte vom KNX Plugin sein.
Es sind einfache Operationen möglich wie average, sum, Or, ...
Hier werden die Objekte nur definiert. Danach können die Items als sh.ItemName&Co verwendet werden.
Beispiel:
['living_room']
type = bool
knx_dpt = 1
knx_send = 1/1/3
knx_listen = 1/1/4, 1/1/5
knx_init = 1/1/4
[['temperature']]
type = num
knx_dpt = 9
knx_send = 1/1/6
knx_reply = 1/1/6
ow_id = 28.BBBBB20000 # see 1-Wire plugin
ow_sensor = temperature # see 1-Wire plugin
- 1 = 1.x: type must be bool
- 2 = 2.x: type must be foo
- 3 = 3.x: type must be foo
- 4002 = 4.002: type must be str
- 5 = 5.x: type must be num
- 5001 = 5.001: type must be num
- 6 = 6.x: type must be num
- 7 = 7.x: type must be num
- 8 = 8.x: type must be num
- 9 = 9.x: type must be num
- 10 = 10.x: type must be foo # datetime.time
- 11 = 11.x: type must be foo # datetime.date
- 12 = 12.x: type must be num
- 13 = 13.x: type must be num
- 14 = 14.x: type must be num
- 16000 = 16.000: type must be str
- 16001 = 16.001: type must be str
- 17 = 17.x: type must be num
- 20 = 20.x: type must be num
- 24 = 24.x: type must be str
You could specify one or more group addresses to send updates to.
You could specify one or more group addresses to monitor for changes.
If you set this attribute, SmartHome.py sends a read request to specified group address at startup and set the value of the item to the response. It implies 'knx_listen'.
If you set this attribute, SmartHome.py tries to read the cached value for the group address. If it fails it sends a read request to specified group address at startup and set the value of the item to the response. It implies 'knx_listen'.
Specify one or more group addresses to allow reading the item value.
Auf die Möglichkeiten wird später eingegangen
/usr/smarthome/logics/*.py
Diese python Skripte werden unter den Umständen gestartet, die in der logic.conf (s.o.) definiert sind. Z.B. bei Sonnenaufgang.
Ein Beispiel:
Code:
#!/usr/bin/env python
if not sh.living_room.light():
[http://knx-user-forum.de/lexikon/tag/sh/ sh].living_room.light('on')
Ein Item von type=scene wird in diesem Ordner weiter definiert.
Diese Szenen unterscheiden sich von den in SH.py unterscheiden sich jedoch von den in KNX üblichen Szenen. In SH.py werden Szenen fest definiert und können nicht über Taster gespeichert werden.
dort liegen die html Seiten für die VISU. Siehe auch Konfiguration smartvisu
This function encodes your data according to the specified datapoint.
data = sh.knx.encode(data, 9)
With this function you could send the data to the specified group address.
sh.knx.groupwrite('1/1/10', 10.3, '9')
This function triggers a read request on the specified group address. It doesn't return the received value!
This funcion send the current time and or date to the specified group address.
sh.knx.send_time('1/1/1', '1/1/2') # send the time to 1/1/1 and the date to 1/1/2
sh.knx.send_time('1/1/1') # only send the time to 1/1/1
sh.knx.send_time(data_ga='1/1/2') # only send the date to 1/1/2
Hint: instead of this function you could use the plugin attribute 'send_time' as described above.
Bevor irgend etwas gemacht wird. Lohnt sich ein Blick auf http://smartvisu.de . Von Hier aus gibt es neben einer Demo online-Dokumentation mit Beschreibung über alle Widgets, auch direkt aufrufbar über http://smartvisu.de/docu/2.5/index.php . Unter https://code.google.com/p/smartvisu/wiki/GettingStarted eine Kurzanleitung. Ebenso bitte das Readme.txt durchlesen /var/www/smartvisu/readme.txt mit einer 10-Punkte-Anleitung.