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

Heimautomatisierung mit Python und Raspberry Pi

Embed Size (px)

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

Citation preview

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