簡體   English   中英

通過后端通過Websocket使用MQTT連接到AWS IoT

[英]Connecting to AWS IoT using MQTT over Websockets from the backend

我正在嘗試從服務器端連接到AWS IoT。 我不想通過瀏覽器客戶端連接到AWS IoT。

為了提供更多的上下文,我模擬了一個設備(目前只是一個瀏覽器客戶端),該設備接受輸入並將其通過Websockets發送到我的服務器。 從那里,我想接收輸入,然后通過MQSocket通過Websocket將其發送到AWS IoT(或其他方式)。

由於我的設備被限制為只能通過Websockets通過另一個協議進行通信,因此我的客戶端不可能直接通過websockets通過MQTT。

可以將其視為協議轉換器,或者只是將接收到的消息從一個套接字傳送到另一個套接字。

(客戶端)----通過ws發送消息---->(服務器)----使用MQTT發送消息--->(AWS IOT)

我希望這是有道理的。 我已經成功運行了許多示例(我的第一個代碼段連接到test.mosquitto.org),並且具有mqttjs和AWS IoT sdk。 在這個階段,我只是想使連接在我想如何使用的上下文中正確工作。

任何建議或意見將不勝感激。

我的第一個代碼段是我目前正在嘗試的(以及我認為最可行的)

var options = {
    clientId : 1,
    endpoint: 'xxxxxxxxxx.iot.xxxxxxxxxx.amazonaws.com',
    accessKey: 'xxxxxxxxxx',
    secretKey: 'xxxxxxxxxxxxxxxxxxxx',
    regionName: 'xxxxxxxxxx',
    debug: true
};


var client = _mqtt.connect('ws://xxxxxxxxxx.iot.xxxxxxxxxx.com', options);
//var client  = _mqtt.connect('mqtt://test.mosquitto.org');

client.on('connect', function () {
    console.log("MQTT connected");
    client.subscribe('testing')
    client.publish('testing', 'Hello mqtt2')
})

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

這是我其他失敗的嘗試之一。 至少這提供了一個錯誤。

var device = awsIot.device({
    keyPath: './certs/xxxxxxxxxx-private.pem.key',
    certPath: './certs/xxxxxxxxxx-certificate.pem.crt',
    caPath: './certs/root-CA.crt',
    clientId: 1,
    debug: true,
    host: 'xxxxxxxxxx.iot.xxxxxxxxxx.amazonaws.com'
});

//
// Device is an instance returned by mqtt.Client(), see mqtt.js for full
// documentation.
//
device
    .on('connect', function() {
        console.log('connect');
        device.subscribe('topic_1');
        device.publish('topic_2', JSON.stringify({ test_data: 1}));
    });

device
    .on('message', function(topic, payload) {
        console.log('message', topic, payload.toString());
    });

這是輸出/錯誤

{ keyPath: './certs/xxxxxxxxxx-private.pem.key',
  certPath: './certs/xxxxxxxxxx-certificate.pem.crt',
  caPath: './certs/root-CA.crt',
  clientId: 1,
  debug: true,
  host: 'xxxxxxxxxx.iot.xxxxxxxxxx.amazonaws.com',
  keepalive: 300,
  username: '?SDK=JavaScript&Version=2.2.0',
  reconnectPeriod: 1000,
  fastDisconnectDetection: true,
  resubscribe: false,
  protocol: 'mqtts',
  port: 8883,
  key: <Buffer 2d 2d 2d 2d 2d 42 45 47 49 4e 20 52 53 41 20 50 52 49 56 41 54 45 20 4b 45 59 2d 2d 2d 2d 2d 0a 4d 49 49 45 70 41 49 42 41 41 4b 43 41 51 45 41 32 42 ... >,
  cert: <Buffer 2d 2d 2d 2d 2d 42 45 47 49 4e 20 43 45 52 54 49 46 49 43 41 54 45 2d 2d 2d 2d 2d 0a 4d 49 49 44 57 54 43 43 41 6b 47 67 41 77 49 42 41 67 49 55 53 33 ... >,
  ca: <Buffer 2d 2d 2d 2d 2d 42 45 47 49 4e 20 43 45 52 54 49 46 49 43 41 54 45 2d 2d 2d 2d 2d 0d 0a 4d 49 49 45 30 7a 43 43 41 37 75 67 41 77 49 42 41 67 49 51 47 ... >,
  requestCert: true,
  rejectUnauthorized: true }
attempting new mqtt connection...
net.js:617
    throw new TypeError('invalid data');
    ^

TypeError: invalid data
    at TLSSocket.Socket.write (net.js:617:11)

找到了問題!

我得到了第一個建議的代碼片段:

  • 沒有將clientId封裝在引號中
  • 我尚未在AWS IoT控制台上的現有Thing中添加策略

我仍然對是否可以進行第二次嘗試感到好奇,因此,如果您有任何建議,請務必提供見解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM