Skip to content

gertjana/p1_parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

codebeat badge Build Status Hex.pm Hex.pm

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.2"}
  ]
end

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 https://hexdocs.pm/p1_parser.

Contribute

|> fork |> feature branch |> pull request

Reference

I used https://www.netbeheernederland.nl/_upload/Files/Slimme_meter_15_a727fce1f1.pdf 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