【问题标题】:Create scheduled events in Google Cloud Platform在 Google Cloud Platform 中创建预定活动
【发布时间】:2018-03-12 11:55:09
【问题描述】:

我正在创建一个物联网设备,用户可以在其中设置特定时间来触发物联网设备的操作。例如:下午 1:00,空调自动启动。 我正在使用谷歌云平台。我检查了 GCP 中的 Cron 作业,它在特定时间或指定时间间隔触发特定 URL。由于我的触发时间存储在数据存储中,因此我必须在每分钟后使用可以编写逻辑的 cron 作业查询数据库,以在时间匹配时触发操作。但在最坏的情况下总会有 59 秒的延迟,否则我可以每秒调用 URL。每秒调用一次 ulr 会非常昂贵,因为我需要每 1 秒查询一次数据库。有没有其他有效的方法来实现这一点?

【问题讨论】:

标签: google-app-engine google-cloud-datastore gae-module


【解决方案1】:

只是为了确保我理解,您试图避免的用例是用户将 AC 设置为在下午 1 点继续运行,并将其设置为 13:00:01(所以他们必须等到 13:01:00 才能打开空调)?

假设是这种情况,那么,如果您使用的是 Firebase/Firestore,则可以使用 GCF(Google Cloud Function)来实际触发 AC 开启(例如,向设备发送 IoT Core 配置消息,不确定您实际上是如何打开空调的)。 GCF 可以由每分钟触发的 CRON 作业触发,也可以让它响应(它是事件触发器之一)Firebase 中的数据库值更改。

因此,用户设置了 AC 开启的时间,这会在 Firebase 数据库中设置一个值,这会触发 GCF 检查该值并查看它是否应该打开 AC。这样,您就不仅仅依靠 CRON 作业来打开 AC,您还可以通过数据更改事件来检查时间。在您的情况下,这应该可以消除 59 秒的等待时间。

【讨论】:

  • 谢谢!,我的用例非常简单。我在我的移动应用程序中提供了一个选项,以便用户可以设置他希望打开 AC 的特定时间。例如:用户可以在下午 01:00 放入他想要打开空调的手机。我没有使用 Firebase/Firestore .. 所以不确定我是否可以按照您的建议进行操作.. 还有其他替代方法吗?
  • 如果您愿意,您也可以使用云功能自己完成。该函数做了两件事:1)它在您使用的任何系统上设置首选时间,以及 2)如果进行测试以查看“开启”时间是否是当前的,如果是,只需通过推送立即触发它.不过,要做到这一点,您需要以某种方式将设备保护到外部世界。 GCP 上的 Cloud IoT Core 使用 TLS 1.2 进行管理,并使用 SSL 密钥对进行身份验证。
  • 您能否详细介绍一下云功能?特别是第 2 点。对于检查“开启”时间是否等于当前时间的函数,它必须永远运行.. 因为“开启”时间可以是用户选择的任何时间.. 函数的成本基于持续时间它是按照函数的定价说明执行的。你不认为它会很昂贵吗?
  • 我正在考虑的另一个解决方案是使用推送队列......但这里的限制是推送队列中的 1 个任务最多只能执行 10 分钟......哦,我的上帝!这听起来像是一个非常简单的要求,但从没想过解决方案会如此复杂......有什么帮助吗?
  • 云函数相对便宜。每月 200 万次免费调用。只要您不在函数中发疯,计算时间/内存时间就很便宜。因此,在检查时间方面,我的意思是,用户设置他们希望 AC 继续运行的时间。只要他们不将“现在”或“过去”设置为时间,您每分钟检查的任何内容都会启动并选择正确的时间来打开空调。所以云函数会做的是,当用户设置时间时,它会根据“现在”检查那个时间。所以if (setTime <= time.time() { turnOnAc(); }.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2019-03-28
相关资源
最近更新 更多