Building a Skype/Lync notification light

Two posts in a year, not bad πŸ˜›

Like a lot of companies that drink the Microsoft cool-aid I work for a place that uses Skype for business for text chat/voice communications… it generally works pretty well.
A few colleagues of mine have Blynclight status lights above their monitors as a visual indicator to visitors and/or other people around you that you are free/busy/uninterruptible. The concept itself looked pretty simple to build so I thought I’d give it a go… My project is called SkypeSignal (I’m not very good at names):

My solution comprises of two main parts:

  1. An Arduino nano connected to a couple of RGB LED lights
  2. A .NET application which uses the Lync client SDK to send commands to the Arduino via serial (over USB)

The Design:

The parts list for the actual build is pretty minimul:

  1. Arduino Nano
  2. A few RGB LED’s (supports a PWM driver [i.e. WS2811])
  3. a 330 Ohm resistor
  4. USB Cable
  5. Project box
  6. Wire

I went for LED’s using the WS2811 chip to drive them; this means that we only need 3 wires to run the whole thing, the below design can be modified to chain LED’s together and address them individually or alternativly run them as single LED’s by sharing the same digital input.

arduino schematic

Simple Circut

The operating workflow:

  1. Device connected to USB
  2. Relevant COM port set in SkypeSignal.exe.config and application started on PC
    1. A thread is started to run a small tray application on the windows task bar
    2. A thread is started to subscribe to Skype/Lync client events using the client SDK
  3. On client status change, a numerical command is sent down to the Arduino where it switches the light to the colour/pattern representing the presence of the user.

It would be trivial to add new features to this and I may look at adding some of these in the future:

  • Have the .NET app send a PING to com devices and using device on com port that responds with expected value
  • Flashing on missed notifications
  • Strobe + Audio Alerts on Incoming call (I’ve included a speaker in my version for future use)
  • Look at pulling the status over IP using UCWA to have a headless status device.
  • Tidying up the code – its pretty janky

Demo:

The finished project above works pretty sweet – If you want a copy of the code, check it out in my Repo here:Β https://github.com/coaxke/SkypeSignal

Or download a copy atΒ https://www.resdevops.com/files/binaries/SkypeSignal.zip

Drop me a line if you have any questions.

-Patrick

Edit:
Aug 17: I’ve just added incoming call alerts to the app (requires updates for tray-app plus Arduino sketch. Enjoy


20 thoughts on “Building a Skype/Lync notification light

  1. Really cool project. Do you have an executable app on GitHub or does it need to be compiled in visual basic? I am not very good with VB.

    • I assume you’ve connected an Arduino to your PC – it should present a COM port which needs to be set inside the SkypeSignal Application configuration file.

      With regards to the 4 pin RGB LED, yes Im sure you could but you would need to modify the arduino project source code I have provided, its currently expecting an RGB LED driven by an WS2812 LED controller chip or an equivalent [as its using the Adafruit NeoPixel Library]).

    • Hi Able,

      Sorry for the late reply – I have uploaded the latest build (same link as in the post). This addresses another issue around performance.

      Thanks

  2. Has anyone got this to work on a raspberry PI, id really like to get a notification system on the pi for Skype for business

    Thanks,

    DREW

    • I’m not too sure house you’d do this unless the Pi could expose a serial interface for your PC (which is running the Skype Client) – The tray app relies on client-side libraries so does not communicate with any Skype infrastructure. It was totally something I wanted to look into, but with Microsoft announcing that they are going to deprecate Skype and replace it with Microsoft Teams, I thought I’d hold off and see how hard it is to upgrade my existing app.

      TL;DR – You’re better to use a cheap Arduino πŸ˜‰

  3. Thanks for this. I have been looking at the commecial products for a few months, but decided I wanted to do my own. Looking at the demo video, the delay between status change and the LED change is longer than I like. Anyway to make it faster? Or am I just too darn impatient πŸ™‚

    • Hi Matt,

      Sorry – I should have updated the post. The latest version on GitHub (both the .NET and Arduino code) has major performance improvements – updating the notification light is now instant. Give it a go and let me know how you get on :).

      Regards,
      Patrick

  4. Hi Patrick,

    That’s a really cool project, I love it. I built that Arduino with a RGB-LED and it works great.
    The only thing I’m trying to find out (I’m a beginner in anything programming related – except a bit Java and PowerSHell scripting theres not much) is if these improvements are good to build in and how it’s done:

    1. Possibility to enter the COM port inside the “About” window instead of the config file
    2. Automatic detection of the Arduino connected without the need to look for the COM Port first
    3. Automatic reconnect for laptop users – I carry around my laptop a lot and have the Arduino connected to my Monitor USB Hub – after reconnecting to the dock it doesn’t go back on. Maybe I’m doing something else wrong..

    What do you think about that stuff?

    Regards,
    Martin

  5. Hi Patrick,

    This is just what I was looking for!
    I’m going to try using RGB strip lights for our cubicles at work. Also, if you have a way to get the status over IP, I’d love to discuss how that is done. I’m just getting into programming and don’t know all that much just yet, and my comfort level is pretty low.
    Thanks for the hard work!

    Cheers!
    Kyle

    • Hi Kyle,

      That’s awesome – sounds like a good plan.
      I have had it working over IP. I ran a similar App to the one i’ve provided and ran the equiv Arduino on an ESP8266 which exposes a web-server; The app calls different web endpoints on the ESP to change the status- seemed to work pretty nice!

      -Patrick

  6. Hi Patrick

    Awesome project, I love it!
    I have been looking at the commercial stuff for a few years already but always put them of since they cost a fortune just to trigger a LED and the boss simply thought it was a “no needed thing”.
    But your solution is well within my private budget and i love to build, besides it is much more configurable this way too.

    I realized i had all parts laying around in the junk-box already and threw it together.
    Finally i can get some privacy at work, Red light means stay away..
    Now i just need to send that all users email to let everyone else know. πŸ˜›

    I was hoping for a possible missed message indication since I am more or less deaf and i keep missing the Lync messages from the boss when i’m busy not looking at the monitors.
    Something you already started implementing in the tray app perhaps?
    It would be cool to have a separate timed pulsing output activated on incoming call and messages as well, either to control a relay for a buzzer/desk-vibrator or focused flashing light in eye height at the normal working position.
    My coding is a bit rusty or else i would have jumped right to it myself. Or maybe this was the kick i needed to get back to it. πŸ˜€

    Thanks a lot for the idea, project and sharing it!

    Cheers!

    //Anders

  7. I have this working through a Bluetooth com port on the Arduino. The communication works fine but the Com port code does not like the disappearing nature of the Bluetooth com port. Has anyone tweaked that code already to make the com port detection retry instead of crashing out? I don’t have easy access to a .net compiler but it looks like a pretty easy change.

Leave a Reply

Your email address will not be published. Required fields are marked *