How to Create Your Own Smart Zoom Status Light

All you need is a Smart Bulb and an hour to automate the communication of your meeting status to your kids as Red/Green

Ryan Gross
Jan 26 · 9 min read
High-level system architecture diagram for the Zoom->Smart Bulb Integration

If you’re finding this article, then you likely are looking for ways to help your kids (or roomates) know that you’re in a Zoom meeting and its not a good time to come in and bother you. I have a separate article that goes into the reasons that I built this solutiion, and how effective it has been at improving the work → home life relationship between me & my kids. The goal in this article is to walk you through the process so you can set it up yourself if needed. The basic setup is shown in the hero image at the top of the article. It works like this:

  1. A custom Zoom App for yourself sends an even to a webhook whenever your Zoom status changes
  2. An Integromat App to handle that webhook event and create a simple 2-state state-machine
  3. Whenever the state changes in the 2-state state machine, the Integromat function fires another Webhook event over to IFTTT
  4. IFTTT handles the webhook and has a recipe to set the proper color on your Smart Bulb ( I used a TPLink Kasa Bulb, but IFTTT it works with nearly every vendor out there)

Next, I’ll walk you through the 8 steps to get this setup. Some of the steps are just testing to make sure that each integration is working well. Based on my experience, this will take you about an hour end-to-end. Please feel free to reach out to me via Replies or directly on LinkedIn or Twitter if you run into trouble with the setup.

Head to https://marketplace.zoom.us and Sign In to your Zoom account.

Click Develop and then Build App

Select the OAuth App Type, since you will need to have the user’s (your) permission to share their status to a webhook. If you already have developer permission on your Zoom account, you can also choose Webhook Only.

You’re setting this up for yourself, so you want a User-managed app that is not published on the Zoom App Marketplace.

Click create and you will have a Zoom app ready to go (that does nothing at this point). Leave this screen open in a browser tab, and move on to the next step.

Because there is no direct integration between Zoom and IFTTT, and because we need to have a state-machine, we need a middle step in our integration. Today, you can do this pretty easily in a a no-code programming environment that allows anyone to automate integration across 100s of different services. There are many competitors (Integromat, Zappier, OutSystems, and Appian to name a few), and you could likely implement this component in any of them. I chose Integromat because it had a free tier, a built in Zoom and IFTTT integration, and simple Data Store functionality.

You can’t have a state machine without state, and for that we will need a Data Store. On the left hand menu, click Data Stores, then click the Create Data Store button on the top right. Give a name to your data store, then click Add under Data structure to create a new Data Structure that defines what will be in your Data Store. The data store will also have a field called Key that is used to allow lookup of multiple values.

This is about as simple as a data store can get, with a single boolean (true/false) field called in_meeting. Make sure to set the default to false so your state machine doesn’t have to deal with an unknown meeting state when you first start it up.

Now that we have a place to store our state, we can get on with building the State Machine, which will eventually look like the picture below. To get here, go to Scenarios, then click Create New Scenario:

The first step is to configure the Zoom Webhook. Select Zoom, then Watch Meetings.

Note that we won’t actually be watching meetings. There isn’t a choice for Watch User Status, but the Watch Meetings function is simply a zoom-specific Webhook listener.

On the next screen, click Add and call the Webhook User Status. Click Save, and Integromat will generate a URL that can be called from Zoom to trigger this Scenario. Copy the URL which will help us set up our Zoom App connection, then click OK.

Head back to your Zoom App to set up the webhook. In the App Credentials Redirect URL for OAuth field, enter https://www.integromat.com/oauth/cb/oauth2.

Go to Feature, then turn on Event Subscriptions. Click Add new event subscription. Call the Subscription Status Updated. In the Event notification endpoint URL, paste the webhook URL you copied from the Integromat Webhook screen.

Scroll down and click on the Event types button, then select User Activity and Users presence status has been updated. This will cause Zoom to deliver a message to integromat every time your Zoom Presence Status changes.

Next, click on Scopes, then Add Scope. Select User, then View your user information (user:read). Save this and your Zoom App is ready to install.

Click on Activation, then Install, which will redirect you to the Zoom login screen to approve of the permissions. If you configured the prior steps correctly, you should be prompted with “View current user’s information”.

