从RaspberryPi传感器向Django后端发送数据(频率、批量更新、健壮性)



我目前正在做一个比我习惯的稍微复杂一点的Raspberry Pi/Django项目

这个想法是两个有两个运行本地Python脚本的Raspberry Pi收集信息,每个脚本将使用图像处理从一个HDMI馈送(我已经弄清楚了所有部分——我想(中获取输入。现在我想让这两个树莓派(它们彼此不说话(连接到后端服务器,该服务器将组合、存储(和处理(我的两个Pis 收集的信息

我希望每个Pi每秒处理一帧,将其与前一秒的帧进行比较(他只关注一些不同的事情(,隔离任何新事件,并将其发送到服务器。因此,我预计每秒不超过12个带二进制时间戳的数据点。

现在,在这里做这件事的明智方法是什么?

  • 我是否每秒都与后端联系?每10秒
  • 如何生成这些批量HttpRequest?通过POST请求?通过我发送给Django后端处理的一个简单的文本文件?(我找到了一些关于django"批量更新"的信息,但我不确定是否完全涵盖了它(
  • 如何使其强健?在本地删除日志之前,我如何确保所有数据都成功传输?(如果一个呼叫由于某种原因失败,或者被延迟,我如何确保下一个呼叫能够补偿丢失的信息?(

基本上,我是在询问制作基于物联网的项目的建议,在该项目中,传感器收集大量信息并希望将其发送到后端服务器进行处理,以及应该如何设计归档过程

PS:我希望图像处理部分(每秒1帧(在我的Pi Zero上足够快(因为它非常简单(;这个级别的积压不应该是个问题。

PPS:我正在使用django后端(即使它看起来有点过头了(a/因为我已经很了解这个框架了b/因为我希望使用django从收集的组合数据点构建实时性能指标,并在网页上(几乎(实时显示它们。

非常感谢!

这在一定程度上取决于你需要它的弹性。如果你真的负担不起丢失一个更新的费用,我会考虑使用RabbitMQ这样的消息队列-客户端会直接向队列中添加内容,服务器会依次关闭它们,而根本不需要涉及HTTP请求。

否则,只将每个帧的数据以某种序列化格式(即JSON(POST会简单得多,Django只需对列表进行反序列化和迭代,将每个条目保存到数据库中。对于您描述的速率来说,这个应该足够快了——我预计保存十几个数据库条目所需的时间明显少于半秒——但这仍然留下了一个问题,即如果由于某种原因出现问题,该怎么办。在服务器上设置一个超短的超时将有所帮助,就像在确认数据已保存之前保持要发布的数据一样,并在客户端中创建唯一的ID以确保请求是幂等的。

最新更新