--[[ %% autostart %% properties %% events %% globals --]] local virtualDeviceID = 337 local ip_address = fibaro:getValue(virtualDeviceID, 'IPAddress'); local port = fibaro:getValue(virtualDeviceID, 'TCPPort'); local hash = "d033e22ae348aeb5660fc2140aec35850c4da997" --"admin" function readStatus(label, status); if type(status) ~= "number" then status = "Нет данных" else local errorsTable = { [0] = "Нет ошибок", [1] = "Ошибка соединения с платой", [2] = "Ошибка декодирования", [3] = "Перегрев", [4] = "Ошибка датчика температуры", [5] = "Не подключен датчик температуры", [6] = "Ошибка датчика влажности", [7] = "Не подключен датчик влажности", [8] = "8", [9] = "9", [10] = "Ошибка соединения с пультом управления", [11] = "Ошибка декодирования WiFi"} status = errorsTable[status] end fibaro:call(virtualDeviceID, "setProperty", "ui."..label..".value", status); end function readSwitchers(label, switch) if type(switch) ~= "number" then switch = "Нет данных" else if switch == 1 then switch = "Включено" else switch = "Отключено" end end fibaro:call(virtualDeviceID, "setProperty", "ui."..label..".value", switch); end function readTimers(label, timer) if type(timer) ~= "number" then timer = "Нет данных" else local timer_hour = math.floor(timer/60) local timer_min = timer%60 timer = string.format("%02i:%02i", timer_hour, timer_min) end fibaro:call(virtualDeviceID, "setProperty", "ui."..label..".value", timer); end function readSensors(label, sensor, sign) if type(sensor) ~= "number" then sensor = "Нет данных" else if sign ~= nil then sensor = sensor..sign end end fibaro:call(virtualDeviceID, "setProperty", "ui."..label..".value", sensor); end function readDimmers(label, dimmer); if type(dimmer) ~= "number" then dimmer = "Нет данных" end fibaro:call(virtualDeviceID, "setProperty", "ui."..label..".value", dimmer); end function readOutputs(output_type, num_of_output_channel) local read_outputs = "/get/m2m/outputs?type=".. output_type.."&number="..num_of_output_channel.."&hash="..hash local httpClient = net.HTTPClient(); httpClient:request('http://'..ip_address..read_outputs, { success = function(response) if tonumber(response.status) == 200 then jsonData = json.decode(response.data) if jsonData ~= nil then --fibaro:debug(response.data) fibaro:debug("OK") readStatus("Label1", jsonData.outputs.data[1].value.Status); readSwitchers("Label2", jsonData.outputs.data[1].value.switchers.MainPower_switch); readSwitchers("Label3", jsonData.outputs.data[1].value.switchers.Heat_switch); readSwitchers("Label4", jsonData.outputs.data[1].value.switchers.Humidity_switch); readSwitchers("Label5", jsonData.outputs.data[1].value.switchers.Fan_switch); readSwitchers("Label6", jsonData.outputs.data[1].value.switchers.Light_switch); readSwitchers("Label7", jsonData.outputs.data[1].value.timers.TimerOffset_checkbox); readTimers("Label8",jsonData.outputs.data[1].value.timers.TimerOffset_time_SET); readTimers("Label9",jsonData.outputs.data[1].value.timers.TimerOffset_time_REAL); readTimers("Label10",jsonData.outputs.data[1].value.timers.TimeHeat_SET); readTimers("Label11",jsonData.outputs.data[1].value.timers.TimeHeat_REAL); readSensors("Label12",jsonData.outputs.data[1].value.sensors.Temperature_SET, " C"); readSensors("Label13",jsonData.outputs.data[1].value.sensors.Temperature_REAL, " C"); readSensors("Label14",jsonData.outputs.data[1].value.sensors.Humidity_SET, "%"); readSensors("Label15",jsonData.outputs.data[1].value.sensors.Humidity_REAL, "%"); readDimmers("Label16", jsonData.outputs.data[1].value.dimmers.Light_dimmer); end else fibaro:debug('ERROR [HTTPClient:request] status: ' .. response.status) end end, error = function(err) fibaro:debug('Error : ' .. err) end }); end function mainFunction() readOutputs("specific", "0"); setTimeout(mainFunction, 5*1000); end mainFunction();