我创建了一个基于烧瓶的IOT应用程序,该设备中的设备通过REST API定期发送数据,并将数据存储在数据库中。
我想开发一种通知系统,每当特定设备的阈值超过阈值时,该通知系统就会向移动APP发送通知。
每个设备的阈值和时间窗口存储在数据库中
示例:
如果最近5分钟内设备x的温度高于30摄氏度,则向用户发送通知。
使用Python解决此问题的最佳方法是什么?
当前,我正在使用celery beat并每1秒运行一个工人,该工人从数据库中读取用户配置的设备数据和阈值,并根据该值通过PYFCM将通知发送给APP。
从长远来看,我认为这种方法不可扩展。
答案 0 :(得分:0)
这并不是您要问的“ python”或“ flask”问题。
那是建筑性的东西。而且,在那之后,这是设计的事情。
因此,在架构上,典型的IoT数据是带有某些属性的测量值的时间序列,这些属性用于按来源,组,口味,您的名字进行区分。
随着时间序列的建立(从设备接收并存储在数据库中),您通常希望使用统计方法对其进行处理,以构建一些可供分析的函数。
简而言之,这就是建筑风格。
现在,我们拥有了所有可以假定的最佳设计解决方案。 理想情况下,这应该是适合存储时间序列的工具,并且还应配备统计分析工具,在理想情况下,也应具有通知适配器/传输工具(或者可以是一堆容易捆绑在一起的独立工具)。 / p>
幸运的是,它们已经存在:查找时间序列数据库。
我的个人爱好是InfluxDB,但还有其他人,例如Prometheus,最近启动的AWS服务,等等。全部都是Google。
实际上,所有这些工具都配备了不同类型的统计分析工具(例如,在InfluxDB中,您可以立即使用查询语言来完成此操作,此外还有功能强大的流/批处理处理器,甚至可以超越此功能)。
其中大多数还配备了通知工具(例如,上述Influx流处理器具有针对统计事件的内置通知动作)。
因此,如果您正在寻找长期/可扩展的解决方案(BTW的预期规模是多少?),这就是您最好的选择之一。不过需要一些努力/重构。
当然,您总是可以使用已有的工具来实现它。
您的“轮询工作人员”解决方案目前似乎非常好,接下来您将使用特定于您平台的统计库(不熟悉Python,抱歉,您的数据库也不知道-无法提供特定的建议使用),您会没事的。