之前通过nodejs连接到阿里云物联网mqtt,后又用浏览器连接,总结一下:
由于项目是SPA,使用webpack,关键代码:
同样使用mqtt.js之前先install:

 npm install --save mqtt

然后在main.js导入

import mqtt from 'mqtt'

将mqtt挂载到Vue全局

Object.defineProperty(Vue.prototype, 'mqtt', {value: mqtt});

这时就可以在全局使用mqtt了,于是在App.vue中使用mqtt,由于之前逻辑是nodejs进行连接,那么做签名和HTTPS认证都是在服务端进行的,现在挪到web端流程改为由后端进行签名和HTTPS,前端请求后端接口返回必要字段进行mqtt连接(这里的必要字段包括mqtt连接需要的clientId,username,password。username对应的返回值为iotId,password对应的返回值为iotToken),拿到后端HTTPS认证之后的返回值前端进行mqtt连接:(示例)

var host = `ws://${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:443`; //这里需要注意,在服务端是基于TCP的连接(var host = `mqtt://${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883`;),而在web端需要是基于websocket的连接,这个地方的坑踩了两天o(╥﹏╥)o
var options = {
clientId: clientId, //请求后端返回的clientId
username: iotId, //后端HTTPS认证返回的iotId
password: iotToken //后端HTTPS认证返回的iotToken
}
var client = this.mqtt.connect(host, options); //mqtt连接
client.on('connect', function(){
//设备连接成功
client.subscribe(topic); //进行主题的订阅
})
client.on('error', function(){
//连接出错
})
client.on('close', function(){
//连接断开
//client.end(); //结束连接
//client = null; //将client对象置空
})
client.on('message', function(topic, message){
//topic: 主题 message: 内容
//收到消息这里的message是buffer,使用toString()转换为字符串
})
以上是mqtt在web的连接关键代码示例,下面说一下M2M(iot设备之间通讯):
1.在阿里云物联网套件控制台设置转发规则,在产品->消息通信配置一个模板 /产品key/${deviceName}/m2m 权限为发布和订阅
2.规则引擎创建规则:select deviceName() fromDevice, toDevice, data, messageId() mesaageId from ‘/产品key/+/m2m’ 并增加一个 repub动作:转发到 /产品key/${toDevice}/m2m , 启动规则;
3.设备deviceA发送消息到 /产品key/deviceA/m2m ,格式如下:(这里发消息到自身deviceName的topic)

{
toDevice: 'deviceB', //这里值为需要发送的设备deviceName
data: data //这里data为客户端之间约定的数据,可以为任意对象,只有大家约定好就行
}

4.设备deviceB订阅/产品key/deviceB/m2m,(这里订阅的主题为deviceB自身),将收到如下格式数据:

{
fromDevice: 'deviceA',
toDevice: 'deviceB',
messageId: '',
data: data //deviceA发来的data
}
注意,规则转发后的消息内容取决于规则引擎Select的内容 *详见阿里云文档
那么我们在前端的具体操作为:

//在连接时订阅自身topic
client.subscribe(`/${productKey}/deviceA/m2m`); 在连接或者收到消息时,当前设备为deviceA:
var msgObj = {
toDevice: 'deviceB',
data: data //约定的data
}
client.publish(`/${productKey}/deviceA/m2m`);

以上为物联网套件M2M的关键代码。

阿里云物联网套件(iot)设备间通信(M2M)在web端的实践的更多相关文章

  1. 【物联网云端对接-2】通过MQTT协议与阿里云物联网套件进行云端通信

     在<程序员>杂志2017.4刊上,曾写过一篇<微软百度阿里三大物联网平台探析>,上面曾介绍了阿里云物联网套件的一些内容,在写该篇文章的时候,凌霄物联网网关还无法对接到此平台( ...

  2. 《ServerSuperIO Designer IDE使用教程》- 6.增加与阿里云物联网(IOT)对接服务,实现数据交互。发布:v4.2.4 版本

    v4.2.4 更新内容:1.增加了对接阿里物联网平台的服务.下载地址:官方下载   6. 增加与阿里云物联网(IOT)对接服务,实现数据交互  6.1    概述 为了满足业务系统数据上云的要求,Se ...

  3. nodejs连接阿里云物联网套件(mqtt)

    文档地址:https://help.aliyun.com/document_detail/73742.html   连接方法:先HTTPS认证再连接 /* *阿里云物联网套件nodejs连接示例 *C ...

  4. 在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

    在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github ...

  5. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:2. IoT 客户端

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

  6. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:7. 服务调用

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

  7. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:1. 连接阿里云物联网

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

  8. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:3. 订阅Topic与响应Topic

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

  9. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

随机推荐

  1. 关于leal和mov

    最近在学习leal的时候遇到了一点非常迷惑的地方,就是leal是用来取有效地址的,但是为什么它也可以实现赋值呢?偶然发现一个博客讲的不错,遂自己记录一下 一个这样的例子 leal 7(%edx,%ed ...

  2. 李航《统计学习方法》CH02

    CH02 感知机 前言 章节目录 感知机模型 感知机学习策略 数据集的线性可分性 感知机学习策略 感知机学习算法 感知机学习算法 感知机学习算法的原始形式 算法的收敛性 感知机学习算法的对偶形式 导读 ...

  3. 开发企业微信打卡API笔记

    获取企业微信打开API上面的数据 根据企业ID和打卡模块的secret获取access_token 打卡传参body为json格式的字符传 创建打卡对象把参数写入,useridlist为list格式. ...

  4. 第4天:scipy库

    一.SciPy库概述 1.numpy提供向量和矩阵的相关操作,高级计算器 2.SciPy在统计.优化.插值.数值积分.视频转换等,涵盖基础科学计算相关问题. (额,对统计和概率,数理完全一窍不通) 3 ...

  5. Memory and Trident(CodeForces 712B)

    Description Memory is performing a walk on the two-dimensional plane, starting at the origin. He is ...

  6. linux创建虚拟环境

    linux提供的虚拟环境工具: virtualenv   pipenv 1.安装python的虚拟环境 pip3 install -i https://pypi.tuna.tsinghua.edu.c ...

  7. js中!和!!的区别及用法

    js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,1.!可将变量转换成boolean类型,null.undefined和空字符串取反都为false,其 ...

  8. Dubbo源码构建

    代码签出 通过以下的这个命令签出最新的项目源码: git clone https://github.com/apache/incubator-dubbo.git dubbo 分支 我们使用 maste ...

  9. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

  10. 表单传参,在action中的参数得不到

    写上面这个的时候,发现传过去的url路径是这样的 在action后面的pro=login得不到. 只需要将method中的get改成post就可以了