当前位置: 首页 > 知识库问答 >
问题:

从浏览器端连接到Azure IoT/Event hub

朱慈
2023-03-14

共有1个答案

翁钧
2023-03-14
npm install mqtt crypto-js --save

index.js

import mqtt from 'mqtt';
import CryptoJS from 'crypto-js';

var host='{iothubname}.azure-devices.net';
var deviceId = '{DeviceId}';
var sharedKey = '{DeviceKey}';
var topic ='devices/'+deviceId+'/messages/devicebound/#';

function encodeUriComponentStrict (str) {
    return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
        return '%' + c.charCodeAt(0).toString(16);
    });
}
function getSaSToken (hostName,deviceId,sharedKey){
    var sr = encodeUriComponentStrict(hostName + '/devices/' + deviceId);
    var se = Math.round(new Date().getTime() / 1000) + 24 * 3600;
    var StringToSign = sr + '\n' + se;
    var sig = encodeUriComponentStrict(CryptoJS.HmacSHA256(StringToSign, CryptoJS.enc.Base64.parse(sharedKey)).toString(CryptoJS.enc.Base64));
    return 'SharedAccessSignature sr=' + sr + '&sig=' + sig + '&se=' + se;
}

var client  = mqtt.connect({
            host:host,
            port:443,
            path:'/$iothub/websocket?iothub-no-client-cert=true',
            protocol: 'mqtts',
            protocolId: 'MQTT',
            protocolVersion: 4,
            clientId:deviceId,
            username: host+'/'+deviceId+'/api-version=2016-11-14',
            password: getSaSToken(host,deviceId,sharedKey),
            keepalive: 30000
})

client.on('connect',function(packet){
    console.log('mqtt connected!',packet);
    client.subscribe(topic);
})
client.on('reconnect',function(){
    console.log('mqtt reconnected!');
})
client.on('close',function(c){
    console.log('mqtt closed!',c);
})
client.on('message',function(topic, message, packet){
    var string = new TextDecoder("utf-8").decode(message);
    console.log('receive!',string);
})

如何获取设备id和设备密钥:

  1. 登录Azure
  2. 所有资源并查找您的iot Hub
  3. 设备资源管理器
  4. 单击要连接或创建的设备
 类似资料:
  • 问题内容: 我如何在客户端使用 HTML5 , CSS 和 JavaScript 编写网站,以便 在页面加载后 允许 客户端浏览器之间的直接tcp / ip连接 。 我需要这样做以减少延迟,因为该站点将要求将其中一个用户的输入尽快传输给另一用户,因此从客户端A到服务器再向客户端B发送数据并不是一个好习惯。选项。 我阅读了有关此主题的先前文章,但没有可用的解决方案/示例。据我了解,可以使用Silve

  • 最近我停止并启动了我的EC2实例,这导致我不得不从头开始安装我的web应用程序(使用Tomcat) 现在我有Tomcat在EC2实例上运行,我可以通过在EC2服务器上打开浏览器并指向http://localhost:8080/web_app_name 但是,如果我在自己的电脑上打开浏览器,并指向EC2实例的公共IP(例如EC2 XXX XXX.ap-southest-2.compute.amazo

  • 到“ws://example.app:8080/”的WebSocket连接失败:在收到握手响应之前连接已关闭

  • 问题内容: 我读过有关 WebSocket的文章, 但它们似乎并不是纯粹的“套接字”,因为在它们上面有一个应用程序层协议。“ WS: ” 是否可以通过Web浏览器进行纯套接字连接来激活网页? 这是我在黑暗中的随机刺伤 Java提供的Applet套接字(需要安装Java) Flash提供的Flash插槽(需要安装闪光灯) 但是关于HTML5,如果不是Socket,为什么将它们称为WebSocket?

  • 我在HTTPS网站上启用了个人用户脚本。userscript使用Socket.io客户端API连接到我的PC中的Node.js TCP服务器 服务器注意到客户端正在连接到服务器,但客户端没有注意到连接,而是从浏览器控制台接收此错误 我的服务器代码

  • 问题内容: 我尝试使用rubyseleniumwebdriver运行一些基本的自动化测试。相同的代码在我的家用计算机上可以完美地工作,但是在我的工作计算机上却无法工作,而我的工作计算机位于代理后面(不需要身份验证)。 driver = Selenium :: WebDriver.for:firefox,:profile =>’默认’ 我得到的错误是: 浏览器将使用正确的配置文件打开,但驱动程序变量