In jedem meiner Räume befindet sich ein Hue Motion Bewegungsmelder aus dem Hause Philips, die ich in Homeassistant über das Deconz Addon eingebunden habe. Diese triggern – neben dem obligatorischem Einschalten von Lichtern – in meinem Alltag diverse Automationen, z.B:

  • Automatisch die Tagesschau auf dem Bose Lautsprecher anmachen, wenn ich wochentags das Bett verlassen habe und in die Küche laufe
  • Automatisch die Rollos hochfahren, wenn ich aufgestanden bin
  • Automatisch den Wecker ausschalten, wenn ich wochentags das Schlafzimmer verlassen habe

Da ich alleine in meiner Wohnung lebe, eignen sich die Bewegungsmelder auch hervorragend, um Homeassistant mitzuteilen in welchem Raum man sich gerade befindet. Dies lässt sich hervorragend nutzen, um bspw. Lichter in Räumen auszuschalten in denen man sich gerade nicht aufhält oder automatisch den Fernseher zu pausieren, wenn man den Raum verlässt. Wie man einen solchen Last Motion Sensor erstellt, erkläre ich im Folgenden.

Die Theorie des Vorgehens

Wird ein Bewegungssensor getriggert (state = on), muss Homeassistant schauen welcher es war und anschließend den Namen des Raumes in eine Variable schreiben. Anschließend kann ein optionaler Template Sensor erstellt werden, der diese Variable ausließt und ein passendes Icon zu jedem Raum zuordnet.

Praktische Umsetzung

Variablen sind kein natürliches Konzept von Homeassistant und müssen über eine Custom Component namens home-assistant-variables installiert werden.

Variable anlegen

Es wird eine Variable konfiguriert. In meinem Fall habe ich sie last_motion genannt:

last_motion:
  restore: true
  icon: mdi:map-marker
  friendly_name: 'Last Motion'

Automation: Letzter Aufenthaltsraum

Als Trigger dienen die Bewegungssensoren, die in Homeassistant als Binary Sensors erscheinen:

- alias: Set Last Motion Variable
  initial_state: True
  trigger:
    - platform: state
      entity_id:
        - binary_sensor.hue_motion_flur
        - binary_sensor.hue_motion_kueche
        - binary_sensor.hue_motion_room2
        - binary_sensor.hue_motion_schlafzimmer
        - binary_sensor.hue_motion_wohnzimmer
        - binary_sensor.aqara_motion_bad
        - binary_sensor.aqara_motion_klo
      to: 'on'
  action:
    - service: var.set
      data_template:
        entity_id:
          - var.last_motion
        value: >-
          {% if trigger.entity_id == "binary_sensor.hue_motion_flur" %} Flur
          {% elif trigger.entity_id == "binary_sensor.hue_motion_kueche" %} Küche
          {% elif trigger.entity_id == "binary_sensor.hue_motion_room2" %} Room2
          {% elif trigger.entity_id == "binary_sensor.hue_motion_schlafzimmer" %} Schlafzimmer
          {% elif trigger.entity_id == "binary_sensor.hue_motion_wohnzimmer" %} Wohnzimmer
          {% elif trigger.entity_id == "binary_sensor.aqara_motion_klo" %} Klo
          {% elif trigger.entity_id == "binary_sensor.aqara_motion_bad" %} Bad
          {% endif %}   

Anschließend steht eine Variable mit dem Namen var.last_motion zur Verfügung. Der State dieser Variable kann - analog zu einem Sensor - ausgelesen und in Automationen genutzt werden.

Template Sensor mit Icon für jeden Raum (optional)

Optional kann zusätzlich noch ein Template Sensor erstellt werden, der jedem State/Raum ein passendes Icon zuweist:

- platform: template
  sensors:
    last_motion:
      friendly_name: 'Wo bin ich?'
      value_template: "{{ states.var.last_motion.state }}"
      icon_template: >-
        {% if is_state('var.last_motion', 'Küche') %}
          mdi:food-variant
        {% elif is_state('var.last_motion', 'Wohnzimmer') %}
          mdi:sofa
        {% elif is_state('var.last_motion', 'Flur') %}
          mdi:cube-unfolded
        {% elif is_state('var.last_motion', 'Room2') %}
          mdi:guitar-electric
        {% elif is_state('var.last_motion', 'Schlafzimmer') %}
          mdi:bed
        {% elif is_state('var.last_motion', 'Bad') %}
          mdi:shower 
        {% elif is_state('var.last_motion', 'Klo') %}
          mdi:toilet  
        {% else %}
          mdi:account-question
        {% endif %}

Anwendungseispiel: Licht im aktuellen Raum blinken lassen, wenn Smartphone aufgeladen ist

Nutzt man die offizielle Homeassistant App, kann diese Auskunft über den Batteriestand des Telefons und auch darüber, ob das Smartphone gerade geladen wird, ausgeben. Die folgende Automation prüft, ob das Telefon sich am Lader befindet und lässt ein Licht im aktuellen Raum kurz aufblinken, wenn der Akkustand über 90% erreicht hat:

- alias: Flash Light when Smartphone fully charged
  initial_state: True
  trigger:
    - platform: numeric_state
      entity_id: sensor.mizar_battery_level
      above: 90
  condition:
    - condition: time
      after: '09:00:00'
      before: '22:00:00'
    - condition: state
      entity_id: person.jonas
      state: 'home'
  action:
    - service: light.turn_on
      data_template:
        entity_id: >
          {% if is_state('var.last_motion','Schlafzimmer') %} light.schlafzimmer_kommode
          {% elif is_state('var.last_motion','Wohnzimmer') %} light.wohnzimmer_regal
          {% elif is_state('var.last_motion','Room2') %} light.room2_decke
          {% elif is_state('var.last_motion','Küche') %} light.kuche_kuhlschrank
          {% endif %}
        flash: short

Ein weiteres Beispiel habe ich in dem separaten Post Automatisch pausierender Media Player aufgeführt. Dort wird erläutert, wie man einen beliebigen Media Player pausiert, wenn man den Raum verlässt und die Wiedergabe automatisch fortsetzt, sobald man den Raum erneut betritt.