Select your language

Presence Detection: Schritt 3 - monitor.sh

Idee und Code von  Andrew J Freyer.

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