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
我希望我在编写所有代码并使用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)...伙计们!
您的云项目确实有权访问各个MQTT连接/断开事件,但是当前它们仅显示在Stackdriver日志中。在云控制台中,您可以创建一个导出器,将这些事件发布到发布/订阅主题:
输入以下高级过滤器:
resource.type="cloudiot_device"
jsonPayload.eventType="DISCONNECT" OR "CONNECT"
Run Code Online (Sandbox Code Playgroud)点击创建导出
导出器将发布完整的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保持活动间隔一样长。如果需要立即检查设备是否可访问,则可以向该设备发送命令。
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |