Django数据记录前端 - 小部件

时间:2011-01-18 20:39:04

标签: python django embedded-linux

使用Django创建类似于OpenNMS或任何类似网络管理工具的应用程序的最佳方法是什么?

Django应用程序需要不断轮询1个或更多设备,每个设备都有1个或更多模拟和数字输入。

基本上,如何将必要的轮询功能集成到django应用程序中,以便在轮询设备传感器时,结果值存储在Django ORM中,以便用户可以拉出它正在记录的数据的图形,图表等?

Django不适合这样的事情吗?我正在轮询的嵌入式设备有python API来设置事件处理程序,或者只是在需要时轮询对象的当前读数。 (http://www.phidgets.com

最终目标是这个Django站点驻留在Phidg​​etSBC上,然后可以通过网络轻松访问和控制。传感器值的轮询和存储需要24/7全天候运行,除非网络用户通过Django站点上的“设备管理区域”特别禁用。

此时我并不担心图表,控制输出引脚上的设备等,因为可靠地将数据放入数据库是首要任务。我不认为我创建的当前python包会很好地移植到Django,所以我宁愿从头开始并正确启动它。

由于

1 个答案:

答案 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访问该记录。