课时2:IoT物模型接入价值与实践(二)

简介: IoT物模型接入价值与实践

阿里云物联网平台入门训练营:课时2:IoT物模型接入价值与实践(二)

课程地址:https://developer.aliyun.com/trainingcamp/5fe77ddd74f743ebad9dbc8c5f47be9a?spm=a2c6h.26142516.J_2566289780.2.37c67cbd7bCsFs


课时2:IoT物模型接入价值与实践(二)


image.png

也支持批量创建的能力,我们会提供的一个模板,大家按模板填入这几项信息,按模板的定义把这个设备批样的创建出来。这个模板当前最大支持1万台设备的并发创建,应该是基本满足现在所有客户的一个需求。

第二阶段就是设备开发调试的功能。设备开发调试也是基于标准的数据格式,包括协议。封装了不同语言的SDK 降低并且提供了一些通用的方法。比如设备的注册,设备的初始化、属性上报,事件的上报都有通用的方法来支持。所以并不需要感知数据上面的一些格式。,它全是按标准a  link 协议的格式进行上报的。这里写了一个简单的例子,用起来也相对于比较简单。

private void reportpropertyData(){
Map<String,ValueWrapper>properties=newHashMape<String,ValueWrapper>();
properties.put("BatteryLeve",new ValueWrapper,IntValueWrapper(valueParam: 22));
properties.put("C02Value",new ValueWrapper.IntValueWrapper( valueParam: 33));
properties.put("SmokeState",new ValueWrapper.IntValuewrapper( valueParam: 2));
LinkKit,getInstance().getDeviceThing().thingPropertyPost(properties, new IPublishResourceListener(){
@Override
public void onSuccess(String s, 0bject o) {
System,out.println("=amsmSmokeAlarm, thingPropertyPost succesSamamaa=");
@Override
public void onError(String s,AError aError) {
System.out.println("mmmsmSmokeAlarm,thingPropertyPost errormmmmmmm");
}
});
LinkKit.getInstance().registerOnNotifyListener(new IConnectNotifyListener(){
@Override
Public void onNotify(Strings,String s1,AMessage aMessage) {
System.out.println("==mSmokeAlarm PROPERTY REPLYm==");
System.out.println("TOPIC:" + s1);
}
@Override
public boolean shouldHandle(String s, String s1) {
return false:
}
@Override
public void onConnectStateChange(String s, ConnectState connectState) {
}
}):
}

刚刚拷贝的那个产品里边有三个物模型属性的定义。,这个是把三个物模型的属性定identifier 标识符写在这里,同时给它进行赋值。只要调用这个property  post 的方法,就会把这三个属性全部上报进来。首先上报上来的基础就是后边也会提供GDKdemo 的一个文件。这个文件里边还是前置需要你完成一些配置,这个配置的信息主要是包括设备的三元组的信息。你只要配置正确之后,就可以把这个设备按这种属性进行上报。所以这个地方有一个特别需要注意的点,就是上报的属性的功能定义必须是物模型已经提前定义好的,必须跟物模型定义里边保持一致。因为这里是封装了一个属于上报的服务,如果你需要自己去开发对应上报的能力的话,定义的topic 必须跟物模型的topic 也保持一致。这个代码运行之后,会看到在物联网控制台里边,在设备下面可以看到有物模型数据的模块,这个运行状态下就可以查询的到刚刚上报的数据。像电池的电量,就是刚刚的上报的第一个属性,同时还有二氧化碳的浓度,这个地方也是可以在控制台上进行查询的。同时在控制台上提供了设备在线调试的能力。在线调试是想以这种设备服务调用的方式来介绍这个在线调试的一个功能,并且根据日志服务来定位当前的一些错误。这个地方如果用标准的SDK 的话,这个SDK java 版本的。所以这个地方SDK 实现监听服务的处理器也非常简单。

private void registerserviceHandler(]{
ListeService> srviceList = LinkKit.getInstance[).getDeviceThing().getServices();
far lint 1 = 0: srwicelist != null M 1 < srvicelist.sizel]: i++) {
Service service = srvicelist.get(i);
LinkKit,getInstance().getDeviceThingl),set5ervicefandler(service.getIdentifier[], new ITResRequestHandterl)[]{
@override
public woid onProcess[5tring identify, 0bject result, ITResResponseCallback itResResponseCallback){
System.out.println("receive service invoke,identify-" + identify);
if ("VersionUp".equals(identify)) {
ImgutParans nputs = (InputParars]resutt;
Map<String,ValueWrapper>inputParas=[MapeString,Valuerapper>)inputs.getData();
Syster,out.printIn("Versionup,inputparans=" + JSON,toJSOWString(inputParams}};
//设备服务调用处理逻辅
OutputParams outputparats = mew OutputParars();
outputParams.put("success",new Valuerapper.StringValuelrapper(walue?ar: "true"));
itResRespomseCallback,anCompletelidentify, errorlefo null,autputparams);
return;
}
}
@override
public woid on5uccess[Object o,OutputParams cutputParams) {
ALog.d(TAG, mig: "onSuccess[]called with: 0 = ["+ o + "], outputparams = [" + outputparars + "]");
}
@override
public vold onFail(Cbject o, ErrorInfe errorInfol ){
ALog.d(TAG, msg: "onFail() called with: o =["+o+ "], errorInfo = [" + errorInfo + "]");
}
}};
}

