Trying to run an automation to match one light’s state (on/off/dim) to another’s. Have this currently:
alias: Sync cabinet lights with sink light
if:
- condition: device
type: is_on
device_id: [something]5710
entity_id: [something]a438
domain: light
then:
- type: turn_on
device_id: [something]b447
entity_id: [something]470f
domain: light
brightness_pct: 100
else:
- type: turn_off
device_id: [something]b447
entity_id: [something]470f
domain: light
That works fine to turn the lights on or off, and I have triggers in the automation for that and changes in brightness. But using a non-static number for brightness_pct (yes, I know I’ll probably have to math the 0-100 scale instead of 0-255) is giving me trouble. When I try something like this:
alias: Sync cabinet lights with sink light
if:
- condition: device
type: is_on
device_id: cf56fdf2b6c37a7dcf7158be3c945710
entity_id: 0cd3cf1f7357e615fbe81516c783a438
domain: light
then:
- type: turn_on
device_id: a10fec546e97b3218296f3239058b447
entity_id: 0caa44c4824b8b85de411b665a88470f
domain: light
brightness_pct: {{state_attr("light.kitchen_sink_ceiling", "brightness")}}
else:
- type: turn_off
device_id: a10fec546e97b3218296f3239058b447
entity_id: 0caa44c4824b8b85de411b665a88470f
domain: light
I have also tried {{states.light.kitchen_sink_ceiling.attributes.brightness}} instead. Both seem to have the correct value when I play around in the developer tools. But when I put it in the automation, I get an error that a float value was expected. I see some similar issues online, but it always seems to be in a different context and people fix it by changing some value I never had.
Hmmm if it’s just complaining about expecting a float, you could maybe get away with simply multiplying by 1.0
{{state_attr("light.kitchen_sink_ceiling", "brightness") * 1.0}}
I think…
{{state_attr("light.kitchen_sink_ceiling", "brightness") | float}}
also works these days.My lights return brightness=None when they’re off… and None * 1.0 probably breaks something, so this might be more consistent:
{{(state_attr("light.kitchen_sink_ceiling", "brightness") or 0) | float}}
PS: I can’t say much about
brightness_pct
, I normally usebrightness
instead (0-255).You’ll need to use
| float(0)
in templates. All state values and attributes start out as strings. Also setting a default value in thefloat(#)
cast will ensure templates don’t break when the value is invalid.That means use this style:
{{ state\_attr("light.kitchen\_sink\_ceiling", "brightness") | float(0) }}
I think OP might just have needed the quotes around the template brackets in the yaml.
If OP somehow needs to translate between beignes and brightness_pct.
Probably something like this:brightness: "{{state_attr('light.kitchen_sink_ceiling', 'brightness') | float(0) /255*100}}"
Have you considered just putting the lights in the same group? If you can make your switches control the group you should be all set.
https://www.home-assistant.io/integrations/group/
You might also be able to link them together on the Z-Wave/Zigbee level, depending on your hardware.
That, plus a couple other things I saw in different places, ended up doing exactly what I wanted! I posted my final solution above. Thanks for finding a piece to the puzzle!
Out of curiosity, is it something as simple as needing to wrap the template in quotes? I may be mixing up my YAML with the Ansible work I’ve been doing, but I think you need to have templates double quoted like this in order to resolve the jinja2 properly:
"{{ state_attr('light.etc', 'brightness') }}
I don’t think you need the quotes in the Templates section of dev tools but you do in YAML files. I could be wrong though, let me know if you try it.
Definitely use the
state_attr()
form overstates.etc.etc
form. I think there’s something about how HA handles startup that may mess with templates if you usestates.etc.etc
.Combining this with similar comments, plus adding in the math to convert to a percent, I tried this:
brightness_pct: "{{state_attr('light.kitchen_sink_ceiling', 'brightness') | float(0) /255*100}}"
Still getting the same message
Message malformed: expected float for dictionary value @ data['brightness_pct']
For what it’s worth, if I try to set brightness instead of brightness_pct, I get a different message
Message malformed: extra keys not allowed @ data['brightness']
(I’m assuming that device just doesn’t accept a brightness attribute - not a big deal to math it out though)
Taking a different approach of starting simple and working up,
100.0 works
{{100.0}} does not work
“{{100.0}}” also does not work