Google Core IoT设备离线事件或连接状态

sMy*_*les 4 firebase google-cloud-platform google-cloud-iot google-cloud-firestore

有人知道Google Core IoT上的设备离线时触发事件的简便方法吗?在我切换到Google的IoT实施之前,可以通过在MQTT断开连接时触发一个事件来非常轻松地解决此问题,但是Google似乎没有做到这一点的简便方法。

有人知道为此有什么计划吗?

谁回来了,我需要从头开始,让他们看到这样的事情是物联网设备管理的基本要求!

AWS和Microsoft等其他平台已经实现了此功能(或通过某种方式轻松实现):https : //docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html

与Auzure iot集线器的设备连接(联机/脱机)状态

我希望我在编写所有代码并使用Google的IoT平台实施设置之前就已经知道这一点,我认为这是我的错误,因为我假设如此简单,并且应该是IoT设备的标准配置。

如果您甚至无法提供基本的离线/在线活动,您将如何与其他物联网提供商竞争?

我在这个SO问题中的答复显示了我必须编写100多行代码才能创建firebase函数来检查设备是否在线(但这仍然无法处理离线事件,而只是对某些应有的东西的一种破解)是任何物联网服务提供商的本地用户!):https : //stackoverflow.com/a/54609628/378506

我希望其他人想出了一种方法,因为我花了很多天搜索SO,Google,Google Core IoT文档,但仍然没有找到任何东西。

即使MQTT Last Will得到了支持,我们也可以做到这一点,但是Google也不支持(https://cloud.google.com/iot/docs/requirements)...伙计们!

Dev*_*red 5

您的云项目确实有权访问各个MQTT连接/断开事件,但是当前它们仅显示在Stackdriver日志中。在云控制台中,您可以创建一个导出器,将这些事件发布到发布/订阅主题:

  1. 访问Cloud Console中的Stackdriver Logs
  2. 输入以下高级过滤器:

    resource.type="cloudiot_device"
    jsonPayload.eventType="DISCONNECT" OR "CONNECT"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 点击创建导出

  4. 输入接收器名称的值
  5. 选择Cloud Pub / Sub作为接收器服务
  6. 创建一个新的Cloud Pub / Sub主题作为接收器目标

导出器将发布完整的LogEntry,然后您可以从订阅同一发布/订阅主题的云功能中使用它:

export const checkDeviceOnline = functions.pubsub.topic('online-state').onPublish(async (message) => {
  const logEntry = JSON.parse(Buffer.from(message.data, 'base64').toString());
  const deviceId = logEntry.labels.device_id;

  let online;
  switch (logEntry.jsonPayload.eventType) {
    case 'CONNECT':
      online = true;
      break;
    case 'DISCONNECT':
      online = false;
      break;
    default:
      throw new Error('Invalid message type');
  }

  // ...write updated state to Firebase...

});
Run Code Online (Sandbox Code Playgroud)

请注意,在连接中断的情况下,设备无法访问与实际DISCONNECT事件之间的时间间隔可能与MQTT保持活动间隔一样长。如果需要立即检查设备是否可访问,则可以向该设备发送命令。

  • 对于那些来到这里试图解决问题的人来说,devunwired 错过了一步。您必须至少为 IoT Core 注册表启用“信息”日志记录。转到 IoT Core > 注册表 > [您的注册表] > 编辑注册表 > 选择“信息”日志级别 > 单击保存。 (5认同)