Dykas Sebastian - WhatsSecurity

Werbung
WhatsSecurity Alarmanlage
ESE Projektdokumentation
Sebastian Dykas
Inhaltsverzeichnis
Inhaltsverzeichnis ........................................................................................................................... 2
Projektziel ....................................................................................................................................... 4
Hardware ........................................................................................................................................ 5
Raspberry Pi, Model 1-B+ ........................................................................................................... 5
Spezifikation ............................................................................................................................ 6
Connectors .............................................................................................................................. 6
Pyroelectrische Infrarot PIR Bewegung Sensor ........................................................................... 6
Raspberry Pi NoIR Kamera-Modul .............................................................................................. 7
Software ......................................................................................................................................... 7
Linux ........................................................................................................................................... 7
WhatsApp.................................................................................................................................... 8
Python ......................................................................................................................................... 8
Funktionen ...................................................................................................................................... 9
Log ............................................................................................................................................... 10
Erkenntnisse ................................................................................................................................. 11
Prototyp ........................................................................................................................................ 13
Installation..................................................................................................................................... 13
Hardware Setup ........................................................................................................................ 13
Betriebssystem Setup................................................................................................................ 14
Installation notwendiger Software-Pakete .............................................................................. 14
Whatsapp Setup ........................................................................................................................ 15
Installation von yowsup .......................................................................................................... 15
Registrieren eines Whatsapp-Accounts für die Alarmanlagen-Nummer ................................. 15
Testen des Alarmanlagen Whatsapp-Accounts...................................................................... 17
Hardware anschließen............................................................................................................... 17
Anschließen der Raspberry Pi Camera .................................................................................. 17
Bewegungsmelder anschließen ............................................................................................. 17
Die LEDs anschließen ........................................................................................................... 18
Buzzer anschließen ............................................................................................................... 18
2
Whatssecurity installieren .......................................................................................................... 18
Troubleshooting ..................................................................................................................... 19
Whatssecurity bei Systemstart automatisch starten ................................................................... 19
3
Projektziel
Ziel des Projektes ist es eine funktionsfähige
Alarmanlage zu bauen, entwickeln und zu
programmieren. Die Alarmanlage hat den Namen
WhatsSecurity. Die Steuerung der Alarmanlage
erfolgt hauptsächlich über einen internetbasierten
und plattformübergreifenden Instant-MessagingDienst namens WhatsApp. Über einen Infrarot Bewegungsmelder wird die Alarmanlage ausgelöst.
Sobald die Alarmanlage aktiviert ist und der Bewegungsmelder auslöst bekommt der
Alarmanlagenbesitzer eine Nachricht auf sein Smartphone über WhatsApp, dass der
Bewegungsmelder ausgeschlagen hat und zusätzlich ertönt durch einen Buzzer der Alarm.
Weiteres soll eine Kamera zur Alarmanlage installiert werden die den zu überwachenden Raum
überwacht. Mittels WhatsApp kann man sich per Befehl jederzeit ein Live Bild zukommen lassen.
An die Alarmanlage werden zwei LEDs angehängt die zeigen sollen ob die Alarmanlage
momentan aktiviert oder deaktiviert ist. Mittels einem extra USB Ziffernblock kann die Alarmanlage
auch deaktiviert werden. WhatsSecurity soll noch eine intelligente Funktion haben die automatisch
die Alarmanlage aktiviert und deaktiviert. Die intelligente Funktion soll folgendermaßen aufgebaut
sein: WhatsSecurity überprüft im Minuten Rhythmus ob sich das Smartphone des Besitzers im
Heimnetzwerk befindet. Falls ja wird die Alarmanlage deaktiviert und falls nicht wird die
Alarmanlage aktiviert. Optional soll mithilfe der eingesetzten Kamera eine Gesichtserkennung oder
eine Gestikerkennung möglich sein.
4
Hardware
Folgende Hardware Komponenten werden in dem Projekt eingesetzt:
 Microcontroller: Vilros Raspberry Pi Model B+ (B Plus) Ultimate Starter Kit (€ 58,99)

Raspberry Pi, Model 1-B+

Wirless Wifi WLAN Adapter

Netzteil

1 rote LEDs (10 sind im Package dabei, wir brauchen nur 1)

1 gelbe LEDs (10 sind im Package dabei, wir brauchen nur 1)

Widerstände
 Pyroelectrische Infrarot PIR Bewegung Sensor Detektor Modul (€ 6,90 für 5 Stück)
 Kamera: Raspberry Pi NoIR Kamera-Modul (€ 19,50)
 Krachmacher: 5v Active Buzzer Continuous Beep Tone Alarm Ringer von GAOHOU (€ 5,59 für
10 Stück)
 USB Ziffernblock (Teil eines Keyboards) (< 10 Euro)
 Eine Telefonnummer kaufen für WhatsApp-Aktivierung
Raspberry Pi, Model 1-B+
Der Raspberry Pi ist ein Einplatinencomputer, der von der britischen Raspberry Pi Foundation
entwickelt wurde. Sein großer Markterfolg wird teils als Revival des bis dahin weitgehend
bedeutungslos gewordenen Heimcomputers zum Programmieren und Experimentieren
angesehen. Der im Vergleich zu üblichen Personal
Computern sehr einfach aufgebaute Rechner wurde
von der Stiftung mit dem Ziel entwickelt, jungen
Menschen den Erwerb von Programmier- und
Hardwarekenntnissen zu erleichtern. Die Platine
enthält ein Ein-Chip-System von Broadcom. Als
Betriebssystem können unter anderen angepasste
Linuxdistributionen, Android oder RISC OS
installiert werden, die alle die ARM-Architektur
unterstützen. Eine Festplatten-Schnittstelle ist nicht
vorhanden, stattdessen müssen SD-Speicherkarten
als Bootmedium benutzt werden.
5
Spezifikation
Chip: Broadcom BCM2835 SoC
Core architecture: ARM11
CPU: 700 MHz Low Power ARM1176JZFS Applications Processor
GPU: Dual Core VideoCore IV® Multimedia Co-Processor
Provides Open GL ES 2.0, hardware-accelerated OpenVG
Capable of 1Gpixel/s, 1.5Gtexel/s or 24GFLOPs with texture filtering
Memory: 512MB SDRAM
Operating System: Boots from Micro SD card, version of the Linux operating system
Dimensions: 85 x 56 x 17mm
Power: Micro USB socket 5V, 2A
Connectors
Ethernet: 10/100 BaseT Ethernet socket
Video Output: HDMI (rev 1.3 & 1.4); Composite RCA (PAL and NTSC)
Audio Output: 3.5mm jack, HDMI
USB: 4 x USB 2.0 Connector
GPIO Connector: 40-pin 2.54 mm (100 mil) expansion header: 2x20 strip
Providing 27 GPIO pins as well as +3.3 V, +5 V and GND supply lines
Camera Connector: 15-pin MIPI Camera Serial Interface (CSI-2)
JTAG: Not populated
Display Connector: Display Serial Interface (DSI) 15 way flat flex cable connector
with two data lanes and a clock lane
Memory Card Slot: SDIO
Pyroelectrische Infrarot PIR Bewegung Sensor
Beschreibung:
Infrarot Sensor mit Kontrolle Platine. Die Empfindlichkeit
und Haltezeit kann eingestellt werden
Detektionsrang: ca.7m / 23 feet
Detektionswinkel: niedriger als 100 Grad
Ruhender Strom: weniger als 50uA
Betriebstemperatur: -15 to +70 Grad C
PCB Größe: ca.32mm x 24mm / 1,3 x 0,9 Inch
6
Raspberry Pi NoIR Kamera-Modul
Der Anschluss erfolgt über ein Flachbandkabel an der 15-poligen seriellen MIPIKameraschnittstelle (CSI) des Raspberrys. Verbaut wurde ein Omnivision 5647 CMOS Bildsensor
mit festem Fokus. Durch das Weglassen eines Infrarot-Blockierfilter eignet sich die Kamera ideal
für den Einsatz bei schlechten Lichtverhältnissen.
Ausstattung:

Digitaler Video-Anschluss

Kein IR Filter (ideal für schlechte Lichtverhhältnisse)

5 Megapixel

Fotoauflösung: 2592 x 1944 Pixel

Videoauflösung: 1920 x 1080 Pixel (Full HD)

Max. Framerate: 30 fps

Automatischer Weißabgleich

Automatische Belichtungssteuerung

Automatischer Schwarzwertabgleich
Software
Das Projekt wird in der Programmiersprache Python entwickelt und folgende Software
Komponenten werden in dem Projekt eingesetzt:
 Betriebssytem Linux
 WhatsApp
Linux
Die Bezeichnung Linux wurde von Linus Torvalds anfänglich nur für
den Kernel genutzt, dieser stellt der Software eine Schnittstelle zur
Verfügung, mit der sie auf die Hardware zugreifen kann, ohne sie
genauer zu kennen. Der Linux-Kernel ist ein in der
Programmiersprache C geschriebener monolithischer Kernel.
Wichtige Teilroutinen sowie zeitkritische Module sind jedoch in
prozessorspezifischer Assemblersprache programmiert. Der Kernel
ermöglicht es, nur die für die jeweilige Hardware nötigen Treiber zu
7
laden. Weiterhin übernimmt der Kernel auch die Zuweisung von Prozessorzeit und Ressourcen zu
den einzelnen Programmen, die auf ihm gestartet werden. Bei den einzelnen technischen
Vorgängen orientiert sich das Design von Linux stark an seinem Vorbild Unix.
Der Linux-Kernel wurde zwischenzeitlich auf eine sehr große Anzahl von Hardware-Architekturen
portiert. Das Repertoire reicht von eher exotischen Betriebsumgebungen wie dem iPAQ-HandheldComputer, Navigationsgeräten von TomTom oder gar Digitalkameras bis hin zu Großrechnern wie
IBMs System z und neuerdings auch Mobiltelefonen wie dem Motorola A780 sowie Smartphones
mit dem Android Betriebssystem. Trotz Modulkonzept blieb die monolithische Grundarchitektur
erhalten. Die Orientierung der Urversion auf die verbreiteten x86-PCs führte früh dazu,
verschiedenste Hardware effizient zu unterstützen und die Bereitstellung von Treibern auch
unerfahrenen Programmierern zu ermöglichen. Die hervorgebrachten Grundstrukturen beflügelten
die Verbreitung.
WhatsApp
WhatsApp ist ein internetbasierter und plattformübergreifender InstantMessaging-Dienst für den Austausch von Textnachrichten, Bild-, Video- und
Ton-Dateien sowie Standortinformationen zwischen Benutzern von
Mobilgeräten. Das kalifornische Unternehmen Whatsapp Inc. bietet dabei das
eigentliche Anwendungsprogramm Whatsapp-Messenger für verschiedene
Smartphone-Betriebssysteme zum Herunterladen an und betreibt zudem die
Server, über die die Nachrichten vom Sender- zum Empfängergerät geleitet werden. Dem lange
Zeit völlig kostenlosen, aber mittlerweile teilweise kostenpflichtigen Dienst wird die weitgehende
Ablösung der SMS zugeschrieben. Zur Nutzung ist nach der Installation der App eine
Registrierung unter Angabe der eigenen Telefonnummer erforderlich.
Python
Python ist eine universelle, üblicherweise interpretierte höhere
Programmiersprache. Ihre Entwurfsphilosophie betont Programmlesbarkeit,
sodass Python-Code im Vergleich mit anderssprachigem Code teilweise
deutlich kürzer ist. Zur besseren Lesbarkeit soll auch der Verzicht auf
Klammern zur Bildung von Code-Blöcken dienen, da die Programmstruktur
durch Einrückungen gebildet wird. Python unterstützt mehrere
Programmierparadigmen, z. B. die objektorientierte, die aspektorientierte und die funktionale
Programmierung. Ferner bietet es eine dynamische Typisierung. Wie viele dynamische Sprachen
wird Python oft als Skriptsprache genutzt. Die Sprache hat ein offenes, gemeinschaftsbasiertes
Entwicklungsmodell, das durch die gemeinnützige Python Software Foundation, die de facto die
Definition der Sprache in der Referenzumsetzung CPython pflegt, gestützt wird.
8
Funktionen
Use case: Alarmanlage scharf stellen
Der Benutzer schickt mit Whatsapp eine Nachricht an die Telefonnummer des WhatsSecuritys:
Benutzer: „AE 1234“
WhatsSecurity: „Alarmanlage ist scharf.“
Use case: Alarmanlage ausschalten
Der Benutzer schickt eine Whatsapp-Nachricht:
Benutzer: „AA 1234“
WhatsSecurity: „Alarmanlage ausgeschalten“
Alle Whatsapp-Befehle:
Benutzer: „Huhu“
=> wenn WhatsSecurity ein Kommando nicht erkennt, antwortet er:
WhatsSecurity: „Das Kommando verstehe ich nicht: Tippe „help“ für mehr Informationen.“
Benutzer: „help“
WhatsSecurity: „Alarmanlage ist aus.
AE 1234 - Alarmanlage einschalten
AA 1234 - Alarmanlage ausschalten
status - Wenn du wissen willst ob ich eingeschalten bin
pic - Aktuelles Bild schicken“
Benutzer: „LB“ oder „pic“
WhatsSecurity: BILD
Benutzer: „AE 1234“
WhatsSecurity: „Alarmanlage ist scharf“
WhatsSecurity: „Pin Code ist falsch!“
WhatsSecurity: „Sie ist bereits scharf gestellt!“
WhatsSecurity: „Pin code ist falsch, aber die Alarmanlage ist bereits scharf gestellt!“
Benutzer: „AA 1234“
WhatsSecurity: „Alarmanlage ausgeschalten“
WhatsSecurity: „Pin Code ist falsch!“
WhatsSecurity: „Alarmanlage ist sowieso nicht an!“
WhatsSecurity: „Alarmanlage ist sowieso nicht an! Und der Pin-Code ist auch falsch.“
9
Selbstständige Nachrichten von WhatsSecurity
Einmal am Tag, um 17 Uhr:
WhatsSecurity: „Alles roger.“
Wenn die Internetverbindung ausfällt, wird eine Nachricht gesendet, sobald die Internetverbindung
wieder da ist.
WhatsSecurity: „Ich hatte jetzt keine Internetverbindung (16:10-16:30). Jetzt bin ich wieder für dich
da. Alles roger.“
Wenn eine Bewegung am Bewegungsmelder erkannt wird während die Alarmanlage scharf ist:
Zuerst fängt die Alarmanlage dezent zum piepsen an.
Wir warten 20s warten, ob ein Code eingegeben wurde.
Dann alle Benutzer-Geräte im WLAN pingen. goto (Wenn eines gefunden wurde ? A : B).
A:
WhatsSecurity an den Benutzer der da ist: „Alarmanlage wurde ausgelöst. Bitte Code eingeben.“
Der Benutzer hat dann 30s Zeit, den Code einzugeben. Der Krachmacher piepst dezent. Falls er
nicht innerhalb von weiteren 30s den Code eingibt, goto B. Sonst: Alarmanlage ist eben deaktiviert.
B:
WhatsSecurity an alle Benutzer: „Alarmanlage wurde ausgelöst.“ BILD
Krachmacher piepst ordentlich.
Deaktivierung über Tastatur
An einer gut sichtbaren Stelle ist ein Ziffernblock, und darüber 2 LEDs.
Die rote LED ist mit „scharf“ beschriftet
Die gelbe LED ist mit „deaktiviert“ beschriftet.
Log
2015-02-12
lernen, wie man mit einem Transistor die 5V-Leitung verwenden könnte, um mit einem der PWMGPIOs (3,3V max.) einen Buzzer mit bis zu 25mA betätigen zu können. Fortschritt: Noch bei der
Theorie von Strom, Spannung und “Selbstregelung” des Transistors zum Verstärken. Nächste
Aufgabe: OpenCV lernen und damit eine Bewegungserkennung über (CSI-)Kamera realisieren
(Infrarotbereich).
Versuch, ob das Ganze auch mit einem alten Raspberry B (rev1) funktioniert. Fortschritt: Pins
werden mit demselben Skript von Sebastian getestet, um feststellen zu können, ob bei einem der
Geräte bereits GPIO-Pins kaputt sind.
10
WhatsApp-API kann bereits verwendet werden. Fortschritt: Unterstützung zum Senden von Bildern
(z.B. später von der Kamera ein Live-Schnappschuss) implementiert. Dabei war es notwendig, auf
dem RPi neue Libraries für die Verarbeitung von JPEG zu installieren und zu konfigurieren.
2015-02-23
Aufbau der richtigen Schaltung mit dem Transistor, plus einer LED an einem Potentiometer, um
das GPIO-Signal trivial testen zu können, falls der Buzzer keinen Ton von sich gibt. Der erwartete
Piezzo-Buzzer hatte überraschenderweise schon eine Elektronik drin, sodass dieser auch ohne
PWM funktionierte. Getestet wurde statt mit dem GPIO-Output nur mit der 3,3V-Versorung.
2015-02-24
Python-Script mit GPIO-Ansteuerung + PWM funktioniert nun. Bestellung einer NoIR-Kamera wird
in Auftrag gegeben.
2015-03-09
Testen und Ausprobieren der NoIR-Kamera (Memorysplit-Problem). Lernen von Python (cursesBibliothek, Unterschiede 2.7 zu 3.x - Code des Buzzer-Moduls ist momentan universell kompatibel;
Variablen-Scopes). Debugging der anderen NoIR-Kamera (bzw. Zusehen) -> “es konnte nur noch
der Tod festgestellt werden”. Abstimmung der Interfaces zwischen Hauptprogramm und BuzzerKlasse in Python.
Erkenntnisse
Buzzer / Piezzo + Transistor
Wegen des benötigten relativ starken Stroms (knapp 25mA) muss der PWM-GPIO-Ausgangsstrom
verstärkt werden. Mithilfe eines Transistors wird das Problem gelöst, allerdings sind HTLElektrotechnik-Kenntnisse dazu nicht ausreichend. An der Basis muss die Spannung höher sein
als am Kollektor, damit das Schalten auf den Emitter funktioniert. Einfach Versorgungsstrom (hat
5V) an Kollektor, PWM-GPIO (hat 3.3V) an Basis und Buzzer an Emitter funktioniert deshalb nicht.
Es ist notwendig, eine etwas aufwändigere Schaltung zu basteln, die den Transistor “regelt”. Dazu
sind im Allgemeinen mehrere Widerstände notwendig, und es gibt sogar eine empfohlene
Schaltung dafür: http://raspberrypi.stackexchange.com/questions/5325/how-do-i-connect-a-buzzerto-gpio → http://product.tdk.com/en/catalog/datasheets/ef532_ps.pdf →
11
Somit ist das Problem mit den Spannungen zwischen Basis und Kollektor gelöst (am Kollektor liegt
nur wenig Spannung an, wegen des 1kOhm-Widerstands, sodass die 3.3V des GPIO-Pins
ausreichen, die Basis des Transistors zu beeinflussen). Der Widerstand zwischen GPIO-Pin und
Transistor-Basis wurde vorübergehend mit 1500 Ohm gewählt, was auch funktioniert hat.
Python RPi.GPIO
Das von uns bevorzugte PWM-lastige Buzzer-Ansteuerungs-Signal kann zwar mit dieser Library
sehr einfach realisiert werden, allerdings setzt diese Implementierung auf Software-PWM, was wir
so
verstehen,
dass
nicht
die
PWM-Hardware
genutzt
wird,
sondern
ressourcenverschwendenderweise Timer verwendet werden, die in Software in Python ablaufen.
Dadurch ist bei 2000 Hz - vermutlich durch OS-Jitter (der Timer kann Scheduler-bedingt nicht
exakt arbeiten) - ein unregelmäßiges Knacksen neben dem eigentlichen Piepsen zu hören
Raspberry Kamera: Interface und Unterstützung
Um die Kamera zu verwenden ist es notwendig, in der Konfiguration beim Raspberry Pi der GRafik
beim Memorysplit mindestens 128MB zuzuteilen. Dadurch bleiben zwar nur noch 384MB RAM für
Raspbian übrig, es geht sich allerdings alles noch mit ca. 64MB freiem RAM aus. Solange
Python/unsere Software nicht mehr Ressourcen braucht, würde alles Out-of-the-box funktionieren.
Andernfalls müsse auf Swap zurückgegriffen werden (was auf einem unserer Raspberrys
deaktiviert ist), oder die Software bzw. sogar das Betriebssystem müsste abgespeckt werden.
12
Prototyp
Während der Entwicklungsphase ist natürlicherweise ein Prototyp gebaut worden. Dieser Prototyp
beinhaltet alle Hardware und Software Komponenten die in dieser Dokumentation beschrieben
sind.
Installation
Dieses Dokument beschreibt, wie man die Whatssecurity-Applikation auf einem Raspberry Pi
installieren kann.
Aktueller Status:

wir können Whatsapp-Nachrichten senden und empfangen

wir können Bilder mit der Raspberry Pi Camera machen und per Whatsapp verschicken

Ansteuerung des Bewegungssensors

Ansteuerung der LEDs und des Buzzers
Dateianhänge:

ws_program-v0.1.1.zip
Hardware Setup
Um die Whatssecurity-Alarmanlage zu installieren benötigen wir folgende Hardware:

einen Raspberry Pi

eine SD-Karte, auf der das Betriebssystem für den Raspberry Pi installiert werden kann

ein Micro-USB-Netzteil

ein Raspberry Pi Camera Modul

ein Ethernet-Kabel, um den Raspberry an ein Netzwerk anzuschließen.

einen Bewegungsmelder

eine rote und eine gelbe LED

geeignete Vorwiderstände für die LEDs, wenn die LEDs mit 3,6V angesprochen werden
13

Verkabelung, um die LEDs sowie den Bewegungsmelder anschließen zu können

eine Telefonnummer, auf der wir SMS empfangen können, um einen Whatsapp-Account zu
registrieren
Betriebssystem Setup
Wir verwenden eine Debian-Installation auf dem Raspberry Pi namens "Raspbian". Sie kann auf
https://www.raspberrypi.org/downloads/ runtergeladen und installiert werden. Der erste Schritt
besteht darin, den SSH-Server zu aktivieren, sodass wir den Raspberry Pi ohne angeschlossene
Tastatur, Maus und Bildschirm benutzen können.
Installation notwendiger Software-Pakete
Zuerst müssen wir mit "apt-get" einige Pakete installieren, die wir für Whatssecurity brauchen
werden. Die folgenden Pakete werden benötigt:

