Room Based Presence mit Motion Sensoren

Room Based Presence mit Motion Sensoren

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.

Custom Component: Hass Variables

Die Theorie ist einfach:
Wird ein Bewegungssensor getriggert (state = on), muss Homeassistant schauen welcher es war und anschließend den Namen des Raumes in eine Variable schreiben. Variablen sind kein natürliches Konzept von Homeassistant und müssen über eine Custom Component namens Hass Variables installiert werden. Wie man diese Custom Component installiert und verwendet habe ich in dem Post über das Senden einer Anrufbenachrichtigung beschrieben.

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
      to: 'on'
  action:
    - service: variable.set_variable
      data:
        variable: last_motion
        attributes_template: >
          {
            "history_1": "{{ variable.state }}",
            "history_2": "{{ variable.attributes.history_1 }}",
            "history_3": "{{ variable.attributes.history_2 }}"
          }
      data_template:
        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
          {% endif %}

Anschließend steht eine Variable mit dem Namen variable.last_motion zur Verfügung. Der State dieser Variable kann analog zu einem Sensor ausgelesen werden. 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.variable.last_motion.state }}"
      icon_template: >-
        {% if is_state('variable.last_motion', 'Küche') %}
          mdi:food-variant
        {% elif is_state('variable.last_motion', 'Wohnzimmer') %}
          mdi:sofa
        {% elif is_state('variable.last_motion', 'Flur') %}
          mdi:cube-unfolded
        {% elif is_state('variable.last_motion', 'Room2') %}
          mdi:guitar-electric
        {% elif is_state('variable.last_motion', 'Schlafzimmer') %}
          mdi:hotel
        {% else %}
          mdi:account-question
        {% endif %}

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

Nutzt man die offizielle Homeassistant App für Android, 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.op7t_battery_level
      above: 90
  condition:
    - condition: template
      value_template: "{{ is_state('sensor.op7t_battery_level', 'charging') }}"
  action:
    - service: light.turn_on
      data_template:
        entity_id: >
          {% if is_state('variable.last_motion','Schlafzimmer') %} light.schlafzimmer_decke
          {% elif is_state('variable.last_motion','Wohnzimmer') %} light.wohnzimmer_regal
          {% elif is_state('variable.last_motion','Room2') %} light.room2_decke
          {% elif is_state('variable.last_motion','Küche') %} light.kueche_kuehlschrank
          {% endif %}
      data:
        flash: short

Ein weiteres Beispiel habe ich im offiziellen Homeassistant Forum beschrieben. Dort wird erläutert, wie man einen beliebigen Media Player pausiert, wenn man den Raum verlässt und die Wiedergabe automatisch fortführt, sobald man den Raum erneut betritt.