概述

M2M(即Machine-to-Machine)是一种端对端通信技术。本章节以Node JS SDK为例,使用基于Topic消息路由的M2M设备间通信,主要介绍如何基于物联网平台构建一个M2M设备间通信架构。

实验步骤


第一部分:配置相关

1、产品、设备、Topic的创建参考链接

消息路由建立

本部分目前不支持门户直接配置,需要基于管理API: CreateTopicRouteTable 来建立消息路由关系。

测试可以直接使用OpenAPI来快速实现相关功能,本地集成相关功能直接基于SDK即可。

2、JAVA SDK Demo

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.iot.model.v20170420.CreateTopicRouteTableRequest;
import com.aliyuncs.iot.model.v20170420.CreateTopicRouteTableResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;public class CreateTopicRouteTable {public static void main(String[] args) {DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "LTAIOZZg********", "v7CjUJCMk7j9aKduMAQLjy********");IAcsClient client = new DefaultAcsClient(profile);CreateTopicRouteTableRequest request = new CreateTopicRouteTableRequest();request.setRegionId("cn-shanghai");List<String> dstTopicList = new ArrayList<String>();dstTopicList.add("/a12OcQ4****/device2/user/RouteData");request.setDstTopics(dstTopicList);request.setSrcTopic("/a12OcQ4****/device1/user/RouteData");try {CreateTopicRouteTableResponse response = client.getAcsResponse(request);System.out.println(new Gson().toJson(response));} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());}}
}

注意:SDK版本差异按照实际版本调整即可。

3、查询路由关系

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.iot.model.v20170420.QueryTopicRouteTableRequest;
import com.aliyuncs.iot.model.v20170420.QueryTopicRouteTableResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;public class QueryTopicRouteTable {public static void main(String[] args) {DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "LTAIOZZgY********", "v7CjUJCMk7j9aKduMAQLjy********");IAcsClient client = new DefaultAcsClient(profile);QueryTopicRouteTableRequest request = new QueryTopicRouteTableRequest();request.setRegionId("cn-shanghai");request.setTopic("/a12OcQ4****/device1/user/RouteData");try {QueryTopicRouteTableResponse response = client.getAcsResponse(request);System.out.println(new Gson().toJson(response));} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());}}
}

运行结果

{"requestId":"9404FD71-7461-478E-B064-0AEB15C91111","success":true,"dstTopics":["/a12OcQ4****/device2/user/RouteData"]}

第二部分:客户端代码相关

4、Node JS SDK安装参考链接

5、设备端业务代码

device1


// node引入包名
const iot = require('alibabacloud-iot-device-sdk');
// 浏览器、微信小程序,支付宝小程序引入./dist编译的js文件
// const iot = require('./dist/alibabacloud-iot-device-sdk.js');
// js版本下载地址:
//    https://github.com/aliyun/alibabacloud-iot-device-sdk/tree/master/dist  或
//    alibabacloud-iot-device-sdk.js 下载地址 https://unpkg.com/alibabacloud-iot-device-sdk@1.2.4/dist/alibabacloud-iot-device-sdk.js  或
//    alibabacloud-iot-device-sdk.min.js 下载地址 https://unpkg.com/alibabacloud-iot-device-sdk@1.2.4/dist/alibabacloud-iot-device-sdk.min.js
//  const device = iot.device({productKey: 'a12OcQ4****',deviceName: 'device1',deviceSecret: '3yWqKtWxN7VPuWEEDEn4eKWN********'// 支付宝小程序和微信小程序额外需要配置协议参数// "protocol": 'alis://', "protocol": 'wxs://',
});
device.on('connect', () => {console.log('connect successfully!');// 发送消息到指定的Topic,等待规则引擎转发到另外的一个设备的Topicdevice.publish('/a12OcQ4****/device1/user/RouteData', '{"ke1":"value1 test"}');device.publish('/a12OcQ4****/device1/user/RouteData', 'This is my test job.');
});

device2

// node引入包名
const iot = require('alibabacloud-iot-device-sdk');
// 浏览器、微信小程序,支付宝小程序引入./dist编译的js文件
// const iot = require('./dist/alibabacloud-iot-device-sdk.js');
// js版本下载地址:
//    https://github.com/aliyun/alibabacloud-iot-device-sdk/tree/master/dist  或
//    alibabacloud-iot-device-sdk.js 下载地址 https://unpkg.com/alibabacloud-iot-device-sdk@1.2.4/dist/alibabacloud-iot-device-sdk.js  或
//    alibabacloud-iot-device-sdk.min.js 下载地址 https://unpkg.com/alibabacloud-iot-device-sdk@1.2.4/dist/alibabacloud-iot-device-sdk.min.js
//  const device = iot.device({productKey: 'a12OcQ4****',deviceName: 'device2',deviceSecret: 'X9fzX9u0aIOORNghPyfYKq22********'// 支付宝小程序和微信小程序额外需要配置协议参数// "protocol": 'alis://', "protocol": 'wxs://',
});
// 定于规则引擎转发过来的消息
device.subscribe('/a12OcQ4****/device2/user/RouteData');
device.on('connect', () => {console.log('connect successfully!');
});
device.on('message', (topic, payload) => {console.log(topic, payload.toString());
});

