This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Twinkly script
#6
Thanks admin for all the work. Here my first working version
Code:
--[[ documentation api: https://xled-docs.readthedocs.io/en/latest/rest_api.html mqtt: https://xled-docs.readthedocs.io/en/latest/msqtt_api.html fibaro example: https://forum.fibaro.com/topic/52767-qa-twinkly-lights-on-off/ --]] host = "xxx.xxx.x.xx"  -- enter your Twinkly ip -- debuggen debug = false function debugLog(iLog)   if debug then log(iLog) end end -- init if not init then   require('socket.http')   require('ltn12')   require('json')   socket.http.TIMEOUT = 5   challenceToken = "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8="   authToken = nil   init = true end local api = {     base = "/xled/v1/",     endpoints = {         login = "login",         verify = "verify",         mode = "led/mode",         deviceName = "device_name",         reset = "led/reset",         movieConfig = "led/movie/config",         movie = "led/movie/full",         gestalt = "gestalt",         brightness = "led/out/brightness"     } } function getTwinklyResponseData(endPoint, body, func, content_type)     debugLog(endPoint)       content_type = content_type or "application/json"     local url = "http://" .. host .. api.base .. api.endpoints[endPoint]     local method = "GET"       local cl       if body ~= nil then         method = "POST"         if type(body) == "table" and content_type == "application/json" then             body = json.encode(body)         end             cl = #body     end       debugLog({url, method, content_type, cl, authToken, body})       local response_body = {}     local res, code, response_headers, status = socket.http.request({       url = url,       method = method,       headers =       {         ["Content-Type"] = content_type,         ["Content-Length"] = cl,         ["X-Auth-Token"] = authToken       },       source = ltn12.source.string(body),       sink = ltn12.sink.table(response_body)     })       debugLog({res, code, response_headers, status, response_body})       if res then         if code == 200 then             func(json.decode(table.concat(response_body)))          else             func(nil, response_body)         end       else         func(nil, {error = code})       end end function connect(func_succ, func_err)   getTwinklyResponseData("gestalt", nil,   function(gestalt, err)       if err == nil then           getTwinklyResponseData(               "login",               {challenge = challenceToken},               function(login, err)                   if err == nil then                       authToken = login.authentication_token                       getTwinklyResponseData(                           "verify",                           {},                           function(verify, err)                               if err == nil then                                   func_succ(gestalt)                               else                                   if func_err then                                       func_err(err)                                   else                                       debugLog(json.encode(err))                                   end                               end                           end                       )                   else                       if func_err then                           func_err(err)                       else                           debugLog(json.encode(err))                       end                   end               end           )       else           if func_err then               func_err(err)           else               debugLog(json.encode(err))           end       end   end   ) end function setMode(mode, func)   if authToken == nil then       debugLog("Device is not intialized!")   end   getTwinklyResponseData(     "mode",     {mode = mode},     function(response, err)       if err == nil then           if func then             func(response)         end       else           debugLog(json.encode(err))       end     end   ) end function getMode(func)   if authToken == nil then       debugLog("Device is not intialized!")   end   getTwinklyResponseData(     "mode",     nil,     function(response, err)       if err == nil then         if func then             func(response)         end       else           debugLog(json.encode(err))       end     end   ) end function setBrightness(value, func)   if authToken == nil then       debugLog("Device is not intialized!")   end   getTwinklyResponseData(       "brightness",     {mode = "enabled", type = "A", value = value},     function(response, err)       if err == nil then         if func then             func(response)         end       else           debugLog(json.encode(err))       end     end   ) end function getBrightness(func)   if authToken == nil then       debugLog("Device is not intialized!")   end   getTwinklyResponseData(     "brightness",     nil,     function(response, err)       if err == nil then         if func then             func(response)         end       else           debugLog(json.encode(err))       end     end   ) end ------------------ some function tests ------------------ -- set mode connect(   function(data)     setMode(       "off", -- off, movie       function(data)         debugLog(json.encode(data))        end     )   end ) -- get current mode connect(   function(data)     getMode(       function(data)         debugLog(json.encode(data))        end       )   end ) -- set brightness connect(   function(data)     setBrightness(       10,       function(data)           debugLog(json.encode(data))       end     )   end ) -- get current brightness connect(   function(data)     getBrightness(       function(data)         debugLog(json.encode(data))        end     )   end )
Reply


Messages In This Thread
Twinkly script - by gjniewenhuijse - 07.12.2020, 09:12
RE: Twinkly script - by admin - 07.12.2020, 10:02
RE: Twinkly script - by gjniewenhuijse - 07.12.2020, 10:21
RE: Twinkly script - by admin - 07.12.2020, 11:14
RE: Twinkly script - by gjniewenhuijse - 07.12.2020, 12:02
RE: Twinkly script - by gjniewenhuijse - 07.12.2020, 19:50

Forum Jump: