Hallo,
von meinem bisherigen Projekt, der Hausautomatisierung, habe ich mich vorerst getrennt, da ich irgendwie keinen Spaß mehr daran habe.
Da sich vor kurzem jemand an meinem Roller zu schaffen gemacht hat, wollte ich eine kleine Alarmanlage programmieren. Diese besteht aktuell aus:
- 4 kleinen PIR-Bewegungsmeldern (Gab bei Amazon 5 Stück für 12,- EUR [Anzeige], funktionieren erstaunlich gut)
- aktuell einem MCP23017 [Anzeige] (um GPIOs freizuhalten)
- LC-Display (2x16)
- Python-Script
Aktuelle Funktionen im Überblick:
- Erkennung von Bewegungen
- Darstellung des Alarms auf dem Display
- Push an das iPhone
Verwendete APIs/Biblotheken:
Ablauf:
Das Python Script prüft bei jedem Start, die Konfiguration des ICs und passt diese ggfs. an. Der MCP23017 ist per i2c an den Raspberry verbunden und meldet über eine Interrupt Linie, an einem der GPIO-Ports eine Veränderung. Diese wird mit Hilfe der von RPi.GPIO-Bibliothek erkannt. Anschließend lese ich den IC aus und verarbeite die erhaltenen Werte.
Veränderungen werden in eine einfache Log-Datei geschrieben, entsprechend am Display ausgegeben und unter Nutzung der Prowl-API an mein iPhone gepusht. (Verzögerung im WLAN etwa 3 Sekunden, via 3G meist ähnlich, EDGE/GPRS 5-10 Sekunden)
Aufbau:
Der Aufbau ist aktuell noch sehr abenteuerlich: Der IC ist auf einer Steckplatinie und alles ist mit Jumperkabeln verbunden.
Erweiterbarkeit:
Das Python Script ist auf bis zu 8 ICs ausgelegt, das heißt bis zu 128 Bewegungsmelder sind möglich. Dem gegenüber stehen 6 Zimmer die 1-2 Bewegungssensoren haben möchten. Aber wenn ich ein passendes Gehäuse habe, kommen noch ein paar ums Haus.
Eine Veröffentlichung des Quelltextes ist erstmal nicht geplant.
Planung für die Zukunft:
-
eine Art Watchdog der prüft ob der IC noch angebunden istund einen weiteren IC, der prüft,ob alle Sensoren wirklich angeschlossen sind Schreiben der Ereignisse in eine SQLite-Datenbank Datei- Integration von Überwachungskameras
(hat jemand vielleicht einen Tipp für günstige aber halbwegs vernünftige Kameras?) - Alarmton/Schalten von Lichtern
- Automatisches Scharfstellen bei Verlassen des Hauses (wenn keines unserer Handys im WLAN ist und per Bluetooth auch keines mehr gefunden wird)
-
Vielleicht ein Webinterface?Andererseits ist das Scharfstellen via Konsole schon schön nerdig.. Aber für meine Eltern kaum praktikabel.
Update 25.09.2013 um 11:21
Mittlerweile werden die Ereignisse in eine Datenbank-Datei geschrieben. Das erleichtert die Verwaltung und ermöglicht es mir auch mit anderen Programmiersprachen ohne Probleme darauf zuzugreifen.
Ein Webinterface fehlte mir jetzt tatsächlich einwenig, deswegen hab ich gestern auf die schnelle ein kleines Webinterface zusammengebaut. Aktuell ist es noch sehr rudimentär und zeigt im Prinzip nur die letzten 20 Meldungen an. Aktualisiert sich allerdings in regelmäßigen Abständen selbst und blinkt bei einem neuen Ereignis rot auf. Zukünftig geplant fürs Webinterface sind:
-
Ein- und Ausschalten des Alarms(Ausschalten aber nur mit PIN) - Verwendung von WebSockets
-
allesetwasschönergestalten
Update 25.09.2013 um 12:10
Jetzt hat das Webinterface einen etwas anderen Look und einen vernünftigeren Namen. Zudem lässt sich das Python-Skript per Schieberegler ein- und ausschalten.
Update 25.09.2013 um 16:05
Hier der aktuelle Stand und die Funktionsweise in einem kurzen Video (entschuldigt bitte die Qualität, ich hatte keine Lust mit meinem 1 Mbit Upload die volle 1080p Variante hochzuladen).
[youtube]TRO_h8CC9i4[/youtube]
Update 27.09.2013 um 00:38
Um mich vor Laufzeitfehlern zu schützen, setze ich nun das try-Statement ein, so kann ich entsprechende Exceptions abfangen und verarbeiten. Ein fehlendes Display führt so nicht mehr zum Abbruch des Skriptes. Des Weiteren habe ich das Skript um die Überprüfung der Sensoren erweitert: Fehlt ein Sensor so ist das Scharfstellen der Anlage nicht mehr möglich.
Außerdem wird nun geprüft, ob der IC nicht gegebenenfalls seine Konfiguration verloren hat. Sollte dies der Fall sein, werden seine Werte entsprechend meiner Vorgaben erneut übertragen.