有一种糖叫语法糖【7】IOT实践之规则使万物有序

简介: 在上次介绍完阿里云物联网服务端关于分组api接口的相关操作和实践后,这回介绍一下阿里云物联网中另外一类比较重要的概念,它的名字就叫做规则。万物互联通常被认为是物联网的终极目标,但是从另外的角度来思考这个问题,当一张网连接上万物后,不应该只是物理上的连接,需要逻辑层面的分析处理和不断的数据流通,才会使

在上次介绍完阿里云物联网服务端关于分组api接口的相关操作和实践后,这回介绍一下阿里云物联网中另外一类比较重要的概念,它的名字就叫做规则。万物互联通常被认为是物联网的终极目标,但是从另外的角度来思考这个问题,当一张网连接上万物后,不应该只是物理上的连接,需要逻辑层面的分析处理和不断的数据流通,才会使得整个物联网更具有实际意义和生机勃勃。而网络中的数据如何流动,怎样流动,遵循什么样的逻辑,则可以由物联网的提供者或者组建者来根据要服务的客户的具体需求,来专门定制和提供。而这个过程,就可以理解为制定实现规则的过程。从这里,也就引出了规则的作用和重要性。
我们要学习或要了解一个新事物和新理论,通常用理论联系实际的方式,可以达到更好的效果,和前几篇介绍的文章一样,本次用来实验和验证的软件链接如下:
http://xysuger.xunyun17.xyz/v0.0.7.rar
读者如果感兴趣的话,可以自行下载运行验证;

接下来,就结合实际操作,逐一介绍和规则相关的这些接口:
阿里云物联网服务端关于规则,这个功能提供的api接口大体上分为两类,一个是用户层面的规则,比如规则的名称啊,规则的类型啊,或是规则的一些筛选操作啊,这类接口我们可以简称规则接口;而另外一类接口则是阿里云内部相关的转发接口,不如收到一个设备的讯息是转发给另外一个设备呢,还是传到消息队列里继续处理呢,还是放到数据表格里进行分析呢,这类接口也有个名字,阿里云物联网定义为规则动作接口。两类接口合为一体,总的统称为规则引擎接口;先来介绍规则相关的操作,首先要做的当然是创建一个规则,每条规则都是和产品设备相关联的,所以创建规则时,需要提供所要关联的产品关键字和设备名称为参数,这个操作有4各参数,另外两个是规则自身相关的名称和类型,其中名称还好理解,类型是指要接受topic的类型,取值范围有三种:0,1,2;0为系统topic,1为自定义topic,2为设备状态topic;这里以设备状态消息的topic为例,创建一条名称为MyRule的规则,产品设备信息还使用之前的例子里的值;那么具体创建命令如下:
XYsayFrO.IoT.Srv.CreateRule.MyRule.2.a141rgUXgFl.lamp3_dev1.
如果运行后,返回结果和下面类似,success后面的值为true,那么表示创建成功,

同时还会返回这条规则的id号,这个id号很重要,后面的其他相关操作都需要它作为参数,所以需要记下来;
在创建好规则后,我们可以通过ListRule命令来查询已经创建的规则;
XYsayFrO.IoT.Srv.ListRule.
这个命令使用比较方便,因为它不要参数;运行以后如下图所示,会列出我们创建的所有规则;

这里仔细观察可以看到,我的账号下一共有3条规则,其中最近一条,使我们刚才创建的叫做MyRule的规则,创建时间,产品关键字都清晰可见,而状态显示stop,表示这条规则的当前状态是停止的;
当然,除了使用上面ListRule命令,还可以使用GetRule命令,来得到一条指定了规则id号的相关信息,这在创建了大量规则后,查找其中某一条规则的情况下,尤其有用,这里我们用GetRule命令,来得到我们最开始创建的规则:
XYsayFrO.IoT.Srv.GetRule.347577.
结果如下:

可以看到,相比ListRule返回3条规则信息,GetRule只返回了我们要查询的这条规则的信息;信息的具体内容和ListRule的返回基本一致;
前面有提到除了规则,还有一类操作是规则动作相关的,这里我们可以在创建规则的基础上,来创建一条规则动作,规则动作的命令为CreateRuleAction,而通常需要3个参数,一个是规则的id号,第二个为规则动作类型,一共有六个选项,分别为DATAHUB,ONS,MNS,FC,OTS和REPUBLISH,这里 DATAHUB指流式数据操作,ONS为消息分发,MNS为消息传输,FC是函数计算,OTS为表格存储,REPUBLISH为topic转发;
这里以最方便容易操作的REPUBLISH为例子,创建一个规则动作,将我们设备名称为lamp3_dev1的设备,收到的消息转发到lamp3_dev的get上的topic。详细命令格式定义如下:
XYsayFrO.IoT.Srv.CreateRuleAction.347577.REPUBLISH.{"topic":"/a141rgUXgFl/lamp3_dev/get","topicType":1}.
这里再说解释一下转发配置里的topictype类型的含义,0表示数据下行到系统topic,1表示数据转给用户自定义的topic。因为我们这里是把一个设备的消息转给另外一个设备,所以这里用的topictype为1;

运行后如上图所示,如果正确无误,会在success后面返回true,然后后面会返回消息动作的actionid号码;
和查询规则列表的功能类似,这里也提供了查询规则动作列表的命令,命令名为ListRuleActions,因为这条命令是查询某条规则下面的规则动作列表,所以这条命令需要把规则号作为参数传入,这里作为示例把之前创建的规则号传入就好了,最后得到的详细格式如下;
XYsayFrO.IoT.Srv.ListRuleActions.347577.

从上面的运行截图,可以看出,返回的信息里证实,这条规则目前只包含一条规则动作,类型是republish,具体配置和我们创建的一样,是转发到另外一个设备的get接口;
介绍完规则动作,我们在返回规则的操作继续介绍,规则创建后,可以使用UpdateRule来更新规则,提到规则更新,需要先对数据流转介绍一下,通常在创建好产品设备时,一些设备本身的特有属性也会被创建,例如设备的温度,湿度和压力等。在设备上报状态数据时,会把这些特有属性的数据也会被上报到上面提到的datahub,ons,mns或republish,这个过程通常被称作数据流转,而实际往往不需要同时所有特有属性的数据作流转,所以就在流转前用sql语句过滤一下。
所以"通过SQL对Topic中的数据进行处理",也被明确定义在阿里云物联网的数据流转限制文档中;说完数据流转,再返回来看我们创建的规则,默认是select *这个sql语句,所以没有用到相关的sql参数,这句sql的意思,就是把所有设备的数据上报。我们可以通过UpdateRule命令来修改我们sql语句,来达到筛选上报数据的目的,例如设备的温度,湿度和压力的关键字名称分别为a,b,c,那么如果我们只需要设备上报这三种数据,则是用下面的命令格式:
XYsayFrO.IoT.Srv.UpdateRule.347577.a,b,c.
成功运行后,如下图所示,会在success后面返回true:

之前介绍的操作,创建的规则一直是处于停止状态的,我们这里使用StartRule命令,来开启这条规则,这个命令后面需要一个参数,来表示要启动的规则号。这里我们用开启我们文章最开始创建规则为例子,同时我们运行GetRule来查询命令的状态,最后详细命令格式如下:
XYsayFrO.IoT.Srv.StartRule.347577.
XYsayFrO.IoT.Srv.GetRule.347577.

从结果的截图中,可以看到,我们创建的规则已经成功启动了;
规则可以启动,就应该也可以停止,接下来,就用StopRule来停止规则的运行,并进行查询确认:
XYsayFrO.IoT.Srv.StopRule.347577.
XYsayFrO.IoT.Srv.GetRule.347577.

