Changing color with color code #513
Copy link
Copy link
Closed
Description
Hi, this isn't probably the place to ask this question but I don't really know where else to ask it.
When I request the data from my RGBW lamp it returns dps 20-26 with 24 containing the color, brightness and saturation in colour mode.
I can't seem to understand how this code is build. I've read a lot of issues on GitHub with possible explanations but none have completely worked for me.
My Bulb returns the following data:
dps: {
'20': true,
'21': 'colour',
'22': 1000,
'23': 1000,
'24': '015303e803e8',
'25': '000e0d0000000000000000c80000',
'26': 0
}
From what i can find on the internet the color is in HSV separating the values with a 0.
What i can't seem to figure out is why my color code contains letters and what they mean.
Could anyone help me out with this or point me in the right direction?
Metadata
Metadata
Assignees
Labels
No labels
Activity
kueblc commentedon Sep 8, 2021
Not quite, the zero is not a separator.
This is a hexadecimal representation of color. Two hexadecimal digits represent one byte, so the challenge is figuring out which byte controls which channel.
I would send the bulb values with one byte set at a time and observe what it does, ie
ff000000000000ff000000000000ff000000... and so on.
duncte123 commentedon Oct 18, 2021
I ran into the same issue, from my findings it seems that the
3e803e8dictates the brightness and the colour/white sliders. The first 5 bits are for the colour.f00stx commentedon Nov 17, 2021
The colour code can be (almost) directly decoded to an HSV color value, so if you know what color you'd like, you can also encode the correct color value (the resulting string is just the 3 segments of an HSV value, as hex, and then zero-padded):
Setting
dps['24']to the resulting value (007803e803e8) does the trick on my device (an LED strip in the "Arlec GridConnect" family).tromphakvoort commentedon Nov 30, 2021
Did this in javascript but got a different result. My result is
0078640640I'm new to binary and hexadecimal so I dont completely understand how you got your result and why mine is different.This is the code I used:
codetheweb commentedon Nov 30, 2021
@tromphakvoort looks like you're missing the required parenthesis, i.e you're doing
tuyaS = 10 * hsv["s"].toString(16).padStart(4, "0")instead oftuyaS = (10 * hsv['s']).toString(16).padStart(4, '0').Converting to a discussion.