[![codebeat badge](]( [![Build Status](]( [![](]( [![](](

# P1 Parser

Parses telegram's as they are output through the P1 serial port of a smartmeter

Note that this only applies to Dutch smartmeters. 

## Installation

def deps do
    {:p1_parser, "~> 0.2.1"}

## Usage 

Get a usb to p1 cable and plug it in, you should see it appear as a serial device

On an raspberry pi it will show up as `/dev/ttyUSB0`, now the smartmeter will ouput a telegram every x seconds

use a serial libray like for instance `nerves_uart` to connect to it and receive telegrams

each line in the telegram can now be parsed like this
iex> P1.parse!("1-0:1.8.1(123456.789*kWh)")
Which will result in
  %P1.Channel{channel: 0, medium: :electricity},
  %P1.Tags{tags: [:total, :energy, :consume, :low]},
  [%P1.Value{unit: "kWh", value: 123456.789}]

## Documentation 

The docs can be found at [](

## Contribute

`|> fork |> feature branch |> pull request`

## Reference 

I used as a reference

## Todo's

 - ~~Parse units~~
 - ~~Parse Summer/Winter time information in timestamp~~
 - ~~return structs~~
 - ~~Convert timestamps to proper date/times~~
 - Parse entire telegram
 - Validate checksum