Posts: 9
Threads: 2
Joined: Mar 2019
Reputation:
0
Hi,
I have managed to get rgb control work with scripting towards the KNX, but still cant find any script to control Tunable white.
Can somebody help me? or is it impossible?
Best regards
Daniel
Posts: 4660
Threads: 24
Joined: Aug 2017
Reputation:
212
Hi
How do you control the light? Here is script which might help
https://forum.logicmachine.net/showthrea...6#pid11326
BR
------------------------------
Ctrl+F5
Posts: 9
Threads: 2
Joined: Mar 2019
Reputation:
0
(15.03.2019, 12:36)Daniel. Wrote: Hi
How do you control the light? Here is script which might help
https://forum.logicmachine.net/showthrea...6#pid11326
BR
I allready checked on that link, but i cant find anything how to control the "kelvin in the white colour"
hmmm. I have allready got the RGB control to work but that does not include the control of the white colour.
Daniel
Posts: 4660
Threads: 24
Joined: Aug 2017
Reputation:
212
And this is what this script meant to do. It takes color temperature from an 2 byte object and converts it to RGB value.
------------------------------
Ctrl+F5
Posts: 7773
Threads: 42
Joined: Jun 2015
Reputation:
447
Have a look here: http://rsmck.co.uk/hue
It looks like you can send both brightness and color temperature by a single request, you just need to add a new function to the user library.
Code: {"ct": 500, "bri": 254}
Posts: 221
Threads: 45
Joined: Nov 2015
Reputation:
2
HUE uses CT, not the other one you are familiar with. It’s a simple conversion.
https://forum.logicmachine.net/showthrea...hlight=Hcl
Posts: 9
Threads: 2
Joined: Mar 2019
Reputation:
0
19.03.2019, 08:41
(This post was last modified: 19.03.2019, 08:42 by DanielB.)
(15.03.2019, 20:15)FatMax Wrote: HUE uses CT, not the other one you are familiar with. It’s a simple conversion.
https://forum.logicmachine.net/showthrea...hlight=Hcl
Can you give me an example on how i should put this function in user libraries? and how to set it up in event based?. (Just so i can control Kelvin and brightness from knx)
I still dont understand this conversion thing:-)
Best regards
Daniel
Posts: 7773
Threads: 42
Joined: Jun 2015
Reputation:
447
Add to user library:
Code: function setBrightnessCT(Light_num,brightness,ct)
if brightness == 0 then
body_msg = '{"on":false}'
response = sendToLight(lamp_id,body_msg)
return response
else
brightness = math.floor((brightness / 1) + 0.5)
brightness = math.floor((brightness * 2.54) + 0.5)
ct = math.floor(1000000 / ct)
ct = math.min(500, ct)
ct = math.max(154, ct)
--HTTP request send
body_msg = '{"on":true,"bri":'..brightness..',"ct":'..ct..'}'
return sendToLight(Light_num,body_msg)
end
end
You will need to map an event script to both brightness and color temperature values:
Code: require('user.hue)
lamp_id = 123
bri = grp.getvalue('1/1/1') -- 0..100%
ct = grp.getvalue('1/1/2') -- 2000K..6500K
setBrightnessCT(lamp_id, bri, ct)
Posts: 9
Threads: 2
Joined: Mar 2019
Reputation:
0
(19.03.2019, 09:13)admin Wrote: Add to user library:
Code: function setBrightnessCT(Light_num,brightness,ct)
if brightness == 0 then
body_msg = '{"on":false}'
response = sendToLight(lamp_id,body_msg)
return response
else
brightness = math.floor((brightness / 1) + 0.5)
brightness = math.floor((brightness * 2.54) + 0.5)
ct = math.floor(1000000 / ct)
ct = math.min(500, ct)
ct = math.max(154, ct)
--HTTP request send
body_msg = '{"on":true,"bri":'..brightness..',"ct":'..ct..'}'
return sendToLight(Light_num,body_msg)
end
end
You will need to map an event script to both brightness and color temperature values:
Code: require('user.hue)
lamp_id = 123
bri = grp.getvalue('1/1/1') -- 0..100%
ct = grp.getvalue('1/1/2') -- 2000K..6500K
setBrightnessCT(lamp_id, bri, ct)
Thank you very much :-)
Now it works like a charm:-)
Daniel
Posts: 9
Threads: 2
Joined: Mar 2019
Reputation:
0
Last question:-)
Can anybody help me get feedback for colour temperature for this?
I use this script today and get values for on/off, brightness and colour for rgb
-- Set name (Lookup in HUE app under light configuration) and feedback adresses (don't change statevalue, brivalue and colorvalue as they are used as memoryfield)
addressmapping = {
-- Name -- On/Off FB -- Bright FB -- Color FB
['KjkGangstripe'] = {state = '1/5/16', bri = '1/3/20', rgb = '1/7/16', statevalue = '', brivalue = '', colorvalue = ''},
['Kjkinnredning'] = {state = '1/5/17', bri = '1/6/17', rgb = '1/7/17', statevalue = '', brivalue = '', colorvalue = ''},
-- ['Hue color lamp 3'] = {state = '1/3/3', bri = '1/4/3', rgb = '1/5/3', statevalue = '', brivalue = '', colorvalue = ''},
-- ['Hue color lamp 4'] = {state = '1/3/4', bri = '1/4/4', rgb = '1/5/4', statevalue = '', brivalue = '', colorvalue = ''}
}
-- Set polling interval in seconds
interval = 1
-- Use logging
logging = true
require('user.hue')
require('json')
-- loop indefenitly
while true do
reply = getHueLights()
mylamps = json.decode(reply)
for _, item in pairs(mylamps) do
-- Check if lamp is found by bridge otherwise it make no sense to send commands
-- if item.state.reachable == true then
-- On/Off
name = addressmapping[item.name]
if name then
addr = addressmapping[item.name]['state']
if addr and addr ~= '' then
currentvalue = addressmapping[item.name]['statevalue']
if currentvalue ~= item.state.on then
grp.update(addr, item.state.on)
addressmapping[item.name]['statevalue'] = item.state.on
if logging == true then
log('lamp ' .. item.name .. ' state is: ' .. tostring(item.state.on))
end
end
end
end
-- Brightness
name = addressmapping[item.name]
if name then
addr = addressmapping[item.name]['bri']
if addr and addr ~= '' then
-- Check if lamp is on otherwise overrule BRI value to 0
if item.state.on == false then
item.state.bri = 0
end
currentvalue = addressmapping[item.name]['brivalue']
if currentvalue ~= item.state.bri then
grp.update(addr, math.floor((tonumber(item.state.bri)/2.55) + 0.5))
addressmapping[item.name]['brivalue'] = item.state.bri
if logging == true then
log('lamp ' .. item.name .. ' brightness is: ' .. math.floor((tonumber(item.state.bri)/2.55) + 0.5) .. ' %')
end
end
end
end
-- Color
name = addressmapping[item.name]
if name then
addr = addressmapping[item.name]['rgb']
if addr and addr ~= '' then
-- Check if lamp is on otherwise overrule color value to 0
if item.state.on == false then
colorvalue = 0
end
if item.state.colormode == 'xy' then
currentvalue = addressmapping[item.name]['colorvalue']
colorvalue = xy_to_rgb(item.state.xy[1],item.state.xy[2],item.state.bri)
--colorvalue = xyz_to_rgb((item.state.xy[1] * 100), (item.state.xy[2] * 100))
if currentvalue ~= colorvalue then
grp.update(addr, colorvalue)
addressmapping[item.name]['colorvalue'] = colorvalue
if logging == true then
log('lamp ' .. item.name .. ' color is: ' .. colorvalue)
end
end
elseif item.state.colormode == 'ct' then
currentvalue = addressmapping[item.name]['colorvalue']
--colortemp = math.floor((item.state.ct / 0.0769) + 0.5) --0.0769230769230769
colortemp = math.abs((item.state.ct - 500) / 2)
colortemp = math.floor(colortemp + 0.5)
colortemp = 80 + colortemp
if colortemp > 255 then
colortemp = 255
end
r = lmcore.inttohex(255, 1)
g = lmcore.inttohex(255, 1)
b = lmcore.inttohex(colortemp, 1)
rgb = r .. g .. b
colortemp = lmcore.hextoint(rgb,3)
if currentvalue ~= colortemp then
--colortempconverted = ct_to_rgb(colortemp)
grp.update(addr, colortemp)
addressmapping[item.name]['colorvalue'] = colortemp
if logging == true then
log('lamp ' .. item.name .. ' color is: ' .. colortemp)
end
end
end
end
end
--end
--log('manufacturername = ' .. item.manufacturername)
--log('swversion = ' .. item.swversion)
--log('type = ' .. item.type)
--log('ct = ' .. item.state.ct)
--log('reachable = ' .. item.state.reachable)
--log('alert = ' .. item.state.alert)
--log('on = ' .. item.state.on)
--log('bri = ' .. item.state.bri)
--log('colormode = ' .. item.state.colormode)
--log('hue = ' .. item.state.hue)
--log('sat = ' .. item.state.sat)
--log('effect = ' .. item.state.effect)
--log('x = ' .. item.state.xy[1])
--log('y = ' .. item.state.xy[2])
--log('uniqueid = ' .. item.uniqueid)
--log('modelid = ' .. item.modelid)
--log('name = ' .. item.name)
end
-- Delay loop
os.sleep(interval)
end
Thank you for all help :-)
Posts: 7773
Threads: 42
Joined: Jun 2015
Reputation:
447
Calculate the reverse color temp like this:
Code: colortemp = math.floor(1000000 / item.state.ct)
Keep in mind that there might be a difference between set and status values due to precision loss during when converting between Mireks and Kelvins.
Posts: 9
Threads: 2
Joined: Mar 2019
Reputation:
0
(20.03.2019, 08:04)admin Wrote: Calculate the reverse color temp like this:
Code: colortemp = math.floor(1000000 / item.state.ct)
Keep in mind that there might be a difference between set and status values due to precision loss during when converting between Mireks and Kelvins.
still dont understand how to get this working in my resident script
Sorry for all my questions, but i still got a bit to learn about scripting .-)
Daniel
|