功能定义

更新时间:2019-07-25 15:05:11

产品功能

在每个产品中,都需要定义一套物的模型,具体可以查看 物的模型TSL
每个产品有两类功能:

功能类型 描述
标准功能 根据ICA数据标准,平台为每个品类创建了默认的标准功能,分为可选和必选
自定义功能 如果标准功能不符合您的设备特征,您也可以自定义功能

功能介绍

标准功能:

平台默认创建的“必选功能”,会在打开这个页面时,默认展示如下:

image.png

点击“新增”,可以查看和选择“可选功能”。以灯为例,可以选择灯的功能,也可以搜索跨品类的功能:
image.png

image.png

自定义功能:

当标准功能不够用时,开发者可以自定义功能。

自定义属性

数据类型包括:整型、浮点、枚举、布尔、字符串、时间型(string类型的UTC格式)、JSON对象(结构体)。

自定义服务

服务适用于较复杂的设备功能,比如需要带入参和出参。点击“新增输入参数”,在弹窗中添加服务的输入/输出参数,您可以选择将产品下的某个属性直接作为参数,也可以完全自定义一个新的参数。单个服务最多可分别添加10个入参或10个出参。


自定义事件

事件分为三种类型:“信息”、“告警”和“故障”,“信息”是设备上报的一般性通知,如完成某项任务等,“告警”和“故障”是设备运行过程中主动上报的突发或异常情况,优先级更高。事件由设备主动上报,设备可以携带该事件的相关参数进行输出,如设备上报了一个“过热”的告警事件,并携带了设备的当前温度。

添加事件的输出参数时可以选择将当前已有的属性直接作为参数上报,也可以自定义参数。请注意,单个事件最多可以添加10个输出参数。

自动生成物的模型 TSL

功能定义完成后,平台能够根据“标准功能” 和“自定义功能”,自动生成一份Json格式的TSL。
image.png

image.png

关于TSL使用限制的特别说明

定义的物模型越复杂, 包含的属性/元素/服务元素越多, 生成的物模型TSL文本就会越长, 而嵌入式设备端由于RAM空间有限, 能够用来容纳TSL文本的内存缓冲区大小的上限必须有所限制, 以避免耗尽设备上的有限内存空间, 造成程序崩溃, 如此一来, TSL文本的长度在超出4KB的时候, 则有可能超过缓冲区大小的上限, 进而引起运行时的错误.

具体表现形式为:
在例子程序里定义变量:
get_tsl_from_cloud = 1
之后, 编译和运行例程, 会出现如下的错误:
mqtt client state=3 ...
MQTT Publish failed ...

此时, 用户可以根据自己的实际硬件上RAM空间的大小, 酌情扩大代码中的以下几处配置, 以放宽缓冲区上限, 容纳过长的TSL, 如果被增大的上限值在运行时没有导致内存不足, 重新编译和运行后, 即可解决问题

1) 点击SDK获取页面下载飞燕SDK(含AliOS Things)的代码;
2) 运行linkkit编译命令, 比如:

aos make clean
aos make linkkitapp@linuxhost
aos make clean

3) 编辑 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/board/config.rhino.make 文件, 扩大其中的 CONFIG_MQTT_TX_MAXLEN 和 CONFIG_MQTT_RX_MAXLEN, 分别表示扩大最大的MQTT上行/下行报文缓冲区长度, 如:

CONFIG_ENV_CFLAGS   +=
            -DCONFIG_HTTP_AUTH_TIMEOUT=500
            -DCONFIG_MID_HTTP_TIMEOUT=500
            -DCONFIG_GUIDER_AUTH_TIMEOUT=500
            -DCONFIG_MQTT_TX_MAXLEN=640
            -DCONFIG_MQTT_RX_MAXLEN=1200

改成

CONFIG_ENV_CFLAGS   +=
            -DCONFIG_HTTP_AUTH_TIMEOUT=500
            -DCONFIG_MID_HTTP_TIMEOUT=500
            -DCONFIG_GUIDER_AUTH_TIMEOUT=500
            -DCONFIG_MQTT_TX_MAXLEN=10240
            -DCONFIG_MQTT_RX_MAXLEN=12000

4) 编辑 security/alicrypto/mbedtls/include/mbedtls/ssl.h 文件, 扩大其中的 MBEDTLS_SSL_MAX_CONTENT_LEN, 这表示TSL层最大的上行/下行报文缓冲区长度, 如:

#if !defined(MBEDTLS_SSL_MAX_CONTENT_LEN)
#define MBEDTLS_SSL_MAX_CONTENT_LEN   4096   /**< Size of the input / output buffer */
#endif

改成

#if !defined(MBEDTLS_SSL_MAX_CONTENT_LEN)
#define MBEDTLS_SSL_MAX_CONTENT_LEN    (10240)   /**< Size of the input / output buffer */
#endif

5) 重新编译例子程序并运行, 调试是否已经有足够长的缓冲区容纳云端下发的TSL, 比如:

aos make clean
aos make linkkitapp@linuxhost

results matching ""

    No results matching ""