diff --git a/Velux-Active-Shutter.fqa b/Velux-Active-Shutter.fqa index 4b44b4d..5d3b94d 100644 --- a/Velux-Active-Shutter.fqa +++ b/Velux-Active-Shutter.fqa @@ -175,7 +175,7 @@ "name": "main", "isMain": true, "isOpen": true, - "content": "\n--[[\nVelux Active integration\n@author ikubicki\n]]\n\nfunction QuickApp:onInit()\n self.config = Config:new(self)\n self.velux = Velux:new(self.config)\n self.i18n = i18n:new(api.get(\"/settings/info\").defaultLanguage)\n self:trace('')\n self:trace(string.format(self.i18n:get('name'), self.name))\n self:updateProperty('manufacturer', 'Velux')\n self:updateProperty('model', 'Velux Active KIX 300')\n self:updateView(\"button1\", \"text\", self.i18n:get('stop'))\n self:updateView(\"button2\", \"text\", self.i18n:get('search-devices'))\n self:updateView(\"label\", \"text\", self.i18n:get('name'))\n self:updateProperty(\"value\", 99)\n if string.len(self.config:getModuleID()) > 10 then\n self:run()\n end\nend\n\nfunction QuickApp:open()\n self:setPosition(100)\nend\n\nfunction QuickApp:close()\n self:setPosition(0)\nend\n\nfunction QuickApp:stop()\n local callback = function(response)\n self:pullDataFromCloud()\n end\n self.velux:stop(callback)\nend\n\nfunction QuickApp:setValue(value)\n if value > 98 then\n value = 100\n end\n self:setPosition(value)\nend\n\nfunction QuickApp:setPositionEvent(event)\n local position = event.values[1]\n self:setValue(position)\nend\n\nfunction QuickApp:stopEvent(event)\n self:stop()\nend\n\nfunction QuickApp:refreshDataEvent(event)\n self:updateView(\"label\", \"text\", self.i18n:get('refreshing'))\n self:pullDataFromCloud()\nend\n\nfunction QuickApp:setPosition(position)\n -- self:debug(string.format(\"Setting new position (%d%%) ...\", position))\n if position < 1 then\n position = 0\n elseif position > 98 then\n position = 100\n end\n local callback = function(response)\n self:debug(string.format(self.i18n:get('position-set'), position))\n self:pullDataFromCloud()\n end\n self.velux:setPosition(position, callback)\nend\n\nfunction QuickApp:updateValues(position, newPosition)\n value = position\n self:updateView(\"slider\", \"value\", tostring(position))\n if position < 1 then\n value = 0\n text = self.i18n:get('shutter-closed')\n elseif position > 98 then\n value = 99\n text = self.i18n:get('shutter-opened')\n else \n text = string.format(self.i18n:get('shutter-half-open'), position)\n end\n local inMotion = false\n if newPosition ~= nil and newPosition > position then\n text = string.format(self.i18n:get('shutter-opening'), position)\n inMotion = true\n elseif newPosition ~= nil and newPosition < position then\n text = string.format(self.i18n:get('shutter-closing'), position)\n inMotion = true\n end\n if inMotion then\n fibaro.setTimeout(3000, function()\n self:pullDataFromCloud()\n end)\n end\n self:updateView(\"label\", \"text\", text)\n self:updateProperty(\"value\", value)\nend\n\nfunction QuickApp:run()\n self:pullDataFromCloud()\n local interval = self.config:getInterval()\n if (interval > 0) then\n fibaro.setTimeout(interval, function() self:run() end)\n end\nend\n\nfunction QuickApp:pullDataFromCloud()\n local callback = function(moduleData)\n QuickApp:debug(json.encode(moduleData))\n self:updateView(\"button3\", \"text\", self.i18n:get('refresh'))\n self:updateValues(moduleData.current_position, moduleData.target_position)\n end\n self:updateView(\"button3\", \"text\", self.i18n:get('refreshing'))\n self.velux:sync(callback)\nend\n\nfunction QuickApp:searchDevicesEvent()\n self:debug(self.i18n:get('searching-devices'))\n self:updateView(\"button2\", \"text\", self.i18n:get('searching-devices'))\n local callback = function(homeData)\n self:updateView(\"button2\", \"text\", self.i18n:get('search-devices'))\n -- printing results\n QuickApp:trace(string.format(self.i18n:get('search-row-home'), homeData.name, homeData.id))\n QuickApp:trace(string.format(self.i18n:get('search-row-home-gateways'), #homeData.gateways))\n for _, gateway in ipairs(homeData.gateways) do\n QuickApp:trace(string.format(self.i18n:get('search-row-gateway'), gateway.name, gateway.id))\n QuickApp:trace(string.format(self.i18n:get('search-row-gateway-shutters'), #gateway.shutters))\n for __, shutter in ipairs(gateway.shutters) do\n QuickApp:trace(string.format(self.i18n:get('search-row-shutter'), shutter.id))\n QuickApp:trace(string.format(self.i18n:get('search-row-shutter-position'), shutter.position))\n end\n end\n self:updateView(\"label\", \"text\", string.format(self.i18n:get('check-logs'), 'QUICKAPP' .. self.id))\n end\n self.velux:searchDevices(callback)\nend\n" + "content": "\n--[[\nVelux Active integration\n@author ikubicki\n]]\n\nfunction QuickApp:onInit()\n self.config = Config:new(self)\n self.velux = Velux:new(self.config)\n self.i18n = i18n:new(api.get(\"/settings/info\").defaultLanguage)\n self:trace('')\n self:trace(string.format(self.i18n:get('name'), self.name))\n self:updateProperty('manufacturer', 'Velux')\n self:updateProperty('model', 'Velux Active KIX 300')\n self:updateView(\"button1\", \"text\", self.i18n:get('stop'))\n self:updateView(\"button2\", \"text\", self.i18n:get('search-devices'))\n self:updateView(\"label\", \"text\", self.i18n:get('name'))\n self:updateProperty(\"value\", 99)\n if string.len(self.config:getModuleID()) > 10 then\n self:run()\n end\nend\n\nfunction QuickApp:open()\n self:setPosition(100)\nend\n\nfunction QuickApp:close()\n self:setPosition(0)\nend\n\nfunction QuickApp:stop()\n local callback = function(response)\n self:pullDataFromCloud()\n end\n self.velux:stop(callback)\nend\n\nfunction QuickApp:setValue(value)\n if value > 98 then\n value = 100\n end\n self:setPosition(value)\nend\n\nfunction QuickApp:setPositionEvent(event)\n local position = event.values[1]\n self:setValue(position)\nend\n\nfunction QuickApp:stopEvent(event)\n self:stop()\nend\n\nfunction QuickApp:refreshDataEvent(event)\n self:updateView(\"label\", \"text\", self.i18n:get('refreshing'))\n self:pullDataFromCloud()\nend\n\nfunction QuickApp:setPosition(position)\n -- self:debug(string.format(\"Setting new position (%d%%) ...\", position))\n if position < 1 then\n position = 0\n elseif position > 98 then\n position = 100\n end\n local callback = function(response)\n self:debug(string.format(self.i18n:get('position-set'), position))\n self:pullDataFromCloud()\n end\n self.velux:setPosition(position, callback)\nend\n\nfunction QuickApp:updateValues(position, newPosition)\n value = position\n self:updateView(\"slider\", \"value\", tostring(position))\n if position < 1 then\n value = 0\n text = self.i18n:get('shutter-closed')\n elseif position > 98 then\n value = 99\n text = self.i18n:get('shutter-opened')\n else \n text = string.format(self.i18n:get('shutter-half-open'), position)\n end\n local inMotion = false\n if newPosition ~= nil and newPosition > position then\n text = string.format(self.i18n:get('shutter-opening'), position)\n inMotion = true\n elseif newPosition ~= nil and newPosition < position then\n text = string.format(self.i18n:get('shutter-closing'), position)\n inMotion = true\n end\n if inMotion then\n fibaro.setTimeout(3000, function()\n self:pullDataFromCloud()\n end)\n end\n self:updateView(\"label\", \"text\", text)\n self:updateProperty(\"value\", value)\nend\n\nfunction QuickApp:run()\n self:pullDataFromCloud()\n local interval = self.config:getInterval()\n if (interval > 0) then\n fibaro.setTimeout(interval, function() self:run() end)\n end\nend\n\nfunction QuickApp:pullDataFromCloud()\n local callback = function(moduleData)\n -- QuickApp:debug(json.encode(moduleData))\n self:updateView(\"button3\", \"text\", self.i18n:get('refresh'))\n self:updateValues(moduleData.current_position, moduleData.target_position)\n end\n self:updateView(\"button3\", \"text\", self.i18n:get('refreshing'))\n self.velux:sync(callback)\nend\n\nfunction QuickApp:searchDevicesEvent()\n self:debug(self.i18n:get('searching-devices'))\n self:updateView(\"button2\", \"text\", self.i18n:get('searching-devices'))\n local callback = function(homeData)\n self:updateView(\"button2\", \"text\", self.i18n:get('search-devices'))\n -- printing results\n QuickApp:trace(string.format(self.i18n:get('search-row-home'), homeData.name, homeData.id))\n QuickApp:trace(string.format(self.i18n:get('search-row-home-gateways'), #homeData.gateways))\n for _, gateway in ipairs(homeData.gateways) do\n QuickApp:trace(string.format(self.i18n:get('search-row-gateway'), gateway.name, gateway.id))\n QuickApp:trace(string.format(self.i18n:get('search-row-gateway-shutters'), #gateway.shutters))\n for __, shutter in ipairs(gateway.shutters) do\n QuickApp:trace(string.format(self.i18n:get('search-row-shutter'), shutter.id))\n QuickApp:trace(string.format(self.i18n:get('search-row-shutter-position'), shutter.position))\n end\n end\n self:updateView(\"label\", \"text\", string.format(self.i18n:get('check-logs'), 'QUICKAPP' .. self.id))\n end\n self.velux:searchDevices(callback)\nend\n" }, { "name": "HTTPClient", diff --git a/main.lua b/main.lua index 31f9c64..5b578eb 100644 --- a/main.lua +++ b/main.lua @@ -110,7 +110,7 @@ end function QuickApp:pullDataFromCloud() local callback = function(moduleData) - QuickApp:debug(json.encode(moduleData)) + -- QuickApp:debug(json.encode(moduleData)) self:updateView("button3", "text", self.i18n:get('refresh')) self:updateValues(moduleData.current_position, moduleData.target_position) end