Homeassitant lights event handling

I recently installed rhasspy, and would like to thank the community for putting all of this together. Its working quite nicely. To give back I would like to share my event handling code, as something that handled siteId’s wasnt readily available as an example. Im using events and not intents for now. This was not as straight forward as I expected, and would love to know if anyone has done this in another/better way.

my siteId’s are livingroom and bedroom

automations to catch rhasspy events:

- alias: Rhasspy Lights
  description: Voice Control on/off states for lights
  trigger:
  - event_data: {}
    event_type: rhasspy_Lights
    platform: event
  condition: []
  action:
  - alias: ''
    data_template:
      light_name: "{{ trigger.event.data.light_name }}"
      light_state: "{{ trigger.event.data.light_state }}"
      siteId: "{{ trigger.event.data._intent.siteId }}"
      light_group: "{{ trigger.event.data.light_group }}"
    service: script.rhasspy_lights

script to handle events:

rhasspy_lights:
  alias: rhasspy_lights
  fields:
    light_name:
      description: "light name"
      example: light lamp etc
    light_state:
      description: "State to change the switch to"
      example: on
    siteId:
      description: "rhasspy siteId"
      example: livingroom
    light_group:
      description: "light group"
      example: light.all_livingroom_light
  sequence:
    - service_template: >
        {% set light_state = light_state | string %}
        {% if light_state == 'on' %}
          light.turn_on
        {% elif light_state == 'off' %}
          light.turn_off
        {%elif light_state == 'toggle' %}
          light.toggle
        {% endif %}

      data_template:
        entity_id: >-
          {% set group_entity = "light."+light_group|string %}
          {% if group_entity in states|map(attribute='entity_id') %}
            {% set light_entity = group_entity %}
          {% elif light_group == 'all' %}
            {% set light_entity = ("light.all_"+siteId+"_light") | string %}
          {% else %}
            {% set light_entity = ("light."+siteId+"_"+light_name) | string %}
          {% endif %}
          {{light_entity}}

lights.yaml:

- platform: template
  lights:
    livingroom_lamp:
      friendly_name: livingroom_lamp
      unique_id: livingroom_lamp
      turn_on:
        service: switch.turn_on
        data:
          entity_id: switch.livingroom_lamp
      turn_off:
        service: switch.turn_off
        data:
          entity_id: switch.livingroom_lamp
    livingroom_light:
      friendly_name: livingroom_light
      unique_id: livingroom_light
      turn_on:
        - condition: state
          entity_id: light.livingroom_light
          state: 'off'
        - service: script.light_fan_livingroom
      turn_off:
        - condition: state
          entity_id: light.livingroom_light
          state: 'on'
        - service: script.light_fan_livingroom
    bedroom_light:
      friendly_name: bedroom_light
      unique_id: bedroom_light
      turn_on:
        - condition: state
          entity_id: light.bedroom_light
          state: 'off'
        - service: script.light_fan_bedroom
      turn_off:
        - condition: state
          entity_id: light.bedroom_light
          state: 'on'
        - service: script.light_fan_bedroom
    driveway_light:
      friendly_name: driveway_light
      unique_id: driveway_light
      turn_on:
        service: switch.turn_on
        data:
          entity_id: switch.driveway_light
      turn_off:
        service: switch.turn_off
        data:
          entity_id: switch.driveway_light
    porch_light:
      friendly_name: porch_light
      unique_id: porch_light
      turn_on:
        service: switch.turn_on
        data:
          entity_id: switch.porch_light
      turn_off:
        service: switch.turn_off
        data:
          entity_id: switch.porch_light

- platform: group
  name: all_livingroom_light
  entities:
    - light.livingroom_light
    - light.livingroom_lamp
- platform: group
  name: all_bedroom_light
  entities:
    - light.bedroom_light
- platform: group
  name: outside_light
  entities:
    - light.porch_light
    - light.driveway_light
- platform: group
  name: every_light
  entities:
    - light.porch_light
    - light.driveway_light
    - light.livingroom_light
    - light.livingroom_lamp
    - light.bedroom_light

relavant rhasspy sentance config:

[Lights]
state=(on|off|:toggle){light_state}
state2 = (activate:on | deactivate:off) {light_state}
#single lights
turn [the] ($lights) {lights_name} <state>
turn <state> [the] ($lights) {light_name} 
($lights) {light_name} <state>
<state2> ($lights) {light_name}
#single lights with location area
#turn [the] ($areas){area} ($lights) {lights_name} <state>
#turn <state> [the] ($areas){area} ($lights) {light_name} 
#($areas){area} ($lights) {light_name} <state>
#<state2> ($areas){area} ($lights) {light_name}
#light groups
turn ($light_groups){light_group} <state>
turn <state> [the] ($light_groups){light_group}
($light_groups){light_group} <state>
<state2> ($light_groups){light_group}

slot “$lights”:

(light):light
(lamp):lamp
(lights):light

slot “$light_groups”

(every light):every_light
(all lights|these lights):all
(all living room lights|living room lights):all_livingroom_light
(all outside lights|outside lights):outside_light
(all bedroom lights|bedroom lights):all_bedroom_light
2 Likes