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
über mich• Thomas Koch
• Bonn
• Software-Entwickler
• Python, JavaScript, Web ...
• Python User Group PyCologne
• Hobby-Bastler
• Raspberry Pi
• OrbiTeam Software (Bonn)
• BSCW (Collaboration Server)
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
HEIMAUTOMATISIERUNGMotivation
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:
• 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
RASPBERRY PIGrundlagen
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
• CameraSerial Interface
USB
LAN
micro USB
HDMI
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)
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
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
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
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
PROGRAMMIERUNG & STEUERUNG
GPIO mit Python
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/
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/
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
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/
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
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")
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
PROJEKTE EINIGE BEISPIELE
Praxis
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/
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/
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/
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/
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
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")
Anhang
Weiterführende Hinweise & Kleingedrucktes
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
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
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
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
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
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/
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
Top Related