开发者社区> 阿里云MVP> 正文

【阿里云十年,因为有我而不同】有一种糖叫语法糖【5】IOT三连之设备之扩展操作

简介: 随着上次介绍完设备的基本操作,相信大家对设备的这些基础层面结构操作,都已经理解和掌握。这次我们在尝试对设备做一些基本操作之外的接口操作,目前姑且称之为设备的扩展操作的。这些接口的操作,对于一个设备接入到阿里云IOT上,并不一定是必需的,但是却可以使我们可以更加灵活和便捷的对设备进行多层面的配置和更

随着上次介绍完设备的基本操作,相信大家对设备的这些基础层面结构操作,都已经理解和掌握。这次我们在尝试对设备做一些基本操作之外的接口操作,目前姑且称之为设备的扩展操作的。这些接口的操作,对于一个设备接入到阿里云IOT上,并不一定是必需的,但是却可以使我们可以更加灵活和便捷的对设备进行多层面的配置和更改。本篇配套的实验软件链接如下:
http://xysuger.xunyun17.xyz/v0.0.5.rar
读者如果感兴趣的话,可以自行下载运行验证;
这次提供的10个扩展的接口操作名称如下,先睹为快:
BatchQueryDeviceDetail
GetDeviceStatus
BatchGetDeviceState
DisableThing
EnableThing
SaveDeviceProp
QueryDeviceProp
DeleteDeviceProp
QueryDeviceStatistics
BatchUpdateDeviceNickname
从名字就可以猜出个大概的意思,下面我们来逐一介绍它们的作用以及使用方法。
BatchQueryDeviceDetail这个批量查询设备信息的接口和我们上次提到的查询设备接口类似,都是查询设备信息的,只是这个接口前面多了一个批量表示我们一次可以指定多个设备名称,然后一次查询它们的信息:这个接口有三个参数,产品关键字,第一个设备的名称以及第二个设备的名称;所以这也表示目前暂时支持查询两个设备的详细信息,所以首先我们使用上次介绍的命令QueryDevice,来查询我们产品下的设备名称;
XYsayFrO.IoT.Srv.QueryDevice.a141rgUXgFl.

这里看到目前产品下面是有两个设备,然后运行批量查询命令,将这个设备的名称分别写在后面:
具体命令如下:
XYsayFrO.IoT.Srv.BatchQueryDeviceDetail.a141rgUXgFl.lamp3_dev1.lamp3_dev.

运行后,如上图所示,从返回的结果,可以看到每个设备很详细的信息,例如设备的状态,创建时间和密钥以及产品的关键字;这里我们需要把其中的物联网标识符,也就是IotId的值记录下来,后面的接口操作需要用到;
下一个接口名称获取设备状态GetDeviceStatus,这个操作相对来说比较简单,只是指定设备的IotId,然后就可以得到指定设备的状态。因为上一个批量查询的接口返回结果中,已经有这个信息。所以这个接口应该是为了用户只想单纯的检查一下设备的状态,而不需要其他很多详细的信息,从而提供的。我们先用我们上一个接口得到的IotId,来试着运行一下这个接口,看是否和批量查询设备信息的那个接口,返回的状态一致。运行命令如下:
XYsayFrO.IoT.Srv.GetDeviceStatus.2GhDWaWPUOc5W5Af5xuj000100.
得到结果如下:

可以看到,两个接口返回的状态都是unactive,所以和我们之前的预测是一致的。
第三个接口,批量获取设备状态BatchGetDeviceState,这个操作和第一个批量操作类似,不同的是,这里只返回要查询设备的状态信息,过滤掉其他暂时不需要使用的信息。这个接口也有三个参数,一个产品关键字,和两个要查询设备的名称。按照我们之前查询得到的信息,这个接口的具体操作格式如下:
XYsayFrO.IoT.Srv.BatchGetDeviceState.a141rgUXgFl.lamp3_dev1.lamp3_dev.
得到的结果:

这里可以看到我们的产品下的两个设备状态,其中一个处于未激活状态,而另外一个则处于下线状态。
第四个接口,设备禁用DisableThing,笔者的理解,应该是设备在维护,或出现某些异常和故障时,设备的拥有者,不希望连到服务端,也不希望和服务端有任何通信,所以在服务端设置为禁用的状态,这样服务端看到这个状态就知道,后续的所有和这个设备相关的操作,都过滤掉和不作处理。具体格式如下,需要有一个唯一的参数,就是要禁用设备的IotId。我们用下面的格式先禁用我们产品下的其中一个设备:
XYsayFrO.IoT.Srv.DisableThing.2GhDWaWPUOc5W5Af5xuj000100.
结果如下,表示禁用成功:

这时我们再用刚才介绍的查询命令,确认一下:
XYsayFrO.IoT.Srv.GetDeviceStatus.2GhDWaWPUOc5W5Af5xuj000100.
得到结果如下,证明确实设备被禁用了:

第五个接口是设备解禁EnableThing,笔者认为称作设备使能可能更好些,这个接口和上一个设备禁用是配合使用的,因为默认设备是使能的,所以如果使能状态下再运行这个接口,就没有太多意义,我们用刚才禁用的设备作为例子,这里再把它解禁,然后再用查询状态的接口,确认一下最新的状态,命令如下:
XYsayFrO.IoT.Srv.EnableThing.2GhDWaWPUOc5W5Af5xuj000100.
XYsayFrO.IoT.Srv.GetDeviceStatus.2GhDWaWPUOc5W5Af5xuj000100.
得到结果如下:

这里可以看到,最新的状态已经不是disable,而是恢复到了禁用前的active状态。表示我们解禁设备的操作是有效的;
第六个接口是设置设备标签,SaveDeviceProp,从英文字面意思上看,应该是配置设备属性,不过还是以阿里云官宣为主,这里还是按照设备标签来称呼,在介绍产品的时候,笔者记得我们曾经提到过标签的概念,这里的设备标签也和产品的标签类似,只不过,放在设备里做这个接口,就更倾向于设备层面的一些功能,特性,方法。。。,我们再回过头来说这个接口的具体参数,一共三个,一个是IotId,一个是标签类型,一个是标签值。我们这里假如要做一个会飞的设备,所以就给这个设备做一个func类型的标签,标签的值定义为fly.
XYsayFrO.IoT.Srv.SaveDeviceProp.2GhDWaWPUOc5W5Af5xuj000100.func.fly.
运行结果如下,表示我们已经成功完成了这个操作:

第七个接口是查询设备标签QueryDeviceProp,我们正好可以用这个接口来确认一下,我们的上一个操作是否成功。传入设备的IotId后,格式如下
XYsayFrO.IoT.Srv.QueryDeviceProp.2GhDWaWPUOc5W5Af5xuj000100.
运行后,得到如下信息:

可以看到,我们已经赋予了这个设备一个会飞的标签了;
第八个接口是删除设备标签DeleteDeviceProp,如果刚才的设备有了其他变化,不再使用这个标签,我们可以使用这个接口来删除它:
XYsayFrO.IoT.Srv.DeleteDeviceProp.2GhDWaWPUOc5W5Af5xuj000100.func.
删除后,我们同样也可以使用上一个查询操作,来确认我们删除的是否成功:

从返回的结果来看,标签信息是空的,表示删除操作时被服务端正确执行了;介绍到这里,我们可以看到,从第6个接口到第8个接口,分别是设备标签的添加,查询和删除.这也就完成关于设备标签的一个闭环操作,从安全和合理角度,这种设计还是比较不错的;
第九个接口,统计设备的数量,QueryDeviceStatistics,这个接口主要是查询指定产品下面的设备数量状态,这种数量主要包括三种信息,分别是设备的总数,上线的设备的数量,激活设备的数量.这里我们用这个接口查询一下我们目前产品的设备数量情况,配置好产品关键字信息的参数后,格式如下:
XYsayFrO.IoT.Srv.QueryDeviceStatistics.a141rgUXgFl.
运行后,得到如下信息:

这里可以看到我们的产品,一共有两个设备,没有设备上线,有一个设备激活.这个接口应该对设备和产品的维护人员,运维人员比较有用.方便定期统计设备的各种状态的数量情况,然后再有针对的调整,优化和维护;

最后一个接口,批量更新设备备注,BatchUpdateDeviceNickname,正如我们人类有外号,绰号什么的,设备也不例外,运维人员也可以个人喜好,对设备的理解和认识,然后来给设备起一些非官方正规的,诙谐幽默的小名.这里我们给目前产品下的俩个设备分别添加一个best1_lamp和best2_lamp的备注:这个接口有四个参数:分别是两个IotId和两个要更新的备注名称,具体格式如下:
XYsayFrO.IoT.Srv.BatchUpdateDeviceNickname.2GhDWaWPUOc5W5Af5xuj000100.best1_lamp.w5vbtLXAqO7sG4y8DXuJ000100.best2_lamp.
我们然后可以用下面查询设备详细信息的操作,来查询一下这两个设备,确认我们的备注修改成功:
XYsayFrO.IoT.Srv.QueryDeviceDetail.2GhDWaWPUOc5W5Af5xuj000100.
XYsayFrO.IoT.Srv.QueryDeviceDetail.w5vbtLXAqO7sG4y8DXuJ000100.
运行结果如下:

这个可以看到,设备的备注,已经分别被改为best1_lamp和best2_lamp了;
介绍到这里,设备的相关操作差不多介绍完了,因为设备的api接口一共有40多个,其中有一部分是和具体设备端联动配合的,另外一部分是相对逻辑比较复杂,笔者能力有限,也在不断的学习中..所以设备操作这块,就介绍到这里结束了.回到题目之所以叫IOT三连,是由于当时想法主要介绍产品,标签和设备相关的接口信息.同时也希望读者在这些介绍的文章中有所收获.

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

阿里云最有价值专家,是专注于帮助他人充分了解和使用阿里云技术的意见领袖。

官方博客
官网链接