Color Notify: Stop Fighting Automation Logic to Show Multiple Alerts on One Smart Bulb


GitHub - cobryan05/ha-color-notify

Hey everyone,

Have you ever tried using an RGB bulb to show alerts in your house, only to realize that managing multiple overlapping events is a complete headache?

Think about this classic scenario:

  • You want a blue nightlight when motion is detected after dark.
  • You want the same light to turn red when you're on a work call.
  • You want it to flash yellow if the garage door is left open.

If you try to write standard Home Assistant automations for this, you quickly end up in helper-variable hell. You have to take snapshots of the previous light state, write messy conditional logic, and guess what happens if a low-priority motion event accidentally overwrites your high-priority work meeting color.

I got tired of fighting that logic, so I built Color Notify. It’s a custom integration that wraps your existing smart light in a virtual layer and handles all the background queueing, priorities, and state restoring for you.

:rocket: How it works

Instead of controlling your raw physical light bulb in your automations, you talk to the Color Notify "wrapper" light.

  1. Alerts are just switches: Every single notification or flash pattern you create shows up in Home Assistant as a standard switch entity. Want to turn an alert on or off? Just toggle the switch in your automation.
  2. Notification Pools: You can group your alerts into logical pools (like Security, Appliances, or Work). Your lights then subscribe to these pools. This means a single "Garage Door Open" switch can instantly trigger indicator lights all over the house at the same time. Lights can subscribe to individual notifications within pools as well.
  3. Smart Priorities: You assign a numerical priority to each alert. If a priority 100 alert (like an alarm) and a priority 10 alert (like the laundry being done) are active at the same time, the high-priority one wins. The moment you flip the high-priority switch off, the light automatically drops back down to the next highest alert—or goes back to being a normal light if nothing else is active.

:fire: Cool features built-in

  • Normal light controls still work: The wrapped entity behaves just like a regular light bulb. Your standard dashboards, schedules, and dimming routines won't break; Color Notify just handles the alert overlays in the background.
  • Custom flashing patterns: You aren't stuck with solid colors. You can pass simple JSON strings to make complex animations—like flashing red for half a second, dimming, and looping it 5 times.
  • Interruption logic:
    • Dynamic 'On' Priority: Turning the physical light switch on manually can temporarily override an active background alert so you aren't left sitting in the dark.
    • Auto-Cycling: If two alerts have the exact same priority level, the light can automatically cycle back and forth between them on a timer.
    • Temporary Peeking: You can let low-priority alerts briefly "peek" through a higher-priority color for a few seconds right when they are triggered, before the light goes back to the main alert.

:hammer_and_wrench: Quick Tour of the UI

Everything is configured cleanly through the native Home Assistant UI. No manual YAML tweaking required.

1. Wrapping a Light

When you first wrap a physical light, you get to choose how it handles manual overrides and priority ties.


As you can see, it's just quick checkboxes for things like Dynamic 'On' Priority and Auto-cycling.

2. Creating Alerts and Patterns

This is where you build out your notifications inside your Pools, setting your priorities, auto-clear timeouts, and light colors.


If you check out the Pattern field in the screenshot above, you can see how easy it is to write a looping flash using basic colors and delays (e.g., {"rgb": [255, 0, 0], "delay": 0.5}).

3. Subscribing Lights to Pools

The final step is just telling your lights which alerts they should care about.


You just check the boxes for the pools or standalone switches that specific light should watch. When an alert switch flips on, all subscribed lights update in perfect sync.

:package: Installation

It's fully compatible with HACS.

  1. Go to HACS > Integrations, search for Color Notify, and download it.
  2. Restart Home Assistant.
  3. Go to Settings > Devices & Services > Add Integration and search for Color Notify.
  4. Wrap your light, set up a pool, and go delete those massive conditional automations!

Check out the code and the full documentation over on GitHub: GitHub - cobryan05/ha-color-notify

I'd love to hear how you guys are using visual indicators in your setups, or if you've built any cool animation patterns that look great. Let me know if you run into any bugs or have feature ideas!

edit: 2026-05-26: I let the AI make my post more engaging. Hopefully no real content changes :laughing:

6 Likes

Just came across this and its already proving to be an incredibly useful app. Thanks for the work on this. I’m using it with these Matter switches: Inovelli White Series 2-1 Smart Switch • Works With HomeKit • Matter which allow the RGB LED bar to be controlled like a RGB bulb to display notifications.

I’m glad you are finding it useful! Thank you for the comment, it’s always encouraging to hear that someone else is benefiting from the effort put into it (and gives me more motivation to put more effort in)

This is neat and similar to an integration I just created. Inovelli switches are mentioned in this thread, so it may be of interest to someone who has been here or ends up here in the future: Lampie: Notifications on Multiple Inovelli Switches. Hope someone finds it useful!

Hi,

I’m not sure if I’m totally misunderstanding the integration, but basically how do you tie automations in to trigger the pools? So for example, lets say I set up my RGB night light to turn green when the laundry is done (we’ll say priority 1), Blue when a package arrives (Priority 2), and yellow if the door is unlocked for x amount of time (Priority 3), When all three of those events happen around the same time, how can I engage the light display the colors and loop them using the pools? Thanks, this seems like a cool integration, I just happen to have rocks for brains

If you want the light to loop between those three notifications you should set them all to the same priority.

You can define per-light how long it displays each color with the “Auto-cycle between same priority notifications” and “Auto-cycle delay” settings:

If you give them each different priorities like you are doing then it will always show only the highest active priority. The exception to this is that notifications can briefly override higher priority notifications when initially enabled. Per-bulb you can configure the “Duration to temporarily display lower-priority notifications” to pick decide how long an override will display (0s to disable), and per-notification you can configure “Temporarily show on activation, regardless of priority” which lets you specify only specific notifications to briefly display.

