Paho MQTT хост неверный аргумент при использовании IP-адреса в качестве имени хоста? - PullRequest
0 голосов
/ 06 мая 2019

ПЕРЕСМОТР. Обратите внимание, что теперь я использую IP-адрес 10.0.0.15, мое устройство, публикующее данные в брокере MQTT, - 10.0.0.122. Это все еще работает через терминал.

Я думаю, что получаю где-то с разъемом MQTT. Я двинулся вперед после того, как у меня возникли проблемы, как описано в посте ниже

Не удается подключиться к локальному брокеру Mosquitto с помощью Javascript?

Теперь я вижу следующую ошибку.

         mqttws31.js:1585 Uncaught Error: AMQJS0013E Invalid argument 
         169.254.118.199 for host.
         at new M (mqttws31.js:1585)
         at startConnect (n.js:29)
         at HTMLInputElement.onclick ((index):107)

, который согласно файлу js указывает на ошибку соответствия. Я попытался префикс IP-адрес, чтобы быть wss: //169.254.118.199, но это не решает проблему. Вы знаете, что может быть причиной этого?

Я пробовал следующее

 wss://169.254.118.199
 ws://169.254.118.199
 wss://localhost
 tcp://169.254.118.199
 tcp://localhost

Все они выдают одну и ту же ошибку

Это бит кода в mqttws31.js, на который указывает ошибка.

          if (arguments.length == 2) {
          // host: must be full ws:// uri
          // port: clientId
          clientId = port;
          uri = host;
          var match = uri.match(/^(wss?):\/\/((\[(.+)\])|([^\/]+?))(:(\d+))? 
          (\/.*)$/);
          if (match) {
          host = match[4]||match[2];
          port = parseInt(match[7]);
          path = match[8];
          } else {
          --> this is where error is pointing throw new Error(format(ERROR.INVALID_ARGUMENT,[host,"host"]));
          }
          } else {
          if (arguments.length == 3) {
            clientId = path;
            path = "/mqtt";
          }
          if (typeof port !== "number" || port < 0)
            throw new Error(format(ERROR.INVALID_TYPE, [typeof port, "port"]));
          if (typeof path !== "string")
            throw new Error(format(ERROR.INVALID_TYPE, [typeof path, "path"]));

          var ipv6AddSBracket = (host.indexOf(":") != -1 && host.slice(0,1) != "[" && 
          host.slice(-1) != "]");
          uri = "ws://"+(ipv6AddSBracket?"["+host+"]":host)+":"+port+path;
          }

РЕДАКТИРОВАТЬ: в распечатке я вижу следующую отправку клиенту Paho на моей веб-странице:

    Connecting to: 10.0.0.122 on port: 8083
    Using the following client value: clientID-64

Я надеюсь успешно соединиться с IP-адресом и получить полезную нагрузку MQTT

1 Ответ

0 голосов
/ 06 мая 2019

Чтобы получить ошибку, которую вы видите, вы не можете использовать код, который вы разместили в других вопросах:

clientID = "clientID-" + parseInt(Math.random() * 100);

// Fetch the hostname/IP address and port number from the form
host = document.getElementById("host").value;
port = document.getElementById("port").value;
// Print output for the user in the messages div

// Initialize new Paho client connection
 client = new Paho.MQTT.Client(host, Number(port), clientID);

Эта ошибка может произойти, только если вы передадите * 1004 только 2 аргумента* конструктор не 3. В этом случае первый аргумент интерпретируется как полный URI (например, ws://10.0.0.122:8083/mqtt), а второй - как ClientID.

...