云配置帮助接口

本接口为采集类应用封装了从云配置服务中加载设备模板的逻辑。帮助用户快速使用云配置服务。

initialize

function helper:initialize(sys_api, conf, templates_ext, templates_dir, templates_node, devices_node)

构造函数。参数:

  • sys_api - 应用系统接口 app.sys
  • conf - 应用配置数据 (table数据或者{CNF_NAME}.{VERSION}字符串)
  • templates_ext - 设备模板文件本地存储的扩展名。默认为csv
  • templates_dir - 设备模板文件本地存储的子目录名。 默认为tpl
  • templates_node - 应用配置数据中模板列表节点名称。默认为tpls。如果该节点为空,则不进行模板下载。
  • devices_node - 应用配置数据中设备列表节点名称。默认为devs

注:

  1. 当conf为字符串时,helper会从云配置接口获取对应的配置文件,然后使用json格式解析后当作应用配置数据使用。
  2. 当conf字符串中不包含version时,如”CNF000000001”,helper会从云配置服务中获取最新版本进行下载

fetch

function api:fetch(async)

获取所有设备模板数据文件。async为true时将开启异步获取模式。

templates

function api:templates()

获取已经完成获取的模板列表

devices

function api:devices()

获取已经完成设备模板的设备列表

使用代码示例:

代码:

  1. local config = self._conf or {}
  2. --[[
  3. config.devs = config.devs or {
  4. { unit = 1, name = 'bms01', sn = 'xxx-xx-1', tpl = 'bms' },
  5. { unit = 2, name = 'bms02', sn = 'xxx-xx-2', tpl = 'bms2' }
  6. }
  7. ]]--
  8. --- 获取云配置
  9. if not config.devs or config.cnf then
  10. if not config.cnf then
  11. config = 'CNF000000002.1' -- loading cloud configuration CNF000000002 version 1
  12. else
  13. config = config.cnf .. '.' .. config.ver
  14. end
  15. end
  16. local helper = conf_helper:new(self._sys, config)
  17. helper:fetch()
  18. self._devs = {}
  19. for _, v in ipairs(helper:devices()) do
  20. -- initialize your devices
  21. end
  22. --- 获取配置
  23. local conf = helper:config()
  24. conf.channel_type = conf.channel_type or 'socket'
  25. if conf.channel_type == 'socket' then
  26. conf.opt = conf.opt or {
  27. host = "127.0.0.1",
  28. port = 1503,
  29. nodelay = true
  30. }
  31. else
  32. conf.opt = conf.opt or {
  33. port = "/dev/ttymxc1",
  34. baudrate = 115200
  35. }
  36. end
  37. if conf.channel_type == 'socket' then
  38. client = sm_client(socketchannel, conf.opt, modbus.apdu_tcp, 1)

获取完成后文件目录:

  1. tpl/
  2. ├── CNF000000001_1.cnf
  3. ├── TPL000000001_1.csv
  4. ├── tpl1.csv
  5. └── tpl2.csv

应用配置数据示例(CNF000000001):

  1. {
  2. "opt": {
  3. "port": "/dev/ttymxc1",
  4. "baudrate": 19200
  5. },
  6. "tpls": [{
  7. "id": "TPL000000001",
  8. "name": "tpl1",
  9. "ver": 1
  10. },
  11. {
  12. "id": "TPL000000001",
  13. "name": "tpl2",
  14. "ver": 1
  15. }
  16. ],
  17. "devs": [{
  18. "addr": 991122334455,
  19. "name": "s01",
  20. "sn": "xxx-xx-xx-1",
  21. "tpl": "tpl1"
  22. },
  23. {
  24. "addr": 112233445566,
  25. "name": "s02",
  26. "sn": "xxx-xx-xx-2",
  27. "tpl": "tpl2"
  28. }
  29. ],
  30. "loop_gap": 3000
  31. }

设备模板示例(TPL000000001):

  1. COMMENT,name,description,series,,,,
  2. META,S2,Supper Meter Device,v1,,,,
  3. ,,,,,,,
  4. COMMENT,name,description,data address,vt,offset,rate,format
  5. INPUT,total,组合有功总电能(kWh),0x00000000,,,,
  6. INPUT,total_positive,正向有功总电能(kWh),0x00010000,,,,
  7. INPUT,total_negative,反向有功总电能(kWh),0x00020000,,,,
  8. INPUT,balance,剩余电量(kWh),0x00900100,,,,
  9. INPUT,overdraft,透支电量(kWh),0x00900101,,,,
  10. INPUT,current_total,当前结算周期组合有功总累计用电量(kWh),0x000B0000,,,,
  11. ,,,,,,,
  12. COMMENT,name,description,data address,vt,rate,format,
  13. OUTPUT,xxx,xxx,0x00000000,,,,