image.png

这个地方首先是把所有的服务先查询出来,查询到了之后,来轮询的注册服务监听器,这里是注册了一个watch  up 的服务监听器。首先是这里会收到一个服务调用的一输入的一参数。这个地方只是简单把它输入出来,如果在做设备开发的时候,这个中间的就是预留出来的一些需要实现的逻辑,这个地方简单的就写了一个回执。刚刚有一点就是在模型定义的时候,是没有把success 这个字段定义在物模型里面去的。

但是服务调用的时候,这个服务端这样实现代码的话,如果调用成功会返回一个success=true 的字段回来,这个设备端的编码完成了后,就可以建立本地启动注册设备,建立连接就可以来监听北向的服务调用的请求。在线调试就是提供设备调试的功能。这个地方就是描述北向模拟北向服务调用的一个能力,可以看一下提前定义的物模型。

这个模型wash up的服务里边,它定义的一个UR,之后没有success字段的,之后用设备瞄准器功能调取一个UR参数,下边有一个按钮发起服务调用。服务调用的时候会产生一个报错,描述reply的时候信息里边多了一个success 字段,这个success 字段因为方法定义的数据标识不存在,所以这个地方日志服务里面就报错,后边就把success字段添加完了之后可以看一下,它只是个字符串类型。然后把字标识符创建完了之后又重新发起在线调试的能力,这个日志调试完了之后就代表物模型服务调用的服务已经处理成功,数据已经写入到平台里边。同样如果服务写入以后,在进行数据和服务调用可以进行查看。可以看到这个地方它的输入参数是什么,这个地方都会展示给预估用户。

 

四、设备运行和数据应用

下一阶段讲一下设备运行平台的处理的一个流程,物模型平台做了模型数据沉淀,平台了之后开发了相对应的一些衔接产品。只要使用物模型进行开发,使用标准的物模型数据上云数据都可以跟相关的一些物联网产品进行无缝的对接,就可以集成进来。

image.png

首先看属性事件服务上报的数据。主要是经历了数据处理的一个流程,主要包括数据加工,数据加工里边刚刚讲到了有一些增值的服务,还有脚本数据转换的服务。如果是自定义的协议的话,会转换成这种a  link 协议,同时数字孪生里面还增加了数据映射的功能。就是采集设备跟实际云上建模的设备可以不是相同的一个设备。通过这种建模,通过这种数据映射,可以把采集的数据映射到实际的任意的物模型节点上去,同时还提供了增值的服务。

增值的服务就包括物模型级别的一个校验,数字孪生里边也提供了规则的运算跟时序数据的分析。数据存储这一块会把用户上报的全量数据,还有复合物模型规范的数据,时序的数据都会存储下来,以备各方面的需要都可以,并且下边是提供了一些相应的接口,这个接口列表会比这个更加详细,后边我会有一个附录来来链接到北向的API,可以针对自己的一些业务场景,任君自取了。还有一些使用方式还支持这种异步消息的流转,只要按规范实现订阅了之后,文物模型的数据都会流转到服务端,进行后续的数据处理。刚刚讲的比较多的就是设备上下行的一些topic,像属性事件上报的一些topic,事件的topic 一会讲,属性上报的一些topic大家已经看到了,同时还提供了无模型TSR的描述模板的查询能力。然后存出来的数据之后,我们会跟相关的一些产品进行分子对接。比方studio 来进行北向的手机APP 应用开发,可以直接把数据进行查询到在它的设备管理应用里面进行展示。同时还提供数据分析的能力,数据分析的能力后边也是在本次训练营里边有课程的安排,大家后边可以注意听一下。

 

五、接入实践

第三部分是讲一下复杂设备的接入的物模型的使用流程。复杂设备主要是介绍模块的能力。

image.png

