Skip to content

Repository for a DIY Busy light, that should represent the Teams presence status in a small box, that will turn a plexiglass with indirect LED light into a matching color

License

MarcelSchm/MS-Teams-Busy-Light

Repository files navigation

MS Teams Busy Light

Repository for a DIY Busy light, that should represents the Teams presence status in a small box, that will turn a plexiglass with indirect LED light into a matching presence color.

Hardware

Disclaimer regarding the choice of Hardware: Although there is some hardware that would better fit for the purpose, I decided to use the following items, because I had (at least some of them) already in my drawer.

  • plexiglass sheet
  • Arduino Nano (Chip: Atmel atmega328p Xplained mini)
  • wood
  • WS2812 5050 RGB LEDs (Neopixel)

I created a CAD Modell of it, using Catia. Besides the Part Modell itself, I created the drawing of the plexiglass and wooden stand, as well as their PDF exports, so you don't need Catia to open them. Here you can see a first rendering of the model: rendered

Electronics

Find the Wiring Diagram of the Neopixel RGB Strips and the Arduino below. They will fit to the bottom of the wooden stand. wiring diagram

Software

Installation as a User

As a user you just need to download the latest version from releases and run the .exe file.

Installation as a developer

If you want to participate in this development, you can check out the current state of development by

Installing Git

open CMD or powershell and type:

winget install -e --id Git.Git
git clone https://github.com/MarcelSchm/MS-Teams-Busy-Light.git <your-repopath>

Installing Visual Studio Code and Extensions

open CMD or powershell and type:

winget install -e --id Microsoft.VisualStudioCode
  • Open Visual Studio Code.
  • Select Extensions in the side menu icons.
    • Search for Python → Click Install.
    • Search for Pip Manager → Click Install.
    • Search for Markdown All in One → Click Install.
  • Click FileOpen Workspace from File.
  • Select MS-Teams-Busy-Light.code-workspace from the repo path.
  • Hit Enter.

Setup .venv in Visual Studio Code

  • Click CTRL+SHIFT+P and enter Create Environment.
  • Select Venv and hit Enter.
  • Select requirements.txt install Venv with the needed pip libraries.

Create new .exe

Just execute the the Powershell Script in a powershell admin shell.

How to get the presence status

There are different ways of fetching the presence status of teams. Microsoft provides the status of your account that is used in Teams via the Graph API. This might come in handy for future versions of the busy light: instead of just having one Hardware that represents your status in one color, you can split the LED to actually also show the status of another colleague. Unfortunately, to access the Graph API, your organization needs to grant consent for the organization so everybody can read their Teams status. Since my organization didn't want to grant consent, I needed to find a workaround. If you might want to check it on your own hou can find some information on the documentation of how to get presence using Graph API. One of them is the monitor the MS Teams log file on the local Harddrive.

Note

This solution below only works for the OLD version of Microsoft Teams. The new version is on a different location, with some differences and limitations. Therefore, there will be an updated MS-Teams-Settings.config config setting file, that can be used to confige which version you want to use.

MS Teams OLD

The location of this file:

C:\Users\%userprofile%\AppData\Roaming\Microsoft\Teams\logs.txt

Idea on what/how to read from the log file I got from this repository.

MS Teams NEW

The location of this file:

C:\Users\%localappdata%\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\Logs

Teams Presence status

The Log File contains several information. Changes in Teams Presence status can be obtained from messages containing StatusIndicatorStateService: Added, message containing information for Calls contain DeviceCallControlManager Desktop:. This is the List of possible Teams Status that are available: (Main )

StatusName in Teams StatusName in Log File Color Command String send to Arduino
Available Available 💚 green 💚 Green
Busy Busy ❤️ red ❤️ Red
In a meeting InAMeeting ❤️ red ❤️ Red
In a call OnThePhone ❤️ red ❤️ Red
Do not disturb DoNotDisturb ,Presenting ❤️ red ❤️ Red
Be right back BeRightBack 💛 yellow 💛 Yellow
Away Away 💛 yellow 💛 Yellow
Offline Offline 💛 yellow 💛 Yellow
N/A NewActivity N/A
N/A Unknown,ConnectionError,NoNetwork ❤️ red ❤️ Red
'Calling' Window reportIncomingCall ❤️ red ❤️ BlinkRed
Additional Status apart from Teams Description Color Command String send to Arduino
Established Connection After successfully connecting to COM- Port 🤍 white 🤍 White
Outdated Status information in Log file is older than start of script 💚 green 💚 Green

Results and Assembly

Assembly

After creating the wooden stand, plexiglas and soldering of the electronics, you need to put everything together. should be selfexplaining, but here have a look of my assembly: assembly You can see here, that I prepared to glue a thin layer of vaneer wood to the backside, too cover the electronics.

Results

Here you can find some pictures of the current state / final version of the busy light: red_no_engrave green_no_engrave red_engrave green_engrave

Reference / Link Collection

I gathered the above information from various sources. Here to find the link collection, everything not directly linked above was just added to this file for the complete Link list, I used for inspiration, even if it was not used at the end.

About

Repository for a DIY Busy light, that should represent the Teams presence status in a small box, that will turn a plexiglass with indirect LED light into a matching color

Resources

License

Stars

Watchers

Forks

Packages

No packages published