阿里云物联网Iot设备上下线状态数据流转的设置

这篇具有很好参考价值的文章主要介绍了阿里云物联网Iot设备上下线状态数据流转的设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要想通过物联网平台实现远程监控设备,那么就要建立监控端设备(比如手机)和被监控端设备的数据交互,在阿里云物联网平台完成这个交互功能的方法就是建立两个设备之间的数据流转,对于设备要流转的物模型数据,阿里云网站上已经有详细的示例介绍,但是对于设备上下线状态的数据流转,网站没有进行详细说明,本人经过摸索,整理成此文,予以记录。

目录

一、监控端设备与被监控端设备完成数据交互的过程

第一,在物联网平台创建虚拟设备

第二,将实际设备与虚拟设备连接

第三,设置数据流转

二、设备状态数据流转的设置

 第一步、创建数据源

第二步、创建数据目的 

第三步、创建解析器并关联启动

第四步,测试

 三、脚本程序的解释

第一步、脚本示例,详见脚本语法 (aliyun.com)

第二步、本例脚本

1、设备上下线状态Topic

2、设备上下线流转的数据格式

3、脚本代码


一、监控端设备与被监控端设备完成数据交互的过程

第一,在物联网平台创建虚拟设备

在物联网平台建立实际设备(监控设备和被监控设备)相对应的虚拟设备,获得ProductKey、DeviceName、DeviceSecret三要素。此步属于阿里云物联网平台基本操作,阿里云官方网站有详细说明,可以参考:

创建产品 (aliyun.com)

单个创建设备 (aliyun.com)

批量创建设备 (aliyun.com)

第二,将实际设备与虚拟设备连接

在实际设备接入程序内配置相应的虚拟设备三要素,完成实际设备与物联网平台的连接,注意:虚拟设备和实际设备只能一对一连接。阿里云已经有设备的接入程序例程,可以参考:

下载设备端SDK (aliyun.com)

第三,设置数据流转

建立物联网平台内虚拟设备的数据流转,完成被监控实际设备数据上传到Iot虚拟设备->被监控虚拟设备数据流转到监控虚拟设备->监控虚拟设备数据下发到监控实际设备,完成实际设备之间的数据交互。

此步基本操作可以参考:

设置数据流转解析器 (aliyun.com)

设置数据流转解析器又分为3步:配置数据源、配置数据目的、编写解析器脚本程序。这三步中编写脚本程序难度最大,最为关键。阿里云官网上脚本示例都是以物模型数据上报为例的,可以参考:

脚本语法 (aliyun.com)

二、设备状态数据流转的设置

本文以被监控设备状态流转到监控设备为例,被监控虚拟设备名称:LZM1001,监控虚拟设备名称:LZM1002,这两台设备已经在物联网平台创建,并且已经与实际设备进行了连接。另外注意,阿里云物联网平台数据流转有新版和旧版,本文以新版为例。

阿里云数据流转,阿里云,物联网,云计算,iot

数据流转设置的入口:物联网平台->规则引擎->云产品流转

阿里云数据流转,阿里云,物联网,云计算,iot

 第一步、创建数据源

阿里云数据流转,阿里云,物联网,云计算,iot

1、在云产品页面,点“数据源”标签

2、点“创建数据源”按钮,给新的数据流转创建一个新的数据源,本例也就是被监控设备与虚拟设备LZM1001相连接的上下线状态

阿里云数据流转,阿里云,物联网,云计算,iot

3、在数据源名称栏内取一个名字:本例取名为“设备LZM1001上下线状态” ,数据源描述可先不填。

4、点“确定”按钮,然后可以在数据源页面看到新创建的这条数据源。

阿里云数据流转,阿里云,物联网,云计算,iot

5、点数据源“设备LZM1001上下线状态” 后边操作的“查看”,进入数据源详情界面,此时界面内还没有数据源。

阿里云数据流转,阿里云,物联网,云计算,iot

6、在数据源详情界面,点“添加Topic”按钮,弹出“添加Topic”对话框。

7、第一个下拉列表框是Topic类型,选择“设备状态变化通知”。

8、第二个下拉列表框是产品名称,选择LZM1001所属的产品。

9、第三个是设备名称,选择“LZM1001”

10、然后点“确定”按钮。

阿里云数据流转,阿里云,物联网,云计算,iot

 此时可以看到数据源详情里已经有了一条数据源。

第二步、创建数据目的 

 阿里云数据流转,阿里云,物联网,云计算,iot

 1、点“数据目的”按钮。

2、点“创建数据目的”按钮,弹出“创建数据目的”对话框。

阿里云数据流转,阿里云,物联网,云计算,iot

3、数据目的名称栏内:本例取名“设备LZM1002接收上线线状态”。

4、选择操作下拉列表框选“发布到另一个Topic”。

5、产品下拉列表框选择LZM1002所属的产品。

6、点“确定”按钮,完成创建。

阿里云数据流转,阿里云,物联网,云计算,iot

此时可以看到数据目的页面内,已经有了这条新建的数据目的,注意:要记住这条数据目的ID为1017,一会编写解析器脚本会用到。

第三步、创建解析器并关联启动

阿里云数据流转,阿里云,物联网,云计算,iot1、点“解析器”标签,进入创建解析器页面。

2、点“创建解析器”按钮,弹出“创建解析器”对话框。

阿里云数据流转,阿里云,物联网,云计算,iot

3、解析器名称栏,本例取名为“设备LZM1001状态发送到LZM1002”。

4、点“确定”按钮,完成创建。

阿里云数据流转,阿里云,物联网,云计算,iot

 5、在创建解析器页面可以看到这条新建的解析器,点操作栏“查看”,进入解析器详情页面,对解析器进行下一步操作。

阿里云数据流转,阿里云,物联网,云计算,iot

6、在解析器详情页面点“数据源”标签,进入“关联数据源”页面。

7、点“关联数据源”按钮。

阿里云数据流转,阿里云,物联网,云计算,iot

8、在“关联数据源”对话框,数据源下拉列表框内选择刚刚创建的数据源“设备LZM1001上下线状态”。

9、然后点“确定”按钮。

阿里云数据流转,阿里云,物联网,云计算,iot

此时可以看到关联数据源页面内,已经有了一条数据源。

阿里云数据流转,阿里云,物联网,云计算,iot

10、点“数据目的”标签。

11、在“数据目的”页面内,点“关联数据目的”按钮。

阿里云数据流转,阿里云,物联网,云计算,iot

12、 在“关联数据目的”对话框内,在数据目的选择下拉列表框选择刚刚创建的数据目的“设备LZM1002接收上线线状态”。

13、点“确定”按钮,完成关联。

阿里云数据流转,阿里云,物联网,云计算,iot

 此时,在数据目的页面,可以看到有了这条数据目的,数据目的ID为1017。

阿里云数据流转,阿里云,物联网,云计算,iot

 14、点“解析器脚本”标签,进入“编辑脚本”界面。

15、在编辑框内,输入如下代码:

var data = payload("json");

var select = {};
select.put("deviceName", deviceName());
select.put("timestamp", timestamp());
select.put("status", data.status);

writeIotTopic(1017, "/sys/gbsp*******/LZM1002/thing/service/property/set", select);

16、点“保存”按钮。

17、点“发布”按钮。

18、点解析器“设备LZM1001状态发送到LZM1002”前的后退箭头,返回到“云产品流转”页面。

阿里云数据流转,阿里云,物联网,云计算,iot

19、点击“设备LZM1001状态发送到LZM1002” 这条解析器后边的“启动”按钮,启动云产品流转解析器。

第四步,测试

测试设备:LZM1001为一台真实设备,LZM1002用Android studio AVD代替。进行测试的结果如下:

阿里云数据流转,阿里云,物联网,云计算,iot

当设备LZM上线时,LZM1002收到的消息中的msg即为数据流转的内容

devicename:LZM1001

timestamp:1661580931561

status:online

阿里云数据流转,阿里云,物联网,云计算,iot

 当设备LZM下线时,LZM1002收到的消息中的msg即为数据流转的内容

devicename:LZM1001

timestamp:1661590108538

status:offline

 测试结果正确,配置成功!

 三、脚本程序的解释

 下边对脚本的代码进行一下解释:

第一步、脚本示例,详见脚本语法 (aliyun.com)

以下为阿里云上给出的脚本示例:

示例数据为上报的属性数据,输入数据如下:

{
    "deviceType": "CustomCategory",
    "iotId": "JCp9***",
    "requestId": "1626948228247",
    "checkFailedData": {

    },
    "productKey": "a1o***",
    "gmtCreate": 1626948134445,
    "deviceName": "Device1",
    "items": {
        "Temperature": {
            "value": 38,
            "time": 1626948134319
        },
        "Humidity": {
            "value": 25,
            "time": 1626948134319
        }
    }
}

解析和处理数据的示例如下:

//通过payload函数,获取设备上报的消息内容,并按照JSON格式转换。
var data = payload("json"); 
//筛选出上报的温湿度值。
var h = getOrNull(data, "items", "Humidity", "value");
var t = data.items.Temperature.value;
// 设置温度值大于38时触发规则,转发数据到云数据库RDS。
// RDS表结构为id[自增主键]、deviceName、temperature、humidity、time,在writeRds方法中,可以按column:value的形式,将值写入对应的列。
if (t > 38) { 
    writeRds(1000, {"deviceName":deviceName(), "temperature":t, "time":timestamp(), "humidity":h});  
}

解析处理的数据源必须转换为JSON格式数据,即数组或者嵌套的JSON数据。

第二步、本例脚本

首先看一下设备状态变化的Topic和数据格式,此部分内容可以参考数据格式 (aliyun.com)

1、设备上下线状态Topic

Topic:/as/mqtt/status/${productKey}/${deviceName}

通过该Topic获取设备的上下线状态。

此句用在数据源关联。

2、设备上下线流转的数据格式

设备上线的数据格式:

{
    "status":"online",
    "iotId":"4z819VQHk6VSLmmBJfrf00107e****",
    "productKey":"al12345****",
    "deviceName":"deviceName1234",
    "time":"2018-08-31 15:32:28.205",
    "utcTime":"2018-08-31T07:32:28.205Z",
    "lastTime":"2018-08-31 15:32:28.195",
    "utcLastTime":"2018-08-31T07:32:28.195Z",
    "clientIp":"192.0.2.1"
}

设备下线的数据格式:

{
    "status":"offline",
    "iotId":"4z819VQHk6VSLmmBJfrf00107e****",
    "offlineReasonCode":427,
    "productKey":"al12345****",
    "deviceName":"deviceName1234",
    "time":"2018-08-31 15:32:28.205",
    "utcTime":"2018-08-31T07:32:28.205Z",
    "lastTime":"2018-08-31 15:32:28.195",
    "utcLastTime":"2018-08-31T07:32:28.195Z",
    "clientIp":"192.0.2.1"
}

上下线的数据格式中,第1条即为上下线的status的键值对。

3、脚本代码

var data = payload("json");

var select = {};
select.put("deviceName", deviceName());
select.put("timestamp", timestamp());
select.put("status", data.status);

writeIotTopic(1017, "/sys/gbsp*******/LZM1002/thing/service/property/set", select);

(1)第1行代码:

var data = payload("json");

本例脚本代码第一行与脚本示例第一句一致,将设备状态变化通知上报的数据用payload函数,转成json格式,并将此json格式数据赋值给变量data。payload函数详细解释如下表:

payload(textEncoding)

返回设备发布消息payload的转义数据。textEncoding表示payload的转义字符编码,取值如下:

  • 不传入参数:默认按照UTF-8编码转换为字符串,即payload()等价于payload('utf-8')
  • 'json':将payload数据转换成Map格式变量。如果payload不是JSON格式,则返回异常。
  • 'binary':将payload数据转换成二进制变量进行透传。

(2)第2行代码:

 var select = {};

构建一个名为select的map类型数据,map内存储的对象为键值对,第一列为键名,第二列为键值,select初始化为空。

(3)第3-6行代码:
 

select.put("deviceName", deviceName());

select.put("timestamp", timestamp());

select.put("status", data.status);

向select内填加三个键值对,分别为设备名deviceName、时间戳timestamp和状态status。

注意键值名为一个标志字段,带双引号,其后的键值是从设备状态变化时上传的消息数据中取出的,所以为一个变量。

devieName和timestamp为设备上下线数据具体内容json之外的部分,所以变量格式为函数形式: deviceName()和timestamp()。

而status是json数据的具体内容,所以格式为data.status,此处是关键!

  • Map类型基本数据类型支持的函数。
    表达式 说明
    [Object] 获取指定键(Key)对应的Value
    size() 获取Map数据中键值对数量。
    containKey(String) 判断Map数据中是否包含指定的键。
    keySet() 获取Map数据中键的集合,返回类型为Array。
    remove(Object) 移除Map数据中指定键对应的键值对。
    put(Object, Object) 在Map数据中添加键值对。
    putAll(map) 在Map数据中批量添加一组Map数据。

 (4)第6行:

writeIotTopic(1017, "/sys/gbsp*******/LZM1002/thing/service/property/set", select);

 数据转发到另外一个Topic,所用的函数为writeIotTopic,此第一个变量为数据目的ID(此ID一般为某个产品,而不是具体的设备),第二个变量为转发目的的Topic(此变量确定为某个设备),第三个为转发的map格式的数据。

本例中:数据目的ID为1017,就是上文创建的数据目的编号。

Topic包含了产品名称:gbsp*******,设备名称:LZM1002,以及下发格式:set

要发送的数据就是2-5行代码创建的select。

writeIotTopic函数的具体说明如下:

writeIotTopic(destinationId, topic, payload, deviceName) 流转数据到另一个Topic。
  • Topic:数据转发目的地Topic,支持以下Topic。
    • 自定义Topic:该自定义Topic的设备操作权限需为订阅,即所属设备可订阅这个Topic,获取转发的消息。
    • 物模型数据下发Topic:/sys/${productKey}/${deviceName}/thing/service/property/set。该Topic为设备接收设置属性值指令的Topic,设备从该Topic接收转发数据,并根据数据内容,设置属性值。用于目的地Topic所属设备根据转发的数据更改属性值的场景。

    Topic中${productKey}必须与destinationId对应数据目的中设置的产品相同。函数中Topic必须指定具体Topic,不支持使用通配符。

    更多信息,请参见创建数据目的。

    注意 目的地Topic所属设备若未订阅该Topic,则收不到转发的消息。

    例如使用MQTT.fx工具接入物联网平台的设备A,不会自动订阅设备Topic,若设备B向设备A的Topic:thing/service/property/set转发数据,而设备A未手动订阅该Topic,则设备A收不到设备B转发的消息。

    设备Topic自动订阅的详细说明,请参见自动订阅Topic说明。

  • deviceName:对于开源MQTT托管形态下产品和设备,及MQTT云网关产品和设备,流转数据到另一个Topic时,需传入该参数。其他业务场景无需传入该参数。

    数据格式为Map类型,Key为"deviceName",Value为deviceName(),表示发送该Topic消息的设备名称。

    更多说明,请参见消息通信说明。

注意 MQTT云网关产品和设备下,流转的数据目的Topic仅支持自定义Topic,且不支持跨产品流转,即仅支持流转到当前产品下的自定义Topic。

开源MQTT托管形态的基础型实例下,仅支持创建一个产品,默认不支持跨产品流转。

数据转发到另一Topic

此段脚本中用的函数具体见:函数列表 (aliyun.com)文章来源地址https://www.toymoban.com/news/detail-800738.html

