• 云配置帮助接口
    • initialize
    • fetch
    • templates
    • devices
    • 使用代码示例:

    云配置帮助接口

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

    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,,,,