读取智能电表P1数据包
smeterd的Python项目详细描述
用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包类。
贡献
- 叉开它
- 创建您的功能分支(git checkout-b my new feature)
- 提交更改(git commit-am'add some feature')
- 确保测试通过(进行测试)
- 推到分支(git push origin my new feature)
- 创建新的拉取请求