开发者学堂课程【物联网平台实战课程:oT 设备物模型接入价值与实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/836/detail/13994
oT 设备物模型接入价值与实践
主要内容
一、物模型概述
二、物模型演进趋势
三、简单设备接入实践
四、云端配置-创建产品-AIoT 设备认证中心
五、云端配置-配置物模型
六、设备开发调试-集成 SDK-上报属性数据
七、设备开发调试-在线调试
八、设备运行和数据应用
九、云端配置—创建产品—增加功能模块
十、设备端开发调试—自定义模块事件上报
十一、资料附件
十二、问题集锦
一、物模型概述
大概讲两部分,第一是物模型的定义,包括物模型演进过程,后面会根据务模型的功能,在进行细致化的步骤介绍。
1.物模型是什么
刚开始成立物联网平台时,初级的功能只是负责一些设备的接入,主要是面向设备端,用户群体主要是硬件的开发者。硬件开发者在接入的过程中,需要定义不同的数据格式,有不同的数据协议,因为设备不同可能数据协议或者数据格式就会不同,所以主要是面向硬件开发者。
但随着物联网和互联网的发展,物联网使用的客户越来越多,以物联网平台为中介线,北向有一些软件的开发者慢慢接入进来。软件的开发者它需要基于硬件开发者提供的数据格式,包括接口来进行开发。因此物联网平台初期物模型时,硬件开发和软件开发的端口耦合度就非常高,物模型运用而生,主要解决的是在设备端对相同的设备提供一种标准的数据格式,统一数据规范。在SDK里包装统一的数据协议,简化对业内开发者的一些上云的步骤。南向也会提供一些通用的API来实现北向应用的开发,所以物模型的主要目的是标准化数据规范,为设备上云和应用的开发提高效率。物模型的定义为物理实际在云端的数字化模型,现在是从属性、事件、服务三个维度描述物理实体功能。
Ø 设备上云遇到问题
l 硬、软开发紧耦合,设备上云投入产出比低
l 多角色协作,数据规范各异,业务数据挖掘难
Ø 物模型定义
l 物理实体在云端的数字化模型
l 从属性、事件、服务三个维度描述物理实体功能
Ø 物模型价值
l 提升设备上云效率
l 标准化数据规范和交互方式
二、物模型演进趋势
目标:增加物模型描述能力,提升建模效率,覆盖更广行业场景
Ø 简单设备
属性、事件、服务、标准品质、Alink 协议、SDK 封装。
l 功能定义数量支持256
l 数据必须符合物模型规范
Ø 复杂设备
功能模块、设备中心、数据校验级别、数据聚合压测、数据插值采集、导入导出。
l 每模块300属性,支持万级属性
l 数据聚合压缩支持万级属性并发写入
Ø 复杂场景
孪生实例、孪生模板、数据映射、规则运算、结果数据检查、批量控制
l 设备关系结构,实例支持万级设备节点。
l 数据转换运算,内置多种运算函数,多级节点数据的递归运算。
首先,在物模型的初期,主要介入的设备是生活智能家居的一些设备,这些设备比较简单,主要更希望能更快接入到云。接入云以后,在北向提供一些应用,来对设备进行一个控制。所以针对于简单的设备,在2017年12月提出了务模型概念,形成了标准化的品类,我也简单的设备也定义好了 Alink 协议,包括 SDK 的封装,支持简单设备的快速上云,所以物模型初期限制比较多一点,比方说功能定义的数量,支持256个,上云的数据必须要按照物模型的定义才会把数据存储下来。
随着数字化的推进,覆盖到更多行业以后,有一些大型的设备希望接入到物联网平台里面,把这种大型设备称之为复杂设备,复杂设备有一个属性就是它需要上报的属性或者功能特别复杂。有可能有的设备属性能达到1000多个,所以为简单设备设计的模型规范就不符合这种大型设备,所以在这个阶段提出了功能模块,可以通过扩展功能模块,来更好的描述大型设备,功能模块更符合。实际物理世界描述设备的能力,比如说一个大型的机械就是分成不同的模块,通过模块来拓展功能定义的个数。同时为了简化大型设备接入的过程设置了设备中心,可以把一些通用的上云的配置沉淀到设备中心之中,通过 code 可以把上云的配置都拷贝过来。
还有一个能力就是针对于这种大型设备为了提升上云效率,通过之前的学习,直到上云的过程,有一些控制只支持256k 的通道容量,为了支持复杂设备数据的上云,在通道侧支持了数据聚合压缩,可以支持万级属性并发写入。通过拓展模块,可以支持万级属性的定义。到了最近两年,物联网数字化覆盖场景更加广泛,有些客户提出来用物联网描述所达的业务场景,这也是当前正在做的功能,这就是数字孪生的能力。基于大型设备之上,希望在复杂场景里面来描述设备的关系结构,不同设备节点属性的计算规则通过配置不同的规则,出现数据聚合的计算,所以在描述完复杂场景之后再提供批量控制设备的能力。这是目前正在做的产品,在上线以后,每个孪生实例支持万级设备节点。同时,每个实例可以配置多种运算函数,多种计算规则,同时,内置了多种运算函数,支持多级节点数据的递归运算。
三、简单设备接入实践
Ø 标准品类
l 某类设备物模型标准功能定义,支持动态编辑
l 覆盖领域: 10,包括智慧城市、智慧生活、智慧工业等
l 品类总数: 700
Ø 数据格式
l ICA 标准数据格式
l 透传/自定义 配置脚本转换为标准数据格式
Ø 数据效验类型
l 弱效验需提前定义物模型,效验功能定义标识符和数据类型
l 免效验无需提前创建物模型,设备采集数据直接上云
无论是简单设备还是复杂设备,物模型整体研发流程主要分为以下四个阶段通过配置的方式来简化,在物联网开发的一些编码提升研发的效率。第一个阶段是云端配置,云端配置主要包括创建产品、配置物模型和创建设备。第二阶段会提供设备开发调试的能力,这也是平台现有的能力,提供了不同语言的 SDK,集成 SDK 以后在 SDK 内部封装一些,设备上下行的 top,更方便使用。第三部分是介绍平台在处理数据时运行的规则,第四部分是介绍数据平台的应用。
Ø 云端配置
创建产品、配置物模型
Ø 设备开发测试
集成SDK、在线调试、查看数据、查询日志
Ø 设备运行
数据效验、数据加工、数据储存
Ø 数据应用
监控运维、应用开发、数据分析
首先云端的配置第一步就是新建产品,这是当前使用较多的标准流程,创建产品时输入的参数也比较简单,输入产品的名称,品类是 SDK 的标准数据平台具备的标准品类,这个品类是物联网平台联合一些合作伙伴成立的一个组织,主要是针对日常用的比较多的一些标准分物模型。选中品类之后只要选中对应的品类,就可以把品类下定义的一些物模型直接建联到产品里面来,直接可以拷贝到产品里面来,所以基于这个品类对物模型进行一定的修改,当前品类已经覆盖了十个领域,包括智慧城市、智慧生活、智慧工业等。品类的总数也达到了700以上,还有需要注意数据格式,包括 ICA 标准数据格式,目的是简化物模型开发过程,定义的一些标准的数据格式,主要是 jason 的数据格式。如果使用不同的协议的话,也可以自定义数据格式,配置脚本转化为标准的数据格式,配置完成以后就可以上云进行数据的加工和处理了。
新建产品页面增加了数据检验级别的选项,这个选项是新增的功能,针对于智慧生活的简单设备定义的物模型数据,包括定义一个 int 类型,也要定义它的最大最小值,上面的数据必须在最大和最小值之内,然后有客户反馈这些是用户不需要的,所以提供弱化这些数据的能力,并且提供了其它数据增值的服务,所以产生的弱效验和免效验的能力,弱效验是指定义标识符和数据类型,免效验是无需提前创建模型设备采集数据直接上云。
四、云端配置-创建产品-AIoT设备认证中心
Ø 目标
●联合硬件厂商、解决方案提供商、场景服务商等合作伙伴,构建 AloT 生态
●由生态伙伴提交设备,物联网平台完成审核认证。保障设备和上云服务质量
Ø ALiThingCode 使用流程
提交设备、审核认证、搜索设备、下单购买、即插即用
Ø ALiThingCode 内容
l 物模型定义
l 数据脚本
l Topic 定义
l 设备驱动
云端配置还有一个创建产品的方式,这也是想要继续推广的。新建产品为设备认证中心,设备认证中心主要目的是,联合硬件厂商、解决方案提供商,包括其它各方面的合作伙伴,构建 AIOT 生态,主要由合作伙伴来提交设备,信息不仅包括设备信息,还包括上云的配置信息。配置信息包括物模型的定义,数据的脚本,对设备的驱动,提交完成之后,内部会进行一个审核,审核完成后会发布到AIOT设备中心中,目前已经认证的设备超过了1000+,目前的硬件伙伴有100多个,行业有四个,主要是发布后,其它对这些设备感兴趣的用户,就可以从界面中搜索,进行购买,购买的设备会同时,认证工作完成后会生成 ALiThingsCode,拿到 ALiThingsCode 以后就会把上传的信息,拷贝到产品里面去,后面购买的用户只要收到设备以后,或者有类似的设备接入进来就可以即插即用的目的。因此后续设备的介绍都是基于 AIOT 设备人中心创建的物模型。例如在 AIOT 设备中心搜索到的 LoPaWAN 控制监测器,拿到 code 输入到 ALiThingsCode,就会把产品创建出来。
五、云端配置-配置物模型
Ø 数据类型和效验类型
●弱效验类型运行时只会标识符和数据类型,取值范围不效验
●数据类型支持9中数据类型
定义的产品的名字为烟雾报警器,报警器会把物模型 Topic 以及还有一些脚本,拷贝到新的产品里面来,它已经把原来的物联网里面的事件服务已经拷贝完成。如果当前的物模型不符合规范、不符合要求的话,点击编辑草稿,进入到编辑状态,可以对已经导入的物模型,进行一些编辑、新增、修改或者删除,弱效验类型只会检验标识符是否存在,数据的类型是否合法、是否符合物模型定义,还会创建一些取值范围,取值范围并不在检验范围之中。
为了方便区分开发态和运行态,把开发态和运行态进行隔离,所以会在控制台上看到有一个编辑草稿的功能,进入编辑草稿,修改物模型的定义,它并不会立即生效。还有一个发布的按钮,编辑完成之后,整体在提交的时候,在左下角会有一个发布按钮,发布之后物模型才会变形为运行态,可以被线上已经发布的接口可以查询得到,模型在区分完编辑态和运行态之后,提供了两套比较完备的接口来支持物模型的查询。这两套接口是一一对应的,因此运行态的接口查找草稿态的接口是查找不到的。
云端配置第三个阶段是创建设备,实际是想通过配置的方式来简化一些操作提升创建效率。所以在创建设备的过程中,输入的信息尽量减少,如果创建单个设备只要选择对应的产品,输入设备的名称,如果想对设备进行单独备注,可以添加一个备注名称,点击确认即可创建。也支持批量创建的能力,所以会提供一个模板,按照模板填入信息,按模板的定义把设备批量创建出来,模板最多支持一万台设备并发创建,基本可以满足客户的需求。
六、设备开发调试-集成 SDK-上报属性数据
Ø 通用方法
●设备注册
●设备初始化
●属性上报
●服务调用
●事件上报
Ø 注意点
●功能定义标识符必须和物模型定义保持一致
●每个物模型通讯消息 Topic 必须和配置保持一致
第二阶段设备开发调试的功能被开发调试也是基于标准数据格式,包括协议封装不同语言的 SDK,降低设备端编码量,并且提供了一些通用的方法,所以并不需要感知到数据上云的一些格式,它是按照标准格式进行上报。举一个简单的例子。
运用起来比较简单,刚刚拷贝产品里面有三个物模型属性的定义,同时对其进行赋值,只要定义 thingPropertyPost方法,就可以把这三个属性全部上报上来,上报的基础后面会提供 GBK 的 demo 文件,这个文件还是需要前置需要完成一些配置,配置信息主要包括设备三元组信息。配置正确之后就可以把这个设备,按照这种属性进行上报,所以这个地方有一个需要注意的点,上报的属性功能定义标识符,必须和物模型定义保持一致。同时因为是封装上报服务,如果需要自己去开发,对应的能力的话需要定义的 topic 必须和物模型 topic 配置保持一致。
这段代码运行完之后会在物联网控制台里面物模型数据模块运行状态下,就可以查询刚刚上报的数据。
七、设备开发调试-在线调试
同时,在控制台上提供了设备在线调试的能力以设备服务调用的方式,介绍在线调试的功能,根据日志服务来定位错误。如果用标准的 SDK,SDK 是 JAVA 版本,所以 SDK 实现监听服务处理器非常简单。首先是把所有的服务先查询出来,查询到了之后来注册服务监听器,这里是注册了一个 version up 服务监听器,首先会收到一个服务调用输入的参数,如果做设备开发的时候,中间预留的需要实现的逻辑,简单的写一下回执,在物模型定义的时候,没有把 success 这个字段定义在物模型里面去,但是服务调用的时候,这个服务端这样实现代码的时候,如果调用成功,会返回一个 success 字段。
设备端编码完成以后可以进行本地启动,本地启动注册设备,建立连接,就可以来监听北向的服务电路的请求,在线调试就是提供设备调试的功能,模拟的是北向服务调用的能力,可以提前看一下定义的物模型。
这个物模型里面 version up,服务里面定义的参数名称为URL,输出以后实际是没有 success 字段的,没有 success段以后,用设备描述去,下面会有一个按钮发起服务调用,发起服务调用的时候会产生,一个报错,这里会描述 R eply 的时候,会多一个 success 字段。添加完 success 字段以后,会有字符串类型,标识符添加完成了以后,重新发起在线调试的能力,物模型调用服务已经成功,数据已经写入平台里面。同样数据写入以后,可以在服务调用里面进行查看,可以看到输入参数和输出参数,这些都会展示给用户。
八、设备运行和数据应用
Ø 数据处理流程
l 数据加工
解压缩、脚本数据转换、数据映射
l 增值服务
物模型级别效验、规则运算、时序分析
l 数据存储
全量数据、物模型规范数据、时序数据
Ø 使用方式
l 应用层 API
北向控制接口、批量查询接口、物模型管理接口
l 异步流转消息
物模型原始数据、物模型规范数据、数据质量标签
l 设备侧上下行 Topic
属性、事件上报、期望属性值、物模型 TSL 模板
物模型数据沉淀到平台以后开发了相衔接的产品,只要使用物理模型数据开发,都可以使用标准的屋模型数据上云,就可以其它的相关的一些产品物联网产品进行无缝的对接。
首先看属性事件服务上报的一些数据,数据处理流程主要包括数据加工、增值服务、数据存储,数据加工里面有一些增值服务,还有脚本数据转换的服务,如果是自定义的企业,会转换成 AI link 协议,还增设了一个数据映射的功能采集设备和实际云上建模的设备可以不是相同的设备。通过数据映射可以把采集的数据映射到实际的物模型的节点上去。同时提供增值服务,包括物模型级别效验,提供了规则运算和时序分析,数据存储会把全量数据、物理型规范数据和时序数据都存储下来,并且提供了相应的接口,使用方式上面还支持异步消息的流转,只要按照规范实现订阅以后,物模型的数据都会流转到服务端,进行后续的数据处理。刚刚讲的比较多的就是设备测上下行 topic,提供了物模型 tsl 描述模板,存出来数据以后会和其它相关产品进行无缝对接,例如 studio 进行手机应用的开发,可以直接把数据在应用里面进行展示,同时提供数据分析的能力。
九、云端配置—创建产品—增加功能模块
因为是一个复杂的设备,复杂设备工地特别多,工业场景很明显。比如说车床,大型纺纱机等等设备,功能定义超过1000多个,所以提供了模块的功能。这里一个简单的例子来说明一下实际使用的步骤,以灯暖性浴霸为例,为每个取暖灯新增功能模块,在描述浴霸的时候,主要是有一个中央控制的模块,四个取暖灯都是不同的模块,通过中央控制的模块,对每个取暖灯进行不同的数据上报或者设备的控制,所以每个取暖灯都定义一个单独的模块,每个模块里面都定义一个温度过高报警的事件。
十、设备端开发调试—自定义模块事件上报
Ø 注意点
l 设备必须已完成建联,使用 publish 方法上报自定义模块事件
l 事件标识符为:自定义模块 ID+冒号+事件标识符
定义完成后,属性上报和刚刚讲过的事件上报,实践方式有一些类似,简单的方法用的是 JAVA 的版本,JAVA 的 SDK版本,使用的相对比较小众,对于多模块的分装还在完善过程中,但是有其它的方式可以替代这种模块属性上报的能力,所以使用了 SDK 的 publish 方法,这里需要自己去拼接 topic。
同时指定事件的标识符,时间标识符有一个特别要注意的点,如果用到一些功能模块的时候,标识符会特殊一点,要是否需要用自定义的模块 ID 加冒号来拼接定义的事件的标识符,这样就会路由到一个对应的模块里面去。拼接完成后会有一个对应的 topic,然后再定义一个上云的事件的入参,在事件里定义了一个 temperature 参数,这里就是上报温度高了以后也上报一个数据。如果数据上报成功,可以在日志服务里面,并且可以在物模型数据下事件管理,看到对应的数值。
十一、资料附件
Ø 开放接口
l 物理型管理
l 物理型使用
l 设备侧 Topic
Ø 生态产品
l AIoT 设备认证中心
l ICA 数据标准平台
Ø 操作流程
●物模型通信实践
●设备开发示例.
●服务端开发示例
●数据流转操作
Ø 示例代码 Demo
l
JAVA SDK Demo
l
ThingModelLinkKitDemo
-烟感报警器: SmokeAlarm
-灯暖浴霸: HeatingLamp
资料附件主要包括开放接口,开放接口就是物联网的链接,同时有一些生态产品,包括 AIOT 设备认证中心和 ica 数据标准平台,还有物模型的操作流程,在现在的物联网平台上都有文字版的演示,如果有遗漏的点,可以查看文字版,代码会有一些势力的 demo。
十二、问题集锦
1.怎么使用或测试?
有两种使用或测试的方式,如果使用物模型开发的话,如果是真实的设备连接上来,会有在线调试的功能,就是模拟北向服务的调用或者是数据的接收,都可以通过在线调试功能进行模拟,同时还提供了设备模拟器功能,模拟用户的真实设备,定义了物模型以后,通过北向进行下发数据。
2.物模型的历史版本
以烟雾报警器的案例进行演示,进入编辑态以后,历史版本主要是记录每次变更的内容,选中上一个版本没有增加success 访问参数的版本,这个地方的参数叫结果标记,还没有改成 success 的字段。所以,在服务调用的时候就报错了,这个历史版本主要是记录的功能,这个地方还有一个能力是这个历史版本可以指定版本,比如说物模型想回到某一个历史版本里面去,现在更改的物模型不符合想要的要求,下面有一个按钮可以恢复到此版本,那么物模型就回到以前的状态。只要在发布上线以后,物模型就变成了运行态。结果标记就变成了这个参数的名称。
3.不同的设备用不同物模型版本可以吗?
现在不同的设备还不能使用不同的物模型版本,产品和物模型是绑定一起的,未来是想做产品和物模型的结藕,物模型会有单独的模型 id,设备会和不同的模型 ID 结合到一起。
4.业务系统有什么方法批量获取物模型数据和设备状态数据吗?
物模型数据现在有专门的接口来进行查询,QueryDevicepropertydata 是物模型查询接口,通过 lotID 可以指定一个设备,可以指定物模型的标识符,来查看数据,这是查询它的单个数据,还有 QueryDevicePropertiesData 是批量查询的接口,还有 QueryDeviceEventData 是事件批量数据查询接口,批量事件这个借口和刚刚属性有一点类似,输入一个设备以后,通过指定它的开始和结束时间,来批量查询事件上报的数据。
5.AIOT 设备中心对应的链接
https://devices.iot.aliyun.com/?spm=5176.11485173.0.0.6b0f59afj89IV3