Skip to content

物模型格式数据业务交互示例

场景描述

本章节指导用户通过 QuecPython 接入方案连接上开发者中心并进行物模型数据格式的业务交互。

涉及指令

函数说明
Qth.sendTsl()发送物模型数据
Qth.ackTsl()应答物模型读取请求

提示:详情请参考数据业务交互 相关接口

操作步骤

平台侧

一、登录开发者中心

登录开发者中心,未注册可单击立即注册完成注册。

二、创建产品

创建产品详情请参考 创建产品

设备侧

物模型数据交互

物模型是开发者中心针对物理实体设备在平台端建立的数据模型,主要用于描述产品的功能,从而方便数据的解析。设备成功接入平台后,通过构建物模型数据来实现与开发者中心的数据交互。

示例一(主动发送物模型数据)

功能ID功能类型功能名称数据类型数值范围引用关系
1属性开关BOOLtrue - 开启;
false - 关闭;
2属性电池电量INT0~100
3属性精油剩余容量FLOAT0~300
4属性工作模式ENUM1~HPC
2~CPL
5属性设备编号TEXT0~20
6属性时间DATE--
7属性结构体STRUCT--功能ID:8,9
8(父ID:7)参数 {$参数名称}BOOLtrue - 开启;
false - 关闭;
9(父ID:7)参数 {$参数名称}INT0~100
10属性整型数组ARRAY最大数量:10,元素类型:INT
11属性结构体数组ARRAY功能ID:12,13
12(父ID:11)参数 {$参数名称}BOOLtrue - 开启;
false - 关闭;
13(父ID:11)参数 {$参数名称}INT0~100

设备端可根据业务场景需求,对设备端数据属性采取一定的策略进行检测处理,例如设备端读取香薰机传感器精油剩余容量值等数据后,设备则将读取到的精油剩余容量值等数据上传到开发者中心。

  • 示例代码如下所示:
    python
    # 创建一个空字典
    my_dict = {}  
    # 添加布尔类型数据 {"1":true}
    my_dict.update({"1":true})
    # 添加整型数据  {"2":100}
    my_dict.update({"2":100})
    # 添加浮点型数据  {"3":25.6}
    my_dict.update({"3":25.6})
    # 添加ENUM数据  {"4":1}
    my_dict.update({"4":1})
    # 添加字符串类型数据  {"5":"ZWS"}
    my_dict.update({"5":"ZWS"})
    # 添加字符串类型数据  {"6":1659664758817}
    my_dict.update({"6":1659664758817})
    # 添加结构体类型数据  {"7":{"8":true,"9":100}}
    my_dict.update({"7":{"8":true,"9":100}})
    # 添加数组INT类型数据  {"10":[10,20,30]}
    my_dict.update({"10":[10,20,30]})
    # 添加数组结构体类型数据,引用参数:12、13 {"11":[{"12":true,"13":100},{"12":false,"13":98}]}
    my_dict.update({"11":[{"12":true,"13":100},{"12":false,"13":98}]})
    # 发送数据,QOS模式:1
    Qth.sendTsl(1,my_dict)

示例二(响应平台读取数据)

1、开发者中心批量读取物模型实时数据

在开发者中心 设备信息 详情页的 设备调试 中,点击 批量读取 按钮可一键批量读取物模型属性数值。

2、模组收到查询指令处理

当模组接收到物模型请求数据后,则会自动调用 readTsl() 事件回调函数,您可根据下发的物模型ID数组进行数据响应处理。

  • 事件回调处理示例代码如下所示:
    python
    def App_cmdReadTslCb(ids, pkgId):
        print('readTsl:', ids, pkgId)
        # 创建一个空字典
        my_dict = {}  
        for id in ids:
            if id == 1:
                my_dict.update({"1":true})
            elif if id == 2:
                my_dict.update({"2":100})
            elif if id == 3:
                my_dict.update({"3":25.6})
            elif if id == 4:
                my_dict.update({"4":1})
            elif if id == 5:
                my_dict.update({"5":"ZWS"})
            elif if id == 6:
                my_dict.update({"6":1659664758817})
            elif if id == 7:
                my_dict.update({"7":{"8":true,"9":100}})
            elif if id == 10:
                my_dict.update({"10":[10,20,30]})
            elif if id == 11:
                my_dict.update({"11":[{"12":true,"13":100},{"12":false,"13":98}]})
        Qth.ackTsl(0, my_dict, pkgId)

提示:return的ttlvHead的内存会由SDK自行释放,用户可无需关心,只需要把回复的物模型数据增加到ttlvHead链表中即可。

示例三(主动上报物模型告警事件)

功能ID功能类型功能名称数据类型数值范围引用关系
14事件剩余精油不足BOOL输出功能ID:15,16
15(父ID:14)参数电池电量INT0~100
16(父ID:14)参数精油剩余容量FLOAT0~300

模拟精油不足时主动上告给平台端,该事件包含输出参数:精油当前容量,将输出参数 ID:15,16 包含进告警事件内组成结构体一并发送到开发者中心。

  • 示例代码如下所示:
    python
    # 创建一个空字典
    my_dict = {}  
    # 添加物模型事件类型数据,引用参数:15、16
    my_dict.update({"14":{"15":true,"16:20.5"}})
    # 发送物模型数据至平台
    Qth.sendTsl(1,my_dict)

示例四(读取平台下发的物模型服务数据)

功能ID功能类型功能名称数据类型数值范围引用关系
17服务服务BOOL输出功能ID:18
18(父ID:17)输入参数模式ENUM0~2

1、开发者中心下发物模型服务

在开发者中心 设备调试 页面,第一步点击 服务调用,第二步选择要下发的物模型服务,第三步点击左下角的 发送指令 即可下发物模型服务给终端。

2、设备接收到数据

当模组接收到物模型数据后,则会自动调用recvTsl回调函数,您可进行对应的数据响应处理。

  • 事件回调函数如下所示:
    python
    def App_cmdRecvTslServerCb(serverId, value, pkgId):
        print('recvTslServer:', serverId, value, pkgId)
        if serverId == 17:
            num = value["18"]
            print('num:', num)