Making the Busy Light Smarter: Microsoft Teams Integration

Remember the busy light I built with an ESP8266 and Home Assistant? The one that helps my 3-year-old understand when daddy is available? Well, it's gotten a lot smarter since then.

4 min read
Making the Busy Light Smarter: Microsoft Teams Integration

Remember the busy light I built with an ESP8266 and Home Assistant? The one that helps my 3-year-old understand when daddy is available? Well, it's gotten a lot smarter since then and now he's 5 😄

The original setup worked great with a motion detector - if someone walked past during work hours, the light turned red. Simple and effective. But there was a problem: it didn't actually know if I was in a meeting or just sitting at my desk working. Red light when I'm just working? Not ideal.

Enter Microsoft Teams Integration

Working from home means most of my meetings happen in Microsoft Teams. Wouldn't it be great if the busy light could know when I'm actually in a call? That's exactly what the MS365 Teams integration for Home Assistant does.

This integration connects to your Microsoft 365 account and pulls your Teams presence status directly into Home Assistant. No more guessing - if I'm in a call, presenting, or in a meeting, Home Assistant knows about it instantly.

What You'll Need

Beyond the busy light hardware I covered in the original post, you'll need:

  1. A Microsoft 365 account (this doesn't work with personal accounts)
  2. The MS365 Teams integration for Home Assistant
  3. Access to create an Entra ID App Registration (formerly Azure AD)

The setup process is well documented on the MS365-HomeAssistant site, so I won't repeat all the details here. The key steps are:

  1. Create an Entra ID App Registration
  2. Grant the necessary permissions for Teams presence
  3. Install the integration in Home Assistant
  4. Authenticate with your Microsoft account

Once authenticated, you'll get a sensor in Home Assistant that tracks your Teams status in real-time.

The Automation

Here's where the magic happens. This automation monitors my Teams status and controls the busy light accordingly:

alias: Teams Meeting Status
description: ""
triggers:
  - entity_id:
      - sensor.teams_sth_status
    trigger: state
conditions: []
actions:
  - choose:
      - conditions:
          - condition: or
            conditions:
              - condition: state
                entity_id: sensor.teams_sth_status
                state: InACall
              - condition: state
                entity_id: sensor.teams_sth_status
                state: InAConferenceCall
              - condition: state
                entity_id: sensor.teams_sth_status
                state: Presenting
              - condition: state
                entity_id: sensor.teams_sth_status
                state: Busy
              - condition: state
                entity_id: sensor.teams_sth_status
                state: InAMeeting
        sequence:
          - data: {}
            target:
              entity_id: input_boolean.teams
            action: input_boolean.turn_on
          - metadata: {}
            data:
              rgb_color:
                - 255
                - 38
                - 0
              brightness_pct: 100
            target:
              entity_id: light.busylight_neopixel_light
            action: light.turn_on
    default:
      - target:
          entity_id: input_boolean.teams
        data: {}
        action: input_boolean.turn_off
      - metadata: {}
        data:
          rgb_color:
            - 0
            - 249
            - 0
          brightness_pct: 100
        target:
          entity_id: light.busylight_neopixel_light
        action: light.turn_on
mode: single

Let me break down what's happening here:

The Trigger: Whenever my Teams status changes, the automation fires.

The Logic:

  • If I'm InACall, InAConferenceCall, Presenting, Busy, or InAMeeting → Red light (255, 38, 0)
  • For any other status (Available, Away, etc.) → Green light (0, 249, 0)

I also toggle an input_boolean.teams helper entity that I can use in other automations if needed.

Why This is Better

The difference is night and day. Now the busy light only turns red when I'm actually engaged in a Teams meeting or call. When I'm just working at my desk, it stays green - my family knows they can pop in for a quick question.

The automation catches all the important states:

  • InACall / InAConferenceCall - Obviously in a meeting
  • Presenting - Screen sharing means definitely don't interrupt
  • Busy - Teams sets this automatically during scheduled meetings
  • InAMeeting - General meeting status

Real-World Benefits

Since implementing this, interruptions during important client calls have dropped to zero. My partner knows that a red light means "wait 5 minutes" rather than guessing based on whether my office door is closed.

The 5-year-old? He's now a pro at the traffic light system. Red means play quietly, green means "Daddy, come look at my LEGO!" works just fine.

Taking It Further

The beauty of this integration is that the Teams status sensor can be used for so many other automations:

  • Automatically muting smart home notifications during calls
  • Pausing music when a call starts
  • Sending your status to other smart home devices
  • Triggering "Do Not Disturb" on your phone

You could even extend the busy light to show different colors for different states - orange for "away," purple for "do not disturb," etc.

Wrapping Up

If you're working from home with Microsoft Teams and have a Home Assistant setup, this integration is a no-brainer. Combined with the physical busy light, it creates a simple, visual system that everyone in the household can understand at a glance.

The combination of hardware (ESP8266 + NeoPixel ring) and software (Home Assistant + MS365 integration) gives you a professional-grade presence indicator for less than €20 in parts.

Working from home doesn't mean your family has to guess when you're available. Sometimes the best solutions are the simplest ones, a light that's red or green, powered by the actual status of your meeting software.

Related Links: