读取智能电表P1数据包

smeterd的Python项目详细描述


https://travis-ci.org/nrocco/smeterd.svg?branch=master

用python读取p1智能电表数据包

安装

smeterd完全兼容Python2.7和Python3.6。

强烈建议对此使用virtualenv。 安装并激活virtualenv后,运行以下命令安装 直接来自pypi的smeterd包(使用pip):

$ pip install smeterd

或者,您可以手动克隆smeterd并运行setupttoolssetup.py

$ git clone https://github.com/nrocco/smeterd.git
$ cd smeterd
$ python setup.py install

这将安装所需的python库(在本例中仅为pyserial) 开始读取p1数据包所需的。

如果不想将smeterd安装为一个包,可以直接运行它 在git存储库的根目录中使用以下命令 您负责手动安装依赖项:

$ python -m smeterd

要手动安装所需的依赖项,请参见requirements.txt 或者直接运行:

$ pip install -r requirements.txt

用作cli应用程序

要了解可用的功能,请参见帮助输出:

$ smeterd -h

要使smeterd输出更详细,请使用 执行命令。您可以重复此选项以增加详细程度:

$ smeterd -vvv

要获取特定子命令的帮助,请在 键入子命令:

$ smeterd {subcommand} -h

使用以下命令从仪表中读取一个数据包:

$ smeterd read-meter
Time                      2013-08-25 10:10:45.337563
Total kWh High consumed   651038
Total kWh Low consumed    546115
Total gas consumed        963498
Current kWh tariff        1
Gas Measured At           1516562094

默认情况下,读取仪表命令会显示当前日期,总计kWh1, 多条线路上的总KWH2、总燃气量和当前千瓦时电价。

您可以使其打印与制表符分隔列表相同的值:

$ smeterd read-meter --tsv
2013-05-04 22:22:32.224929  331557  199339  749169  1       1516562094

通过将read meter–tsv命令的输出管道化到bash脚本,您可以完全 自定义要对数据执行的操作:

IFS='{tab}'
while read date kwh1 kwh2 gas tariff gas_measured_at; do
  mysql my_database -e "INSERT INTO data VALUES ('$date', $kwh1, $kwh2, $gas, $tariff, $gas_measured_at);"
done < /dev/stdin

通常,每隔x分钟(例如5分钟)从cron运行此命令:

*/5 * * * * /path/to/virtualenv/bin/smeterd read-meter | save_to_mysql_script.sh

如果需要使用另一个串行端口,则默认的/dev/ttyusb0可以 将上述命令与串行端口选项一起使用:

$ smeterd read-meter --serial-port /dev/ttyS0

目前只读取KWH1、KWH2和气体使用量。如果指定–raw 命令行选项您将看到来自智能仪表的原始数据包:

$ smeterd read-meter --raw
/ISk5\2ME382-1004

0-0:96.1.1(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
1-0:1.8.1(00331.476*kWh)
1-0:1.8.2(00199.339*kWh)
1-0:2.8.1(00000.000*kWh)
1-0:2.8.2(00000.000*kWh)
0-0:96.14.0(0001)
1-0:1.7.0(0000.13*kW)
1-0:2.7.0(0000.00*kW)
0-0:17.0.0(0999.00*kW)
0-0:96.3.10(1)
0-0:96.13.1()
0-0:96.13.0()
0-1:24.1.0(3)
0-1:96.1.0(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
0-1:24.3.0(130504210000)(00)(60)(1)(0-1:24.2.1)(m3)
(00749.123)
0-1:24.4.0(1)
!

用作Python模块

如果使用smeterd作为cli应用程序,您会发现它的功能 是相当有限的。您可以将smeterd包用作常规的python模块 因此,您可以将p1包的读取集成到您自己的解决方案中。

首先启动一个新的SmartMeter对象:

>>> from smeterd.meter import SmartMeter
>>> meter = SmartMeter('/dev/ttyS0')

现在从仪表上读取一个数据包:

>>> packet = meter.read_one_packet()
>>> print packet

不要忘记关闭与串行端口的连接:

>>> meter.disconnect()

函数将返回 smeterd.meter.p1包类。

贡献

  1. 叉开它
  2. 创建您的功能分支(git checkout-b my new feature
  3. 提交更改(git commit-am'add some feature'
  4. 确保测试通过(进行测试
  5. 推到分支(git push origin my new feature
  6. 创建新的拉取请求

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
SharedClassURLHelperImpl上的java线程块   为什么我要在Java中无休止地添加字符串   java比较两个数字字符串值   java Stanford POS标记器OutOfMemory读取标记器时出错   java嵌套Hibernate实体   java回收器视图未在片段中显示项   java向Camunda BPM Run Docker添加Spring事件侦听器   安卓 BitmapFactory:无法解码流:java。木卫一。即使文件实际存在,FileNotFoundException仍然存在   如何向数组中的每个元素添加特定的数字?JAVA   Java密码搜索字符   java此CacheManager配置不允许在ColdFusion中创建磁盘存储   java我可以放下osgi吗。企业我的equinox插件文件夹中的jar?   java属性文件点分隔键名   为什么Java允许枚举常量使用代码块?   脚本作为服务运行时文件上载在Jenkins中不起作用(Selenium/Java)   在CDI中,有没有一种一次性的方法来获取传递限定符?   Google+SignIn Java PhotoHunt示例未显示Google+SignIn按钮