06.05.2023, 09:49
Hi All,
I like to integrate my LG devices like AC for example by the LG Thinq API. Has someone already done this and could share the script here?
I found a start at this website https://forum.fibaro.com/topic/51441-hc3...martthinq/ with the script below. Would be great if we can get it to work.
The script berlow is not mine but copied from the website i shared. It seems you'll need a secret key and client key but i'm not sure where to get it as i could not find clear information about it. So all help is much appriciated to get this work.
I like to integrate my LG devices like AC for example by the LG Thinq API. Has someone already done this and could share the script here?
I found a start at this website https://forum.fibaro.com/topic/51441-hc3...martthinq/ with the script below. Would be great if we can get it to work.
The script berlow is not mine but copied from the website i shared. It seems you'll need a secret key and client key but i'm not sure where to get it as i could not find clear information about it. So all help is much appriciated to get this work.
Code:
OAUTH_SECRET_KEY = "c053c2a6ddeb7ad97cb0eed0dcb31cf8"
OAUTH_CLIENT_KEY = "LGAO221A02"
DATE_FORMAT = "!%a, %d %b %Y %H:%M:%S"
V2_AUTH_PATH = "/oauth/1.0/oauth2/token"
function oauth2_signature(message, secret)
local hmac = sha.hmac
local hashed = hmac(sha.sha1, secret, message)
local binary_hash = sha.hex2bin(hmac(sha.sha1, secret, message))
return sha.bin2base64(binary_hash)
end
function auth_request(oauth_url, reqdata)
if string.sub(oauth_url, -1):lower() == "/" then oauth_url = string.sub(oauth_url, 0, #oauth_url-1) end
local url = oauth_url .. V2_AUTH_PATH
local timestamp = tostring(os.date(DATE_FORMAT, os.time())) .. " +0000"
local data_list = {}
for k, v in pairs(reqdata) do table.insert(data_list, string.format("%s=%s", k, v)) end
local req_url = string.format("%s?%s", V2_AUTH_PATH, table.concat(data_list, "&"))
local message = string.format("%s\n%s", req_url, timestamp)
local sig = oauth2_signature(message, OAUTH_SECRET_KEY)
local headers = {
["x-lge-appkey"] = OAUTH_CLIENT_KEY,
["x-lge-oauth-signature"] = sig,
["x-lge-oauth-date"] = timestamp,
["Content-Type"] = "application/x-www-form-urlencoded",
["Accept"] = "application/json"
}
castdata = table.concat(data_list, "&")
self.http:request(url,{
options = {
headers = headers,
data = castdata,
method = "POST",
timeout = 5000,
},
success = function(response)
log("auth_request success", response.data)
end,
error = function(error)
self:debug('error: ' .. json.encode(error))
end
})
end
local requestBody = {
grant_type = "refresh_token",
refresh_token = "4ed29cb48cc1cb6228658d50817b789d67d37dbad56bf561cc6389a4ab69070d8ee808edb3377ad3b07e243c467f1d36"
}
auth_request("https://us.lgeapi.com/", requestBody)