SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Einfache Heimautomatisierung
auf dem Raspberry Pi
mit Python
Thomas Koch 

@tomy_koch

Pi and More 9

Uni Trier 

11. Juni 2016
über mich
• Thomas Koch
• Bonn
• Software-Entwickler
• Python, JavaScript,Web ...
• Python User Group PyCologne
• Orga PythonCamp
• Hobby-Bastler
• Raspberry Pi
• OrbiTeam Software (Bonn)
• BSCW (Collaboration Server)
Agenda
• Heimautomatisierung
• Hintergrund und Anwendungsbeispiele
• Heimautomatisierung mit dem Raspberry Pi
• Kurzeinführung: Hardware, GPIO mit Python
• Praktische Anwendungen
• Bewegungsmelder
• Temperaturmessung
• Funksteckdose(n) steuern
• Anbindung einer WebCam
• Benutzerschnittstelle leicht gemacht
• PyHome - einfache Web-App zur Heimautomatisierung
HEIMAUTOMATISIERUNG
Mo#va#on
4
Heimautomatisierung (Home Automation)
• Idee: Überwachung und Steuerung elektrischer Geräte im Haushalt

• durch Verbindung von Sensoren und Aktoren über eine Steuereinheit im Haushalt

• Sensoren: Thermometer, Bewegungsmelder, Rauchmelder, Kamera, Druckschalter

• Aktoren: (Funk)steckdose, Relais, LED, Servo-Motor

• Steuereinheit (Controller): Hardware + Software

• Ziele

• Kostenersparnis durch 'intelligente' Steuerung (Heizkosten/Stromkosten) 

• Mehr Komfort durch automatische Anpassung der Umgebung

(z.B. Lichtsteuerung: zeitgesteuert, je nach Helligkeit/Bewegung etc.)

• Spaß & Spiel
Heimautomatisierung: Beispiele
• Automatische Heizungssteuerung und Monitoring der Energiekosten

• Automatisch Rolladen zu bestimmter Zeit hochfahren

• Lampen im Haus in Gruppen anordnen und per FB steuern

• Bei Annäherung das Garagentor öffnen

• E-Mail wenn Briefkasten geöffnet wird

• Foto wenn Türklingel betätigt wird

• Alarmanlage
Heimautomatisierung: Komponenten
• Controller (Steuereinheit)

• Hardware: PC, RaspberryPi, Arduino, NAS, Fritzbox etc. 

• Software: Make or Buy !?

• fertige Lösung - z.B.

• FHEM (Perl, www.fhem.de)

• openHAB (Java, www.openhab.org)

• eigene Lösung entwickeln

• auf Basis von Python 

& bestehenden Bibliotheken

• HCI (Human Computer Interface)

• Fernbedienung (IR)

• Touchscreen (z.B. Tablet)

• Web-GUI

• Smartphone App
Controller
Sensor Aktor
HCI
Hardware
Software
RASPBERRY	PI,	GPIO,	PYTHON
Grundlagen
Vorstellung: Der Raspberry Pi
• SOC Minicomputer: "System on a chip"
• GPU + CPU + RAM = BCM2835

• on-board: Ethernet-Schnittstelle und zwei USB-Anschlüsse (Modell B)

• "BYOP"-Prinzip: "bring your own peripherals“

• Lieferung ohne Maus, Tastatur, Netzstecker etc.

• Nackte Platine (ohne Gehäuse), ohne SD-Card und OS

• Einsetzbar für Elektronikprojekte

• Steuerung elektronischer Geräte mittels Ein-/Ausgabekontakte (GPIOs)
Thomas Koch
Hardware:
Raspberry Pi
• GPIO
• General Purpose 

Input/Output

• CSI 

• Camera

Serial Interface

• HDMI
• Video out

• micro USB
• Power
Raspberry Pi2 Model B
2nd generation Raspberry Pi
Datenblatt: Raspberry Pi
• aktuelles Modell: Raspberry Pi3 Model B— 3rd generation Raspberry Pi

• Kosten: ca. 30 € (nur Board)

• 1 GB RAM / CPU: 64-Bit-QUAD-Core ARMv8-Prozessor BCM2837 (1,2 GHz)

• Betriebsspannung: 5 V (Micro-USB Buchse) 

• Datenträger: Micro SD Speicherkartenslot

• Anschlüsse: HDMI, LAN 10/100 Mbps, 4x USB 2.0, Audio, Video-Out

• Erweiterte 40-Pin-GPIO

• Integrierter WiFi-Adapter BCM43438

• Integriertes Bluetooth Low Energy (BLE) Modul

• Quelle: https://www.raspberrypi.org/products/raspberry-pi-3-model-b/
Python auf dem Raspberry PI
• Batteries included : Python & Raspbian OS
• Raspbian kommt mit Python 2.7 und 3.4

• aktuell: Raspbian Wheezy4.1 mit Python 2.7.9 und Python 3.4.2

• Entscheidung für eigene Projekte: Py27 oder Py3x (aktuell: 3.5)

• Should I use Python 2 or Python 3: 

https://wiki.python.org/moin/Python2orPython3 

• Zusatzpakete per apt-get oder ‚pip install‘ installieren

• GPIO mit Python
• In Raspbian vorinstalliert: RPi.GPIO
• Python Bibliothek für einfachen GPIO Zugriff 

