Lua 从 Tado 恒温器 api 请求

我正在 Home Center 3(来自 Fibaro)中使用 'Lua' 编程语言构建所谓 'Quickapp'。我想从 Tado api 中获取一些数据,但它的文档很差。我一直从控制台得到以下消息:

需要完整的身份验证以访问此资源未经授权

我认为这是因为我需要从请求中指定Bearer令牌,但是我有点迷失了...

这是我所拥有的:

function QuickApp:fetchTadoData(username,password,client_secret)

 local url = "https://auth.tado.com/oauth/token"
  local postdata = {
        ["client_id"] = "tado-web-app",
        ["grant_type"] = "password",
        ["scope"] = "home.user",
        ["username"] = username,
        ["password"] = password,
        ["client_secret"] = client_secret
  }
  local extraheaders = {
        ["content-type"] = "application/json"
  }

  self.http:request(url, {
    options={
      headers = extraheaders,
      data = json.encode(postdata),
      method = "POST"
    },
    success = function(status)
       self:debug(status.data)
    end,
    error = function(error)
       errorlog("获取数据出错:"..error)
       self:debug("hallo")
    end
  })
end

我知道获取 'Bearer token' 响应的 Curl 代码:

curl -s "https://auth.tado.com/oauth/token" -d client_id=tado-web-app -d grant_type=password -d scope=home.user -d username="you@example.com" -d password="Password123" -d client_secret=wZa

但是我不知道如何将其翻译为上面的 Lua 代码。任何帮助都被赞赏!

点赞
用户3342050
用户3342050

看起来还不错,我最关注的是这个:

“self.http必须先由net.HTTPClient创建”

function QuickApp:fetchTadoData( username, password, client_secret )
  self.http = net.HTTPClient({ timeout = 5000 })  --  5 seconds

  local url = "https://auth.tado.com/oauth/token"

  local requestBody = {
      action = 'create',
      params = {
          ["client_id"] = "tado-web-app",
          ["grant_type"] = "password",
          ["scope"] = "home.user",
          ["username"] = username,
          ["password"] = password,
          ["client_secret"] = client_secret
      }
  }

  local extraheaders = {
        ["content-type"] = "application/json",
        ["accept"] = "application/json"
  }

  self.http:request(url, {
    options = {
      headers = extraheaders,
      data = json.encode(requestBody),
      method = "POST"
    },

    success = function(response)
       self:debug(response.status)
       self:debug(response.data)
    end,

    error = function(msg)
       self:debug('Error: '..msg)
    end
  })
end
2021-01-17 15:56:41