Подключение к AWS IoT с помощью MQTT через веб-сокеты из серверной части

Я пытаюсь подключиться к AWS IoT со стороны сервера. Я не хочу подключаться к AWS IoT через клиент браузера.

Чтобы получить больше контекста, я смоделировал устройство (в настоящее время просто клиент браузера), которое принимает входные данные и отправляет их через Websockets на мой сервер. Оттуда я хочу взять эти данные и отправить их через MQTT через веб-сокеты в AWS IoT (или другим способом).

Нет никакой возможности, чтобы мой клиент мог напрямую проходить через 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)

1 ответ

Нашел проблему!

Я получил первый предложенный фрагмент кода, работающий:

  • clientId не был заключен в кавычки
  • Я не добавил политику в существующую Thing на консоли IoT AWS

Мне все еще интересно, возможна ли моя вторая попытка или нет, поэтому, пожалуйста, предоставьте информацию, если у вас есть какие-либо предложения.

Другие вопросы по тегам