Select your language

Presence Detection: Schritt 2 - Bluetooth

Um eine schnellere und verlässlichere Kontrolle der Anwesenheit zu bekommen, möchte ich Bluetooth als device_tracker einsetzen. Hierzu muss zuerst einmal ein Bluetooth USB-Stick an die Synology DS angeschlossen und im Docker aktiviert werden. Dies ist in folgenden Artikel beschrieben.

Aktivieren der device_tracker Platform

configuration.yaml

################################################################
## Device-Tracking Platforms
################################################################
# Discover some devices automatically
discovery:
 [...]  

unifi:
 [...]  

device_tracker:
  - platform: bluetooth_tracker
    track_new_devices: no
    interval_seconds: 5
    consider_home: 12
    new_device_defaults:
      track_new_devices: false
      hide_if_away: false

Einrichten der neuen Geräte

Eintragen der bekannten Bluetooth MAC-Adressen:

known_devices.yaml

iphone8_max_bt:
  name: iPhone8 Max BT
  mac: BT_xx:xx:xx:xx:xx:xx
  icon: mdi:cellphone-iphone
  picture:
  hide_if_away: false
  track: true

iphone8_ing_bt:
  name: iPhone8 Ing BT
  mac: BT_xx:xx:xx:xx:xx:xx
  icon: mdi:cellphone-iphone
  picture:
  hide_if_away: false
  track: true

Anpassen der Icons der Entitäten:

packages/presence_detection.yaml

homeassistant:
  customize: 
    device_tracker.iphone8_max_bt:
      icon: mdi:bluetooth-audio
    device_tracker.iphone8_ing_bt:
      icon: mdi:bluetooth-audio

Als nächstes werden die zentralen Gruppen mit den Geräten pro Person erweitert:

packages/presence_detection.yaml

group:
  # group.phone_* dient zum zentralen Setzen des aktuell zu prüfenden Devices pro Person.
  #   Werden mehrere Geräte angegeben, dann ist Gruppe 'on'='anwesend' wenn mindestens ein Gerät 'on' ist.
  phone_max:
    name: Phone Max
    control: hidden
    entities:
      - device_tracker.iphone8_max_wifi
      - device_tracker.iphone8_max_bt
  phone_ing:
    name: Phone Ing
    control: hidden
    entities:
      - device_tracker.iphone8_ing_wifi
      - device_tracker.iphone8_ing_bt

Anpassen der Status-Ermittlung

Der wichtige Sensor für die Berechnung der Anzahl Personen zuhause muss mit den neuen Entitäten erweitert werden, so dass er auch korrekt aktualisiert wird. Dies ist eine "unschöne" Konsequenz daraus, dass ich je Person eine Gruppe für die zu verfolgenden Geräte pflege. Sensoren aus Gruppen werden in HA nur dann aktualisiert, wenn sich der Status der Gruppe, und nicht nur einer der beteiligten Sensoren der Gruppe, ändert.

packages/presence_detection.yaml

sensor:
  # Anzahl der Personen zuhause
  - platform: template
    sensors:
      n_people_home:
        friendly_name: Number of People Home
        entity_id:
          # list all entities (not group) otherwise the trigger will not perform correctly
          - device_tracker.iphone8_max_wifi
          - device_tracker.iphone8_ing_wifi
          - device_tracker.iphone8_ing_bt
          - device_tracker.iphone8_max_bt    
          - input_boolean.guests
        value_template: >
          {{ (1 if states|selectattr('entity_id','in',state_attr('group.phone_max','entity_id'))
                   |selectattr('state','eq','home')|list|count > 0 else 0) + 
             (1 if states|selectattr('entity_id','in',state_attr('group.phone_ing','entity_id'))
                   |selectattr('state','eq','home')|list|count > 0 else 0) +
             (1 if is_state('input_boolean.guests','on') else 0) }}

Fazit

Positiv:

  • nun ist die Ankunftserkennung noch schneller ('home' bevor die Wohnungstür aufgeschlossen ist)
  • wenn die gesamte Wohnung mit BT abgedeckt wird, kann die WLAN device_tracker entfallen
  • BT bleibt an, wenn iPhone in den Schlaf fällt

Negativ:

  • in meinem Fall keine ausreichende Abdeckung der Wohnung mit einem BT device -->
    • WLAN noch notwendig
    • kein schnelleres Ausbuchen (not_home)
  • öfter Oszillieren von home <-> not_home der BT-Sensoren (möglicherweise durch die schlechte BT Abdeckung)

Nächste Schritte: