Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Einfache Heimautomatisierung auf dem Raspberry Pi mit Python

2,573 views

Published on

Der Vortrag zeigt zunächst Anwendungsgebiete der Heimautomatisierung auf und vermittelt eine kurze Einführung in die notwendigen Grundlagen zur praktischen Heimautomatisierung mit dem Raspberry Pi und Python (Kurzeinführung: GPIO mit Python). Anschliessend werden für ausgewählte praktische Anwendungen Lösungsansätze aufgezeigt, die sowohl die Hardware-Anbindung als auch die Software-Ansteuerung (vorzugsweise mit Python) beschreiben:

- Bewegungsmelder
- Temperaturmessung
- Funksteckdose(n) steuern
- Anbindung einer WebCam

Abschliessend wird eine einfache Benutzerschnittstelle als Web-Frontend demonstriert, die die Anzeige der Sensor-Daten aus den Beispielen bzw. Kontrolle von Aktoren realisiert.

Published in: Devices & Hardware
  • Be the first to comment

Einfache Heimautomatisierung auf dem Raspberry Pi mit Python

  1. 1. Einfache Heimautomatisierung auf dem Raspberry Pi mit Python Thomas Koch 
 @tomy_koch Pi and More 9 Uni Trier 11. Juni 2016
  2. 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. 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
  4. 4. HEIMAUTOMATISIERUNG Mo#va#on 4
  5. 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. 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. 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
  8. 8. RASPBERRY PI, GPIO, PYTHON Grundlagen
  9. 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. 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. 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. 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. 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/
  14. 14. BACKEND PRAKTISCHE ANWENDUNGEN
  15. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 25. Hardware-Setup • Bastel-Lösung auf Breakout Board
 Bewegungsmelder USB-Webcam Temperatursensor 433MHz
 Transmitter
  26. 26. FRONTEND PYHOME - WEB-GUI
  27. 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. 28. PyHome - Bedienung der Web-App 
 Screenshots • Home Screen Anzeige der Sensoren
  29. 29. PyHome - Bedienung der Web-App 
 Screenshots • Home Screen Steuerung der Aktoren
  30. 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. 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. 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. 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. 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. 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. 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

×