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.
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:
Find the Wiring Diagram of the Neopixel RGB Strips and the Arduino below. They will fit to the bottom of the wooden stand.
As a user you just need to download the latest version from releases and run the .exe file.
If you want to participate in this development, you can check out the current state of development by
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>
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 File → Open Workspace from File.
- Select MS-Teams-Busy-Light.code-workspace from the repo path.
- Hit Enter.
- Click CTRL+SHIFT+P and enter
Create Environment
. - Select Venv and hit Enter.
- Select requirements.txt install Venv with the needed pip libraries.
Just execute the the Powershell Script in a powershell admin shell.
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.
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.
The location of this file:
C:\Users\%localappdata%\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\Logs
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 |
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: You can see here, that I prepared to glue a thin layer of vaneer wood to the backside, too cover the electronics.
Here you can find some pictures of the current state / final version of the busy light:
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.