Django 数据日志前端 - phidgets

2 投票
1 回答
1037 浏览
提问于 2025-04-16 10:12

如果想用Django来创建一个类似OpenNMS或者其他网络管理工具的应用,最好的方法是什么呢?

这个Django应用需要不断地去检查一个或多个设备,每个设备可能有一个或多个模拟和数字输入。

简单来说,怎么把需要的检查功能整合进Django应用里,这样当设备的传感器被检查时,得到的数值就能存储在Django的数据库里,用户就可以查看这些数据的图表和图形等。

Django适合做这样的事情吗?我正在检查的嵌入式设备有Python的API,可以用来设置事件处理器,或者在需要时直接获取当前的读数。(http://www.phidgets.com

最终目标是让这个Django网站运行在PhidgetSBC上,并且可以通过网络轻松访问和控制。传感器值的检查和存储需要24小时不间断地运行,除非用户在Django网站的“设备管理区域”里特别禁用它。

目前我不太担心图表显示、控制输出引脚的设备等问题,因为把数据可靠地存入数据库才是最重要的。我觉得我现在的Python包可能不太适合移植到Django上,所以我宁愿从头开始,做好它。

谢谢!

1 个回答

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来访问这些数据了。

撰写回答