使用Django创建类似于OpenNMS或任何类似网络管理工具的应用程序的最佳方法是什么?
Django应用程序需要不断轮询1个或更多设备,每个设备都有1个或更多模拟和数字输入。
基本上,如何将必要的轮询功能集成到django应用程序中,以便在轮询设备传感器时,结果值存储在Django ORM中,以便用户可以拉出它正在记录的数据的图形,图表等?
Django不适合这样的事情吗?我正在轮询的嵌入式设备有python API来设置事件处理程序,或者只是在需要时轮询对象的当前读数。 (http://www.phidgets.com)
最终目标是这个Django站点驻留在PhidgetSBC上,然后可以通过网络轻松访问和控制。传感器值的轮询和存储需要24/7全天候运行,除非网络用户通过Django站点上的“设备管理区域”特别禁用。
此时我并不担心图表,控制输出引脚上的设备等,因为可靠地将数据放入数据库是首要任务。我不认为我创建的当前python包会很好地移植到Django,所以我宁愿从头开始并正确启动它。
由于
答案 0 :(得分:2)
如何处理数据记录实际上取决于您希望如何呈现数据。但是,除非您只对实时显示感兴趣(即没有图表),否则任何负责日志记录的代码都必须在HTTP请求/响应周期之外运行,因此不在Django之外。
可能最直接的方法是编写一个单独的python脚本,该脚本将在后台运行,它会定期轮询phidget API并将数据转储到数据库中。这种方法的一个潜在的主要问题是传感器配置基本上是硬编码的 - 如果你想添加或删除传感器,你将不得不改变python脚本。这对您的申请可能有用,也可能不重要。
为了更好地将脚本检索到的数据集成到Django中,您可以创建一些这样的模型:
class Device(models.Model):
"""A sensor"""
name = models.CharField(max_length=20)
...
class DataPoint(models.Model):
value = models.DecimalField(decimal_places=2, max_digits=10) # whatever is appropriate
timestamp = models.DateTimeField()
device = models.ForiegnKey(Device)
运行syncdb时,您可以看到将要创建的表名。它应该是这样的:
appname_device
appname_data_point
然后,您的后台脚本将在appname_data_point表中创建记录,然后可以通过Django ORM访问该记录。