Python Bluetooth Tracker

Seit dem Wechsel von einem Raspberry Pi 3 auf Intel NUC funktioniert leider die bluetooth_tracker Plattform von HomeAssistant nicht mehr zuverlässig.

Folgender “Workaround” hat mir geholfen:

#!/usr/bin/python
import bluetooth
from time import sleep
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish

phones = [
    {'name': 'phone', 'state': 'not_home', 'mac': 'AB:CD:EF:12:34:56'},
    {'name': 'non_existing_dummy','state': 'not_home', 'mac': 'FF:F1:DA:FF:91:4E'}
]

client = mqtt.Client("hass-client")
client.username_pw_set('username', 'password')
client.connect('10.0.0.1', 1883)
client.loop_start()

while True:
    for phone in phones:
        key = "bluetooth_nuc/presence/" + phone['name']
        result = bluetooth.lookup_name(phone['mac'], timeout=4)
        if result != None:
            detected_state = 'home'
        else:
            detected_state = 'not_home'

        if phone['state'] != detected_state:
            phone['state'] = detected_state
            client.publish(key, detected_state, retain=False)
    sleep(45)

client.disconnect()

Das Script kann mit python3 ausgeführt werden und sendet nach dem “Fund” bzw. dem “Verschwinden” eines Geräts eine Statusmeldung an den MQTT Server.

Sollten Abhängigkeiten fehlen können sie mit folgenden Kommandos aufgelöst werden:

 

sudo apt-get install bluetooth
sudo apt-get install python-bluez
sudo apt-get install bluetooth libbluetooth-dev
sudo python3 -m pip install pybluz paho-mqtt

Geräte bzw. deren MAC Adressen können mit

hcitool scan

gefunden werden.

 

 

Um das Script automatisch zu starten (z.B. nach einem Reboot) benutze ich “supervisor”.


root@metis:~# cat /etc/supervisor/conf.d/btscanner.conf
[program:ha-bt-scanner]
user=root
command=/root/script/btscanner.py

Unter HomeAssistant wird das ganze dann als MQTT Device Tracker angelegt:

- platform: mqtt
  devices:
    chris_bluetooth_rpi1: 'bluetooth_rpi1/presence/pixel2'
    chris_bluetooth_rpi3: 'bluetooth_rpi3/presence/pixel2'
    chris_bluetooth_nuc: 'bluetooth_nuc/presence/pixel2'

Getestet auf Ubuntu 17.10 sowie Raspberry Pi 1/3 mit Raspbian Stretch

 

 

Vielen Dank an  @B10m für die Hilfe und das Script!

Schreibe einen Kommentar