8、测试运行

原文链接
本文为云栖社区原创内容,未经允许不得转载。

基于Topic消息路由的M2M设备间通信Node JS SDK 示例相关推荐

  1. 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)

    haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由 阿里云M2M设备间通信 通信流程 功能实现 1.创建产品 2.设备端开发 联云测试 3.建立topic之间 ...

  2. 5.38 综合案例2.0 -语音助手(短信,蓝牙,M2M设备间通信)

    综合案例2.0 - 语音助手 效果展示 案例说明 原理 器件 语音助手功能实现 1,ASRPRO-2m模块 下载代码连线 模块编程说明 2,模块与开发板接线 3,语音助手代码 功能1:语音发短信说明 ...

  3. 【STM32F767】使用RTThread和TouchGFX实现DIY数字仪表(七)——使用MQTT.fx模拟手机设备进行M2M设备间通信

    目录: [STM32F767]使用RTThread和TouchGFX实现DIY数字仪表(一)--使用STM32CUBMX5.6移植touchGFX4.13 [STM32F767]使用RTThread和 ...

  4. 【小沐学Android】Android手机上基于Termux实现Web服务器(Python、node.js、C/C++)

  5. esp32,基于阿里云平台,配置实现Node.js SDK接入示例出现description: ‘Failed to authenticate: 4‘ BUG

    项目场景: 需要esp32板子一块,一个wifi热点,最好是自己手机的 问题描述 当你配置好阿里云官方文档所需要的信息后,出现报错:description: 'Failed to authentica ...

  6. 详细记录基于vue+nodejs+mongodb构建的商城学习(四)基于项目的node.js开发后端的学习与梳理总结...

    前置: 本系列文章是一个本人边学习边梳理的学习笔记,俗话说好脑袋不如烂笔头,再好的记忆力时间长了也会有细节忘记,本项目选择的前端框架是vue,后端开发使用是node.js,数据库使用的是mongodb ...

  7. 【SemiDrive源码分析】【MailBox核间通信】44 - 基于Mailbox IPCC RPC 实现核间通信(RTOS侧 IPCC_RPC Server 消息接收及回复 原理分析篇)

    [SemiDrive源码分析][MailBox核间通信]44 - 基于Mailbox IPCC RPC 实现核间通信(RTOS侧 IPCC_RPC Server 消息接收及回复 原理分析篇) 一.RT ...

  8. 阿里云物联网平台设备间通信(通过规则引擎-云产品流转)

    阿里云物联网平台设备间通信(通过规则引擎-云产品流转) 前言 我们正常的使用阿里云物联网平台,一般是: 设备通过物模型上报数据属性 App通过云端API获取设备的数据属性 App通过云端API调用设备 ...

  9. activemq后台管理 看topic消息_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列...

    作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 ...

最新文章

  1. linux proxy服务器
  2. 查询当前Oracle数据库的实例
  3. Java基础--static静态原理及API使用示例详解
  4. 外挂学习之路(14)--- 游戏中的二叉树
  5. 检查 Linux 服务器性能
  6. 雷神开机logo更改_九代酷睿i9加持的性能怪兽 雷神911黑武士Ⅱ评测
  7. 用mac的safari浏览器调试ios手机的网页
  8. 我php第一个页面,PHP 第一个 PHP 页面 - 第一个 PHP 页面 - phpStudy
  9. 【Level 08】U07 Mixed Feelings L5 Front page news
  10. ARM处理器之MMU和Cache
  11. 解决bert在文本长度的问题的方案,篇章级
  12. vbs返回结果给java_返回vbs脚本
  13. 前端H5如何实现分享截图
  14. php stripslashes和addslashes的区别
  15. 关于Mysql中的生日提醒
  16. Riverbed未来要往哪里去?收购Ocedo让你一目了然
  17. c语言速算24课程设计,C语言速算24数据结构课程设计.doc
  18. linux系统有什么用
  19. 图片验证码和短信验证码开发
  20. Module not found: Error: Can't resolve '/index.css' in 'F:\untitled\untitled4\src'

热门文章

  1. Java虚拟机知识汇总,有这些还怕面试被问到?
  2. oracle to char trim,to_char前面多出空格
  3. 网站域名解析端口_环境测试必备,无需注册域名,免费动态IP解析一键解析本地网站...
  4. 无法读取源文件或磁盘_raid磁盘阵列作用
  5. java nutz_jnutz: 基于nutz的java+js混合开发项目
  6. c语言星空程序,C语言实现动态星空
  7. linux祖先进程,Linux下的几种特殊进程
  8. java games_Java Me Games
  9. java面板换一个斜的圆形_java – 如何从底部设计圆形视图?
  10. 当电压放大电路的开路增益和输出电阻固定后_放大器的设计基础