Metadata-Version: 2.1
Name: smeterd
Version: 2.9.2
Summary: Read smart meter P1 packets
Home-page: https://github.com/nrocco/smeterd
Author: Nico Di Rocco
Author-email: dirocco.nico@gmail.com
License: GPLv3
Keywords: smartmeter,kwh,gas,p1
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Utilities
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Provides-Extra: develop
License-File: LICENSE

smeterd
=======

![Continious Integration](https://github.com/nrocco/smeterd/workflows/Continious%20Integration/badge.svg?branch=master)

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
