local cjson = require "cjson" local configuration = require "storage.configuration" require "main.global" local templatesPath = "/app/node/templates_cfg.json" local nodesPath = "/app/node/nodes_cfg.json" local nodes = { nodes_cfg = {} } local templates = {} local devices = {} function devices.loadTemplates() local file = io.open(templatesPath, "r") local content = file:read("*a") local obj = cjson.decode(content) templates = {} templates.version = obj.version for k, v in pairs(obj.template_cfg) do local item = {} item.name = string.split(v.template_name, "@")[2] item.id = v.template_id item.protocol = v.protocol -- log_print.info(item.name, item.id, item.protocol) templates[v.template_id] = item end file:close() end function devices.loadNodes() local file = io.open(nodesPath, "r") local content = file:read("*a") local obj = cjson.decode(content) nodes.version = obj.version nodes.nodes_cfg ={} for k, v in pairs(obj.nodes_cfg) do local template = templates[v.template_id] local sn = string.split(v.sn, "_")[2] local item = {} item.port = v.connect_port item.sn = sn item.template = template item.address = v.term_addr item.ip_addr = v.tcp_ip_addr -- log_print.info(item.port, item.sn, item.template) nodes.nodes_cfg[sn] = item end file:close() --log_print.info(cjson.encode(nodes.nodes_cfg)) end function devices.computeNodes(template_name) local cont = 0 for k, v in pairs(nodes.nodes_cfg) do if v.template.name == template_name then cont = cont + 1 end end return cont end function devices.load() devices.loadTemplates() devices.loadNodes() end function devices.get_templates() return templates end function devices.get_nodes() return nodes.nodes_cfg end function devices.get_sdb_sn() for _, v in pairs(nodes.nodes_cfg) do if v.template.name == "Smart_Distribution_Box" then return v.sn end end return nil end -------------------------------------------------------------------------- function devices.getChn(sn) local node = nodes.nodes_cfg[sn] if node == nil then return nil end local deviceType = node.template.name if deviceType == "SDBCamera" or deviceType == "SmartLock" or deviceType == "MultiSwitch" or deviceType == "SafeElectricity" then -- 多路设备类型,返回设备对应的chn DeviceConfig[deviceType] = DeviceConfig[deviceType] or {index = 1} if DeviceConfig[deviceType][sn] == nil then return nil -- DeviceConfig[deviceType][sn] = DeviceConfig[deviceType].index -- DeviceConfig[deviceType].index = DeviceConfig[deviceType].index + 1 end log_print.info("sn", sn, "chn", DeviceConfig[deviceType][sn]) return DeviceConfig[deviceType][sn] elseif deviceType == "Smart_Distribution_Box" then -- 虚拟控制器,返回0 return 0 else -- 单路设备类型,返回-1 return -1 end end function devices.setChn(sn, deviceType, chn) DeviceConfig[deviceType] = DeviceConfig[deviceType] or {index = 1} DeviceConfig[deviceType][sn] = chn end function devices.saveChnConfig() configuration.set("Device", DeviceConfig) end function devices.clearChnConfig(deviceType) DeviceConfig[deviceType] = {} end -------------------------------------------------------------------------- function devices.saveCameraConfig() configuration.set("Camera", CameraConfig) end return devices