因为是一个复杂的设备,复杂的设主要的特点就是它的功能定义特别多。在使用场景里面,比方工业场景尤为明显,比如车床或者是大型的纺纱机这种设备,它的是属性点位数或者是功能定义有超过一千多。所以就提供了一个模块的功能,模块功能这里以一个简单的例子来简单说明一下实际使用步骤,所以物模型相对比较简单,有什么问题的话可以针对性的问一下,我们来讨论一下。这里是以这种灯暖型浴霸作为一个例子,为每个取暖灯都新增一个功能模块,描述一个浴霸的时候,我认为它主要是有一个中央控制的模块,还有四个取暖灯都是不同的模块。通过中央控制的模块,实现对每个取暖灯进行不同的数据上报,或者是设备的控制。所以就每个取暖灯都定一个单独的模块。这里会定义一个温度过温度过高的告警事件定义在这里。这里主要是来讲一下事件的使用方式,还有事件在使用过程中怎么跟SDK进行集成,定义之后,属性上报协议跟刚刚讲到的事件上报属性上报的实现方式有点类似。

public void thingEventPost() (
MqttPublishRequest request = new MgttPublishRequest();
String eventIdentifier ="heatingLamp_1:highTempWarning";
request,topic="/sys/"+productKey+"/"+deviceName+"/thing/event/"+eventIdentifier+"/post";
request.replyTopic = request,topic + "_reply";
request.isRPC = true;
request.qos = 0;
request.payload0bj="(\"d\":202108091200001,"params\":(\"temperature\":99.82))";
LinkKit.getInstance().publish(request new IConnectSendListener() {
@override
public void onResponse(ARequest aRequest,AResponse aResponse) {
ALog.d(TAG, msg:"onResponse:" + (aResponse == null ? "m :aResponse.data));
}
@0verride
public void onFailure(ARequest aRequest,AError aError){
ALog.d(TAG,msg:"onFailure:" + (aError == null ? ‘’’’ : (arror.getCode() + aError.getMsg())));
}
});
}


相关文章
|
1月前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
61 4
|
4月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。 原创文字,IoTDB 社区可进行使用与传播 一、什么是IoTDB 我
188 9
Apache IoTDB进行IoT相关开发实践
|
5月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
IoTDB是专为物联网(IoT)设计的开源时间序列数据库,提供数据收集、存储、管理和分析。它支持高效的数据写入、查询,适用于处理大规模物联网数据,包括流数据、时间序列等。IoTDB采用轻量级架构,可与Hadoop和Spark集成,支持多种存储策略,确保数据安全和高可用性。此外,它还具有InfluxDB协议适配器,允许无缝迁移和兼容InfluxDB的API和查询语法,简化物联网项目的数据管理。随着物联网设备数量的快速增长,选择适合的数据库如IoTDB对于数据管理和分析至关重要。
256 12
|
5月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
The article introduces IoTDB, an open-source time-series database designed for efficient management of IoT-generated data. It addresses challenges like real-time integration of massive datasets and security. IoTDB supports high-performance storage,
150 0
Apache IoTDB进行IoT相关开发实践
|
5月前
|
分布式计算 NoSQL 物联网
麻省理工IOT教授撰写的1058页Python程序设计人工智能实践手册!
Python是世界上最流行的语言之一,也是编程语言中使用人数增长最快的一种。 开发者经常会很快地发现自己喜欢Python。他们会欣赏Python的表达力、可读性、简洁性和交互性,也会喜欢开源软件开发环境,这个开源环境正在为广泛的应用领域提供快速增长的可重用软件基础。 几十年来,一些趋势已经强有力地显现出来。计算机硬件已经迅速变得更快、更便宜、更小;互联网带宽已经迅速变得越来越大,同时也越来越便宜;优质的计算机软件已经变得越来越丰富,并且通过“开源”方式免费或几乎免费;很快,“物联网”将连接数以百亿计的各种可想象的设备。这将导致以快速增长的速度和数量生成大量数据。 在今天的计算技术中,最新的创新
|
5月前
|
分布式计算 NoSQL 物联网
麻省理工IOT教授撰写的1058页Python程序设计人工智能实践手册!
Python是世界上最流行的语言之一,也是编程语言中使用人数增长最快的一种。 开发者经常会很快地发现自己喜欢Python。他们会欣赏Python的表达力、可读性、简洁性和交互性,也会喜欢开源软件开发环境,这个开源环境正在为广泛的应用领域提供快速增长的可重用软件基础。
|
6月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
IoTDB是面向物联网的时序数据库,专注于时间序列数据管理,提供高效的数据处理、集成Hadoop和Spark生态、支持多目录存储策略。它还具有InfluxDB协议适配器,允许无缝迁移原本使用InfluxDB的业务。文章讨论了IoTDB的体系结构,包括数据文件、系统文件和预写日志文件的存储策略,并介绍了如何配置数据存储目录。此外,还提及了InfluxDB版本和查询语法的支持情况。IoTDB在物联网数据管理和分析中扮演关键角色,尤其适合处理大规模实时数据。
110 5
|
22天前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
30 1
|
1月前
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
48 3
|
1月前
|
安全 物联网 网络安全
智能设备的安全隐患:物联网(IoT)安全指南
智能设备的安全隐患:物联网(IoT)安全指南
87 12

热门文章

最新文章

下一篇
DataWorks