Node.js 谷歌物联网:确定设备在sendCommandtoDevice故障后恢复在线

Node.js 谷歌物联网:确定设备在sendCommandtoDevice故障后恢复在线,node.js,google-cloud-platform,iot,Node.js,Google Cloud Platform,Iot,通过遵循本指南 我在谷歌云功能上运行了这个功能(感谢Firebase,我爱你),将命令发送到框架创建的谷歌物联网设备 它在大多数情况下都能正常工作。现在,我希望在设备没有响应时改进系统 由于多种原因,设备可能会暂时失去连接,从而失去命令(见下图): 在这种情况下,设备暂时无法访问(例如,移动互联网信号差,或者互联网路由问题) 当设备重新联机并可用时,是否有办法触发功能? 我的目的是,如果用户在设备没有响应时向设备发送命令,我希望自动再次发送该命令。猜猜如果用户需要关闭电机,而设备失去命令,会发

通过遵循本指南

我在谷歌云功能上运行了这个功能(感谢Firebase,我爱你),将命令发送到框架创建的谷歌物联网设备

它在大多数情况下都能正常工作。现在,我希望在设备没有响应时改进系统

由于多种原因,设备可能会暂时失去连接,从而失去命令(见下图):

在这种情况下,设备暂时无法访问(例如,移动互联网信号差,或者互联网路由问题)

当设备重新联机并可用时,是否有办法触发功能?

我的目的是,如果用户在设备没有响应时向设备发送命令,我希望自动再次发送该命令。猜猜如果用户需要关闭电机,而设备失去命令,会发生什么情况

但请记住,该设备未与Google IOT MQTT服务器“断开连接”。这些连接仍然有效,并且已启动并运行,通过良好的wifi信号连接到光纤互联网。设备无法意识到服务器端发生了错误


我还“猜测”该设备需要在服务器根据MQTT keep alive interval了解其不处于活动状态之前发送ping,但我不知道如何进行检查。

如果您需要该设备始终从IoT Core接收有效负载,即使它是在设备未连接/未响应的情况下发送的,您应该使用而不是命令

配置在物联网核心中是持久性的,因此即使没有响应,它最终也会被交付到设备

配置总是在设备重新连接到IoT Core时发送到设备,因此您可以确保设备将收到配置,即使它是在设备脱机时发送的

有关内容的配置和命令之间存在差异


诚然,您只能每秒发送1个config/device,但在大多数情况下这已经足够了。

您也可以依赖命令,但由于设备未联机而导致发送失败的情况除外,然后在发送命令的代码中,切换并发送一个配置,暂停尝试,直到设备发出重新联机并收到配置的信号,然后使用命令继续。如果出于某种原因这还不够的话,这将使你在每秒一个左右。
// const cloudRegion = 'us-central1';
// const deviceId = 'my-device';
// const commandMessage = 'message for device';
// const projectId = 'adjective-noun-123';
// const registryId = 'my-registry';
const iot = require('@google-cloud/iot');
const iotClient = new iot.v1.DeviceManagerClient({
  // optional auth parameters.
});

const formattedName = iotClient.devicePath(
  projectId,
  cloudRegion,
  registryId,
  deviceId
);
const binaryData = Buffer.from(commandMessage);
const request = {
  name: formattedName,
  binaryData: binaryData,
};

try {
  const responses = await iotClient.sendCommandToDevice(request);

  console.log('Sent command: ', responses[0]);
} catch (err) {
  console.error('Could not send command:', err);
}