Adding support for Yeelight LED Screen Light Bar Pro YLTD003 (lamp15)
Hi! I want to preface this by saying that I'm very new to this project and have only spent a couple of hours going through the code so please excuse and correct any misunderstandings I may have. I'm happy to help contribute with a MR for this issue, but have a couple of questions and would appreciate some guidance. Thanks!
I recently got the Yeelight LED Screen Light Bar Pro which is listed as model YLTD003 on the website. It is a neat screenbar that has a white colour temperature light in the front as well as an RGB ambient light at the back, and I was looking at adding support for this.
The first thing I did was run discover_bulbs()
, which gave me the following information:
[
{
"ip":"XXX.XXX.XXX.XXX",
"port":55443,
"capabilities":{
"id":"0x000000000eceb667",
"model":"lamp15",
"fw_ver":"15",
"support":"get_prop set_default set_power toggle set_ct_abx set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_adjust adjust_bright adjust_ct set_name bg_set_rgb bg_set_hsv bg_set_ct_abx bg_start_cf bg_stop_cf set_scene_bundle bg_set_default bg_set_power bg_set_bright bg_set_adjust bg_adjust_bright bg_adjust_color bg_adjust_ct bg_toggle dev_toggle udp_sess_new udp_sess_keep_alive udp_chroma_sess_new",
"power":"on",
"bright":"18",
"color_mode":"2",
"ct":"2985",
"rgb":"13395711",
"hue":"280",
"sat":"60",
"name":""
}
}
]
From my own experimentation, I believe the entry for this model should be something like this:
"lamp15": {
"color_temp": {"min": 2700, "max": 6500},
"night_light": False,
"background_light": True,
}
- For
color_temp
I got the values by manually changing it to the min and max temperature and reading frombulb.get_properties()
. - For
night_light
, I think it is unsupported because runningbulb.set_power_mode(PowerMode.MOONLIGHT)
doesn't change anything (although 'ok' is printed). Also,nl_br
andactive_mode
always seem to beNone
when callingbulb.get_properties()
. - For
background_light
, I believe it is supported because it has the RGB ambient light that is controllable withlight_type=LightType.Ambient
, for examplebulb.set_brightness(100, light_type=LightType.Ambient)
.
This is fine, but it brings me to my first question. I notice that this is the only model so far that supports background_light
but not night_light
. Would this be a problem or cause any issues somewhere in the library?
After digging around a bit more, I found another issue, which leads to my second question. The bulb.bulb_type
for this device currently returns BulbType.Color
, while I think it should be returning BulbType.WhiteTempMood
instead. Looking at the code, I found that this is because bulb.get_properties()
has a value for both the rgb
and ct
fields. For reference, an example output for bulb.get_properties()
is:
{
"power":"on",
"bright":"45",
"ct":"3300",
"rgb":"65536",
"hue":"0",
"sat":"100",
"color_mode":"2",
"flowing":"0",
"delayoff":"0",
"music_on":"0",
"name":None,
"bg_power":"on",
"bg_flowing":"0",
"bg_ct":"4000",
"bg_bright":"1",
"bg_hue":"0",
"bg_sat":"100",
"bg_rgb":"65536",
"nl_br":None,
"active_mode":None,
"current_brightness":"45"
}
Unfortunately, I do not have any other yeelight devices that are BulbType.WhiteTempMood
to test the difference, but it seems to me like bulb_type
should not depend on rgb
being None
since the ambient light can also have an rgb
value even though the main light is white. Is there any other field that could be used to determine whether a light is white or colour? Or otherwise any suggestions on how to best handle this?
Thanks for reading this whole thing, like I said at the start I'm happy to work on a fix to support this light but would greatly appreciate getting some answers to my questions. Thank you so much!