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: [something]5710
    entity_id: [something]a438
    domain: light
then:
  - type: turn_on
    device_id: [something]b447
    entity_id: [something]470f
    domain: light
    brightness_pct: {{state_attr("light.kitchen_sink_ceiling", "brightness")}}
else:
  - type: turn_off
    device_id: [something]b447
    entity_id: [something]470f
    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.

  • @bus_factor
    link
    English
    111 hours ago

    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.

  • @Rekhyt
    link
    English
    43 days ago

    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 over states.etc.etc form. I think there’s something about how HA handles startup that may mess with templates if you use states.etc.etc .

    • @spongebueOP
      link
      English
      13 days ago

      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)

      • @spongebueOP
        link
        English
        23 days ago

        Taking a different approach of starting simple and working up,

        100.0 works

        {{100.0}} does not work

        “{{100.0}}” also does not work

  • [email protected]
    link
    fedilink
    English
    1
    edit-2
    3 days ago

    Oh… I think you also need double quotes around template brackets when used as the value in a service call…? Which conflicts with the quotes around the entity and attribute so just use single quotes there.

    brightness_pct: "{{state_attr('light.kitchen_sink_ceiling', 'brightness')}}"
    

    Just whipped up a partial example with my living room lights. It is missing a trigger and an else butI focused on theactionyou had trouble with.
    Using brightness instead of brightness_pct seemed simpler. (Or at least if both can usethe same attribute…)

    alias: Example
    description: ""
    trigger: []
    condition:
      - condition: state
        entity_id: light.living_room_floor_lamp_1
        state: "on"
    action:
      - action: light.turn_on
        metadata: {}
        data_template:
          brightness: "{{state_attr('light.living_room_floor_lamp_1', 'brightness')}}"
        target:
          entity_id: light.living_room_floor_lamp_2
    mode: single
    
  • [email protected]
    link
    fedilink
    English
    13 days ago

    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 use brightness instead (0-255).

    • @[email protected]
      link
      fedilink
      English
      33 days ago

      You’ll need to use | float(0) in templates. All state values and attributes start out as strings. Also setting a default value in the float(#) 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) }}

      • [email protected]
        link
        fedilink
        English
        23 days ago

        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}}"
        
      • [email protected]
        link
        fedilink
        English
        23 days ago

        I think OP might just have needed the quotes around the template brackets in the yaml.