heimautomatisierung mit python und raspberry pi

38
Heimautomatisierung mit Python und Raspberry Pi Thomas Koch @tomy_koch FrOSCon St.Augustin 24. August 2014 content is licensed under a Creative Commons Attribution 4.0 International license

Upload: thomas-koch

Post on 10-Jun-2015

6.816 views

Category:

Software


13 download

DESCRIPTION

Folien meines Vortrags zu "Heimautomatisierung mit Python und Raspberry Pi" auf der FrOSCon 2014. Der Raspberry Pi ist ein kreditkartengroßer Mini-Computer, der vielfältige Einsatzmöglichkeiten bietet - vom MediaCenter über den eigenen Mini-Cloud-Server bis zum stromsparenden Home-Server als Schaltzentrale der Heim-Automatisierung. Neben einer Vorstellung des Raspberry Pi wird in dem Vortrag in die Programmierung der GPIO-Schnittstelle mittels Python eingegangen und Beispiele zur Verwirklichung eigener Heim-Automatisierungsprojekte präsentiert. s. http://programm.froscon.de/2014/events/1467.html

TRANSCRIPT

Page 1: Heimautomatisierung mit Python und Raspberry Pi

Heimautomatisierung mit Python und Raspberry Pi

Thomas Koch @tomy_koch

FrOSCon St.Augustin 24. August 2014

content is licensed under a Creative Commons Attribution 4.0 International license

Page 2: Heimautomatisierung mit Python und Raspberry Pi

über mich• Thomas Koch

• Bonn

• Software-Entwickler

• Python, JavaScript, Web ...

• Python User Group PyCologne

• Hobby-Bastler

• Raspberry Pi

• OrbiTeam Software (Bonn)

• BSCW (Collaboration Server)

Page 3: Heimautomatisierung mit Python und Raspberry Pi

Agenda• Heimautomatisierung

• Motivation und Beispiele

• Grundlagen Raspberry Pi

• Hardware, GPIO

• Programmierung & Steuerung

• GPIO mit Python, weitere ‚Helferlein‘

• Praktische Beispiele & Demos

• Funksteckdose per Smartphone steuern

• Weitere Informationen

• Literatur & Links

Page 4: Heimautomatisierung mit Python und Raspberry Pi

HEIMAUTOMATISIERUNGMotivation

Page 5: Heimautomatisierung mit Python und Raspberry Pi

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

Page 6: Heimautomatisierung mit Python und Raspberry Pi

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

Page 7: Heimautomatisierung mit Python und Raspberry Pi

Heimautomatisierung: Komponenten

• Controller (Steuereinheit)

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

• Software:

• fertige Lösung wie FHEM (Perl, www.fhem.de)

• eigene Lösung auf Basis von Python & bestehenden Bibliotheken

• HCI (Human Computer Interface)

• Fernbedienung (IR)

• Touchscreen (z.B. Tablet)

• Web-GUI

• Smartphone App

Controller !!!

Sensor Aktor

HCI

HardwareSoftware

Page 8: Heimautomatisierung mit Python und Raspberry Pi

RASPBERRY PIGrundlagen

Page 9: Heimautomatisierung mit Python und Raspberry Pi

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)

Page 10: Heimautomatisierung mit Python und Raspberry Pi

Thomas Koch

Hardware: Raspberry Pi

• GPIO

• General Purpose Input/Output

• CSI

• CameraSerial Interface

USB

LAN

micro USB

HDMI

Page 11: Heimautomatisierung mit Python und Raspberry Pi

Datenblatt: Raspberry Pi

• Kosten: ca. 30 € (nur Board)

• Betriebsspannung: 5 V (Micro-USB Buchse)

• alternativ 4 × AA-Batterien

• CPU: ARM11, 700 MHz

• Verbrauch: ca. 3,5 Watt

• RAM: 512 MB Hauptspeicher (Modell B)

• Datenträger: SD-Speicherkartenslot

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

• Modell B+ (2014) hat 4x USB (und microSD)

• optional: Kamera-Modul (5 Megapixel)

Page 12: Heimautomatisierung mit Python und Raspberry Pi

Raspberry Pi „Tutorial“

• Erste Schritte …

• Raspbian-OS auf SD-Karte „installieren“ , einstecken & anschalten!(siehe weitere Informationen … im Anhang!)

• Raspbian = Standard Betriebssystem (auf Debian-Basis)http://www.raspbian.org/RaspbianImages

• Batteries Included …

• Raspbian kommt mit Python 2.7 und 3.2

• Zusatzpakete per apt-get oder ‚pip install‘ hinzufügen

$ sudo apt-get update

$ sudo apt-get install python-dev

$ sudo apt-get install python-rpi.gpio

Page 13: Heimautomatisierung mit Python und Raspberry Pi

Monitor am Raspi anschliessen

• Per HDMI

• TFT-Monitor, Fernseher etc.

• Per Video-Out

• z.B: mini-KFZ-TFT 3.5‘‘ (für ca. 20 € bei e-bay)

• Lässt sich auch auf 5V-Betrieb (USB) „umbasteln“:

http://kampis-elektroecke.de/?page_id=2631

Page 14: Heimautomatisierung mit Python und Raspberry Pi

GPIO Basics

• GPIO = General Purpose Input Output

• Pins können als Ausgang ODER Eingang fungieren

• VDD = 3.3 V

• Ausgewählte Pins für Schnittstellen (UART, I2C, SPI)

• Ports steuern:

+----------+------+--------+------+-------+!| wiringPi | GPIO | Name | Mode | Value |!+----------+------+--------+------+-------+!| 0 | 17 | GPIO 0 | IN | Low |!| 1 | 18 | GPIO 1 | IN | Low |!| 2 | 27 | GPIO 2 | OUT | Low |!| 3 | 22 | GPIO 3 | IN | Low |!| 4 | 23 | GPIO 4 | IN | Low |!| 5 | 24 | GPIO 5 | IN | Low |!| 6 | 25 | GPIO 6 | IN | Low |!| 7 | 4 | GPIO 7 | IN | Low |!| 8 | 2 | SDA | ALT0 | High |!| 9 | 3 | SCL | ALT0 | High |!| 10 | 8 | CE0 | IN | Low |!| 11 | 7 | CE1 | IN | Low |!| 12 | 10 | MOSI | IN | Low |!| 13 | 9 | MISO | IN | Low |!| 14 | 11 | SCLK | IN | Low |!| 15 | 14 | TxD | ALT0 | High |!| 16 | 15 | RxD | ALT0 | High |!| 17 | 28 | GPIO 8 | IN | Low |!| 18 | 29 | GPIO 9 | IN | Low |!| 19 | 30 | GPIO10 | IN | Low |!| 20 | 31 | GPIO11 | IN | Low |!+----------+------+--------+------+-------+

$ gpio mode 0 out!$ gpio write 0 1

$ gpio readall

Page 15: Heimautomatisierung mit Python und Raspberry Pi

Einfaches Anwendungsbeispiel

• E-Mail Alert via LED

• Anwendung der GPIO Pins: LED an

• GPIO idealerweise viabreakout kit ausführen

• Verdrahtung erfolgt aufsog. bread board !

http://learn.adafruit.com/raspberry-pi-e-mail-notifier-using-leds

Page 16: Heimautomatisierung mit Python und Raspberry Pi

PROGRAMMIERUNG & STEUERUNG

GPIO mit Python

Page 17: Heimautomatisierung mit Python und Raspberry Pi

Python auf dem Raspberry PI

• GPIO mit Python

• RPi.GPIO einfacher GPIO Python Wrapper https://pypi.python.org/pypi/RPi.GPIO "

• Alternative: Python Wrapper für WiringPi: https://github.com/WiringPi

• Hinweis: Zugriff auf GPIO erfordert root Recht!

• Sonstige nützliche Pakete!

• Flask einfaches Web Micro-Framework für kleinere Projekte http://flask.pocoo.org !

• SH subprocess Interface als generischer shell wrapperhttp://amoffat.github.io/sh/

Page 18: Heimautomatisierung mit Python und Raspberry Pi

Beispiel: RPi.GPIO

• LED einschalten

! import RPi.GPIO as GPIO!# header pin numbering !GPIO.setmode(GPIO.BCM) !# Set up one output channel!GPIO.setup(18, GPIO.OUT)!GPIO.output(18, GPIO.HIGH)!!!

https://projects.drogon.net/raspberry-pi/gpio-examples/tux-crossing/gpio-examples-1-a-single-led/

Page 19: Heimautomatisierung mit Python und Raspberry Pi

Beispiel zur Heimautomatisierung

• Szenario: Bewegungsmelder schaltet Licht an

• Zutaten 1x Sensor (PIR-Bewegungsmelder), 1 x Aktor (Funksteckdose)

