Skip to main content

Read smart meter P1 packets

Project description

smeterd

Continious Integration

Read P1 smart meter packets in Python

installation

smeterd is fully python 3.6+ compatible.

It is highly recommended to use virtualenv for this. After having your virtualenv installed and activated run the following command to install the smeterd package directly from pypi (using pip):

$ pip install smeterd

Alternatively you can manually clone smeterd and run setupttools setup.py:

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

This will install the needed python libraries (in this case only pyserial) which are needed to start reading P1 packets.

If you don't want to install smeterd as a package you can run it directly from the root directory of the git repository using the following command but you are responsible for manually installing dependencies:

$ python -m smeterd

usage as a cli application

To get an idea of the available functionality see the help output:

$ smeterd -h

To make smeterd output more verbose use the -v option on any of the following commands. You can repeat the option to increase verbosity:

$ smeterd -vvv

To get help for a specific subcommand use the -h or --help after having typed the subcommand:

$ smeterd {subcommand} -h

Read one packet from your meter using the following command:

$ 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

By default the read-meter commands spits out the current date, total kwh1, total kwh2, total gas amounts and current kWh tariff on multiple lines.

You can make it print the same values as a tab seperated list:

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

By piping the output of the read-meter --tsv command to a bash script you can fully customize what you want to do with the data:

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

Typically you run this command from cron every x minutes (e.g. 5 minutes):

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

If you need to use another serial port then the default /dev/ttyUSB0 you can use the above command with the --serial-port option:

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

Currently only kwh1, kwh2 and gas usage are read. If you specify the --raw command line option you will see the raw packet from the smart meter:

$ 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)
!

usage as a python module

If using smeterd as a cli application you will find that its functionality is quite limited. You can use the smeterd package as a regular python module so you can integrate the reading of P1 packets into your own solutions.

First initiate a new SmartMeter object:

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

Now to read one packet from the meter:

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

Do not forget to close the connection to the serial port:

>>> meter.disconnect()

The SmartMeter.meter.read_one_packet() function will return an instance of the smeterd.meter.P1Packet class.

contribute

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Make sure that tests pass (make test)
  5. Push to the branch (git push origin my-new-feature)
  6. Create new Pull Request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smeterd-2.9.2.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

smeterd-2.9.2-py2.py3-none-any.whl (9.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file smeterd-2.9.2.tar.gz.

File metadata

  • Download URL: smeterd-2.9.2.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.1

File hashes

Hashes for smeterd-2.9.2.tar.gz
Algorithm Hash digest
SHA256 834eed583f3b967fe51b4daacba74786e721485aeff3260add96f540ed5a702f
MD5 cdfe5cc2e10975415551100409ec60cf
BLAKE2b-256 59028331cfc0295c0f423c6dd8ff9774fd22f660acefb8e74d72b12fa6419c8c

See more details on using hashes here.

File details

Details for the file smeterd-2.9.2-py2.py3-none-any.whl.

File metadata

  • Download URL: smeterd-2.9.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.1

File hashes

Hashes for smeterd-2.9.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4b1aa201ad74f4f9f2befda087323a4ccf974e9554229af5c69943ae5fd4ffb0
MD5 b824687e2503dec69e410523b7762071
BLAKE2b-256 4cd15086250bfe7e2a7b94de301b88ce50fde71e412ff225fc5583648abdf3ec

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page