读取智能电表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第三方库


热门话题
java无法使用JSF访问托管bean方法   java是制作具有多值类型的HashMap的正确方法   javafx中TicTacToe的java更新UI   windows Java文件。getCanonicalFile()无法处理冒号“:”   java在一个布局屏幕中创建多个(26)按钮   java Android Studio:Gradle构建完成,有251个错误   我们如何在Java上为callfireapiclient编写单元/集成测试?   java无法将1715UTC转换为本地/gmt类型   具有已定义的数字序列的JAVA循环   Java程序正在netbeans中编译,但未在CMD中编译,包不存在   java Android构造函数和onCreate()之间有什么区别?   java配置弹性搜索结果评分   java LibGDX纹理是否可绘制?   java如何在Android中设置应用程序默认打开pdf   java是否有一种创造性的方法将多个参数传递给contentEquals()方法?   java在Android上存储Ed25519私钥