ich stelle hiermit eine modernisierte, fehlerbereinigte und gestraffte Version der "Bluetooth Anwesenheitssteuerung" von realwheel unter dem Namen Anwesenheit BT als Bereicherung zur freien Verfügung.
Anwesenheit BT ermöglicht eine funktionale, kombinierte Anwesenheitskennung für Android Smartphones, iPhones, iOS, Featurephones und andere Mobilgeräte via Bluetooth, welche in Form eines Shell-Skriptes unter Linux lauffähig ist. Geeignete Grundlagen sind z.B. ein Raspbberry Pi mit Raspbian bzw. Raspberry Pi OS, ein Rechner oder eine VM mit einer Standard Linux-Distribution nach persönlichem Gusto oder vergleichbares. Die nachfolgende Anleitung bezieht sich auf einen Raspbberry Pi mit aktuellem Raspberry Pi OS als Betriebssystem.
Für mich relevante Mängel der Ursprungsversion sind ausgebessert, geändert, umgeschrieben und modifiziert. Dies hat unter anderem dazu geführt, dass keinerlei Abhängigkeit zu einem CCU-/HomeMatic-Addon besteht.
Motivation
Ab Android 7, musste ich schmerzlich feststellen, dass Google es mit den Energiesparmaßnahmen deutlich übertrieben hat. Im Ergebnis hat meine automatische Anwesenheitserkennung per ICMP ("Ping"), trotz aller "WLAN-Wachhalte-Tricks" mit Tasker (seit Android 5/6 nötig und erfolgreich im Einsatz), nicht mehr zuverlässig funktioniert.
Da ich schon seit längerem mit der Idee schwanger gehe meine Addon-Abhängigkeiten aufzulösen, war für mich genau jetzt der Zeitpunkt gekommen mich nach einer vernünftig funktionierenden Alternative umzuschauen.
Grund für die Veröffentlichung ist der (OSS-)Gedanke, dass andere von meiner Arbeit profitieren können, wie ich von der Arbeit Dritter profitiert habe.
Verteiler
Falls das kostenlos erhältliche Paket für jemanden von Interesse sein sollte, einfach hier im Thread nachfragen oder eine PN an mich richten:
- Bitte in jedem Fall angeben welche Zentrale verwendet wird und welche Firmware-Version installiert ist.
- Die Antwort-PN bitte innerhalb von 24 Stunden abholen.
Installationsanleitung
- Grundlage ist eine lauffähige Linux-Installation mit funktionierendem Bluetooth (Onboard-Chip oder per USB-Adapter)
- Nach dem Download der Installationsdatei wird das Paket (vor dem Entpacken!) auf den Raspberry Pi/den Linux-PC kopiert (z.B. mittels WinSCP).
- Das Entpacken des Paketes erfolgt an der Konsole (z.B. via PuTTY bzw. einer SSH-Terminal-Session) mittels nachfolgendem Befehl.
Code: Alles auswählen
sudo tar xvf anwesenheit-4.23.tar.gz -C /
- Ein Update einer älteren Version von Anwesenheit-BT erfolg nach dem gleichen Schema.
- Abschließend die Prozesse beenden und wieder starten oder alternativ einen Reboot durchführen.
Installation der Beispielkonfigurationsdateien
- Nach dem Download wird das Paket mit den Beispieldateien (vor dem Entpacken!) auf den Raspberry Pi/den Linux-PC kopiert (z.B. mittels WinSCP).
- Das Entpacken des Paketes erfolgt an der Konsole (z.B. via PuTTY bzw. einer SSH-Terminal-Session) mittels nachfolgendem Befehl.
Code: Alles auswählen
sudo tar xvf anwesenheit-conf.tar.gz -C /
Konfiguration
- Nach der Installation finded man im Verzeichnis /etc/ mehrere beispielhafte Konfigurationsdateien (fon-vater.conf, fon-mutter.conf und fon-kind.conf)
- Die Beispieldateien können nach belieben umbenannt und kopiert werden. Einen treffenden Namen zu verwenden ist sinnvoll, da im Fehlerfall der Dateiname auch zur Identifizierung des jeweiligen Prozesses benutzt werden kann.
- Die Konfiguration erfolgt durch Editieren und Anpassen der Konfigurationsdateien. Die anzupassenden Einträge sind jeweils entsprechend kommentiert.
- Falls vorhanden, können Konfigurationsdateien um die nachfolgenden zwei Zeilen erleichtert werden, da sie keinerlei Verwendung mehr finden:
Code: Alles auswählen
# WLAN IP-Adresse (...) IPAddressWIFI=192.168.x.x
CCU-Systemvariablen
- Die zu verwendende(n) CCU-Systemvariable(n) (pro Gerät eine) müssen vom Typ "Logikwert" sein (wahr=anwesend, falsch=nicht anwesend)
Testen der Konfiguration
- Zum Testen einer Konfiguration erfolgt der Aufruf des Skriptes unter Angabe der jeweiligen Konfigurationsdatei wie nachfolgend angegeben.
- Entsprechende Textausgaben sollten die Überprüfung der Konfiguration und eine eventuelle Fehlersuche erleichtern.
- Die im nachfolgenden Beispiel angegebene Konfigurationsdatei ist ggf. anzupassen.
Code: Alles auswählen
anwesenheit.sh /etc/fon-vater.conf
Autostart einrichten
- Für den automatischen Start aller Instanzen des Skriptes (eine pro Gerät/Smartphone) im Hintergrund (z.B. nach einem Reboot des Raspberry Pis/des Linux-PCs), wird die Datei /etc/rc.local um nachfolgende Einträge erweitert (einfügen vor der letzten Befehlszeile "exit 0").
- Die im nachfolgenden Beispiel angegebene(n) Konfigurationsdatei(en) ist/sind ggf.anzupassen.
Code: Alles auswählen
anwesenheit.sh /etc/fon-vater.conf > /dev/null & sleep 3 anwesenheit.sh /etc/fon-mutter.conf > /dev/null & sleep 3 anwesenheit.sh /etc/fon-kind.conf > /dev/null &
- Schnelle Kontrolle, ob nach erfolgtem Reboot alle Prozesse laufen:
Code: Alles auswählen
ps ax|grep anw
Fehlersuche I: Erreichbarkeit via Bluetooth -unabhängig vom Skript- testen
- Mittels l2ping die Erreichbarkeit des Gerätes überprüfen:
Code: Alles auswählen
sudo l2ping -c3 <MAC-Addresse>
Fehlersuche II: Abschließende Kontrollen
- Abschließend die eingegebenen Adressen in den Konfigurationsdateien mit den tasächlichen Adressen der Geräte vergleichen und ggf. korrigieren. Anhand der Beispiel-Konfigurationsdateien auch die korrekte Syntax überprüfen.
- Kontrolle, ob die Systemvariable(n) in der CCU korrekt eingerichtet ist/sind: Siehe How-To, Abschnitt "CCU-Systemvariablen". Die Systemvariable(n) auch in der/den Konfigurationsdateie(n) auf Richtigkeit überprüfen (Kommentar beachten!).
Fehlersuche III: Reichweitenkiller in the box
- Ein hilfreicher, aufklärende Beitrag auf welchen ich kürzlich gestoßen bin: Raspberry Pi: Kühlung und Kühlkörper
Ich habe das mittels vcgencmd measure_temp mehrfach und über längere Zeiträume hinweg überprüft und kann das nur bestätigen.
Was allerdings nur selten in solchen und ähnlichen Artikeln erwähnt wird: Die überflüssigen Kühlkörper sind zudem auch Reichweitenkiller. - Gleiches gilt natürlich auch für Metallgehäuse und größere Metallansammlungen u.Ä. in näherer Umgebung des BT-Chips/des Raspberry Pi.
- Den HDMI-Port zu deaktivieren ist auch eine gute Idee. Ich erledige das per Skript ca. 10 Minuten nach erfolgtem Bootvorgang (mittels tvservice -o und vcgencmd display_power 0).
Changelog
- v2.10: Abhängigkeit zur XML-API aufgelöst ("Anwesenheit BT" funktioniert ohne jegliche Addons)
- v2.10: Auslagerung aller(!) Einstellungen in Konfigurationsdateien (pro Gerät eine).
- v2.10: Einziger Parameter bei Aufruf des Skriptes ist die Konfigarationsdatei (Bsp: anwesenheit.sh /etc/fon-blackhole.conf). Alle Parameter sind somit pro Gerät einstellbar (neben MAC und IP auch Zeiten, Wiederholungen, sogar die CCU, falls mehrere im Einsatz)
- v2.10: Eindeutig bezeichnete Konfigurationsdateien esetzen Gerätenamen als Parameter (der Gerätename ist Teil des Dateinamens).
- v2.10: "Wifi-Scan" (arp-scan), die "Backuplösung" zu BT, funktioniert nun zuverlässig (bei Einsatz von Repeatern klappte das gar nicht) und wurde daher durch "Wifi-Ping" (ping) ersetzt. Nachteil: Er müssen feste Leases eingerichtet werden. Vorteile: Es funktioniert sehr zuverlässig, wenn das Gerät wach ist, unabhängig vom Einsatz von Repeatern/Bridges etc..
- v2.10: Der Coding-Style wurde angepasst und bereinigt
- v2.10: Umstellung komplett auf UTF-8
- v2.20: Aktualisierter Debug-Modus mit neuen Ausgaben
- v2.21: Optimierung der While-Schleifen
- v2.22: Ressourcenoptimierung (XML-Auswertung)
- v2.23: Kommentierung der Beispiel-.conf-Dateien
- v2.24: Reduzierung von Programmaufrufen und überflüssige Shell-Aufrufe entfernt
- v2.25: Erster Release für Tester
- v2.26: Zweiter Release für Tester
- v2.27: öffentlicher Release
- v2.28: Korrektur einer Textausgabe im Debug-Betrieb (Danke an danberg)
- v2.29: Angabe der Zeiteinheit in den Beispiel-.conf-Dateien (Danke an mike9677)
- v2.29: Korrektur und Verbesserung wenn keine Prüfung via WLAN erfolgen soll (Danke an danberg)
- v2.30: Überflüssige Hochkommata entfernt
- v2.30: Exit im Falle eines Typos hinzugefügt
- v2.30: Verwendung von verkürzten Timeouts
- v2.30: Code gestrafft und Einrückungen korrigiert
- v2.30: Anwesenheitsüberprüfungen ausgelagert an zentrale Stelle
- v2.30: Aufteilung in Skript- und Beipieldatei-Paket, How-To angepasst
- v2.31: Exit-Befehle haben eine Code-Nummer erhalten (Danke an danberg)
- v2.31: Code-Rewrite, die ehemals "doppelte Abwesenheitsprüfung" erfolgt nun in einer zentralen While-Schleife (Danke an danberg)
- v2.40: Bugfix, kleinere Anpassungen, Versionierung wg. Code-Rewrite angepasst
- v2.41: Code gestrafft, Redundanzen entfernt
- v2.44: Jubiläumsausgabe, Code gestrafft, Kommentierungen angepasst
- v2.45: Zyklischer Abgleich der Systemvariable zur Synchronisierung nach Nichterreichbarkeit der CCU2 (Danke an cyclopz)
- v2.46: Typo korrigiert, Code gestrafft und Einrückungen korrigiert
- v3.01: Code-Optimierung für die CCU3, die obsolete sekundäre Anwesenheitskennung wurde entfernt
- v4.01: Durchgängige Modernisierung des bisherigen Coding-Styles
- v4.23: Für eine umfangreichere OS-Kompatibilität wurden sämtliche "Bashisms" entfernt. Der Default-Interpreter ist jetzt /bin/sh und nicht mehr /bin/bash. Das Einlesen der Config-Datei geschieht nun durch Sourcing und ist somit deutlich effektiver. Viele kleinere Code-Optimierungen