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?
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' }}"
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.
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
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.