服务开发+虚拟设备完成设备属性变更模拟

为了测试物联网平台数据分析的GIS组件,我们准备模拟一个设备随机在一定范围内(比如在(120±0.05,30±0.01)附近,避免一下子跑到非洲,一下子跑到南极)上报地理信息。由于物联网平台的虚拟设备推送只能定时推送+全取值范围随机数值,不能满足有一定数学表达式的推送策略。如果手上没有设备(尤其是正常设备无法通过热点WIFI接入测试环境),又想在云端持续的模拟设备行为,怎么办呢?通过服务开发+虚拟设备,可以在云端实现比较灵活的设备模拟行为,同时还能把这部分模拟数据传到RDS数据库。

服务开发+虚拟设备完成设备属性变更模拟
(有数学表达式就会报错)

场景:一个为老年痴呆症的病人准备的手环,可以每分钟上报一次心跳数据以及当前的地理位置。

第一步:创建产品

进入阿里云物联网平台,在产品页面新建一个产品,选择自定义品类即可,命名为“阿尔茨海默氏症老人监控手环”。
服务开发+虚拟设备完成设备属性变更模拟

第二步:定义功能

进入产品的功能定义页,定义两个自定义功能——地理位置和心跳。
服务开发+虚拟设备完成设备属性变更模拟

地理位置只需要在“添加功能”里用标准的功能即可,如图,其他全部配置项默认即可。
服务开发+虚拟设备完成设备属性变更模拟
心跳为一个整型数据,如图。
服务开发+虚拟设备完成设备属性变更模拟

第三步:创建设备实例

在设备面板点击“添加设备”,选择刚才创建的手环产品,然后输入随意的设备名称即可。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟

第四步:将设备导入IoT Studio项目中

IoT Studio为交付型业务做了项目维度的隔离,因此需要将用到的设备导入到对应的项目中。
首先打开物联网平台的“开发服务”选项进入IoT Studio。点击某个项目名称的“查看”进入项目详情页。然后点击右上角的“导入产品”。选择刚才的手环产品,然后导入,可以在设备管理页看到产品以及下属的设备已经导入项目里。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟

第五步:创建一个服务

由于我们是想模拟设备定时上报随机数的行为,因此需要创建一个定时服务。
首先进入服务开发工作台,新建一个“手环模拟”服务。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟

选择一个定时触发节点,配置为每分钟运行一次。
服务开发+虚拟设备完成设备属性变更模拟

接下来选择一个Node.js脚本节点,输入代码表达式,以及一定的数据格式整理,注意对地理信息的对象结构,属性的顺序不能错,否则待会会下发失败。
服务开发+虚拟设备完成设备属性变更模拟

module.exports = async function(payload, node, query, context) {
  var num = 40+20*Math.random();
  var long = 120+0.05*Math.random();
  var lati = 30+0.1*Math.random();
  var geo = {long,lati};
  bpm = parseInt(num);
  long = long.toFixed(5);//避免小数点太长
  long = Number(long);
  lati = lati.toFixed(5);//避免小数点太长
  lati = Number(lati);
  var Geo = {"CoordinateSystem":1,"Latitude":lati,"Longitude":long,"Altitude":0};//数据不用双引号,保持数值格式传给后续物的管理服务API
  payload = {bpm, Geo};
  console.log("payload: ", payload);
  return payload;
}

接下来选择手环的设备节点,选择要模拟的设备名“Wrist001”,然后地理位置选择来自节点“Node.js脚本”的,下方选取对象输入"Geo",心跳选择来自“上一节点(payload)”的“bpm”字段。如图。做完后记得cmd(ctrl)+ S保存一下。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
在服务开发中,数据是以payload的形式传递的,如在js脚本节点里,我们定义了payload为{bpm,Geo},实际运行时,payload的数据如下:

{
    "bpm":42,
  "Geo":
  {    
    "CoordinateSystem":1,
    "Latitude":120.00231,
    "Longitude":30.05273,
    "Altitude":0
  }
}

因此,在执行下一个节点“阿尔兹海默症监控手环”的产品控制功能,当我们在下发数据时(实际调用了物的管理服务中的setThingProperty的API),我们选择下发的地理位置数据来自于“上一个节点(payload)”或者“Node.js脚本”节点都是等价的。

第六步:部署调试

点击下方的部署按钮,然后成功后点击启动。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
是否我们真的要等待一分钟才能生效呢?不,我们可以点击调试,选择一个时间进行模拟,这样服务就会根据模拟时间是否满足触发条件而决定是否执行。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
发现虽然显示调试成功(服务被触发),但是日志里显示device not actived,这是怎么回事呢?原来物的管理服务需要设备处于在线状态才行,因此需要打开虚拟设备让其保持在线。如图,选择wrist001设备,点击启动虚拟设备即可。
服务开发+虚拟设备完成设备属性变更模拟,
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟

回到服务开发工作台继续点击调试,选择时间。可以看到调试成功了,我们看看日志属性是否成功下发。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
同时可以回去设备管理页面,查看wrist001的设备运行状态,看看是否成功获取数据。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
成功。

第七步:用途

后面可以加上RDS存储,进行心跳今日平均数计算等扩展服务。
服务开发+虚拟设备完成设备属性变更模拟
服务开发+虚拟设备完成设备属性变更模拟
模拟设备轨迹图的意义在于在硬件开发未ready的情况下调试应用开发,这样能加快开发进度。
服务开发+虚拟设备完成设备属性变更模拟

下一篇文章我们将教大家如何以IoT Studio为主,围绕物联网平台的各项能力完成一个软硬结合可交付的SaaS应用,敬请期待!

上一篇:Win7下安装Hadoop


下一篇:C# 数据操作系列 - 8. EF Core的增删改查