串行数据记录器,即时解析

时间:2012-12-04 15:14:39

标签: python sql pyserial

我正在尝试将Python数据记录器拼凑在一起并正在寻找一些建议。这是我的情况。 我不想要任何用户干预。只需插入并记录即可。到目前为止,我正在使用PySerial模块,并且能够将所有串行数据记录到文本文件中。我读了一行,存储在变量中,然后将该变量写入追加模式的文件中。

现在我想将这些数据传输到网上进行绘图。这是我头痛的地方。我应该尝试将其发送到SQL服务器还是仅发送到文本文件?我使用的是3g模块,但速度/带宽有限。数据每隔.25秒以1个样本流式传输到记录器。这是一个例子:

1 324 23454 2342 0 233 0 0 12223 66453 443 33 33 20 0 0 0 0

所以我认为我不需要发送每个样本,也许只需每秒一行或每隔一秒。

记录器只运行约5天,然后记录所有数据。现在我的问题是,是否有关于如何/在何处发送数据的建议? SQL或文本文件?接下来,如果我在线获取这些数据,是否可以轻松地在流式传输时实时绘制这些数据?

对于锦上添花,有时原始数据将以空格分隔,有时以制表符分隔,有时以逗号分隔。

任何意见都会受到赞赏!

1 个答案:

答案 0 :(得分:1)

好的,你这里有很多问题/问题。我会尝试解决每一个问题:

<强>数据库

将每一行保存在数据库的表中。它会让你的生活更轻松。我建议使用能够处理MySQL或Postgres等大负载的东西。我可以建议下面的表设计。 line是您的数据,uploaded是一个标志,指示此行是否已上传到服务器。 line_date可以记录读取的确切日期时间,这可能对捕获有用。如果您的数据行是可变的并且您不想设置固定长度,请将varchar(200)更改为text。我建议您将此表保留在客户端,并使用上传的字段作为标志来指示此行是否已上载到服务器。这样,在任何网络连接问题期间都不会丢失任何数据,并且您可以跟踪哪些行仍在等待上传。然后,您可以使用一个脚本来插入行,另一个脚本或线程读取未上载的行列表,并每隔一秒左右上载它们。为简单起见,您还可以在服务器上使用几乎相同的表设计。

CREATE TABLE data_lines (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    line VARCHAR(200),
    uploaded INT,
    line_date DATETIME
);

解析行

您提到原始数据将以空格分隔,有时以制表符分隔,有时以逗号分隔。这段简单的代码可以处理所有这些情况。

>>> line = "1,2 3\t4"
>>> print line.replace(',', ' ').split()
['1', '2', '3', '4']

实时图表

Flot是要走的路。他们做了很棒的基于网络的实时图表。你可以看到example of one here