https://pypi.python.org/pypi/RPi.GPIO
• Hinweis: Zugriff auf GPIO erfordert root Recht
Beispiel: RPi.GPIO
• LED einschalten
import RPi.GPIO as io
# header pin numbering
io.setmode(io.BCM)
# Setup one output channel
io.setup(18, io.OUT)
# set pin output high
io.output(18, io.HIGH)
https://projects.drogon.net/raspberry-pi/gpio-examples/tux-crossing/gpio-examples-1-a-single-led/
BACKEND
PRAKTISCHE	ANWENDUNGEN
Bewegungsmelder
• Bewegungsmelder als einfacher Sensor
• PIR-Bewegungsmelder (passive infrared) sind kostengünstig und effizient

• Anschluss über GPIO

• Steuerung per Python-Script (RPi Library)

• Achtung: nur Sensoren mit 3.3 V 

Ausgangsspannung verwenden!

• Schaltung
• PIR-Bewegungsmelder schaltet 

gelben PIN auf 3.3V

• Anschluss an 5V (rot) und GND (schwarz)
siehe https://learn.adafruit.com/adafruits-raspberry-pi-lesson-12-sensing-movement/
Bewegungsmelder
auslesen
• Python Code
import time
import RPi.GPIO as io
io.setmode(io.BCM)
pir_pin = 18
io.setup(pir_pin, io.IN)
while True:
if io.input(pir_pin):
print("PIR MOTION")
time.sleep(1)
Temperaturmessung
• Um Temperaturen zu messen, braucht man
• einen Sensor, der Temperatur in eine Spannung umsetzt

• einen A/D-Wandler, der das analoge Signal digitalisiert

• aber: Raspberry Pi unterstützt nur digitale Signale (via GPIO)

• Temperatursensor für Raspi: DS1820(B)
• ist Temperatursensor und A/D-Wandler in einem

• ist bereits kalibriert (Genauigkeit +-0,5°C)

• verwendet 1-Wire-Ausgang 

• d.h. man benötigt nur einen einzigen GPIO-Pin (auch für mehrere Sensoren)
Temperatursensor: Anschluss
• Vorbereitung (Linux)
• 1. Aktivierung des Device Tree Overlay für 1-wire - in /boot/config.txt

dtoverlay=w1-gpio

• 2. Kernelmodule laden (permanent) - in /etc/modules 

w1-gpio pullup=1

w1-therm

• Schaltung
• DQ an GPIO Port 4 (ist für den Einsatz als 1wire-Bus vorgesehen!)

• VDD an 3,3V (rot) 

• GND an GND (schwarz) 

• Pull-up Widerstand 4,7 kOhm
Quelle: https://www.raspiprojekt.de/machen/basics/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html
Temperatursensor auslesen
• Python Code
• verwendet Bibliothek "W1ThermSensor"

https://timofurrer.github.io/w1thermsensor

• $ pip install w1thermsensor

from w1thermsensor import W1ThermSensor
sensor = W1ThermSensor()
temperature_in_celsius = sensor.get_temperature()
Funksteckdose
• Technik
• Funksteckdosen mit Fernbedienung sind verbreitet und
kostengünstig (z.B. Elro AB440S/3C Funksteckdosen Set)

• Steuerung Funksteckdose erfolgt über 433 MHz Frequenz

• via 434MHz RF Link Transmitter (Sendemodul)

• Python Bibliotheken
• elropi.py - verwendet RPi.GPIO Library

http://pastebin.com/aRipYrZ6

• elro_wiringpi.py - verwendet WiringPi Library

http://www.raspberrypi.org/forums/viewtopic.php?f=32&t=32177
$ python elro_wiringpi.py 8 1 # Switch D is turned on
Funksteckdose: Anschluss des Sendemoduls
• Schaltung
• DATA an GPIO Port (gelb) 

• VCC an 5V (rot) 

• GND an GND (schwarz) 

• ANT 

• Antennenkabel (17 cm)
• Bild: https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=66946

s. auch https://alexbloggt.com/funksteckdosen-raspberry-pi-teil1/
Funksteckdose steuern
• Python Code
• verwendet elro.py

import time

from elro import RemoteSwitch
# Variablen entsprechend der dip-Schalter anpassen!
default_key = [1,0,0,0,1] # Gerätecode („system code“)
device_num = 1 # 1. Steckdose („unit code“)
# GPIO pin an Verdrahtung auf Raspberry Pi anpassen!
default_pin =17
device = RemoteSwitch(device=device_num,
key=default_key,
pin=default_pin)
device.switchOn()
time.sleep(5)
device.switchOff()
Kamera
• Anbindung einer Kamera
• Fotos lassen sich am einfachsten mit einer USB-WebCam aufnehmen

• Bild aufnehmen von WebCam (Linux)
$ apt-get install fswebcam

$ fswebcam -v -r "640×480" test.jpg
• Ausblick
• Das (Linux) motion-Paket bietet Bewegungs-Erkennung (Motion Detection)

• Die Python-Bibliothek OpenCV bietet weitreichende Möglichkeiten 

zur Weiterverarbeitung (inkl. Bilderkennung) …
Kamera
• Python Code
• Ziel: Foto aus Python heraus mit USB-WebCam aufnehmen