到了这里,关于阿里云物联网Iot设备上下线状态数据流转的设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RS485设备通过DTU上传数据到阿里云物联网平台

    在开始之前,首先需要搞明白以下几个概念,RS485, Modbus协议和DTU。 RS485,基础概念自行度娘,这里如果简单理解的话就是一种串行通信标准。非硬件工程师其实记住RS485有4条线,A,B,VIM和GND。 可简单理解为A,B作为数据传输,VIM和GND作为电源的正负。在设备接入上一般是

    2024年02月07日
    浏览(51)
  • 【IoT网络层】STM32 + ESP8266 +MQTT + 阿里云物联网平台 |开源,附资料|

    🌟博主领域:嵌入式领域人工智能软件开发 本节目标: 通过MQTT.fx模拟连接或通过串口连接ESP8266发送AT命令,实现阿里云物联网平台发送数据同时接收数据,IOT studio界面显示数据。具体来说:使用ESP8266 ESP-01来连接网络,获取设备数据发送到阿里云物联网平台并显示且oled显

    2024年02月04日
    浏览(62)
  • STM32+ESP8266(AT固件)连接阿里云物联网 保姆级教学(附代码)--2. 设置产品Topic数据和功能定义设备物模型数据显示

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年02月03日
    浏览(64)
  • 【MQTT】基于阿里云物联网平台实现两设备间相互订阅及发布消息

    一、准备: 1.下载MQTT.fx - 1.7.1工具 https://www.jianshu.com/p/c9f50cf81cd2 2.进入物联网平台,并按照产品文档创建产品及设备 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 3.打开两个MQTT.fx工具,并分别填写相关设备信息,连接物联网平台(参考阿里云产品文档)。  二

    2024年02月02日
    浏览(54)
  • 合宙Air780e+luatos+阿里云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

    之前发布的文章有采用合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报,并以一个LED灯作为受控设备进行云端命令的控制,本期内容为使用了 阿里云 物联网平台完成同样

    2024年02月06日
    浏览(50)
  • STM32+ESP8266(AT固件)连接阿里云物联网 保姆级教学(附代码)--1.创建产品和设备

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年04月25日
    浏览(89)
  • 用MQTT.fx模拟温度设备联调阿里云IOT物联网平台

    阿里云iot入门(2)初识物模型及利用属性和事件上报数据 阿里云物联网平台是一个集成了设备管理、数据安全通信和消息订阅等能力的一体化平台。向下支持连接海量设备,采集设备数据上云;向上提供云端API,服务端可通过调用云端API将指令下发至设备端,实现远程控制

    2024年02月07日
    浏览(64)
  • MQTT连接阿里云物联网上报物模型数据

    目录 1. 创建产品(物联网平台 - 产品 - 创建产品) 2. 为产品添加设备 3. 添加物模型 4. mqtt.fx连接测试 5. 调试物模型 6. 使用mqtt.fx上报温度数据  我这里再新建一个名为 \\\"Test01\\\" 的产品作为演示 选择 \\\"添加自定义功能\\\" 添加 温度 属性: 创建好后,点击 发布上线 MQTT.fx是一款基

    2024年04月12日
    浏览(48)
  • vue2.0使用mqtt协议订阅阿里云物联网获取实时数据

    最近在公司要开发物联网项目,需要使用mqtt协议监听设备实时数据,因为要采用到后台展示不是很方便,可以使用阿里云服务器来做简单演示。 当然使用mqtt时需要两个软件结合使用,一个是 技小新MQTT编程工具 ,一个是 mqtt.fx 软件,为了方便大家下载,我把软件已经整理好

    2024年04月27日
    浏览(44)
  • 阿里云iot haas Micropython连接esp32;esp32物联网设备上报信息及云端信息获取;远程控制设备自带led熄灭;网页界面交互远程控制

    参考:https://blog.csdn.net/HaaSTech/article/details/125975052 https://iot.console.aliyun.com/ https://www.bbsmax.com/A/x9J2X8nZd6/ 首先烧录阿里云iot haas固件: https://haas.iot.aliyun.com/haasapi/index.html#/Python/docs/zh-CN/startup/ESP32_startup ***直接下载后可以通过vscode插件烧录;烧录好后也可以在thony编辑运行代码

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包