With your Zoom App installed, you can now inspect what’s happening on the Integromat side. You can click the Run Once button to run your Scenerio in debug mode. This will let you inspect the message that comes from Zoom. Once your Scenario is up and running, head over to Zoom and start a new meeting. When you do this, your debugging run in Integromat should end automatically, and display a the of results of the run overlaid on the diagram.

Click the magnifying glass to get a preview of what Zoom sent across. You may have to expand the payload and object fields, but eventually you will see that the presence_status was In_Meeting. Now that Integromat knows about the structure that it should expect from Zoom, you can use this field in the rest of the Scenario.

In order to finish our State Machine, we need to know the current state. If you are already in a meeting when the status changes to In_Meeting, then this doesn’t need to change the light color. To get the current state, we use the Data Store > Get Record action, which is connected to the Data store we created earlier. I chose to key off of the email address from the Zoom user. This would allow the same Integromat Scenario to work for multiple Zoom users by looking up their status from their email (although we don’t need that for now).

Next, we use the Router Action to make a decision. To do this, add a new Data Store Add/Replace Record action that uses the same email address field as the Key and sets the Meeting Status value to Yes. You will need to check the box to Overwrite the existing record, as this is meant to update every time that the Meeting Status Changes. Next, add a similar Action as a second step after the Get Record, but this time set the Meeting Status to No. Now that you have configured your downstream actions, you need to set the conditions that will trigger them.

Click on the wrench icon on the connection to the “Yes” Meeting Status branch, and choose Set Filter.

Call the filter Meeting Started and set the condition to capture the following Zoom statuses when the Meeting Status is set to false: In_a_Zoom_Meeting, In_Meeting, Do_Not_Disturb, Presenting. Similarly, set the Meeting Ended filter on the other branch to capture when the presence_status is not in the list above and the current Meeting Status is set to true.

Now you can test your Scenario again. Click the Run Once button, then start another Zoom Meeting. You should see that the branch setting the Meeting Status to Yes was activated. You can also see that the value is saved in your Data Store by clicking Data Stores then Browse next to your Data Store.

Click Run Once again, and end the Zoom Meeting you just started. This time, you will see the other path get exercised.

Now that you have a working State Machine, we can let IFTTT know when you make a State Transition so it take action on our smart home for us. To do this, you will need to set up an IFTTT action on each of the branches.

Head to https://ifttt.com/explore and search for webhook. Click Services, then Webhooks.

Next, click on Documentation in the top right. At the top copy the key indicated after “Your key is:”.

Now, back in Integromat, add a new Action and choose IFTTT, then Send Data. Click Add next to Connection, and paste in the Webhook key you just copied.

Set the event name to meeting_start and leave the rest of the event blank. Repeat to create an event with the name meeting_end on the Meeting End branch of your router.

If you haven’t already, it’s time to plug in your Smart Bulb and set it up using the App instructions from the Smart Bulb Manufacturer.

Back in IFTTT, you can close out of the Documentation and create a Recipe that starts with “Receive a web request” and sets the color appropriately based on the meeting_start or meeting_end Event Name.

And there you have it. You have successfully provided your kids with an indicator of whether they will be interrupting a meeting when banging on your door and asking if you like Cinderella or Sleeping Beauty more. With a little encouragement (i.e. coming into the office when the light is red means you go to timeout), they’ll quickly learn to wait for the light to turn green.

Hope this helps!

I’d love to hear more about the techniques you use to maintain sanity in your work → home-life balance.

I’m also planning to follow up on the broader implications of the connected, event-driven world that we now live in.

The Do Not Disturb Light Bulb is just one example of what is now easy that was once impossible.

The KickStarter

A Medium Publication for Aspiring Writers, Entrepreneurs, Innovators, and Marketers.

Sign up for "The KickStarter" Newsletter

By The KickStarter

Stay tuned about the weekly distribution list, trending stories, and progress updates from our publication. Take a look.

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

Ryan Gross

Written by

Emerging Tech leader at Pariveda Solutions | Interested in how people & machines learn, and how to bring them together.

The KickStarter

A place for passionate writers, innovators, entrepreneurs, digital marketers, side hustlers, and anyone who is ready to help people solve their problems.

Ryan Gross

Written by

Emerging Tech leader at Pariveda Solutions | Interested in how people & machines learn, and how to bring them together.

The KickStarter

A place for passionate writers, innovators, entrepreneurs, digital marketers, side hustlers, and anyone who is ready to help people solve their problems.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store