• Anschluss über GPIO, Steuerung per Python-Script

• Bewegungsmelder

• PIR-Bewegungsmelder: Passiver Infrarot Sensor

• Achtung: nur Sensoren mit 3.3 V Ausgangsspannung verwenden!

• Funksteckdose

• Steuerung Funksteckdose erfolgt über 433 MHz Frequenz

• und 434MHz Sendemodul

Page 20: Heimautomatisierung mit Python und Raspberry Pi

Bewegungsmelder

• Schaltung

• PIR-Bewegungsmelder schaltet gelben PIN auf 3.3V

• Anschluss an 5V (rot) und GND (schwarz)

• Python Codeimport 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)!! siehe https://learn.adafruit.com/adafruits-raspberry-pi-lesson-12-sensing-movement/

Page 21: Heimautomatisierung mit Python und Raspberry Pi

Funksteckdose

• Technik

• 434MHz RF Link Transmitter

• Funktsteckdose (z.B. Elro AB440S/3C Funksteckdosen Set)

• Python Code

• "elropi.py" - verwendet RPi.GPIO Libraryhttp://pastebin.com/aRipYrZ6

• ODER: “elro_wiringpi.py" - verwendet WiringPi Libraryhttp://www.raspberrypi.org/forums/viewtopic.php?f=32&t=32177

$ python elro_wiringpi.py 8 1 # Switch D is turned on

Page 22: Heimautomatisierung mit Python und Raspberry Pi

Heimautomatisierung: Demo-Projekt

• Einfaches Web-GUI

• Steuerung von Funksteckdosen über Smartphone

• Bewegungsmelder löst Ereignis aus (Zeitstempel)

• Foto per USB-WebCam aufnehmen

• Bild aufnehmen von WebCam

• Python-Bibliothek OpenCV bietet vielfältige Möglichkeiten

• Alternative: per SH-Library einfach ‚fswebcam‘ verwenden:

$ fswebcam --title Demo webcam.jpg

>> sh.fswebcam(title="Demo", save="webcam.jpg")

Page 23: Heimautomatisierung mit Python und Raspberry Pi

Demo-Projekt: PyHome

• Umsetzung der vorgestellten Beispiele: PIR-Sensor, WebCam, Funksteckdosen

• Einfaches Web-GUI mit Flask und jQuery Mobile

• 3 Python Module

• 1 JavaScript Modul

• PyHome Projekt auf github

$ git clone https://github.com/tommykoch/pyhome.git

Page 24: Heimautomatisierung mit Python und Raspberry Pi

PROJEKTE EINIGE BEISPIELE

Praxis

Page 25: Heimautomatisierung mit Python und Raspberry Pi

Projekte: WebIOPi

Internet of Things framework

• Supports binary GPIOs

• HTML/CSS & Javascript

• REST/JSON Web API

• Server side available in several technologies

• PHP/Apache/lighttpd

• Python

• Smartphone compatible

• Apache License

»https://code.google.com/p/webiopi/

Page 26: Heimautomatisierung mit Python und Raspberry Pi

Projekte: PiHome

• fertiges Image für Raspberry Pi zur Heimsteuerung von Funksteckdosen

• Zugriff per Smartphone über WLAN und Web-GUI

• Ansteuerung per Fernbedienung (Platine direkt mit GPIO-Pins verbunden)

• Apache Webserver (PHP + MySql)

• Python Socket Server for control GPIO Pins

• Frontend (HTML, CSS, JS)

»http://pihome.harkemedia.de/

Page 27: Heimautomatisierung mit Python und Raspberry Pi

Projekte: PowerPi

• Raspberry Pi Haussteuerung

• Steuerung beliebig vieler Funksteckdosen

• Steuerung der Raspberry Pi GPIO's

• Auslösen von angelegten Ereignissen

• Erreichbar über das gesamte Hausnetzwerk

• Optimiert für Smartphones und Tablets

• Nginx + PHP

• Version 0.1

»http://raspberrypiguide.de/howtos/powerpi-raspberry-pi-haussteuerung/

Page 28: Heimautomatisierung mit Python und Raspberry Pi

Projekte: pimatic

• Rahmenwerk für verschiede Geräte und Sensoren zur Heimautomatisierung und Haussteuerung mit dem Raspberry Pi

• Sensoren und Aktoren werden durch Plugins eingebunden

• pimatic stellt ein Regelwerk zur Automatisierung zur Verfügung