If you set all of those notifications to the same priority and activate them all at once, it should cycle between them (every 5s by default).



I do want to (at some point) add a service call to manually cycle them (eg, to trigger cycling all notifications on motion trigger) but just haven’t had the time.

edit:

how do you tie automations in to trigger the pools?

If you were actually just asking “how do you make an automation turn on an notification” then the answer to that is that each defined notification shows up as a ‘switch’ entity, so you just turn it on and off like a switch from the automation.

ahhhh I see now, I was trying to build the automation to trigger a light rather than a switch. Thanks for following up, I’ve been looking for something like this

Hi

Toggle within ESPHome is no longer working with this light - I am guessing a HA change has caused the state to no longer be reported correctly - but just a guess! Any thoughts?

I noticed with my notify light on or off, the state in HA is reported as off… maybe this has always been the case?

I’m not completely sure I understand the exact situation, so I’m going to answer what I think you are asking, but ask again if this doesn’t apply :slight_smile:

If the light in the screenshot is the Color Notify ‘wrapper’ light, and you are saying that it is showing a notification but shows ‘off’ in HA, then that is the correct behavior (unless you turned the wrapper entity light itself on…)

The wrapper presents itself as a normal light and hides anything the notifications are doing. You can look at the ‘real’ entity to see what the light is actually showing, but the wrapper entity should look like it’s just a normal light bulb without any of that hidden notification stuff happening.

edit: Ah, just saw the github issue, let’s move this there.

Thank you, and solved by looking at the HA original light state… thanks for your help!

Love this! Using it with my Inovelli switches. Quick question though as I am still an amateur at Home Assistant, is there a way to set a brightness on this? They default to 100. Should I make a template light that makes 100% actually 50% and just use that or something like that?
I am using a group of lights so the light entity created by this always stays off regardless of the notification switch position being on or off.

Anyway thanks for this!

You should be able to dim the lights, although restoring brightness over reboots doesn’t currently work. However, I’m really not sure how RGB lights are supposed to work :laughing:. All I can say is “it works for me” so knowing the specifics of your situation would definitely help.

Could you fill in some details of your setup?:

  • You have a group of lights? The the ColorNotify wrapper is around the Group? I’ve never tried Groups but this at least sounds like something I can test locally without new lights.
  • Do you use solid color notifications or ‘animations’?
  • When you say brightness doesn’t work, are you manually adjusting the wrapper light or is a notification trying to adjust brightness?

There is a pull request on the github to address the ‘not saving values over reboot’ (Fix startup restore blast + accept external changes when idle by michaelbrawn · Pull Request #8 · cobryan05/ha-color-notify · GitHub) but I need to understand how RGB lights are supposed to work to ensure that I am not designing for quirks of my RGB lights that don’t work for others.

The RGB lights I have take ‘brightness’ and ‘RGB’ value. If I set it to full red #FF0000 or dim red #100000 it is the exact same color. You have to adjust ‘brightness’ to dim it, not just the RGB values.

When I made ColorNotify I made it so that it would adjust the brightness based on the RGB value. Put dim RGB, it lowers the brightness. This has caused issues, such as there not being a terrific way to save brightness value over Home Assistant restarts.

I need to come up with a way to implement brightness and properly restoring over reboots while not breaking existing setups. I could put a checkbox per-light for “RGB controls brightness”

Are my RGB lights are normal. Is it ‘normal’ for #010000 brightness 100 to be the same as #FF0000 brightness 100? Or do other lights take lower RGB values as dimmer lights? If you or anyone could answer that then I could try to get this working properly. I’m worried that I will (or already have) design this thing around a quirk of my lights :laughing:

Well actually you just solved my problem. By adjusting the color brightness to 128 from 255 it did bring it to 50% brightness which is what I was trying to achieve.

I am curious what the main light entity that is created does? The switch for the notification turns on the lights that are part of the group but the light entity made by color notify does not turn on. What does the default color on it do? Also what does the dynamic “on” priority checkbox do? It works fine without it I just didn’t understand the parameter of it? Is that for when this entity itself is turned on it will override notifications?

Anyway thanks again. Appreciate the help.

The created ‘wrapper’ light entity is supposed to act like a normal light bulb and hide all of the notification stuff. Once you create a wrapper light you should no longer directly interact with the ‘real’ light entity. You should only interact with notification switches or the ‘wrapper’ light entity.

The idea is that you treat the wrapper light as a normal light. You can turn it on, you can turn it off, you can change its color. It just transparently shares the ‘real’ light between this fake light and all of the notifications assigned to the light.

Each light has a ‘default on’ priority that you can specify. If multiple notifications are active (or you have the light ‘on’ and have a notification) then the real light will only display the highest priority item. So if you had a notification with priority 1000, and a light with priority 900, then if you switch on the light AND the notification then the notification will show on the real light since it is higher priority than the ‘on’ light.

This is where dynamic priority comes in. If dynamic priority is enabled then when you turn ‘on’ the light its priority will be the greater of the light’s default priority, or if there any notifications active then the lights priority will be just barely above the active notifications priority.

If that’s confusing, consider this scenario:

  • My entryway hallway has an RGB light that has many notifications assigned to it.
  • The light switch in the hallway toggles the ‘wrapper light entity’ when it is switched
  • My wrapper light has priority 1000
  • A notification with priority 2000 is currently being displayed

If I walk into the hallway and flip the light switch, the wrapper light turns on but it is lower priority than the notification, so the notification wins. Nothing happens when I switch the light switch.

With dynamic priority, when I flip the light switch the wrapper light is temporarily given priority 2000.5. I just flipped the light switch, I expect the light to turn on regardless of if there is a notification or not. The light will keep this priority until it is turned off.

1 Like