This post may contain affiliate links. Please read my disclaimer for more info.

Personally, I’m a big fan of always using smart switches instead of smart bulbs to automate my home. However, there are times when adding multi-color lights adds something to your smart home. I wanted to have my porch lights routinely go on every night and also change colors during the holidays. I’ve already got a Z-Wave system set up with Home Assistant so adding some Aeotec Z-Wave RGBW bulbs was the path I decided on.

Today’s review will be going through the Aeotec ZWA002 bulbs and how to set them up with Home Assistant. I’ve also written an AppDaemon app to turn the lights on every night that integrates with Google Calendar to check for holidays to make the lights festive.

Aeotec sent me this product for free to review on my blog. All thoughts and opinions are my own. I only recommend products that I enjoy using and would be comfortable using in my personal smart home.

Aeotec Z-Wave ZWA002 Features

Colors and Brightness

The Aeotec ZWA002 bulb supports 16 million colors, is dimmable and allows you to change the color temperature. I’m pretty happy with how the colors look on my bulbs but haven’t done any specific tests to check color reproducibility.

All these are configurable through the Home Assistant user interface and through automations. However, I found that the color shown in Home Assistant doesn’t always reflect the actual color of the bulb. When changing colors, the bulbs gradually transition to the new color. This is not configurable.

When you set the bulb to a new color, the bulb starts to transition. Home Assistant then queries the bulb for its color and sometimes it will report the intermediate color rather than the final color. This is a known issue talked about on the Home Assistant forums, and the fix could come down the road when Z-Wave support is updated in Home Assistant.

Z-Wave Performance

The Aeotec ZWA002 is an always powered device so it acts as a repeater in your Z-Wave network. This allows you to extend your network with bulbs and fill in any gaps you might have to improve coverage. It supports Z-Wave Plus, so it supports the latest Z-Wave standard.

When changing colors, I have seen some delay between picking a new color in Home Assistant and seeing it change in real life. This only happens when I’m trying to change multiple bulbs at once. My current prognosis is that there is inefficiency with OpenZwave/Home Assistant and it’s creating more traffic than necessary on the Z-Wave network. This causes the second bulb a delay in receiving the command to change colors. I’m still looking into this though and will update this review once I’ve narrowed it down.

Downsides

As with all smart bulbs, you need to make sure that power stays on from the light switch. If someone accidentally turns off the light switch, they no longer can be remotely controlled and actually will hurt your Z-Wave network since they cannot relay messages in your mesh. In my case, I’m using two bulbs for porch lights, so there is low-risk anyone might accidentally turn off the switch. You can also buy these guards to prevent anyone from accidentally turning off the switch.

These bulbs transition over a few seconds to the new color selected. So if you have an application where you need them to instantly change to the new color, these bulbs won’t work for this. Ideally, I would have liked to see this be configurable for users.

Finally, as I mentioned before, there is randomly a delay when changing multiple bulbs at once. This can look a bit weird because the bulbs transition colors and it would appear that the bulbs are out of sync. I think this is more of an artifact of OpenZWave/Home Assistant and I’ll be trying them out with some other Z-Wave gateways in the future to see if I can eliminate the issue.

Home Assistant

Adding to Home Assistant

Adding the Aeotec Z-Wave ZWA002 bulbs to Home Assistant is pretty straight-forward. Turn off the socket the bulb will be going in to. Then screw in the new Z-Wave bulb.

After the bulb is screwed in, click “Add Node” from the Z-Wave control panel.

Now turn on the light, the bulb will start to blink white and green for a few seconds indicating it’s joined the network.

If you don’t see the “Color temperature” slider right away, don’t worry. Go ahead and restart Home Assistant and it should be picked up after doing a restart.

Creating a Light Group

If you’re trying to control multiple Aeotec Z-Wave ZWA002 bulbs at once, it can make sense to put them in a group together. That way in your automations, you just need to change a single entity and all bulbs in the group are updated. Home Assistant has a concept of a light group, that allows you to do just that.

Making the light group is fairly straightforward, just list all the entity IDs for your bulbs you want to control. Note that this goes with your “lights” in your Home Assistant configuration, not your “groups”. This way it acts like any other light through the Home Assistant interface and services.

--- # Combine the two RGB bulbs into a single entity platform: group name: Porch Lanterns entities: - light.porch_lantern_left - light.porch_lantern_right 1 2 3 4 5 6 7 8 --- # Combine the two RGB bulbs into a single entity platform : group name : Porch Lanterns entities : - light . porch _ lantern _ left - light . porch _ lantern _ right

AppDaemon Support for Holiday Lights

I like to write my more complex automations using AppDaemon. It allows you to write your automations in Python but still interact with your Home Assistant installation. I wrote a tutorial a while ago about getting started with AppDaemon by writing a telegram bot if you’re interested in learning more about setting up AppDaemon.

My new Z-Wave bulbs will be on my porch, so I want them to turn on automatically at night and off in the morning. In addition, for any holidays I’d like them to be festive for those days. For example, on Halloween, they should be orange and on Christmas, they should transition between red and green.

The AppDaemon app requires two inputs. A light entity to control and a calendar entity that has all the holidays to account for. I used Google Calendar to subscribe to a “US Holidays” calendar that automatically has all the US holidays on it. This is especially nice for holidays like Thanksgiving where the date changes every year. I discussed how to use Google Calendar with Home Assistant in last week’s article.

Implementation

Below is my implementation in AppDaemon and a break down of how the app works.