• Basis: Node.js

»http://www.pimatic.org/

Page 29: Heimautomatisierung mit Python und Raspberry Pi

Voice Control: Meet Jasper

• Projekt Jasper

• Voice Control auf Raspberry Pi (Siri@Home…)

• basiert auf diversen OpenSource Tools (Pocketsphinx, OpenFST, MIT Language Modeling Toolkit, Phonetisaurus …)

• http://jasperproject.github.io/

• Erweiterbar - in Python :-)

• Running Jasper

$ cd jasper/client$ python main.py

Page 30: Heimautomatisierung mit Python und Raspberry Pi

Voice Feedback: Sprachausgabe in Python

• ESpeak

• eSpeak ist ein Open Source Sprach Synthesizer (in Software)

• für English und andere Sprachen http://espeak.sourceforge.net

• läuft auch auf Raspberry Pi (wird u.a. von Jasper verwendet)

• Einfache Anwendung:

$ espeak „Hello World“ $ espeak -vde „Hallo Welt“

• Python Wrapper

$ sudo apt-get install espeak python-espeak

>>> from espeak import espeak

>>> espeak.list_voices()

>>> espeak.set_voice('de')

>>> espeak.synth("hallo welt")

Page 31: Heimautomatisierung mit Python und Raspberry Pi

Anhang

Weiterführende Hinweise & Kleingedrucktes

Page 32: Heimautomatisierung mit Python und Raspberry Pi

Literatur

• Raspberry Pi - Einstieg • Optimierung • Projekte

Maik Schmitd, dpunkt Verlaghttp://www.dpunkt.de/raspi

• Getting Started with Raspberry Pi (Englisch)

Verlag: o’reilly/makershttp://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

Page 33: Heimautomatisierung mit Python und Raspberry Pi

Ausblick IoT - Internet of Things

• IoT-Szenario ‚Server-Monitoring‘

• auf Raspberry Pi Temperatur-Daten mit Sensor erfassen

• Raspberry Pi sendet Daten "in die Cloud"

• z.B. via MQTT / Mosquito http://mosquitto.org/documentation/python/

• oder an data.SparkFun.com

Page 34: Heimautomatisierung mit Python und Raspberry Pi

Ausblick: Hardware Erweiterungen

• Raspberry Pi Kameramodul

• 1080p HD Videoaufnahme bei 30 fps

• PiFace Raspberry Pi Zusatzplatine

• direkt auf den GPIO-Port aufsteckbar

• Kosten: ca 25 EUR http://www.piface.org.uk

• ermöglicht Kommunikation mit Schaltern, Sensoren, Aktoren, Motoren, LEDs usw.

• 2 Schaltrelais, 4 Taster, 8 digitale Eingänge

• Software-Library: pifacedigitaliohttp://piface.github.io/pifacedigitalio

Page 35: Heimautomatisierung mit Python und Raspberry Pi

Heimautomatisierung: Technik

• Steuerungsmöglichkeiten: Remote Control per Smartphone-App

• Generische Remote Controller mit eigener Middleware

• OpenRemote http://www.openremote.org/display/docs/About

• OpenHab http://www.openhab.org

• Mini-Service mit GUI-Builder und eigener Smartphone App

• NetIO http://netio.davideickhoff.de/de/

• RasPiConnect Control Panel http://www.milocreek.com/downloads/index.html

Page 36: Heimautomatisierung mit Python und Raspberry Pi

Links

• Raspberry Pi Tutorials & Seiten zum Einstieg

• Raspberry Pi Wiki: http://elinux.org/RPi_Hub

• 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

Page 37: Heimautomatisierung mit Python und Raspberry Pi

Copyrights• Markennamen

• The Raspberry Pi Word 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)

• Uhr: vintage alarm clock / thermometer by Adelle & Justin (CC BY-NC 2.0) https://www.flickr.com/photos/h_is_for_home/4156310480/

• Heimprojekt: Nicolás Boullosa - the home automation system designed by loren amelang himself (CC BY 2.0) https://www.flickr.com/photos/faircompanies/6616369115/

Page 38: Heimautomatisierung mit Python und Raspberry Pi

Kontakt / Fragen

• Thomas Koch

• @tomy_koch

• http://wiki.pythonde.pysv.org/ThomasKoch

• https://github.com/tommykoch/

• PyCologne

• http://wiki.python-forum.de/pycologne

• http://www.pycologne.de