我创建了一个基于烧瓶的IOT应用程序,设备通过REST API定期发送数据,数据存储在DB中。
我想开发一个通知系统,每当特定设备的阈值超过时,就会向移动应用程序发送通知。
每个设备的阈值和时间窗口存储在DB 中
示例:
如果设备x在最后5分钟的温度高于30摄氏度,则向用户发送通知。
使用Python解决此问题的最佳方法是什么?
目前我使用的是芹菜节拍,每1秒运行一个工作程序,它从数据库中读取用户配置的设备数据和阈值,并根据该值通过PYFCM向APP发送通知。
从长远来看,我觉得这种方法是不可扩展的。
你问的不是特别的"python"或"flask"。
这是建筑学的东西。而且,在它之后,这是一个设计的事情。
因此,从架构上讲,典型的物联网数据是用一些属性标记的测量值的时间序列,以根据来源、组、口味进行区分。
随着时间序列的建立(从设备接收并存储在DB中(,您通常希望使用统计方法对其进行处理,以构建一些可供分析的函数。
简而言之,这就是体系结构的配置。
现在,有了这些,我们可以假设什么是最佳的设计解决方案。理想情况下,这应该是适用于存储时间序列&还配备了统计分析工具,在完美的情况下——也有通知适配器/传输(或者可以是一堆单独的工具,可以很容易地绑定在一起(。
幸运的是,它们已经存在:查找时间序列数据库。
我个人喜欢InfluxDB,但也有其他的,比如普罗米修斯,这个最近推出的AWS服务,等等。
事实上,它们都配备了不同类型的统计分析工具(例如,在InfluxDB中,您可以立即使用查询语言进行分析,此外还有一个强大的流/批处理处理器,甚至可以超越它(。
它们中的大多数也配备了通知工具(例如,前面提到的Influx流处理器内置了统计事件的通知操作(。
因此,如果您正在寻找长期/可扩展的解决方案(BTW的预期规模是多少?(,这是您的最佳选择之一。不过需要一些努力/重构。
当然,你总是可以用现有的工具来实现它。
目前,您的"轮询工作者"解决方案似乎非常好,接下来您将使用特定于您的平台的统计库(对不起,不熟悉Python,您的数据库也不知道-无法给出使用哪个的具体建议(,然后您就可以了。