import appdaemon.plugins.hass.hassapi as hass # Colors taken from: # https://www.w3.org/TR/css-color-3/#svg-color HOLIDAY_COLORS = { "New Year's Day": ["yellow"], "Valentine's Day": ["deeppink"], "Presidents' Day (regional holiday)": ["red", "white", "blue"], "St. Patrick's Day": ["green"], "Easter Sunday": ["yellow", "hotpink"], "Memorial Day": ["red", "white", "blue"], "Independence Day": ["red", "white", "blue"], "Halloween": ["orangered"], "Thanksgiving Day": ["orangered"], "Christmas Eve": ["red", "green", "white"], "Christmas Day": ["red", "green", "white"], } class ExteriorLightsNightRoutine(hass.Hass): """Set color for exterior lights at night.""" def initialize(self): self.light = self.args["light"] self.calendar = self.args["calendar"] self.timer_handle = None self.color_index = 0 self.run_at_sunset(self.turn_on) self.run_at_sunrise(self.turn_off) def turn_on(self, kwargs): is_holiday = self.get_state(self.calendar) == "on" holiday = self.get_state(self.calendar, attribute="message") colors_for_holiday = holiday in HOLIDAY_COLORS.keys() if is_holiday and colors_for_holiday: self.colors = HOLIDAY_COLORS[holiday] self.call_service( "light/turn_on", entity_id=self.light, color_name=self.colors[0] ) if len(self.colors) != 1: self.color_index = 1 self.timer_handle = self.run_in(self.transition_color, 300) else: # Regular night, just turn on the lights self.call_service("light/turn_on", entity_id=self.light, color_name="white") self.timer_handle = None def turn_off(self, kwargs): self.call_service("light/turn_off", entity_id=self.light) if self.timer_handle: self.cancel_timer(self.timer_handle) def transition_color(self, kwargs): self.call_service( "light/turn_on", entity_id=self.light, color_name=self.colors[self.color_index], ) # Increment index of colors. Reset to beginning if cycled through. self.color_index = (self.color_index + 1) % len(self.colors) self.run_in(self.transition_color, 300) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 import appdaemon . plugins . hass . hassapi as hass # Colors taken from: # https://www.w3.org/TR/css-color-3/#svg-color HOLIDAY_COLORS = { "New Year's Day" : [ "yellow" ] , "Valentine's Day" : [ "deeppink" ] , "Presidents' Day (regional holiday)" : [ "red" , "white" , "blue" ] , "St. Patrick's Day" : [ "green" ] , "Easter Sunday" : [ "yellow" , "hotpink" ] , "Memorial Day" : [ "red" , "white" , "blue" ] , "Independence Day" : [ "red" , "white" , "blue" ] , "Halloween" : [ "orangered" ] , "Thanksgiving Day" : [ "orangered" ] , "Christmas Eve" : [ "red" , "green" , "white" ] , "Christmas Day" : [ "red" , "green" , "white" ] , } class ExteriorLightsNightRoutine ( hass . Hass ) : """Set color for exterior lights at night.""" def initialize ( self ) : self . light = self . args [ "light" ] self . calendar = self . args [ "calendar" ] self . timer_handle = None self . color_index = 0 self . run_at_sunset ( self . turn_on ) self . run_at_sunrise ( self . turn_off ) def turn_on ( self , kwargs ) : is_holiday = self . get_state ( self . calendar ) == "on" holiday = self . get_state ( self . calendar , attribute = "message" ) colors_for_holiday = holiday in HOLIDAY_COLORS . keys ( ) if is_holiday and colors_for_holiday : self . colors = HOLIDAY_COLORS [ holiday ] self . call_service ( "light/turn_on" , entity_id = self . light , color_name = self . colors [ 0 ] ) if len ( self . colors ) ! = 1 : self . color_index = 1 self . timer_handle = self . run_in ( self . transition_color , 300 ) else : # Regular night, just turn on the lights self . call_service ( "light/turn_on" , entity_id = self . light , color_name = "white" ) self . timer_handle = None def turn_off ( self , kwargs ) : self . call_service ( "light/turn_off" , entity_id = self . light ) if self . timer_handle : self . cancel_timer ( self . timer_handle ) def transition_color ( self , kwargs ) : self . call_service ( "light/turn_on" , entity_id = self . light , color_name = self . colors [ self . color_index ] , ) # Increment index of colors. Reset to beginning if cycled through. self . color_index = ( self . color_index + 1 ) % len ( self . colors ) self . run_in ( self . transition_color , 300 )

There are two main callbacks, turn_on and turn_off that run on sunset and sunrise respectively

and that run on sunset and sunrise respectively The turn_on callback figures out if today is a holiday by looking at the calendar entity. If it’s not it simply turns on the lights for the night.

callback figures out if today is a holiday by looking at the calendar entity. If it’s not it simply turns on the lights for the night. If it is a holiday it changes the lights to the first color in the sequence, then it sets a callback after 300 seconds to move to the next color in the sequence. For holidays with a single color, it doesn’t start the timer callback.

The timer callback turns the lights to the new color and starts another callback for 300 seconds.

Finally, when sunrise happens the lights are simply turned off.

The code is available on my GitHub, along with the rest of my Home Assistant configuration. Overall, I like the simplicity of using Google Calendar to manage when the holidays actually fall and not having to hardcode the dates in my automation.

Summary

Thanks for reading my review of the Aeotec ZWA002 RGBW Z-Wave bulbs. If you’re looking to add some RGBW bulbs to your smart home and already invested in Z-Wave, these bulbs could be a great fit. They have a ton of colors to choose from and help strengthen your Z-Wave network in the process. If you have good ideas for automations for bulbs or recommendations for other Z-Wave bulbs, I’d love to hear about them in the comments.

If you’re interested in other Z-Wave devices, check out some of my other reviews:

If you found this review helpful, please consider supporting the blog by joining my mailing list, following the blog on social media or directly through Buy Me a Coffee. Thanks for reading!