-
Notifications
You must be signed in to change notification settings - Fork 0
/
Water_Flow_Level-10.fqa
1 lines (1 loc) · 9.64 KB
/
Water_Flow_Level-10.fqa
1
{"name":"Water Flow Level","type":"com.fibaro.multilevelSensor","apiVersion":"1.2","initialProperties":{"viewLayout":{"$jason":{"body":{"header":{"style":{"height":"0"},"title":"quickApp_device_401"},"sections":{"items":[{"components":[{"name":"label1","style":{"weight":"1.2"},"text":"Label1","type":"label","visible":true},{"style":{"weight":"0.5"},"type":"space"}],"style":{"weight":"1.2"},"type":"vertical"}]}},"head":{"title":"quickApp_device_401"}}},"uiCallbacks":[],"quickAppVariables":[{"name":"stationHydro","value":"F700000103"},{"name":"mode","value":"level"},{"name":"interval","value":"3600"},{"name":"debugLevel","value":"1"}],"typeTemplateInitialized":true},"files":[{"name":"main","isMain":true,"isOpen":true,"content":"-- QuickApp Water Flow Level \n\n-- This QuickApp gets the actual water levels or flow from rivers in France\n-- The latest water level or flow of your selected hydro station is updated in the value of this QuickApp\n-- You can choose between Water Level or Water Flow. If you want both, simply install the QuickApp twice\n-- See for more information: https://www.vigicrues.gouv.fr\n-- Service d'information sur le risque de crues des principaux cours d'eau en France\n\n\n-- Version 1.0 (16th April 2021)\n-- Added Water Flow next to Water Level\n-- Added debugLevel (Number (1=some, 2=few, 3=almost all, 4=all) (default = 1))\n-- Re-structured the code\n\n-- Version 0.5 (16th August 2020)\n-- Error message instead of debug message in case of error\n-- Adjusted the date/time in the label and debug message. If the json file was in a different order, a wrong date/time could show. \n-- Changed method of adding QuickApp variables, so they can be edited\n\n-- Version 0.4 (7th August 2020)\n-- Changed debug message actual level with location\n-- Added QuickApp variables\n\n-- Version 0.3 (3rd August 2020)\n-- Put the latest WaterLevel value in QuickApp value\n-- Put the latest DateTime value in the QuickApp log\n-- Added labels with the json data\n-- Added debug notification\n\n-- Version 0.2 (3nd August 2020)\n-- Date time value converted to readable time\n-- Added the latest date, time and waterlevel values\n\n\n-- Variables (mandatory): \n-- stationHydro = Status from where you want your data from\n-- mode = level or flow (Choose for waterlevel or waterflow, default = level)\n-- interval = Number in seconds to request the data\n-- debugLevel = Number (1=some, 2=few, 3=all) (default = 1)\n\n\n-- Example json output Water Level:\n-- {\"VersionFlux\":\"Beta 0.4b\",\"Serie\":{\"CdStationHydro\":\"F700000103\",\"LbStationHydro\":\"Paris [Austerlitz - Station d\\u00e9bitm\\u00e9trique ultrasons]\",\"Link\":\"https:\\/\\/www.vigicrues.gouv.fr\\/services\\/station.json?CdStationHydro=F700000103\",\"GrdSerie\":\"H\",\"ObssHydro\":[[1615849200000,1.27],[1615852800000,1.28],[1615856400000,1.29],[1615860000000,1.3],[1615863600000,1.29],[1615867200000,1.3],[1615870800000,1.29],[1615874400000,1.3],[1615878000000,1.29],[1615881600000,1.32],[1615885200000,1.32],[1615888800000,1.33],[1615892400000,1.32],[1615896000000,1.32],[1615899600000,1.3],[1615903200000,1.29],[1615906800000,1.26],[1615910400000,1.23],[1615914000000,1.19],[1615917600000,1.19],[1615921200\n-- truncated\n\n-- Example json outputWater Flow:\n-- {\"VersionFlux\":\"Beta 0.4b\",\"Serie\":{\"CdStationHydro\":\"F700000103\",\"LbStationHydro\":\"Paris [Austerlitz - Station d\\u00e9bitm\\u00e9trique ultrasons]\",\"Link\":\"https:\\/\\/www.vigicrues.gouv.fr\\/services\\/station.json?CdStationHydro=F700000103\",\"GrdSerie\":\"Q\",\"ObssHydro\":[[1615849200000,368.8],[1615852800000,371.7],[1615856400000,367.4],[1615860000000,367],[1615863600000,364.8],[1615867200000,366],[1615870800000,371.2],[1615874400000,370.7],[1615878000000,367.4],[1615881600000,375.2],[1615885200000,366.9],[1615888800000,378.2],[1615892400000,356.6],[1615896000000,380],[1615899600000,384],[1615903200000,371.3],[1615906800000,363.5],[1615910400000,344.7],[1615914000000,340.4],[1615917600000,34\n-- truncated\n\n\n-- No modifications are needed below this line\n\n\nfunction QuickApp:logging(level,text) -- Logging function for debug\n if tonumber(debugLevel) >= tonumber(level) then \n self:debug(text)\n end\nend\n\n\nfunction QuickApp:updateProperties() -- Update the properties\n self:logging(3,\"QuickApp:updateProperties\")\n self:updateProperty(\"value\", tonumber(data.Act_WaterLevelFlow))\n if mode == \"level\" then \n self:updateProperty(\"unit\", \"m\")\n else\n self:updateProperty(\"unit\", \"m³/s\")\n end\n self:updateProperty(\"log\", data.Act_DateTime)\nend\n\n\nfunction QuickApp:updateLabels() -- Update the labels\n self:logging(3,\"QuickApp:updateLabels\")\n local labelText = \"\"\n labelText = labelText ..\"Station Hydro: \" ..data.LbStationHydro ..\"\\n\\n\"\n labelText = labelText ..\"Date time: \" ..data.Act_DateTime ..\"\\n\\n\" \n if mode == \"level\" then\n labelText = labelText ..\"WaterLevel: \" ..data.Act_WaterLevelFlow ..\" m\" ..\"\\n\"\n else\n labelText = labelText ..\"WaterFlow: \" ..data.Act_WaterLevelFlow..\" m³/s\" ..\"\\n\"\n end\n self:updateView(\"label1\", \"text\", labelText)\n self:logging(2,labelText)\nend\n\n\nfunction QuickApp:getValues() -- Get the values\n self:logging(3,\"QuickApp:getValues\")\n data.VersionFlux = jsonTable.VersionFlux \n data.LbStationHydro = jsonTable.Serie.LbStationHydro \n data.Link = jsonTable.Serie.Link\n data.GrdSerie = jsonTable.Serie.GrdSerie\n \n self:logging(2,\"VersionFlux: \" ..data.VersionFlux)\n self:logging(2,\"LbStationHydro: \" ..data.LbStationHydro)\n self:logging(2,\"Link: \" ..data.Link)\n self:logging(2,\"GrdSerie: \" ..data.GrdSerie) \n \n local i = 1\n for i in pairs(jsonTable.Serie.ObssHydro) do \n --data.Act_DateTime = os.date(\"%d-%m-%Y %X\", string.sub(jsonTable.Serie.ObssHydro[i][1],1,10))\n data.Act_DateTime = jsonTable.Serie.ObssHydro[1][1]\n data.WaterLevelFlow = jsonTable.Serie.ObssHydro[i][2]\n if jsonTable.Serie.ObssHydro[i][1] > data.Act_DateTime then\n data.Act_DateTime = jsonTable.Serie.ObssHydro[i][1]\n data.Act_WaterLevelFlow = data.WaterLevelFlow\n end\n end\n data.Act_DateTime = string.sub(data.Act_DateTime,1,10)\n data.Act_DateTime = os.date(\"%d-%m-%Y %X\", data.Act_DateTime)\n self:logging(2,\"Act_DateTime: \" ..data.Act_DateTime) \nend\n\n\nfunction QuickApp:getData() -- Get data\n self:logging(3,\"QuickApp:getData\")\n local url = address ..stationHydro ..path\n self:logging(3,\"url: \" ..url)\n\n self.http:request(url, {\n options={\n headers = {Accept = \"application/json\"}, method = 'GET'}, success = function(response)\n self:logging(3,\"response status:\" ..response.status) \n self:logging(3,\"headers:\" ..response.headers[\"Content-Type\"]) \n apiResult = response.data\n\n self:logging(4,\"Full apiResult: \" ..apiResult)\n\n jsonTable = json.decode(apiResult) -- JSON decode from api to lua-table\n\n self:getValues() -- Get the values\n self:updateLabels() -- Update the labels\n self:updateProperties() -- Update the properties\n\n end,\n error = function(error)\n self:error('error: ' .. json.encode(error))\n self:updateProperty(\"log\", \"error: \" ..json.encode(error))\n end\n\n }) \n\n self:logging(3,\"SetTimeout \" ..interval ..\" seconds\")\n fibaro.setTimeout(interval*1000, function() -- Checks every n seconds for new data\n self:getData()\n end)\nend \n\n\nfunction QuickApp:createVariables() -- Get all Quickapp Variables or create them\n address = \"https://www.vigicrues.gouv.fr/services/observations.json/index.php?CdStationHydro=\" -- Default Address \n local pathLevel = \"&GrdSerie=H&FormatSortie=simple\" -- Default path Water Level\n local pathFlow = \"&GrdSerie=Q&FormatSortie=simple\" -- Default path Water Flow\n if mode == \"level\" then -- Set initial value for Path\n path = pathLevel \n else\n path = pathFlow \n end\n data = {}\n data.WaterLevelFlow = 0\n data.Act_WaterLevelFlow = 0\n data.Act_DateTime = 0\n data.VersionFlux = \"\"\n data.LbStationHydro = \"\"\n data.Link = \"\"\n data.GrdSerie = \"\"\nend\n\n\nfunction QuickApp:getQuickappVariables() -- Get all Quickapp Variables or create them\n stationHydro = self:getVariable(\"stationHydro\")\n mode = string.lower(self:getVariable(\"mode\"))\n interval = tonumber(self:getVariable(\"interval\")) \n debugLevel = tonumber(self:getVariable(\"debugLevel\"))\n\n -- Check existence of the mandatory variables, if not, create them with default values\n if stationHydro ==\"\" or stationHydro == nil then\n stationHydro = \"F700000103\" -- Default stationHydro is F700000103\n self:setVariable(\"stationHydro\",stationHydro)\n self:trace(\"Added QuickApp variable stationHydro\")\n end\n if mode ==\"\" or mode == nil then\n mode = \"level\" -- Default Mode is level\n self:setVariable(\"mode\",mode)\n self:trace(\"Added QuickApp variable mode\")\n end\n if interval == \"\" or interval == nil then\n interval = \"3600\" -- Default interval is 3600\n self:setVariable(\"interval\",interval)\n self:trace(\"Added QuickApp variable interval\") \n interval = tonumber(interval)\n end\n if debugLevel == \"\" or debugLevel == nil then\n debugLevel = \"1\" -- Default value for debugLevel\n self:setVariable(\"debugLevel\",debugLevel)\n self:trace(\"Added QuickApp variable debugLevel\")\n debugLevel = tonumber(debugLevel)\n end\nend\n\n\nfunction QuickApp:onInit()\n __TAG = fibaro.getName(plugin.mainDeviceId) ..\" ID:\" ..plugin.mainDeviceId\n self:debug(\"OnInit\") \n self.http = net.HTTPClient({timeout=3000})\n \n self:getQuickappVariables() -- Get Quickapp Variables or create them\n self:createVariables() -- Create Variables\n self:getData() -- Go to getData\nend\n\n-- EOF"}]}