【问题标题】:Is it possible to connect to the Google IOTCore MQTT Bridge via Javascript?是否可以通过 Javascript 连接到 Google IOTCore MQTT Bridge?
【发布时间】:2018-03-21 23:45:40
【问题描述】:

我一直在尝试使用 Eclipse Paho MQTT 客户端的 javacscript 版本来访问 Google IOTCore MQTT Bridge,如下所示:

https://cloud.google.com/iot/docs/how-tos/mqtt-bridge

但是,无论我做什么,任何使用已知良好凭据(与其他客户端合作)进行连接的尝试都会导致此连接错误:

errorCode: 7, errorMessage: "AMQJS0007E Socket error:undefined."

没有太多可做的,所以我想知道是否有人曾通过 Eclipse Paho 的 Javascript 成功连接到 MQTT Bridge,这是 Google 在其文档中建议的客户端实现。

我已经完成了他们的故障排除步骤,而且事情似乎正在好转,所以也没有任何帮助。

https://cloud.google.com/iot/docs/troubleshooting

我注意到在他们的文档中,他们有 Java/Python 等的示例代码,但没有 Javascript,所以我想知道它是否根本不受支持,他们的文档只是没有提及。

我已经简化了我的代码,只使用 Paho 文档中的“Hello World”示例,据我所知,我已经正确完成了一些事情(包括使用我的设备路径作为 ClientID,JWT 令牌作为密码,指定“未使用”的用户名字段并明确要求 MQTT v3.1.1)。

与此同时,我将回退到通过他们的 HTTP 桥接器进行轮询,但这具有明显的延迟和网络流量缺陷。

// Create a client instance
client = new Paho.MQTT.Client("mqtt.googleapis.com", Number(8883), "projects/[my-project-id]/locations/us-central1/registries/[my registry name]/devices/[my device id]");

// set callback handlers
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;

// connect the client
client.connect({
    mqttVersion: 4,   // maps to MQTT V3.1.1, required by IOTCore
    onSuccess:onConnect,
    onFailure: onFailure,
    userName: 'unused',  // suggested by Google for this field
    password: '[My Confirmed Working JWT Token]' // working JWT token

function onFailure(resp) {
    console.log(resp);
}


// called when the client connects
function onConnect() {
  // Once a connection has been made, make a subscription and send a message.
  console.log("onConnect");
  client.subscribe("World");
  message = new Paho.MQTT.Message("Hello");
  message.destinationName = "World";
  client.send(message);
}

// called when the client loses its connection
function onConnectionLost(responseObject) {
  if (responseObject.errorCode !== 0) {
    console.log("onConnectionLost:"+responseObject.errorMessage);
  }
}

// called when a message arrives
function onMessageArrived(message) {
  console.log("onMessageArrived:"+message.payloadString);
}

【问题讨论】:

    标签: google-cloud-platform mqtt paho google-cloud-iot


    【解决方案1】:

    我是一名 Google 员工(但我不在 Cloud IoT 领域工作)。

    您的代码对我来说看起来不错,它应该可以工作。今晚或明天我会亲自试一试,然后向您报告。

    过去一天,我一直在研究 Google 文档中发布的示例的 Golang 版本。和您一样,我很失望没有看到示例涵盖所有 Google 常规语言。

    您是从浏览器运行代码还是在 Node.JS 上运行?

    您是否也有一个 package.json(如果是 Node)可以分享吗?

    更新

    这是一个连接到 Cloud IoT、订阅 /devices/${DEVICE}/config 并发布到 /devices/${DEVICE}/events 的 Node.JS(JavaScript 但非浏览器)。

    https://gist.github.com/DazWilkin/65ad8890d5f58eae9612632d594af2de

    • 将所有文件放在同一目录中
    • 替换 index.js 中 Google 的 CA 位置和您的密钥的值
    • 替换 config.json 中的 [[YOUR-X]] 值
    • 使用“npm install”拉取包
    • 使用node index.js

    您应该能够从 Pub/Sub 订阅中提取消息,并且应该能够向设备发送配置消息。

    【讨论】:

    • 我与工程团队交谈过,不可能使用 JavaScript 连接到 Cloud IoT Core。这是因为 Cloud IoT Core 目前不支持使用 WebSockets(这是 JavaScript MQTT 库使用的)连接到 Cloud IoT Core。
    • 那是我的怀疑,感谢您花时间添加此确认。
    • @DazWilken 还是这样吗?我使用Paho JS library 时遇到了同样的错误。我尝试关注this tutorial,从我的 React Native 应用程序向 GCP Core IoT 上的主题发布消息。 GCP Cloud IoT Core docs 提到了 Eclipse Paho 项目,但似乎没有详细说明。
    • @brad-w -- 我已经有一段时间没有使用 Cloud IoT 了,无法回答您的问题
    【解决方案2】:

    简短的回答是否定的。 Google Cloud IoT Core 不支持 WebSocket。 所有 JavaScript MQTT 库都使用 WebSocket,因为 JavaScript 仅限于执行 HTTP 请求和 WebSocket 连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2011-04-23
      • 2015-02-14
      • 2012-02-09
      • 1970-01-01
      相关资源
      最近更新 更多