I have a Ring doorbell configured and running with the Ring integration. I’m trying to get one of the states exposed as a template sensor and struggling for some reason. The doorbell’s attributes look something like this
access_token: xyz
attribution: Data provided by Ring.com
video_url: https://share-service-download-bucket.s3.amazonaws.com/abc
last_video_id: epcoh_time
friendly_name: Front Door
entity_picture: /api/camera_proxy/camera.front_door?token=mytoken
supported_features: 0
The attribute I’m after is video_url, so in the developer tab under states I figured out that {{ state_attr('camera.front_door', 'video_url') }} gives me what I want. I took that and created a template sensor that looks like this, modeled off the example in the docs
- platform: template
sensors:
front_door_video_url:
friendly_name: 'Front Door Video URL'
value_template: "{{ state_attr('camera.front_door', 'video_url') }}"
entity_id:
- camera.front_door
When I restart the state just returns as Unknown and I can’t figure out why. Any pointers?
I had not previously, but did so just now and still shows as unknown. Also verified that camera.front_door had a valid state (the attribute was there and populated) before running it.
Does the sensor change the state when you click the camera in dev tools/states (not the more-info, the link), change something in the state or the attributes an click ‘SET STATE’?
You’re onto something! I tried just adding an attribute and setting it, so I went from
access_token: <removed>
attribution: Data provided by Ring.com
video_url: <removed>
last_video_id: <removed>
friendly_name: Front Door
entity_picture: /api/camera_proxy/camera.front_door?token=<removed>
supported_features: 0
to
access_token: <removed>
attribution: Data provided by Ring.com
video_url: <removed>
last_video_id: <removed>
friendly_name: Front Door
entity_picture: /api/camera_proxy/camera.front_door?token=<removed>
supported_features: 0
new_feature: test
When I did that the state stayed as unknown. But when I changed the actual video URL from what was there to, quite literally, bbbbb the template sensor updated to be bbbbb.
The URL that’s present is quite long, and does have a number of special (albeit URL safe) characters. Is it possible that something is making the template to be unhappy? Is there a way to make sure that everything is being escaped?
I’d checked the logs, but never expanded it to the full log (only looked at the summary). I did however do that now and sure enough I found the error below. Guess that answers my question, thanks for helping me work through that. Time to switch tactics for this automation trigger.
2020-08-03 15:37:10 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 277, in async_update_ha_state
self._async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 402, in _async_write_ha_state
self.hass.states.async_set(
File "/usr/src/homeassistant/homeassistant/core.py", line 1019, in async_set
state = State(entity_id, new_state, attributes, last_changed, None, context)
File "/usr/src/homeassistant/homeassistant/core.py", line 766, in __init__
raise InvalidStateError(
homeassistant.exceptions.InvalidStateError: Invalid state encountered for entity id: sensor.front_door_video_url. State max length is 255 characters.
If you want to trigger an automation with the video_url attribute, why not use a template trigger?
EDIT: Forget the template trigger, that should evaluate to true.
But you can use the state trigger with the camera as entity_id and check the video_url has changed with a template condition and the Trigger state object.
That was initially the road I’d gone down, and in the process found this thread which was someone essentially trying to do the same thing and seeing the same issues I was (only fired on the initial boot). I did however notice this reply which seems like it’ll work perfectly. Does that seem reasonable or am I coming at this a bad way?
Your edit appeared as soon as I hit save. I think we arrived at the same thing
Hi. I didn’t read this whole topic, or re-read the whole topic referenced, but I can tell you one thing – that post of mine that you linked is WAY OLD!!
Today I would recommend the following for the condition:
condition: template
value_template: >
{{ trigger.from_state is not none and
trigger.to_state is not none and
trigger.to_state.attributes.temperature !=
trigger.from_state.attributes.temperature }}