• Lösung: shell-wrapper Bibliothek ‚sh’ plus ‚fswebcam’ Kommando

import sh, os, datetime
timeString = datetime.datetime.now().strftime(„%Y%m%d_%H%M")
snapshot = "snapshot-%s.jpg" % timeString
snapshot = os.path.join("static", "webcam", snapshot)
sh.fswebcam("--title", "Home", "--save", snapshot)
Hardware-Setup
• Bastel-Lösung auf Breakout Board

Bewegungsmelder
USB-Webcam
Temperatursensor
433MHz

Transmitter
FRONTEND
PYHOME	-	WEB-GUI
PyHome - einfache Web-App 

zur Heimautomatisierung
• Anforderungen an die Benutzerschnittstelle
• Anzeige der Daten von Sensoren
• Bewegungsmelder

• Temperaturmessung

• aktuelles Bild der WebCam

• Steuerung der Aktoren
• Funksteckdose(n) steuern

• Allgemein
• einfache Bedienung, mobile friendly
PyHome - Bedienung der Web-App 

Screenshots
• Home Screen Anzeige der Sensoren
PyHome - Bedienung der Web-App 

Screenshots
• Home Screen Steuerung der Aktoren
PyHome - Web-App 

Technik: Python, HTML, JavaScript
• Flask Web-App
• basiert auf Flask Web-Framework

• verwendet jQuery Mobile (JavaScript UI Framework)

• one pager

• Umfang
• 3 Python Module (174 LOC) 

• 1 JavaScript Modul (54 LOC)

• 1 HTML Template (index.html - 85 Zeilen)
PyHome - Web-App 

Flask
• Flask Web-Framework http://flask.pocoo.org
• schnell eine Web-Anwendung erstellen

• Templates einbinden (Jinja2 template engine)

• einfach Funktionen über URLs ansprechen http://myapp.local/turn/1

• oder auch Klassenbasierte Views einsetzen ...

• Beispiel
@app.route("/turn/<switch>", methods=["POST"])

def turn(switch):

on = request.form['cmd']=="on"

details = {}

if turnSwitch(switch, on):

timeString = datetime.now().strftime(„%Y-%m-%d %H:%M")

details.update({'time': timeString})

return jsonify(**details)

PyHome
Howto
• Kurzanleitung zum Selbermachen
• $	sudo	apt-get	install	git-core	
• $	git	clone	git@github.com:tommykoch/pyhome.git	
• $	sudo	pip	install	-r	requirements.txt	
• $	sudo	apt-get	install	fswebcam	
• $	sudo	python	home.py



startet	flask	web	server	(development)	auf	port	80
Kontakt / Fragen
• Thomas Koch
• Twitter: @tomy_koch
• Folien: http://de.slideshare.net/tomykoch
• PyCologne
• http://wiki.python-forum.de/pycologne
• http://www.pycologne.de
• PyHome (Quellcode)
• https://github.com/tommykoch/pyhome
Links
• Raspberry Pi Tutorials & Seiten zum Einstieg
• Raspberry Pi Wiki: http://elinux.org/RPi_Hub

• Flask on Pi Tutorial http://flaskpi.com/tutorials

• Tutorial-Übersicht: http://www.forum-raspberrypi.de/Thread-tutorial-uebersicht

• Tutorial-Website: http://raspberrypiguide.de

• Nützliche Raspberry Pi Websites
• Raspberry Foundation (EN): http://www.raspberrypi.org

• Adafruit (Tutorials, hardware kits, etc. - EN): http://learn.adafruit.com

• Online-Magazin (EN): http://www.themagpi.com
Literatur
• Raspberry Pi - Einstieg • Optimierung • Projekte
Maik Schmitd, dpunkt Verlag

http://www.dpunkt.de/raspi 

• Getting Started with Raspberry Pi (Englisch)

Verlag: o’reilly/makers

http://blog.makezine.com/2012/12/25/ten-raspberry-pi-tips 

• Hacking Electronics: An Illustrated DIY Guide 

for Makers and Hobbyists (Englisch)

	 Verlag: Mcgraw-Hill Publ.Comp.

http://www.amazon.de/Hacking-Electronics-Illustrated-Makers-Hobbyists/dp/0071802363
Copyrights
• Markennamen
• The Raspberry PiWord Mark and Raspberry Pi Logo are owned by the Raspberry Pi Foundation.
• All brand names names and marks mentioned may be trademarks or registered 

trademarks of their respective owners.
• Bildquellen:
• Logos: python.org, http://www.raspberrypi.org , pycologne.de
• PIR Sensor Closeup, PIR Breadboard Layout, ...
• https://learn.adafruit.com/assets
• by Simon Monk (Attribution Creative Commons License)
• Indy Car in Garage: Flickr (creative commons share-alike) 

Thanks to John P.
• House in rural Puxin Township: Flickr (Attribution-NonCommercial 2.0 Generic)

Thanks to Alexander Synaptic

Mais conteúdo relacionado

Destaque

Raspberry Pi für Einsteiger
Raspberry Pi für EinsteigerRaspberry Pi für Einsteiger
Raspberry Pi für EinsteigerJoachim Hummel
 
Heizungsmonitoring mit 1-wire Bus
Heizungsmonitoring mit 1-wire BusHeizungsmonitoring mit 1-wire Bus
Heizungsmonitoring mit 1-wire BusPeter Eulberg
 
Gestalten von websites mit dem cms joomla
Gestalten von websites mit dem cms joomlaGestalten von websites mit dem cms joomla
Gestalten von websites mit dem cms joomlaGuenter Nimmerfall
 
Python crash-kurs
Python crash-kursPython crash-kurs
Python crash-kursklausbremer
 
Zp rau sey
Zp rau seyZp rau sey
Zp rau seyneuwerk
 
evaluación final maria fernanda larios rodriguez de a tecnologia
evaluación final maria fernanda larios rodriguez  de a tecnologiaevaluación final maria fernanda larios rodriguez  de a tecnologia
evaluación final maria fernanda larios rodriguez de a tecnologiaMaria Fernanda Larios Rodriguez
 
The Raspberry Pi JavaFX Carputer
The Raspberry Pi JavaFX CarputerThe Raspberry Pi JavaFX Carputer
The Raspberry Pi JavaFX CarputerSimon Ritter
 
Zp an wie
Zp an wieZp an wie
Zp an wieneuwerk
 
Seminar Presentation on raspberry pi
Seminar Presentation on raspberry piSeminar Presentation on raspberry pi
Seminar Presentation on raspberry piGeorgekutty Francis
 
Raspberry Pi Presentation
Raspberry Pi PresentationRaspberry Pi Presentation
Raspberry Pi PresentationGeekizer
 
Introduction to raspberry pi
Introduction to raspberry piIntroduction to raspberry pi
Introduction to raspberry pipraveen_23
 
Raspberry pi : an introduction
Raspberry pi : an introductionRaspberry pi : an introduction
Raspberry pi : an introductionLTG Oxford
 

Destaque (13)

Raspberry Pi für Einsteiger
Raspberry Pi für EinsteigerRaspberry Pi für Einsteiger
Raspberry Pi für Einsteiger
 
Heizungsmonitoring mit 1-wire Bus
Heizungsmonitoring mit 1-wire BusHeizungsmonitoring mit 1-wire Bus
Heizungsmonitoring mit 1-wire Bus
 
Gestalten von websites mit dem cms joomla
Gestalten von websites mit dem cms joomlaGestalten von websites mit dem cms joomla
Gestalten von websites mit dem cms joomla
 
Python crash-kurs
Python crash-kursPython crash-kurs
Python crash-kurs
 
Zp rau sey
Zp rau seyZp rau sey
Zp rau sey
 
evaluación final maria fernanda larios rodriguez de a tecnologia
evaluación final maria fernanda larios rodriguez  de a tecnologiaevaluación final maria fernanda larios rodriguez  de a tecnologia
evaluación final maria fernanda larios rodriguez de a tecnologia
 
The Raspberry Pi JavaFX Carputer
The Raspberry Pi JavaFX CarputerThe Raspberry Pi JavaFX Carputer
The Raspberry Pi JavaFX Carputer
 
Zp an wie
Zp an wieZp an wie
Zp an wie
 
Seminar Presentation on raspberry pi
Seminar Presentation on raspberry piSeminar Presentation on raspberry pi
Seminar Presentation on raspberry pi
 
Raspberry Pi Presentation
Raspberry Pi PresentationRaspberry Pi Presentation
Raspberry Pi Presentation
 
Introduction to raspberry pi
Introduction to raspberry piIntroduction to raspberry pi
Introduction to raspberry pi
 
Raspberry pi : an introduction
Raspberry pi : an introductionRaspberry pi : an introduction
Raspberry pi : an introduction
 
Raspberry pi
Raspberry pi Raspberry pi
Raspberry pi
 

Semelhante a Einfache Heimautomatisierung auf dem Raspberry Pi mit Python

Raspberry Pi im Embedded Testing - „tool“ oder „toy“?
Raspberry Pi im Embedded Testing - „tool“ oder „toy“?Raspberry Pi im Embedded Testing - „tool“ oder „toy“?
Raspberry Pi im Embedded Testing - „tool“ oder „toy“?Michel Lawaty
 
esp8266 Demo - bonn agile tech talks
esp8266 Demo - bonn agile tech talksesp8266 Demo - bonn agile tech talks
esp8266 Demo - bonn agile tech talksAndreas Kluth
 
Windows 10 IoT Core
Windows 10 IoT CoreWindows 10 IoT Core
Windows 10 IoT CoreJens Siebert
 
.NET Gadgeteer // msg@dnc12
.NET Gadgeteer // msg@dnc12.NET Gadgeteer // msg@dnc12
.NET Gadgeteer // msg@dnc12Holger Wendel
 
Tk roadschow-ipmi-pdeneu
Tk roadschow-ipmi-pdeneuTk roadschow-ipmi-pdeneu
Tk roadschow-ipmi-pdeneuWerner Fischer
 
Windows 10 IoT Core
Windows 10 IoT CoreWindows 10 IoT Core
Windows 10 IoT CoreJens Siebert
 
Weltvermessen mit OpenDataCam - Wie ich einmal eine Viertelmillionen Autos ge...
Weltvermessen mit OpenDataCam - Wie ich einmal eine Viertelmillionen Autos ge...Weltvermessen mit OpenDataCam - Wie ich einmal eine Viertelmillionen Autos ge...
Weltvermessen mit OpenDataCam - Wie ich einmal eine Viertelmillionen Autos ge...Stephan Hochhaus
 
openstack Übersicht @GPN15
openstack Übersicht @GPN15openstack Übersicht @GPN15
openstack Übersicht @GPN15m1no
 
Warum Python?
Warum Python?Warum Python?
Warum Python?tharwan
 
Ambilight, Raspberry Pi, Ubuntu & Hyperion
Ambilight, Raspberry Pi, Ubuntu & HyperionAmbilight, Raspberry Pi, Ubuntu & Hyperion
Ambilight, Raspberry Pi, Ubuntu & HyperionB1 Systems GmbH
 
Python Installationen für Data Science
Python Installationen für Data SciencePython Installationen für Data Science
Python Installationen für Data ScienceDatamics
 
[DE] IoT Protokolle
[DE] IoT Protokolle[DE] IoT Protokolle
[DE] IoT ProtokolleLars Gregori
 

Semelhante a Einfache Heimautomatisierung auf dem Raspberry Pi mit Python (20)

Raspberry Pi im Embedded Testing - „tool“ oder „toy“?
Raspberry Pi im Embedded Testing - „tool“ oder „toy“?Raspberry Pi im Embedded Testing - „tool“ oder „toy“?
Raspberry Pi im Embedded Testing - „tool“ oder „toy“?
 
Feature satip4
Feature satip4Feature satip4
Feature satip4
 
esp8266 Demo - bonn agile tech talks
esp8266 Demo - bonn agile tech talksesp8266 Demo - bonn agile tech talks
esp8266 Demo - bonn agile tech talks
 
Industry 4.0 in a box
Industry 4.0 in a boxIndustry 4.0 in a box
Industry 4.0 in a box
 
Windows 10 IoT Core
Windows 10 IoT CoreWindows 10 IoT Core
Windows 10 IoT Core
 
openHAB @ rheinJUG Düsseldorf
openHAB @ rheinJUG DüsseldorfopenHAB @ rheinJUG Düsseldorf
openHAB @ rheinJUG Düsseldorf
 
Smart Home - 10 Jahre danach
Smart Home - 10 Jahre danachSmart Home - 10 Jahre danach
Smart Home - 10 Jahre danach
 
.NET Gadgeteer
.NET Gadgeteer.NET Gadgeteer
.NET Gadgeteer
 
.NET Gadgeteer // msg@dnc12
.NET Gadgeteer // msg@dnc12.NET Gadgeteer // msg@dnc12
.NET Gadgeteer // msg@dnc12
 
Tk roadschow-ipmi-pdeneu
Tk roadschow-ipmi-pdeneuTk roadschow-ipmi-pdeneu
Tk roadschow-ipmi-pdeneu
 
Windows 10 IoT Core
Windows 10 IoT CoreWindows 10 IoT Core
Windows 10 IoT Core
 
Weltvermessen mit OpenDataCam - Wie ich einmal eine Viertelmillionen Autos ge...
Weltvermessen mit OpenDataCam - Wie ich einmal eine Viertelmillionen Autos ge...Weltvermessen mit OpenDataCam - Wie ich einmal eine Viertelmillionen Autos ge...
Weltvermessen mit OpenDataCam - Wie ich einmal eine Viertelmillionen Autos ge...
 
openstack Übersicht @GPN15
openstack Übersicht @GPN15openstack Übersicht @GPN15
openstack Übersicht @GPN15
 
IoT und Smarthome
IoT und Smarthome IoT und Smarthome
IoT und Smarthome
 
Warum Python?
Warum Python?Warum Python?
Warum Python?
 
Big Python
Big PythonBig Python
Big Python
 
Ambilight, Raspberry Pi, Ubuntu & Hyperion
Ambilight, Raspberry Pi, Ubuntu & HyperionAmbilight, Raspberry Pi, Ubuntu & Hyperion
Ambilight, Raspberry Pi, Ubuntu & Hyperion
 
Grundlagen nmap
Grundlagen nmapGrundlagen nmap
Grundlagen nmap
 
Python Installationen für Data Science
Python Installationen für Data SciencePython Installationen für Data Science
Python Installationen für Data Science
 
[DE] IoT Protokolle
[DE] IoT Protokolle[DE] IoT Protokolle
[DE] IoT Protokolle
 

Mais de Thomas Koch

CI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python CodeCI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python CodeThomas Koch
 
Facettensuche mit Lucene und Solr
Facettensuche mit Lucene und SolrFacettensuche mit Lucene und Solr
Facettensuche mit Lucene und SolrThomas Koch
 
BSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtBSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtThomas Koch
 
Python-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipsePython-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipseThomas Koch
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzThomas Koch
 
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemEnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemThomas Koch
 
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...Thomas Koch
 
Volltextsuche mit Lucene und Solr
Volltextsuche mit Lucene und SolrVolltextsuche mit Lucene und Solr
Volltextsuche mit Lucene und SolrThomas Koch
 
PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011Thomas Koch
 
Getting Started with Dojo Toolkit
Getting Started with Dojo ToolkitGetting Started with Dojo Toolkit
Getting Started with Dojo ToolkitThomas Koch
 
Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008) Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008) Thomas Koch
 
Suche und PyLucene
Suche und PyLuceneSuche und PyLucene
Suche und PyLuceneThomas Koch
 

Mais de Thomas Koch (12)

CI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python CodeCI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python Code
 
Facettensuche mit Lucene und Solr
Facettensuche mit Lucene und SolrFacettensuche mit Lucene und Solr
Facettensuche mit Lucene und Solr
 
BSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtBSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemacht
 
Python-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipsePython-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und Eclipse
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen Einsatz
 
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemEnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
 
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
 
Volltextsuche mit Lucene und Solr
Volltextsuche mit Lucene und SolrVolltextsuche mit Lucene und Solr
Volltextsuche mit Lucene und Solr
 
PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011
 
Getting Started with Dojo Toolkit
Getting Started with Dojo ToolkitGetting Started with Dojo Toolkit
Getting Started with Dojo Toolkit
 
Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008) Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008)
 
Suche und PyLucene
Suche und PyLuceneSuche und PyLucene
Suche und PyLucene
 

Einfache Heimautomatisierung auf dem Raspberry Pi mit Python

  • 1. Einfache Heimautomatisierung auf dem Raspberry Pi mit Python Thomas Koch 
 @tomy_koch Pi and More 9 Uni Trier 11. Juni 2016
  • 2. über mich • Thomas Koch • Bonn • Software-Entwickler • Python, JavaScript,Web ... • Python User Group PyCologne • Orga PythonCamp • Hobby-Bastler • Raspberry Pi • OrbiTeam Software (Bonn) • BSCW (Collaboration Server)
  • 3. Agenda • Heimautomatisierung • Hintergrund und Anwendungsbeispiele • Heimautomatisierung mit dem Raspberry Pi • Kurzeinführung: Hardware, GPIO mit Python • Praktische Anwendungen • Bewegungsmelder • Temperaturmessung • Funksteckdose(n) steuern • Anbindung einer WebCam • Benutzerschnittstelle leicht gemacht • PyHome - einfache Web-App zur Heimautomatisierung
  • 5. Heimautomatisierung (Home Automation) • Idee: Überwachung und Steuerung elektrischer Geräte im Haushalt • durch Verbindung von Sensoren und Aktoren über eine Steuereinheit im Haushalt • Sensoren: Thermometer, Bewegungsmelder, Rauchmelder, Kamera, Druckschalter • Aktoren: (Funk)steckdose, Relais, LED, Servo-Motor • Steuereinheit (Controller): Hardware + Software • Ziele • Kostenersparnis durch 'intelligente' Steuerung (Heizkosten/Stromkosten) • Mehr Komfort durch automatische Anpassung der Umgebung
 (z.B. Lichtsteuerung: zeitgesteuert, je nach Helligkeit/Bewegung etc.) • Spaß & Spiel
  • 6. Heimautomatisierung: Beispiele • Automatische Heizungssteuerung und Monitoring der Energiekosten • Automatisch Rolladen zu bestimmter Zeit hochfahren • Lampen im Haus in Gruppen anordnen und per FB steuern • Bei Annäherung das Garagentor öffnen • E-Mail wenn Briefkasten geöffnet wird • Foto wenn Türklingel betätigt wird • Alarmanlage
  • 7. Heimautomatisierung: Komponenten • Controller (Steuereinheit) • Hardware: PC, RaspberryPi, Arduino, NAS, Fritzbox etc. • Software: Make or Buy !? • fertige Lösung - z.B. • FHEM (Perl, www.fhem.de) • openHAB (Java, www.openhab.org) • eigene Lösung entwickeln • auf Basis von Python 
 & bestehenden Bibliotheken • HCI (Human Computer Interface) • Fernbedienung (IR) • Touchscreen (z.B. Tablet) • Web-GUI • Smartphone App Controller Sensor Aktor HCI Hardware Software
  • 9. Vorstellung: Der Raspberry Pi • SOC Minicomputer: "System on a chip" • GPU + CPU + RAM = BCM2835 • on-board: Ethernet-Schnittstelle und zwei USB-Anschlüsse (Modell B) • "BYOP"-Prinzip: "bring your own peripherals“ • Lieferung ohne Maus, Tastatur, Netzstecker etc. • Nackte Platine (ohne Gehäuse), ohne SD-Card und OS • Einsetzbar für Elektronikprojekte • Steuerung elektronischer Geräte mittels Ein-/Ausgabekontakte (GPIOs)
  • 10. Thomas Koch Hardware: Raspberry Pi • GPIO • General Purpose 
 Input/Output • CSI • Camera
 Serial Interface • HDMI • Video out • micro USB • Power Raspberry Pi2 Model B 2nd generation Raspberry Pi
  • 11. Datenblatt: Raspberry Pi • aktuelles Modell: Raspberry Pi3 Model B— 3rd generation Raspberry Pi • Kosten: ca. 30 € (nur Board) • 1 GB RAM / CPU: 64-Bit-QUAD-Core ARMv8-Prozessor BCM2837 (1,2 GHz) • Betriebsspannung: 5 V (Micro-USB Buchse) • Datenträger: Micro SD Speicherkartenslot • Anschlüsse: HDMI, LAN 10/100 Mbps, 4x USB 2.0, Audio, Video-Out • Erweiterte 40-Pin-GPIO • Integrierter WiFi-Adapter BCM43438 • Integriertes Bluetooth Low Energy (BLE) Modul • Quelle: https://www.raspberrypi.org/products/raspberry-pi-3-model-b/
  • 12. Python auf dem Raspberry PI • Batteries included : Python & Raspbian OS • Raspbian kommt mit Python 2.7 und 3.4 • aktuell: Raspbian Wheezy4.1 mit Python 2.7.9 und Python 3.4.2 • Entscheidung für eigene Projekte: Py27 oder Py3x (aktuell: 3.5) • Should I use Python 2 or Python 3: 
 https://wiki.python.org/moin/Python2orPython3 • Zusatzpakete per apt-get oder ‚pip install‘ installieren • GPIO mit Python • In Raspbian vorinstalliert: RPi.GPIO • Python Bibliothek für einfachen GPIO Zugriff 
 https://pypi.python.org/pypi/RPi.GPIO • Hinweis: Zugriff auf GPIO erfordert root Recht
  • 13. Beispiel: RPi.GPIO • LED einschalten import RPi.GPIO as io # header pin numbering io.setmode(io.BCM) # Setup one output channel io.setup(18, io.OUT) # set pin output high io.output(18, io.HIGH) https://projects.drogon.net/raspberry-pi/gpio-examples/tux-crossing/gpio-examples-1-a-single-led/
  • 15. Bewegungsmelder • Bewegungsmelder als einfacher Sensor • PIR-Bewegungsmelder (passive infrared) sind kostengünstig und effizient • Anschluss über GPIO • Steuerung per Python-Script (RPi Library) • Achtung: nur Sensoren mit 3.3 V 
 Ausgangsspannung verwenden! • Schaltung • PIR-Bewegungsmelder schaltet 
 gelben PIN auf 3.3V • Anschluss an 5V (rot) und GND (schwarz) siehe https://learn.adafruit.com/adafruits-raspberry-pi-lesson-12-sensing-movement/
  • 16. Bewegungsmelder auslesen • Python Code import time import RPi.GPIO as io io.setmode(io.BCM) pir_pin = 18 io.setup(pir_pin, io.IN) while True: if io.input(pir_pin): print("PIR MOTION") time.sleep(1)
  • 17. Temperaturmessung • Um Temperaturen zu messen, braucht man • einen Sensor, der Temperatur in eine Spannung umsetzt • einen A/D-Wandler, der das analoge Signal digitalisiert • aber: Raspberry Pi unterstützt nur digitale Signale (via GPIO) • Temperatursensor für Raspi: DS1820(B) • ist Temperatursensor und A/D-Wandler in einem • ist bereits kalibriert (Genauigkeit +-0,5°C) • verwendet 1-Wire-Ausgang • d.h. man benötigt nur einen einzigen GPIO-Pin (auch für mehrere Sensoren)
  • 18. Temperatursensor: Anschluss • Vorbereitung (Linux) • 1. Aktivierung des Device Tree Overlay für 1-wire - in /boot/config.txt
 dtoverlay=w1-gpio • 2. Kernelmodule laden (permanent) - in /etc/modules 
 w1-gpio pullup=1
 w1-therm • Schaltung • DQ an GPIO Port 4 (ist für den Einsatz als 1wire-Bus vorgesehen!) • VDD an 3,3V (rot) • GND an GND (schwarz) • Pull-up Widerstand 4,7 kOhm Quelle: https://www.raspiprojekt.de/machen/basics/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html
  • 19. Temperatursensor auslesen • Python Code • verwendet Bibliothek "W1ThermSensor"
 https://timofurrer.github.io/w1thermsensor • $ pip install w1thermsensor from w1thermsensor import W1ThermSensor sensor = W1ThermSensor() temperature_in_celsius = sensor.get_temperature()
  • 20. Funksteckdose • Technik • Funksteckdosen mit Fernbedienung sind verbreitet und kostengünstig (z.B. Elro AB440S/3C Funksteckdosen Set) • Steuerung Funksteckdose erfolgt über 433 MHz Frequenz • via 434MHz RF Link Transmitter (Sendemodul) • Python Bibliotheken • elropi.py - verwendet RPi.GPIO Library
 http://pastebin.com/aRipYrZ6 • elro_wiringpi.py - verwendet WiringPi Library
 http://www.raspberrypi.org/forums/viewtopic.php?f=32&t=32177 $ python elro_wiringpi.py 8 1 # Switch D is turned on
  • 21. Funksteckdose: Anschluss des Sendemoduls • Schaltung • DATA an GPIO Port (gelb) • VCC an 5V (rot) • GND an GND (schwarz) • ANT • Antennenkabel (17 cm) • Bild: https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=66946
 s. auch https://alexbloggt.com/funksteckdosen-raspberry-pi-teil1/
  • 22. Funksteckdose steuern • Python Code • verwendet elro.py import time
 from elro import RemoteSwitch # Variablen entsprechend der dip-Schalter anpassen! default_key = [1,0,0,0,1] # Gerätecode („system code“) device_num = 1 # 1. Steckdose („unit code“) # GPIO pin an Verdrahtung auf Raspberry Pi anpassen! default_pin =17 device = RemoteSwitch(device=device_num, key=default_key, pin=default_pin) device.switchOn() time.sleep(5) device.switchOff()
  • 23. Kamera • Anbindung einer Kamera • Fotos lassen sich am einfachsten mit einer USB-WebCam aufnehmen • Bild aufnehmen von WebCam (Linux) $ apt-get install fswebcam
 $ fswebcam -v -r "640×480" test.jpg • Ausblick • Das (Linux) motion-Paket bietet Bewegungs-Erkennung (Motion Detection) • Die Python-Bibliothek OpenCV bietet weitreichende Möglichkeiten 
 zur Weiterverarbeitung (inkl. Bilderkennung) …
  • 24. Kamera • Python Code • Ziel: Foto aus Python heraus mit USB-WebCam aufnehmen • Lösung: shell-wrapper Bibliothek ‚sh’ plus ‚fswebcam’ Kommando import sh, os, datetime timeString = datetime.datetime.now().strftime(„%Y%m%d_%H%M") snapshot = "snapshot-%s.jpg" % timeString snapshot = os.path.join("static", "webcam", snapshot) sh.fswebcam("--title", "Home", "--save", snapshot)
  • 25. Hardware-Setup • Bastel-Lösung auf Breakout Board
 Bewegungsmelder USB-Webcam Temperatursensor 433MHz
 Transmitter
  • 27. PyHome - einfache Web-App 
 zur Heimautomatisierung • Anforderungen an die Benutzerschnittstelle • Anzeige der Daten von Sensoren • Bewegungsmelder • Temperaturmessung • aktuelles Bild der WebCam • Steuerung der Aktoren • Funksteckdose(n) steuern • Allgemein • einfache Bedienung, mobile friendly
  • 28. PyHome - Bedienung der Web-App 
 Screenshots • Home Screen Anzeige der Sensoren
  • 29. PyHome - Bedienung der Web-App 
 Screenshots • Home Screen Steuerung der Aktoren
  • 30. PyHome - Web-App 
 Technik: Python, HTML, JavaScript • Flask Web-App • basiert auf Flask Web-Framework • verwendet jQuery Mobile (JavaScript UI Framework) • one pager • Umfang • 3 Python Module (174 LOC) • 1 JavaScript Modul (54 LOC) • 1 HTML Template (index.html - 85 Zeilen)
  • 31. PyHome - Web-App 
 Flask • Flask Web-Framework http://flask.pocoo.org • schnell eine Web-Anwendung erstellen • Templates einbinden (Jinja2 template engine) • einfach Funktionen über URLs ansprechen http://myapp.local/turn/1 • oder auch Klassenbasierte Views einsetzen ... • Beispiel @app.route("/turn/<switch>", methods=["POST"])
 def turn(switch):
 on = request.form['cmd']=="on"
 details = {}
 if turnSwitch(switch, on):
 timeString = datetime.now().strftime(„%Y-%m-%d %H:%M")
 details.update({'time': timeString})
 return jsonify(**details)

  • 32. PyHome Howto • Kurzanleitung zum Selbermachen • $ sudo apt-get install git-core • $ git clone git@github.com:tommykoch/pyhome.git • $ sudo pip install -r requirements.txt • $ sudo apt-get install fswebcam • $ sudo python home.py
 
 startet flask web server (development) auf port 80
  • 33. Kontakt / Fragen • Thomas Koch • Twitter: @tomy_koch • Folien: http://de.slideshare.net/tomykoch • PyCologne • http://wiki.python-forum.de/pycologne • http://www.pycologne.de • PyHome (Quellcode) • https://github.com/tommykoch/pyhome
  • 34. Links • Raspberry Pi Tutorials & Seiten zum Einstieg • Raspberry Pi Wiki: http://elinux.org/RPi_Hub • Flask on Pi Tutorial http://flaskpi.com/tutorials • Tutorial-Übersicht: http://www.forum-raspberrypi.de/Thread-tutorial-uebersicht • Tutorial-Website: http://raspberrypiguide.de • Nützliche Raspberry Pi Websites • Raspberry Foundation (EN): http://www.raspberrypi.org • Adafruit (Tutorials, hardware kits, etc. - EN): http://learn.adafruit.com • Online-Magazin (EN): http://www.themagpi.com
  • 35. Literatur • Raspberry Pi - Einstieg • Optimierung • Projekte Maik Schmitd, dpunkt Verlag
 http://www.dpunkt.de/raspi 
 • Getting Started with Raspberry Pi (Englisch) Verlag: o’reilly/makers
 http://blog.makezine.com/2012/12/25/ten-raspberry-pi-tips 
 • Hacking Electronics: An Illustrated DIY Guide 
 for Makers and Hobbyists (Englisch) Verlag: Mcgraw-Hill Publ.Comp.
 http://www.amazon.de/Hacking-Electronics-Illustrated-Makers-Hobbyists/dp/0071802363
  • 36. Copyrights • Markennamen • The Raspberry PiWord Mark and Raspberry Pi Logo are owned by the Raspberry Pi Foundation. • All brand names names and marks mentioned may be trademarks or registered 
 trademarks of their respective owners. • Bildquellen: • Logos: python.org, http://www.raspberrypi.org , pycologne.de • PIR Sensor Closeup, PIR Breadboard Layout, ... • https://learn.adafruit.com/assets • by Simon Monk (Attribution Creative Commons License) • Indy Car in Garage: Flickr (creative commons share-alike) 
 Thanks to John P. • House in rural Puxin Township: Flickr (Attribution-NonCommercial 2.0 Generic)
 Thanks to Alexander Synaptic