Django 数据日志前端 - phidgets
如果想用Django来创建一个类似OpenNMS或者其他网络管理工具的应用,最好的方法是什么呢?
这个Django应用需要不断地去检查一个或多个设备,每个设备可能有一个或多个模拟和数字输入。
简单来说,怎么把需要的检查功能整合进Django应用里,这样当设备的传感器被检查时,得到的数值就能存储在Django的数据库里,用户就可以查看这些数据的图表和图形等。
Django适合做这样的事情吗?我正在检查的嵌入式设备有Python的API,可以用来设置事件处理器,或者在需要时直接获取当前的读数。(http://www.phidgets.com)
最终目标是让这个Django网站运行在PhidgetSBC上,并且可以通过网络轻松访问和控制。传感器值的检查和存储需要24小时不间断地运行,除非用户在Django网站的“设备管理区域”里特别禁用它。
目前我不太担心图表显示、控制输出引脚的设备等问题,因为把数据可靠地存入数据库才是最重要的。我觉得我现在的Python包可能不太适合移植到Django上,所以我宁愿从头开始,做好它。
谢谢!
1 个回答
你如何处理数据记录,主要取决于你想怎么展示这些数据。不过,除非你只想要实时显示(也就是说不需要图表),否则负责记录的代码就得在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来访问这些数据了。