wer kennt nicht das Problem: Ihr kommt nach hause und müsst feststellen das Ihr vergessen habt, vor dem Verlassen der Wohnung der Zentrale dies mitzuteilen. Ein Hausautomatisierung sollte selbstständig ermitteln können wann jemand zuhause ist und wann nicht. Das Leben ist zu dynamisch um mit "von-bis-Uhrzeit" Anweisungen zu arbeiten! Spot schaltet nach verlassen der Wohnung bei mir alle Lichter aus, regelt die Heizung runter. Sobald ich nach Hause komme, wird die Heizung wieder hochgefahren und wenn es draussen dunkel ist das Licht angemacht.
Leider sind die Möglichkeiten der HomeMatic CCU recht eingeschränkt was die Anwesenheitserkennung angehet. Es gibt einige Versuche im Internet um dieses Problem zu lösen, doch die meisten Lösungsansätze sind unbrauchbar. Deswegen habe ich mich entschieden eine eigene Lösung zu entwickeln.
Das hier vorgestellte Projekt habe ich über viele Monate hinweg erarbeitet. Es kann sein, das hier und da noch Fehler vorhandenen sind oder dass die Beschreibung nicht sofort verständlich ist. In allen Fällen würde ich mich über ein Feedback freuen, sodass ich Spot noch weiter verbessern kann.
Solltest es sein dass Du keinen RASPBERRY PI besitzen und Du auch keine Erfahrung mit der Einrichtung hast, kannst ich Dir ein Link schicken, wo Du einen RASPBERRY PI fertig mit der nötigen Software kaufen kannst.
Bluetooth presents control for HomeMatic
Die größten Vorteile sind:
- Alles passiert Lokal ohne Internet ,Dienstleister und VPN
Es fallen keine Laufenden Kosten an (ausser Strom)
Es ist sehr energiesparend (auch für das Telefon)
Geräteverwaltung passier über die CCU2, daher besonders einfach
Es lassen sich mehrere Sensoren einbinden, sodass man die Reichweite von Bluetooth frei skalieren kann.
Protokollierung der Anwesenheit
Alles ist in Python geschrieben
- HomeMatic CCU2 v2.19.9
XML-API CCU Addon für die CCU2 in Version 1.11
RASPBERRY PI (mit RASPBIAN JESSIE)
Bluetooth Adapter (RASPBERRY PI 3 hat Bluetooth integriert - habe es aber nicht getestet)
Spot ist ein Programm das in Python geschrieben ist. Damit läuft es praktisch auf jeder Platform, jedoch beschränke ich mich in dieser Anleitung auf dem RASPBERRY PI mit "RASPBIAN JESSIE" als Betriebsystem.
Spot besteht aus zwei Teilen, einem Server und einem Sensor. Die Anzahl an Sensoren kann problemlos erhört werden um damit die Reichweite der Home-Zone zu erweitern. Jedes Mobile Gerät das dem Funk Standard Bluetooth beherrscht kann verwendet werden. Sei es ein iPhone/Android Telefon, eine SmartWatch, Notebook, iPad oder ein Nokia Telefon.
Jedes Bluetooth Gerät besitzt eine individuelle MAC-Adresse, diese wird bei der HomeMatic CCU als System-Variable eingetragen, damit weisst Spot welche Gerät es auf "Anwesenheit" hin prüfen soll. Spot (Server) fragt die HomeMatic in regelmässigen Abständen ab und übergibt eine Liste der Geräten an die Sensoren. Diese wiederum schauen ob sich das Bluetooth Gerät in der Reichweite befindet oder nicht. Die Reichweite der Sensoren bildet die Home-Zone. Betritt ein Gerät die Home-Zone, so wird es sofort an das HomeMatic System kommuniziert. Ein Gerät gilt als nicht mehr anwesend wenn es über die Dauer von zwei Zyklen (2min) von keinen Sensor gesehen wird. Dies soll Fehlinterpretation durch Funkschatten und ähnliches verhindern. Das beschriebene Verhalten lässt sich über die Spot-Konfigurationsdatei beeinflussen.
1# RASPBERRY PI
Alle Schritte werden über die Shell durchgeführt!
Bluetooth muss auf dem Raspberry installiert und funktionsbereit sein,
dazu die folgenden Pakete installieren.
Code: Alles auswählen
sudo su
apt-get install bluetooth mc python-bluez git
Code: Alles auswählen
bluetoothctl #startet das Verwaltungsprogramm
power on
- um die MAC Adresse herausfinden, scannen wir die Umgebung :
Code: Alles auswählen
scan on
Discovery started
- Mein Telefon ist das iPhoneMarius, und hat die MAC-Adresse CC:29:F5:67:B5:EC[CHG] Controller 00:15:83:E5:79:36 Discovering: yes
[NEW] Device 5E:7F:77:E1:D5:B5 5E-7F-77-E1-D5-B5
[NEW] Device 4F:17:D2:BD:06:51 4F-17-D2-BD-06-51
[NEW] Device 88:C6:26:65:90:C2 88-C6-26-65-90-C2
[NEW] Device 41:04:EB:57:28:77 41-04-EB-57-28-77
[NEW] Device 11:E7:77:74:17:EB 11-E7-77-74-17-EB
[NEW] Device CC:29:F5:67:B7:EC CC-29-F5-67-B7-EC
[CHG] Device CC:29:F5:67:B5:EC Name: iPhoneMarius
[CHG] Device CC:29:F5:67:B5:EC Alias: iPhoneMarius
- Damit sind wir in der Lage das iPhone jetzt zu koppeln. Denk daran das Telefon muss sich in “discovery modus” befinden
Code: Alles auswählen
agent on
pair CC:29:F5:67:B5:EC
Du musst im der Shell "yes" schreiben und auf dem Gerät dise ebenfahls bestätigen.[bluetooth]# pair CC:29:F5:67:B5:EC
Attempting to pair with CC:29:F5:67:B5:EC
[CHG] Device CC:29:F5:67:B5:EC Connected: yes
Request confirmation
[agent] Confirm passkey 476717 (yes/no): yes
[CHG] Device CC:29:F5:67:B5:EC Modalias: bluetooth:v004Cp6E00d0930
[CHG] Device CC:29:F5:67:B5:EC UUIDs:
00000000-deca-fade-deca-deafdecacafe
00001000-0000-1000-8000-00805f0b34fb
0000110a-0000-1000-8000-00805f0b34fb
0000110c-0000-1000-8000-00805f0b34fb
0000110e-0000-1000-8000-00805f0b34fb
00001116-0000-1000-8000-00805f0b34fb
0000111f-0000-1000-8000-00805f0b34fb
0000112f-0000-1000-8000-00805f0b34fb
00001132-0000-1000-8000-00805f0b34fb
00001200-0000-1000-8000-00805f0b34fb
[CHG] Device CC:29:F5:67:B5:EC Paired: yes
Pairing successful
Nachdem wir alle Geräte gekoppelt haben, beenden wir das Programm
Code: Alles auswählen
exit
https://wiki.archlinux.org/index.php/Bluetooth
Bei Verwendung von mehreren Raspberry's (Spot-Sensor) muss das Telefon an jeden Raspberry für sich gekoppelt werden
Damit das ganze auch nach einem Neustart zuverlässig funktioniert, muss eine Datei erstellt werden:
Code: Alles auswählen
mcedit /etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig hci0 up"
2# HomeMatic Konfiguration
Du musst XML-API http://www.homematic-inside.de/software ... tem/xmlapi auf deiner CCU installieren.
Erstelle auf der CCU für jedes Gerät das Du abfragen willst eine System Variable (Logic value true = is true, false = is false) Englische Schreibweise verwenden
Der Name der Variablen: var_spot_CC:29:F5:67:B5:EC_marius_iPhone
Die Variable ist wie folgt aufgebaut :
3# Erstelle ein Programme auf der CCU“var_spot_” = dadurch erkennt Spot die Variable. Dies bleibt immer gleich
“CC:29:F5:67:B5:EC” = das ist die Bluetooth MAC Adresse des Gerätes das überprüft werden soll
“_marius" = Name des Teilnehmers
“_iPhone” = Gerätename des Teilnehmers
Beispiel Anwesenheit :
System state var_spot_CC:29:F5:67:B5:EC_marius_iPhone when is true trigger when chenged
AND
System state Anwesenheit when nicht anwesend check only
OR
System state var_spot_CC:29:C2:27:AC:A2_paulina_iPhone when is true trigger when chenged
AND
System state Anwesenheit when nicht anwesend check only
Activity
System state Anwesenheit immediately anwesend
Beispiel Keine Anwesenheit :
System state var_spot_CC:29:F5:67:B5:EC_marius_iPhone when is false trigger when chenged
AND
System state var_spot_CC:29:C2:27:AC:A2_paulina_iPhone when is false trigger when chenged
Activity
System state Anwesenheit immediately nicht anwesend
(Sorry für die Vermischung der Sprachen)
4# Spot.py installation auf dem RASPBERRY PI
Code: Alles auswählen
cd /opt/
sudo git clone https://github.com/red-ip/spot.git
sudo chown -R pi /opt/spot
sudo chmod -R g+w /opt/spot
nachdem wir die Dateien abgelegt haben, können wir einen ersten Testlauf startenroot@redberry:/opt/spot# ls -la
/opt/spot
/opt/spot/core/
/opt/spot/init.d/
/opt/spot/log/
/opt/spot/spot.cfg
/opt/spot/spot.py
/opt/spot/spot_sensor.py
Code: Alles auswählen
cd /opt/spot/
python spot.py -s # Testlauf
Als nächstes müssen wir Spot sagen wie er die HomeMatic CCU erreichen kann. Hierzu editieren wir diepi@redberry:/opt/spot $ python spot.py -s
lading CFG
debug Lading Config file
------------------- Spot 1.2.7 -------------------
debug Got the option to stop the Daemon
debug Script file is present, OK .
debug Script is not running : spot_sensor.py
Could not stop, pid file '/tmp/spot_check.pid' missing.
/opt/spot/spot.cfg Datei und tragen die IP Adresse der CCU unter "ip_ccu = " ein
Code: Alles auswählen
mcedit /opt/spot/spot.cfg
Automatisches Starten nach einem Reboot einrichten:
Code: Alles auswählen
sudo cp /opt/spot/init.d/spot /etc/init.d
sudo chmod 744 /etc/init.d/spot
- Erster Starte von Spot
Code: Alles auswählen
sudo python spot.py -d
Spot sollte jetzt mit seiner Arbeit anfangen. Bei Problemen bitte bei mir melden!
Du kannst unter /opt/spot/log/ die Log-Dateien einsehen und dich davon überzeugen das alle korrekt funktioniert. Spot kann mit verschiedenen Parametern gestartet werden. Für weitere Informationen rufe "python spot.py -h" und "python spot_sensor.py -h" auf.
Optional:
Es ist möglich Spot als einen zusätzlichn Sensor zu starten um die Reichweite der Home Zone zu erweitern. Hierfür wird ein weiterer RASPBERRY PI benötigt. Die Einrichtung des Sensors ist identisch mit der bereits oben beschriebenen Einrichtung von Spot bis auf den Aufruf des Programmes. Hierzu muss nur die folgende Datei editiert werden
/etc/init.d/spot
Code: Alles auswählen
ändere die Zeile von
COLLECTORD_BIN=/opt/spot/spot.py
in
COLLECTORD_BIN=/opt/spot/spot_sensor.py
Code: Alles auswählen
sudo python /opt/spot/spot_sensor.py -d
(sudo python /opt/spot/spot.py -d -m 192.168.2.70:10002)
Port 10002 is the default port
ADDONS
Es gibt zwei Module die aktiviert werden können. Vorausgesetzt die notwendige Hardware ist vorhanden.
PIFACECAD SUPPORT
Ist ein kleiner LED Monitor über welchen Meldungen ausgegeben werden. zB Wilkommen Marius
Diese Funktion wird in der Konfigurationsdatei mit "pifacecad_support = True" aktiviert
Wie gesagt ihr braucht die Hardware und das Python Modul "pifacecad"
Hardware : PiFace Control & Display - AddOn Board für Raspberry Pi
RGB-LED SUPPORT
Über eine normal RGB-LED kann die Anwesenheit am Sensor ausgegeben werden. Die RGB-LED
wird in der Konfigurationsdatei mitt "rgbled_support" aktiviert. Ihr könnt dort auch die verwendeten GPIO's anpassen.
rgbled_red = 24
rgbled_green = 23
rgbled_blue = 25