通过返回结果,可以确认规则已经被成功的停止执行了;
最后,如果创建好的规则长期不用,或者出现异常原因,需要废除,可以使用DeleteRule命令来删除规则,i然后我们调用ListRule 来做确认,具体两条命令格式如下:
XYsayFrO.IoT.Srv.DeleteRule.347577.
XYsayFrO.IoT.Srv.ListRule.
得到结果如下图,可以看到,本次创建的规则已经被删除,目前账号和以前一样,只有两条规则了;

阿里云物联网云端规则引擎的相关介绍,到此结束,谢谢收看;

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
19天前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
22 4
|
3月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。 原创文字,IoTDB 社区可进行使用与传播 一、什么是IoTDB 我
176 9
Apache IoTDB进行IoT相关开发实践
|
4月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
IoTDB是专为物联网(IoT)设计的开源时间序列数据库,提供数据收集、存储、管理和分析。它支持高效的数据写入、查询,适用于处理大规模物联网数据,包括流数据、时间序列等。IoTDB采用轻量级架构,可与Hadoop和Spark集成,支持多种存储策略,确保数据安全和高可用性。此外,它还具有InfluxDB协议适配器,允许无缝迁移和兼容InfluxDB的API和查询语法,简化物联网项目的数据管理。随着物联网设备数量的快速增长,选择适合的数据库如IoTDB对于数据管理和分析至关重要。
248 12
|
4月前
|
存储 分布式计算 物联网
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,
142 0
Apache IoTDB进行IoT相关开发实践
|
4月前
|
分布式计算 NoSQL 物联网
麻省理工IOT教授撰写的1058页Python程序设计人工智能实践手册!
Python是世界上最流行的语言之一,也是编程语言中使用人数增长最快的一种。 开发者经常会很快地发现自己喜欢Python。他们会欣赏Python的表达力、可读性、简洁性和交互性,也会喜欢开源软件开发环境,这个开源环境正在为广泛的应用领域提供快速增长的可重用软件基础。 几十年来,一些趋势已经强有力地显现出来。计算机硬件已经迅速变得更快、更便宜、更小;互联网带宽已经迅速变得越来越大,同时也越来越便宜;优质的计算机软件已经变得越来越丰富,并且通过“开源”方式免费或几乎免费;很快,“物联网”将连接数以百亿计的各种可想象的设备。这将导致以快速增长的速度和数量生成大量数据。 在今天的计算技术中,最新的创新
|
4月前
|
分布式计算 NoSQL 物联网
麻省理工IOT教授撰写的1058页Python程序设计人工智能实践手册!
Python是世界上最流行的语言之一,也是编程语言中使用人数增长最快的一种。 开发者经常会很快地发现自己喜欢Python。他们会欣赏Python的表达力、可读性、简洁性和交互性,也会喜欢开源软件开发环境,这个开源环境正在为广泛的应用领域提供快速增长的可重用软件基础。
|
5月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
IoTDB是面向物联网的时序数据库,专注于时间序列数据管理,提供高效的数据处理、集成Hadoop和Spark生态、支持多目录存储策略。它还具有InfluxDB协议适配器,允许无缝迁移原本使用InfluxDB的业务。文章讨论了IoTDB的体系结构,包括数据文件、系统文件和预写日志文件的存储策略,并介绍了如何配置数据存储目录。此外,还提及了InfluxDB版本和查询语法的支持情况。IoTDB在物联网数据管理和分析中扮演关键角色,尤其适合处理大规模实时数据。
101 5
|
5月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
物联网技术带来数据库管理挑战,特别是实时数据整合与安全性。IoTDB是一个专为时间序列数据设计的数据库,提供数据收集、存储和分析服务,适用于海量物联网数据。其架构包括数据文件、系统文件和预写日志文件的管理,并支持多目录存储策略。此外,IoTDB还开发了InfluxDB协议适配器,使得用户能无缝迁移原有InfluxDB业务。此适配器基于IoTDB的Java服务接口,转换InfluxDB的元数据格式,实现与IoTDB的数据交互。目前,适配器支持InfluxDB 1.x版本及部分查询语法。
191 5
|
监控 物联网 Java
|
物联网 API 开发工具