Using Person plugin with HomeKit driven input_booleans?

I have two input_booleans which are driven by HomeKit based on user presence.

Is there a way to hook these up to the Persons plugin so that whether they are home or not is driven by these input_booleans?

Kind of. There is no template device tracker yet…but we can kind of spoof it.

device_tracker.see will create a device tracker for us if we give a dev_id that doesn’t yet exist.

So, under your person, add 2 more ‘device trackers’. These wont exist yet. Name them the same as the input_boolean (i.e. if it’s input_boolean.homekit1, call it device_tracker.homekit1).

Then set an automation to follow the input booleans.

- alias: HomeKit Device Tracker
  trigger:
    - platform: state
      entity_id: input_boolean.homekit1
    - platform: state
      entity_id: input_boolean.homekit2
  action:
    - service: device_tracker.see
      data_template:
        # Grab the object id of the trigger. 
        # i.e. if this was input_boolean.homekit1, trigger.to_state.object_id will be 'homekit1'
        dev_id: "{{ trigger.to_state.object_id }}"
        location_name: "{{ 'home' if trigger.to_state.state == 'on' else 'not_home' }}"
2 Likes

Awesome! Works really great! Only on reboot this automation gives the following error:

Logger: homeassistant.components.automation.homekit_device_tracker
Source: helpers/service.py:140 
Integration: Automation (documentation, issues) 
First occurred: 14:32:06 (2 occurrences) 
Last logged: 14:32:06

Homekit naar device tracker: Error executing script. Unexpected error for call_service at pos 1: Error rendering data template: UndefinedError: 'dict object' has no attribute 'to_state'
While executing automation automation.homekit_device_tracker
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 421, in async_render
    render_result = compiled.render(kwargs)
  File "/usr/local/lib/python3.8/site-packages/jinja2/environment.py", line 1090, in render
    self.environment.handle_exception()
  File "/usr/local/lib/python3.8/site-packages/jinja2/environment.py", line 832, in handle_exception
    reraise(*rewrite_traceback_stack(source=source))
  File "/usr/local/lib/python3.8/site-packages/jinja2/_compat.py", line 28, in reraise
    raise value.with_traceback(tb)
  File "<template>", line 1, in top-level template code
  File "/usr/local/lib/python3.8/site-packages/jinja2/sandbox.py", line 407, in getattr
    value = getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'to_state'

Got an idea what’s the cause?

Weird. It’s a state trigger…it’s got to have a to_state.

Though, maybe it’s only an attribute change. Since we didn’t give a state in the trigger, an attribute will still fire an event.

Just add this condition:

condition:
  - "{{ trigger.to_state is not None }}"

Also, change “data_template” to just “data”. Both of these changes assume you’re on version 0.115 or greater.

1 Like

Thanks again! The suggested condition gives me an error.

Should it be like this?

condition: "{{ trigger.to_state is not None }}"

What version of home assistant are you using?

If you arent on 0.115 or greater, do this.

condition:
  condition: template
  value_template: "{{ trigger.to_state is not None }}"

I’m on the latest release 0.117.5

I know this pos its old but i make this work with this automation


alias: 'Homekit tracker '
description: ''
trigger:
  - platform: state
    entity_id: input_boolean.alexis
  - platform: state
    entity_id: input_boolean.stefany
condition: []
action:
  - service: device_tracker.see
    data:
      dev_id: '{{ trigger.to_state.object_id }}'
      location_name: '{{ ''home'' if trigger.to_state.state == ''on'' else ''not_home'' }}'
mode: single

1 Like

I am using this now and it works perfectly.
For anyone that wants to try it out you need the homekit bridge.
Then create a helper boolean.Then create a new automation. Paste this code and change the id accordingly to your helper boolean.

alias: 'Homekit tracker '
description: ''
trigger:
  - platform: state
    entity_id: input_boolean.<your_name>
condition: []
action:
  - service: device_tracker.see
    data:
      dev_id: '{{ trigger.to_state.object_id }}'
      location_name: '{{ ''home'' if trigger.to_state.state == ''on'' else ''not_home'' }}'
mode: single

Then make sure you bridge the boolean to apple home. In Apple home you then setup an automation to switch off and on the switch based on your location.

In homeassistant you can then use the helper boolean to trigger any automation on home leave and return.