Ok, so here’s one of the automations that I think is pretty fun– my neighbours might disagree though. This is how I use Home Assistant to automatically trigger a goal celebration whenever the Winnipeg Jets score!

So, this relies on the Goalfeed component that is in the 0.63 release of Home Assistant, which requires an account with goalfeed.ca (full disclosure, I wrote and operate this service and there’s a $1.99/month subscription to cover server cost and external services etc). Once you’ve got the account and your credentials are in your configuration, Home Assistant will fire events every time an NHL or MLB team scores. These events can be used to trigger whatever automation you want.

Now, the way this component works is that it fires an event called ‘goal’ for every goal or run scored, the event has some event data that is included which basically just identifies which team scored. Ultimately, the automation is going to look like this:

- alias: 'Jets Goal'
  hide_entity: true
  trigger:
    platform: event
    event_type: goal
    event_data:
      team_name: "Winnipeg Jets"
  action:
  - delay: "00:00:{{ states.input_number.goalfeed.state | int }}"
  - service: homeassistant.turn_on
    entity_id: input_boolean.goaling
  - service: media_player.play_media
    data:
      entity_id: media_player.everywhere
      media_content_id: https://hassbian.local:8123/local/audio/goalhorn1718.mp3
      media_content_type: audio/mp3
  - service: script.turn_on
    entity_id: script.goal_start

Since we don’t want to trigger this automation every single time any team scores, we’ve got to specify the event data that we want to match in the automation trigger. You’ll notice there’s a lot going on in the action of this automation.

First, in the action, I have this delay instruction with this template:

  - delay: "00:00:{{ states.input_number.goalfeed.state | int }}"

I’ve added an input_number entity in my config like this:

input_number:
  goalfeed:
    name: Goalfeed Delay
    initial: 30
    min: 0
    max: 180
    step: 1

The reason for this is that the goalfeed events usually come in really quickly. I watch most games online, and depending on the source and my connection, the time between when the event comes in and when I see the goal sometimes requires a bit of tweaking, so having a nice little slider in the front end to configure this is key.

The next action item is setting an input_boolean (which I also added in my main config). I just set this to true to represent the fact that the goal light script is running. I’ll show you how I use this in the second automation.

The third item is the call to my media_player entity, which is a group of google homes/chrome cast audios that plays an mp3 of the Jets goal horn throughout the house.

The last item is turns on a script, which basically makes the light show work. I’ll get to that in a minute, but let’s go back to that input boolean for a second.

The input boolean that we turn on in the first automation we use as a trigger for a second automation that ends the goal celebration. That automation looks like this:

- alias: 'Turn off goal'
  trigger:
    platform: state
    entity_id: input_boolean.goaling
    to: 'on'
    for:
      seconds: 30
  action:
  - service: media_player.stop_media
    data:
      entity_id: media_player.everywhere
  - service: script.turn_on
    entity_id: script.goal_stop
  - service: homeassistant.turn_off
    entity_id: input_boolean.goaling

This is pretty straightforward– when the input_boolean has been ‘on’ for 30 seconds, this automation runs, it runs a stop script and sets the input_boolean back to ‘off’.

Ok, now let’s take a look at the scripts for the light sequence.

goal_start:
  sequence:
  - service: scene.turn_on
    entity_id: scene.all_dark
  - service: script.turn_on
    entity_id: script.goal_repeat

goal_loop:
  sequence:
    - condition: state
      entity_id: input_boolean.goaling
      state: 'on'
    - alias: swon
      service: homeassistant.turn_on
      data:
        entity_id: light.goallight
        rgb_color: [255, 0, 0]
        brightness: 255
        transition: 0.25
    - delay:
        seconds: 0.25
    - condition: state
      entity_id: input_boolean.goaling
      state: 'on'
    - alias: swoff
      service: homeassistant.turn_off
      data:
        entity_id: light.goallight
        transition: 0.25
    - delay:
        seconds: 0.25
    - alias: loop
      service: script.turn_on
      data:
        entity_id: script.goal_repeat

goal_repeat:
  sequence:
    - condition: state
      entity_id: input_boolean.goaling
      state: 'on'
    - delay:
        seconds: 1.5
    - service: script.turn_on
      entity_id: script.goal_loop

goal_stop:
  sequence:
  - service: homeassistant.turn_off
    entity_id: script.goal_loop
  - service: homeassistant.turn_off
    entity_id: script.goal_repeat
  - service: homeassistant.turn_on
    entity_id: group.main_floor
  - service: light.turn_on
    entity_id: light.goallight
    data:
      brightness: 255
      rgb_color: [255, 172, 68]

So, there are four scripts here in my setup. The first is the start script. This handles turning off all of my non-colour changing lights and then starts the goal loop.

The goal loop consists of two scripts and the reason why have two is that we need two scripts in order to make the looping mechanism work– the first script has our light sequence and then it triggers the second script, which basically just triggers the first script again.

There are two things that might be worth noting about the primary goal script, but I’ve gone into more detail on both of these things in other posts, so if you are curious, feel free to follow the links to those posts. The first is using a single light entity to control a group of hue bulbs– I outline this a bit in this quick tip. The second is the use of the transition and delay instructions– the need for a delay in this use of transition is covered a bit more in my post on building a sunrise alarm clock.

Feel free to comment with any questions that you might have!