smeterd
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
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Make sure that tests pass (
make test) - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
Metadata
Release files for smeterd 2.9.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| smeterd-2.9.2.tar.gz | 10.6 kB | Without provenance | Details for smeterd-2.9.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| smeterd-2.9.2-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details for smeterd-2.9.2-py2.py3-none-any.whl |
Total release size: 19.9 kB
Release files / smeterd-2.9.2.tar.gz
| Download URL | smeterd-2.9.2.tar.gz |
|---|---|
| Size | 10.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
834eed583f3b967fe51b4daacba74786e721485aeff3260add96f540ed5a702f
|
|
BLAKE2b-256 checksum How to use checksums |
59028331cfc0295c0f423c6dd8ff9774fd22f660acefb8e74d72b12fa6419c8c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.1
|
Release files / smeterd-2.9.2-py2.py3-none-any.whl
| Download URL | smeterd-2.9.2-py2.py3-none-any.whl |
|---|---|
| Size | 9.3 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
4b1aa201ad74f4f9f2befda087323a4ccf974e9554229af5c69943ae5fd4ffb0
|
|
BLAKE2b-256 checksum How to use checksums |
4cd15086250bfe7e2a7b94de301b88ce50fde71e412ff225fc5583648abdf3ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.1
|
Security for smeterd 2.9.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.