vim gcc

python-setuptools python-picamera python-pip python-dev

libtiff4-dev libjpeg8-dev zlib1g-dev

libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev

tk8.5-dev python-tk
Alle können einfach mit apt-get installiert werden. Die Befehle dafür lauten






sudo
sudo
sudo
dev
sudo
sudo
sudo
apt-get update
apt-get install vim gcc
apt-get install python-setuptools python-picamera python-pip pythonapt-get install libtiff4-dev libjpeg8-dev zlib1g-dev
apt-get install libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev
apt-get install tk8.5-dev python-tk
Weiters benötigen wir 3 Python-Pakete, die einfach mit pip installiert werden können (Die
Reihenfolge ist wichtig, pip haben wir im vorhergehenden Schritt mit apt-get installiert.)



sudo pip install python-dateutil
sudo pip install -I pillow
sudo pip install tendo
Danach müssen wir das Raspberry Pi Kamera-Modul aktivieren, sodass wir per Software auf eine
angeschlossene Raspberry Pi Camera zugreifen können:

sudo raspi-config
Dieser Befehl öffnet ein graphisches (ncurses-basiertes) Menü, und einer der Punkte lautet so
etwas wie "Raspberry Pi Camera aktivieren".
14
Whatsapp Setup
Als nächstes müssen wir einen Whatsapp-Account registrieren. Wir brauchen in Folge 2
Telefonnummern. Die Alarmanlagen-Nummer registrieren wir über den Raspberry, die AdminTelefonnummer sollte bereits auf einem Smartphone mit Whatsapp aktiviert sein.
Installation von yowsup
yowsup ist eine Opensource-Library die einen Whatsapp Netzwerk-Stack zur Verfügung stellt.
Zuerst
müssen
wir
die
yowsup-Library
installieren.
Diese
können
wir
von
https://github.com/tgalal/yowsup runterladen. Da diese Library aktiv weiterentwickelt wird, kann es
sein, dass die Whatssecurity-App mit der neuesten Version von yowsup nicht funktionieren wird. In
diesem Fall laden Sie bitte die Version herunter, die am 15. Mai 2015 aktuell war. Da es sich bei
dem Link um ein git-Repository handelt ist das leicht möglich. Bei jeder Revision befindet sich ein
Link, über den man das gesamte Repository zum damaligen Zeitpunkt herunterladen kann. Der
Ordner muss dann entpackt werden, und dann muss der Befehl

sudo python setup.py install
im yowsup-Verzeichnis ausgeführt werden. (Danach: nix tun. Nicht das Fenster schließen, nicht in
einen anderen Ordner wechseln, etc.)
Registrieren eines Whatsapp-Accounts für die Alarmanlagen-Nummer
Um einen Whatsapp-Account zu registrieren, senden wir eine SMS-Anfrage an die WhatsappServer. Dies ist jetzt der erste Befehl, der keine root-Rechte benötigt:

./yowsup-cli registration -r sms -p Telefonnummer -C Countrycode
wobei statt Telefonnummer die internationale Handynummer verwendet werden muss, ohne
vorangestelltes "+". Beispiel: 436501234567. Der Countrycode besteht aus den ersten Ziffern der
Telefonnummer. In diesem Beispiel wäre er 43, bei einer deutschen Handy-Nummer wäre er 49,
etc. Es gibt aber auch 1-stellige oder 3-stellige country codes. Die Ausgabe wird dann in etwa so
aussehen:
INFO:yowsup.common.http.warequest:{"status":"sent","length":6,"method":"sms","re
try_after":1805}
status: sent
retry_after: 1805
length: 6
method: sms
15
Wenn es geklappt hat, bekommen Sie kurze Zeit später eine SMS an die angegebene
Handynummer. Diese SMS enthält einen Code, z.B. 141-256 .
Danach müssen wir diesen Code benutzen, um das Whatsapp-Passwort zu bekommen:

./yowsup-cli registration -R Code -p Telefonnummer -C Countrycode
Im Erfolgsfall sieht die Ausgabe dann ungefähr so aus:
INFO:yowsup.common.http.warequest:{"status":"ok","login":"4366488431683","pw":"8
T/bNA5KnPQ7m2DnvSl63HJhPuw=","type":"new","expiration":1461089783,"kind":"free",
"price":"\u20ac
0,89","cost":"0.89","currency":"EUR","price_expiration":1432347894}
status: ok
kind: free
pw: 6T/cNA5PrPQ8s1DNvSl35HKiQuw=
price: € 0,89
price_expiration: 1432347894
currency: EUR
cost: 0.89
expiration: 1461089783
login: Telefonnummer
type: new
Wichtig ist hier das Whatsapp-Passwort, das neben "pw: " steht. Jetzt haben wir genügend
Informationen, um die Whatssecurity-Konfigurationsdatei zu erzeugen. Wir nennen die Datei
config.txt, der Inhalt ist wie folgt aufgebaut:
# Country code
cc=Countrycode
# Telefonnummer der Whatsapp Alarmanlage
phone=Telefonnummer
password=6T/cNA5PrPQ8s1DNvSl35HKiQuw=
# Admin user - Nummer des Users, der die Alarmanlage administrieren darf:
admin_phone=436649999999
Die Konfigurationsdatei, sollte jetzt gleich außerhalb des Raspberry Pi's gesichert werden.
16
Testen des Alarmanlagen Whatsapp-Accounts
Als nächstes wollen wir überprüfen, ob das Whatsapp-Passwort funktioniert, d.h. ob wir es
benutzen können. Dazu starten wir einen "Echo-Server" mit:

./yowsup-cli demos -e -c config.txt
wobei config.txt ggf. durch den Pfad ersetzt werden muss, an den Sie die Konfigurationsdatei
abgelegt haben. -e steht für "echo server". Wichtig ist in diesem Schritt nur, dass die
Konfigurationsdatei die Einträge "phone", "password" und "cc" enthält. Der Eintrag "admin_phone"
wird vom Echo-Server ignoriert, er ist erst später nötig, wenn wir Whatssecurity installieren.
Der Echo-Server beantwortet einfach alle Anfragen, die an ihn gestellt werden. Sende dazu
einfach eine Nachricht von deinem Smartphone (Admin-nummer 'admin_phone') zum Echo-Server
(Alarmanlagen-Nummer 'phone'). Es sollte prompt eine Papagei-artige Antwort zurück kommen.
Gratulation, Sie haben erfolgreich einen Whatsapp-Account für Ihre Whatssecurity-Alarmanlage
eingerichtet.
Hardware anschließen
Jetzt müssen wir die Raspberry Pi Kamera und den Bewegungsmelder anschließen. Dazu sollten
wir zuerst den Raspberry Pi herunterfahren und vom Netz trennen! Klarerweise könnte man diesen
Schritt auch schon viel früher erledigen, er baut in keinster Weise auf den vorhergehenden
Schritten auf.
Anschließen der Raspberry Pi Camera
Es gibt am Raspberry Pi zwei Orte, an denen man sich grundsätzlich vorstellen kann, dass man
dort eine Raspberry Pi Camera anschließen könnte. Der richtige Anschluss ist der, der gleich
neben dem Ethernet-Anschluss ist. Man muss die Kamera so anschließen, dass die Kontakte vom
Ethernet-Anschluss weg zeigen, und die blaue Seite zum Ethernet-Anschluss hin zeigt. Für
Details, wie man den Anschluss auf und wieder zu kriegt siehe dieses Video:
http://neuerdings.com/2014/03/23/raspberry-pi-camera-module-einrichten/
Bewegungsmelder anschließen
Der Bewegungsmelder hat 3 Anschlüsse: "VCC", "OUT" und "GND". VCC muss an die 5VVersorgungsspannung angehängt werden (z.B. Pin 2). GND gehört zu Ground (z.B. Pin 6). Und
OUT schließen wir an Pin 7 an (das ist ein GPIO-Pin). Welche Pins welche Möglichkeiten haben ist
unter folgendem Link einsehbar:
http://pi.gadgetoid.com/pinout
17
Die LEDs anschließen
Die rote LED schließen wir an Pin 11, die gelbe LED an Pin 13 an. Der Minus-Pol muss jeweils an
Ground angeschlossen werden. (Vorwiderstand nicht vergessen, sonst gibts gegrillte LEDs!)
Buzzer anschließen
Der Plus-Pol kommt an Pin 15, der Minus-Pol an Ground (wir haben Pin 9 dafür verwendet, aber
das ist eigentlich egal.) Da der Buzzer ja möglichst laut sein soll verzichten wir bewusst auf einen
Vorwiderstand!
Die Pin-Nummern sind in der Datei ws_gpio.py (und nur dort) konfiguriert.
Whatssecurity installieren
Lade die Datei ws_program-v0.1.1.zip auf den Raspberry Pi und entpacke sie in folgende
Ordnerstruktur:
 Home-Folder des Users "pi": /home/pi
o alarmanlage
 config
 logs
 ws_program
Der Inhalt der ZIP-Datei sollte in den Ordner ws_program kommen. Wenn im ws_program-Ordner
die Datei "wsrun" und die Ordner "yowsup" und "whatssecurity" sind, dann wurde die ZIP-Datei
richtig entpackt. In den config-Ordner muss die Konfigurations-Datei mit Namen config.txt landen.
Der logs-Ordner wird automatisch befüllt, er muss aber angelegt werden. Die Ordner-Struktur sieht
dann so aus:
 Home-Folder des Users "pi": /home/pi
o alarmanlage/
 config/
 config.txt
 logs/
 (Ordner ist leer)
 ws_program/
 whatssecurity/
o ...
 alarmanlage.sh
 wsrun
 ws-gpio.py
 yowsup-cli
 …
o … (ev. liegen noch Files im Home-Ordner rum, diese werden für Whatssecurity aber
nicht mehr benötigt.)
18
Starte nun das Shell-Script alarmanlage im ws_program Ordner:

sudo alarmanlage/ws_program/alarmanlage.sh start
Optional: Wenn du möchtest, kannst du in einem anderen Konsolen-Fenster die Log-Meldungen
betrachten. In den DEBUG-Logs werden alle Netzwerk-Requests und Responses protokolliert:

tail -f ~/alarmanlage/logs/debug.log -n200
Wenn du jetzt "pic" von deinem Admin-Telefon an den Alarmanlagen-Whatsapp-Account schickst,
wird ein Bild generiert und an dich zurück geschickt. Bilder werden auf dem Raspberry übrigens im
Ordner alarmanlage/logs/images gespeichert.
Nachrichten, die von einem anderen Whatsapp-Account als dem des Admins an die Alarmanlage
geschickt werden, werden von Whatssecurity ignoriert.
Um den Deamon zu beenden:

sudo alarmanlage/ws_program/alarmanlage.sh stop
Troubleshooting
Hinter dem alarmanlage.sh Shell-Script stecken 2 Python-Scripts, die die eigentliche Arbeit
machen:

wsrun kommuniziert mit dem Whatsapp-Server und der Kamera

ws-gpio.py kommuniziert mit der Hardware

Beide Programme kommunizieren über Text-Dateien miteinander.
Whatssecurity bei Systemstart automatisch starten
Damit whatssecurity automatisch beim Systemstart gestartet wird, füge der Datei /etc/rc.local zwei
Zeilen hinzu (vorzugsweise vor der Zeile in der exit 0 steht…):
# Start Whatssecurity
/home/pi/alarmanlage/ws_program/alarmanlage.sh start
Die Alarmanlage wird dann automatisch bei Systemstart hochgefahren.
19
Herunterladen