04.02.2017, 20:12
(This post was last modified: 04.02.2017, 20:14 by Erwin van der Zwart.)
Hi Koen,
Philips have changed the API due homekit support.
Use this to control your HUE devices with latest HUE FW update :
First run bridgeSetup() once to receive the user (see log after running) and enter where now "xxxxxxxxxxxxxxxxxx' is filled in.
Sample to set RGB value from color picker object event based script:
Good luck (:
BR,
Erwin
Philips have changed the API due homekit support.
Use this to control your HUE devices with latest HUE FW update :
First run bridgeSetup() once to receive the user (see log after running) and enter where now "xxxxxxxxxxxxxxxxxx' is filled in.
Code:
require('json')
require('socket.http')
require("ltn12")
--************************************************
ip_add = '192.168.1.25'
user = "XXXXXXXXXXXXXXXXXXXXX" -- Response from bridgeSetup()
--************************************************
response = {}
function bridgeSetup()
body_bridgeSetup= '{"devicetype":"homelynk#homelynk"}'
-- Set username for homeLYnk
socket.http.request({
url = "http://"..ip_add.."/api",
method = 'POST',
sink = ltn12.sink.table(response),
headers = {
['content-length'] = #body_bridgeSetup,
['content-type'] = 'application/json',
},
source = ltn12.source.string(body_bridgeSetup),
})
log(response)
end
function checkUser()
body_bridgeSetup= '{}'
-- Set username for homeLYnk
socket.http.request({
url = "http://"..ip_add.."/api/"..user,
method = 'GET',
sink = ltn12.sink.table(response),
headers = {
['content-length'] = #body_bridgeSetup,
['content-type'] = 'application/json',
},
source = ltn12.source.string(body_bridgeSetup),
})
log(response)
ret = table.concat(response)
data = json.pdecode(ret)
if (data[1].error.type)==1 then
log("Hue bridge user is not set")
return false
else
log("Hue bridge user is set")
return true
end
end
function searchHueLights()
body_searchHueLights= ''
-- Set username for homeLYnk
socket.http.request({
url = "http://"..ip_add.."/api/"..user.."/lights",
method = 'POST',
sink = ltn12.sink.table(response),
headers = {
['content-length'] = #body_searchHueLights,
['content-type'] = 'application/json',
},
source = ltn12.source.string(body_searchHueLights),
})
log(response)
end
function sendToLight(Light_num,body_request)
socket.http.request({
url = "http://"..ip_add.."/api/"..user.."/lights/"..tostring(Light_num).."/state",
method = 'PUT',
sink = ltn12.sink.table(response),
headers = {
['content-length'] = #body_request,
['content-type'] = 'application/json',
},
source = ltn12.source.string(body_request),
})
--log(response)
end
function sendToGroup(Group_num,body_request)
socket.http.request({
url = "http://"..ip_add.."/api/"..user.."/groups/"..tostring(Light_num).."/action",
method = 'PUT',
sink = ltn12.sink.table(response),
headers = {
['content-length'] = #body_request,
['content-type'] = 'application/json',
},
source = ltn12.source.string(body_request),
})
--log(response)
end
function setRGB(Light_num,RGB_variable)
--RGB color set in homeLYnk
Red=bit.rshift(bit.band(RGB_variable,0xff0000),16)
Green=bit.rshift(bit.band(RGB_variable,0x00ff00),8)
Blue=bit.band(RGB_variable,0x0000ff)
-- Norm of RGB values
Red_f= Red/255
Green_f=Green/255
Blue_f= Blue/255
--Gamma correction
if Red_f>0.04045 then
Red_f=((Red_f+0.055)/(1+0.055))^2.4
else
Red_f=Red_f/12.92
end
if Green_f>0.04045 then
Green_f=((Green_f+0.055)/(1+0.055))^2.4
else
Green_f=Green_f/12.92
end
if Blue_f>0.04045 then
Blue_f=((Blue_f+0.055)/(1+0.055))^2.4
else
Blue_f=Red_f/12.92
end
--Coversion RGB->xy
X=Red_f*0.649926+Green_f*0.103455+Blue_f*0.197109
Y=Red_f*0.234327+Green_f*0.743075+Blue_f*0.022598
Z=Green_f*0.053077+Blue_f*1.035763
x=X/(X+Y+Z)
y=Y/(X+Y+Z)
--HTTP request send
body_msg = '{"on":true,"xy":['..x..','..y..']}'
sendToLight(Light_num,body_msg)
end
Sample to set RGB value from color picker object event based script:
Code:
value = event.getvalue()
lamp_id = 1
if value == 0 then
body_msg = '{"on":false}'
sendToLight(lamp_id,body_msg)
else
setRGB(lamp_id,value)
end
Good luck (:
BR,
Erwin