收藏官网首页
查看: 30467|回复: 15

机智云智能硬件开发入门:数据点编辑指南

20

主题

50

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
13606
跳转到指定楼层
楼主
发表于 2015-5-26 21:13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
校园创客福利

导读:机智云数据点编辑指南



机智云开发者中心创建一款产品时需要定义设备数据点,听起来很高级也很复杂。其实当你真正去了解之后你会发现真的很简单,因为,机智云的工程师们已经用他们的努力与智慧把最难的部分放上了云端解决了。


目录


一、数据点详解

       基本描述

       读写操作类型

       数据类型

二、编辑数据点

        布尔型

        枚举型

        数值型

        扩展型

三、自动换算实现原理

        一条公式

        范例


-----------------


数据点标准协议是机智云为智能硬件开发提供的一套定义硬件功能及其参数的标准协议。

一、数据点详解

1、基本描述

机智云数据点协议每一个数据点包含三项基本描述信息:

显示名称(display_name):

用最清晰的方式描述一个数据点的名称,支持所有中英文及符号字符类型(为了正常显示请避免使用特殊字符)。不在硬件端存储传输,用于虚拟设备及IoE Demo App开发调试时的识别,如果你的硬件项目需要团队协同开发,请规范命名[显示名称]。

标识名(name):

用于应用层传输,客户端或业务云开发时需要使用,不在硬件端存储和传输。命名规则遵循标准的开发语言变量名命名规范,支持英文字母、数字和下划线,以英文字母开头。

备注(desc):

选填,用一段文本描述当前数据点的功能及定义方法,对字符格式不做限制。只用于提高数据点的易读性,如果需要团队协作开发,建议规范填写。



2、读写操作类型

数据点包括四种读写操作的类型:

只读(status_readonly):

根据不同智能设备的功能及元器件,对于只能读取状态而无法接受客户端或云端控制的传感器或元器件(如温度传感器、湿度传感器等),选择使用[只读]类型。

可写(status_writable):

如果你要定义的元器件和对应的功能支持客户端或云端控制(改变元器件状态),那就需要选择[可写]类型,(如LED等的开关和亮度调节)

故障(fault):

结合智能硬件研发时的具体设计情况,我们给出了[故障]这一特殊读写操作类型的数据点。此类型数据点一般无需在客户端上展示,只作为特定事件发生时的报警或状态上报。开发者可利用此类型数据点定义设备的故障点,我们建议每一个故障点使用一个数据点,以布尔型数据定义。

报警(alert):

报警类型与故障类型相似,开发者可利用次类型数据点作为向客户端发送消息推送的依据。同样我们也建议每一个报警点使用一个数据点,以布尔型数据定义。


3、数据类型

数据点除了需要定义读写操作类型之外,还需要定义数据点的数据类型格式,定义适当的数据类型格式不仅可以简化MCU程序的实现,也大大节省了指令传输的字节长度和设备运行效率。机智云数据点标准协议支持4种类型的格式:

布尔(bool):

只有[true]和[false]两个值,占用空间1bit。当你要定义的某个功能(元器件)只有两个状态,如开关状态等,建议使用布尔数据类型。

枚举(enum):

可定义一个有限的取值集合,每2个值占用1bit。当你要定义的某个功能(元器件)有固定的若干个值,如全彩LED的颜色选择可以定义12个颜色等,建议采用枚举数据类型。

数值(num):

通过取值范围(最小值、最大值)和分辨率(步进长度)来定义一个功能点的参数,取值范围支持8位长度(包含小数)的数字,分辨率支持4位长度并且大于0的数字。后台根据用户的输入自动将数值换算成可用于MCU开发的uint类型数据,并自动选择uint8、uint16、uint32以最大限度节省空间占用。

扩展(binary):

扩展类型就是开发者的自定义(透传)指令,只需指定数据点长度(单位Byte),机智云作为传输管道,由开发者自行通过设备端和客户端(或业务云)进行指令翻译。如果以上三种类型无法满足对功能的定义时使用,机智云不建议使用此类型数据,因为此类型数据机智云无法识别,也就无法使用机智云其他的各种基于数据分析的服务和增值服务(当你觉得需要使用扩展类型时,请尝试向机智云寻求帮助,机智云的工程师大多数情况下可以帮助你避免使用扩展类型数据点)


二、编辑数据点


针对不同类型数据格式,需要填写的参数均有所不同,以下分别对不同数据类型提供编辑方法:


1、布尔型数据类型添加/编辑方法:

布尔型是最简单的格式类型,没有参数,只有两个值:true (1) 、false (0)。如图


2、枚举型数据类型添加/编辑方法:

“数据类型”选择[枚举]类型后,在“枚举范围”文本框中直接输入枚举值,每一个值使用英文逗号“,”隔开。点击保存提交后,程序将自动为每一个枚举值添加一个序号,客户端或硬件端开发直接使用枚举序号。如图


3、数值型数据类型添加/编辑方法:

数值类型的编辑是相对比较复杂的操作,我们尽量通过程序的自动换算来减低数值类型的编辑难度,关于换算的算法,有兴趣的可以通过本文后半部分了解。这里我们提供普通开发者需要掌握的编辑方法,唯一的技巧就是,你购买的元器件电气参数规定了什么就输入什么(包括小数、负数),也可以根据最终想要的效果输入适当的值。

“数据类型”选择[数值]类型后,出现数据范围和分辨率文本框,数据范围输入最小值和最大值,分辨率就是你希望可调节的精度或元器件本身支持的最高精度。如图


4、扩展型数据类型添加/编辑方法:

“数据类型”选择[扩展]类型后,出现“数据长度”必填文本框,开发者可输入小于等于2047(单位Byte)的正整数。本质上就是约定了一条指令为此数据点保留的空间长度。

以上就是定义数据点会需要掌握的方法,另外需要特别强调的就是,当你完成数据点的定义并根据自动生成的设备串口协议文档实现了设备功能之后,每一次对数据点的修改都会导致设备无法连接云端,此时需要重新下载设备串口协议文档更新MCU程序。


三、数值型数据类型自动换算实现原理:

如以上提到,我们在定义数值型数据点的时候,取值范围可以使用包括小数、负数等非uint类型数值,熟悉嵌入式开发的开发者会知道,这些数值在设备端都是不被支持的。


1、一条公式

机智云为了让设备功能定义更加简单直接、所见即所得,研究出来一套算法,用于将用户输入的数值转换成设备能够识别的uint类型,这套算法的核心公式是:y=kx+m

其中,

y表示“显示值”,就是用户可见的最终数值,也是数据点定义时输入的值。包括 Ymin(最小值) 和 Ymax(最大值)

x表示“传输值”,就是实际指令间传输使用的数值,一定是uint格式。也包括 Xmin 和 Xmax

k表示“分辨率”,就是用户输入的分辨率一值,确定了每个取值的步进。

m表示“取值偏移量”,算法通过m值将y值偏移到满足x值uint格式的要求,m值默认等于Ymin,确保Xmin=0 。


2、范例

以下用一个电子温度计举例说明换算过程 数据点内容: 取值范围:-30(Ymin) ~ 50(Ymax),分辨率:0.1

根据公式:y=kx+m,m默认等于Ymin -30

Xmin = (-30+30) / 0.1 = 0

Xmax = (50+30) / 0.1 = 800



21

主题

217

帖子

769

积分

高级会员

Rank: 4

积分
769
沙发
发表于 2015-5-27 22:10:35 | 只看该作者
此贴要顶,十分有用

9

主题

103

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
板凳
发表于 2015-5-28 12:27:45 | 只看该作者
超级详细的说明,我等小白受益匪浅

15

主题

102

帖子

626

积分

版主

Rank: 7Rank: 7Rank: 7

积分
626
地板
发表于 2015-5-28 16:28:09 | 只看该作者
写得很详细,理解了什么是数据点与怎样设置数据点

0

主题

19

帖子

70

积分

注册会员

Rank: 2

积分
70
5#
发表于 2015-5-28 17:33:14 | 只看该作者
免费使用STM32、APP自动代码生成工具
数值型数据类型添加 理解起来还是有难度

20

主题

50

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
13606
6#
 楼主| 发表于 2015-5-29 11:59:09 | 只看该作者
mkzhang 发表于 2015-5-28 17:33
数值型数据类型添加 理解起来还是有难度

其实如果你不去深究我们的实现原理的话,用起来还是挺简单的。就是取值范围(最小值~最大值)再加个分辨率,基本上你要定义的那个功能是什么就填什么。比如定义一个智能空调的温度调节功能,可控范围就是取值范围(一般16~30),分辨率就是每次增加/减少1度,就是1。

3

主题

253

帖子

432

积分

中级会员

Rank: 3Rank: 3

积分
432
7#
发表于 2015-6-19 18:09:10 | 只看该作者
写的好详细啊,顶一个

1

主题

88

帖子

286

积分

中级会员

Rank: 3Rank: 3

积分
286
8#
发表于 2015-6-24 14:49:14 | 只看该作者
棒棒哒,顶起来

36

主题

69

帖子

265

积分

中级会员

Rank: 3Rank: 3

积分
265
9#
发表于 2015-7-1 13:15:14 | 只看该作者
刚想提问详细教程,竟然有了,

0

主题

8

帖子

22

积分

新手上路

Rank: 1

积分
22
10#
发表于 2015-7-1 15:39:35 | 只看该作者
校园创客福利
实用,好东西,赞一个。

1

主题

220

帖子

1198

积分

金牌会员

Rank: 6Rank: 6

积分
1198
11#
发表于 2015-8-5 16:59:20 | 只看该作者
好详细,连如何输入都有,非常有用~

1

主题

15

帖子

608

积分

高级会员

Rank: 4

积分
608
12#
发表于 2016-4-6 19:25:35 | 只看该作者
实用,好东西,

7

主题

47

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
13#
发表于 2016-5-8 19:25:03 | 只看该作者
数据点的名称更改之后,app上的名称怎么没变呢

5

主题

85

帖子

1795

积分

金牌会员

Rank: 6Rank: 6

积分
1795
14#
发表于 2016-10-6 22:04:57 | 只看该作者
很好,很好、顶
知行合一

14

主题

105

帖子

846

积分

高级会员

Rank: 4

积分
846
15#
发表于 2017-1-2 14:43:56 | 只看该作者
校园创客福利
好东西,赞一个。

3

主题

253

帖子

432

积分

中级会员

Rank: 3Rank: 3

积分
432
16#
发表于 2017-2-6 11:48:16 | 只看该作者
赞,另外在创建产品时,了解下生成的产品数据点协议解析,对数据点的理解也是很有用哒
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表