【问题标题】:How do I convert this command into MQTT.js?如何将此命令转换为 MQTT.js?
【发布时间】:2021-02-07 20:59:20
【问题描述】:
  1. 我已经有一个 Aws IoT 设置。

  2. 我有一个 react native 简单的应用程序,在 android 模拟器中运行。

  3. 我已经实现了这个库https://www.npmjs.com/package/react-native-native-mqtt

  4. 我的 pem、crt 和密钥存储在 %USERPROFILE%\certs 中。

  5. 我在我的 cmd mqtt pub --cafile %USERPROFILE%\certs\root-ca.pem --cert %USERPROFILE%\certs\certificate.pem.crt --key %USERPROFILE%\certs\private.pem.key -d -h ******-ats.iot.us-east-2.amazonaws.com -p 8883 -t test -m "hello there" 中运行这个命令

  6. 我查过了。它出现在 Aws IoT 测试控制台中,我订阅了 test

到目前为止没有发生错误。

我的 react native 中有这段代码:

const mqtt = require('mqtt')
const fs = require('fs')

// const KEY = fs.readFileSync('%USERPROFILE%\certs\private.pem.key');
// const CERT = fs.readFileSync('%USERPROFILE%\certs\certificate.pem.crt');
// const CAfile = [fs.readFileSync('%USERPROFILE%\certs\root-ca.pem')];
const KEY = './aws/private.pem.key';
const CERT = './aws/certificate.pem.crt';
const CAfile = ['./aws/root-ca.pem'];

const options = {
  host: "******-ats.iot.us-east-2.amazonaws.com",
  port: 8883,
  protocolId: 'MQIsdp',
  ca: CAfile,
  keyPath: KEY,
  certPath: CERT,
  secureProtocol: 'TLSv1_method',
  protocolVersion: 3
};
const client  = mqtt.connect(options)

client.on('connect', function () {
  client.subscribe('test', function (err) {
    if (!err) {
      client.publish('test', 'Hello mqtt')
    }
  })
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

我已经尝试使用 fs,它导致错误fs.readFileSync is not a function
所以,我使用这条路径'./aws/private.pem.key''./aws/certificate.pem.crt''./aws/root-ca.pem'

这是错误:

到 'ws://localhost:8883/' 的 WebSocket 连接失败:错误 连接建立:net::ERR_CONNECTION_REFUSED createBrowserWebSocket@ws.js:108 browserStreamBuilder@ws.js:134 包装器@index.js:154 ../../../../../../../../../Documents/_msit/iot/Round 2/mqttks/node_modules/mqtt/lib/client.js.MqttClient._setupStream@ client.js:298 ../../../../../../../../../Documents/_msit/iot/Round 2/mqttks/node_modules/mqtt/lib/client.js.MqttClient._reconnect@ client.js:938(匿名)@client.js:958

我想知道为什么它的本地主机,即使我设置了主机。

所以,我的问题是,如何将这个正在工作的命令 mqtt pub --cafile %USERPROFILE%\certs\root-ca.pem --cert %USERPROFILE%\certs\certificate.pem.crt --key %USERPROFILE%\certs\private.pem.key -d -h ******-ats.iot.us-east-2.amazonaws.com -p 8883 -t test -m "hello there" 转换为 MQTT.js、Javascript、mqtt.connect()?

【问题讨论】:

    标签: react-native-android mqtt aws-iot


    【解决方案1】:

    hostport 未在选项中指定。您的 connect() 调用应如下所示:

    const HOST = "******-ats.iot.us-east-2.amazonaws.com";
    const PORT = 8883;
    
    const options = {
      protocolId: 'MQIsdp',
      ca: CAfile,
      keyPath: KEY,
      certPath: CERT,
      secureProtocol: 'TLSv1_method',
      protocolVersion: 3
    };
    
    var uri = "mqtt://" + HOST + ":" + PORT;
    
    const client = mqtt.connect(uri, options);
    

    您的问题类似于 StackOverflow 上已经回答的问题:Why is MQTT not connecting with NodeJS?

    【讨论】:

    • 它在 react-native 上不起作用,所以我只尝试了 reactapp,我收到了这个错误Unchecked runtime.lastError: The message port closed before a response was received.
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多