从RaspberryPi Sensor发送数据到Django后端(频率,批量更新,健壮性)

时间:2018-11-11 14:15:01

标签: python django raspberry-pi iot bulk-load

我目前正在处理一个Raspberry Pi / Django项目,该项目比我以前所遇到的更为复杂。 (我要么做本地树莓派项目,要么做简单的Django网站;决不要将两者结合!)

这个想法是两个有两个Raspberry Pi的收集信息,这些信息运行一个本地Python脚本,每个信息都将使用图像处理从一个HDMI提要中输入(我已经弄清楚了所有内容-我认为)。现在,我希望这两个Raspberry Pi(彼此不交谈)连接到后端服务器,该服务器将合并,存储(和处理)我的两个Pis收集的信息

我希望每个Pi每秒处理一帧,并将其与之前一秒的帧(他正在寻找的只有几处不同)进行比较,以隔离任何新事件,并将其发送到服务器。因此,我希望每秒不超过十二个带有时间戳的二进制数据点。

现在在这里做什么聪明的方法是?

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

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

PS:我希望图像处理部分(以1 fps)在我的Pi Zero上足够快(因为它非常简单);该级别的待办事项应该不是问题。

PPS:我使用的是django后端(即使看起来有些过分了)     a /因为我已经非常了解框架     b /,因为我希望使用django从收集的合并数据点中建立实时性能指标,并(几乎)实时在网页上实时显示它们。

非常感谢您!

1 个答案:

答案 0 :(得分:2)

这部分取决于您需要的弹性。如果您真的无法承受一次更新丢失的损失,我会考虑使用诸如RabbitMQ之类的消息队列-客户端会将事情直接添加到队列中,而服务器会依次将它们弹出,而无需介入根本没有HTTP请求。

否则,仅以某种序列化格式(即JSON)发布每个帧的数据会容易得多,而Django将简单地反序列化并遍历列表,将每个条目保存到db。这应该足够快,足以满足您描述的速率-我希望保存十几个数据库条目所花费的时间大大少于半秒-但这仍然存在问题,如果事情挂了,该怎么办由于某种原因。在服务器上设置超短超时将有所帮助,这将使数据保持发布状态,直到您确认数据已保存为止-并且在客户端中创建唯一ID以确保请求是幂等的。