Presence Detection: Schritt 3 - monitor.sh
Idee und Code von Andrew J Freyer.
- Code auf Github https://github.com/andrewjfreyer/monitor
- Diskussion im Forum: https://community.home-assistant.io/t/monitor-reliable-multi-user-distributed-bluetooth-occupancy-presence-detection/68505/1
Hintergrund
Da der USB Bluetooth Adapter an meiner Synology nicht die gesamte Wohnung abdeckt, brauche ich einen 2. Bluetooth Sensor in der Wohnung. Das Monitor Skript von Andrew scheint dieses Problem gut zu lösen und ausserdem noch die im 2,4Ghz Band benutzte Bandbreite zu minimieren. Hier hatte ich gelegentlich Verbindungsprobleme zu den wenigen Geräten, die noch darüber kommunizieren.
Raspberry Pi installieren
2 Raspberries (4b und 3b+) für Ost- und West-Seite installiert nach Anleitung: https://github.com/andrewjfreyer/monitor#setup-of-sd-card
Setup SYSTEM, MOSQUITTO, MONITOR
Wird in diesem Artikel beschrieben.
Monitor konfigurieren
monitor/known_static_addresses
# --------------------------- # # STATIC MAC ADDRESS LIST # # 00:00:00:00:00:00 Alias #comment # --------------------------- 94:F6:__:__:__:__ iphone_max_bt #iPhone 8 Max D4:A3:__:__:__:__ iphone_ing_bt #iPhone 8 Ing
monitor/behavior_preferences
# --------------------------- # # BEHAVIOR PREFERENCES # # --------------------------- #MAX RETRY ATTEMPTS FOR ARRIVAL PREF_ARRIVAL_SCAN_ATTEMPTS=1 #MAX RETRY ATTEMPTS FOR DEPART PREF_DEPART_SCAN_ATTEMPTS=3 #SECONDS UNTIL A BEACON IS CONSIDERED EXPIRED PREF_BEACON_EXPIRATION=240 #MINIMUM TIME BEWTEEN THE SAME TYPE OF SCAN (ARRIVE SCAN, DEPART SCAN) PREF_MINIMUM_TIME_BETWEEN_SCANS=15 #ARRIVE TRIGGER FILTER(S) [default: ".*"] PREF_PASS_FILTER_ADV_FLAGS_ARRIVE="0x1a|0x1b" PREF_PASS_FILTER_MANUFACTURER_ARRIVE="Apple" #ARRIVE TRIGGER NEGATIVE FILTER(S) [default: "NONE"] PREF_FAIL_FILTER_ADV_FLAGS_ARRIVE="NONE" PREF_FAIL_FILTER_MANUFACTURER_ARRIVE="Google|Samsung"
monitor/mqtt_preferences
# --------------------------- # # MOSQUITTO PREFERENCES # # --------------------------- # IP ADDRESS OR HOSTNAME OF MQTT BROKER mqtt_address=192.168.__.__ # MQTT BROKER USERNAME mqtt_user=rasp1 # MQTT BROKER PASSWORD mqtt_password=_________ # MQTT PUBLISH TOPIC ROOT mqtt_topicpath=monitor # PUBLISHER IDENTITY mqtt_publisher_identity='ost' # MQTT PORT mqtt_port='1883' # MQTT CERTIFICATE FILE mqtt_certificate_path='' #MQTT VERSION (EXAMPLE: 'mqttv311') mqtt_version=''
Es wurde die Service-Datei erzeugt:
/etc/systemd/system/monitor.service
[Unit] Description=Monitor Service After=network.target [Service] User=root ExecStart=/bin/bash /opt/monitor/monitor.sh -x -tdr & WorkingDirectory=/opt/monitor Restart=always RestartSec=10 [Install] WantedBy=multi-user.target network.target
Optimierung von Departure Scan und Reboot
Terminal
ssh root@_ds_ip_ sudo bash monitor.sh -u -x -tdr
sudo systemctl restart monitor.service
more /etc/systemd/system/monitor.service
running the above will
-u : update the service file
-x : Retain Mqtt messages to broker (this will help when hass restarts it will read the retained message that is on the server)
-tdr : This will trigger depart ONLY on trigger (if you do not have a depart trigger do not use “d”), also sends depart/arrive triggers to other Pi’s.
Verzögern des Service-Starts um eine Confidence-Meldung von 0 zu vermeiden:
/etc/systemd/system/monitor.service
...
[Service] User=root ExecStartPre=/bin/sleep 20
ExecStart=/bin/bash /opt/monitor/monitor.sh -x -tdr & WorkingDirectory=/opt/monitor ...
Docker Image mit Monitor für DSM
Image 'kabturek/monitor.sh' heruntergeladen und gestartet mit
Terminal
ssh root@_ds_ip_ sudo docker run --name BT-Monitor --restart=always --privileged -it --net=host --cap-add=NET_ADMIN -e TZ=Europe/Berlin -v /volume1/docker/Home-Assistant/monitor/:/config -v /dev/bus/usb:/dev/bus/usb kabturek/monitor.sh:latest
Login into Docker:
docker exec -it BT-Monitor bash
Nach dem Start von monitor.sh rebootet der Docker-Container konstant. Deshalb vom Image neue Instanz erzeugt und Updaten:
apt-get update apt-get upgrade -y apt-get dist-upgrade -y -> reboot apt-get install wget wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key apt-get install gnupg2 apt-key add mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ wget http://repo.mosquitto.org/debian/mosquitto-stretch.list apt-cache search mosquitto apt-get update apt-get install -f libmosquitto-dev mosquitto mosquitto-clients libmosquitto1 -> reboot cd /monitor git pull -> reboot
Monitor.sh läuft nun im Container, meldet an MQTT.
Problem: CPU-Auslastung geht auf 50-70% wenn der Container läuft. Sollte 20% sein...
Anpassung der Konfiguration
Fazit
Positiv:
Negativ:
copy
packages/presence_detection.yaml
todo