Parse NEM12 and NEM13 metering data files
Project description
nem-reader
The Australian Energy Market Operator (AEMO) defines a Meter Data File Format (MDFF) for reading energy billing data. This library sets out to parse these NEM12 (interval metering data) and NEM13 (accumulated metering data) data files into a useful python object, for use in other projects.
Usage
First, read in the NEM file:
from nemreader import read_nem_file
m = read_nem_file('examples/unzipped/Example_NEM12_actual_interval.csv')
You can see what data for the NMI and suffix (channel) is available:
> print(m.header)
HeaderRecord(version_header='NEM12', creation_date=datetime.datetime(2004, 4, 20, 13, 0), from_participant='MDA1', to_participant='Ret1')
> print(m.transactions)
{'VABD000163': {'E1': [], 'Q1': []}}
Standard suffix/channels are defined in the National Metering Identifier Procedure.
E1
is the general consumption channel (11
for NEM13).
Most importantly, you will want to get the energy data itself:
> for nmi in m.readings:
> for channel in m.readings[nmi]:
> for reading in m.readings[nmi][suffix][-1:]:
> print(reading)
Reading(t_start=datetime.datetime(2004, 4, 17, 23, 30), t_end=datetime.datetime(2004, 4, 18, 0, 0), read_value=14.733, uom='kWh', quality_method='S14', event='', read_start=None, read_end=None)
Command Line Usage
You can also output the NEM file in a more human readable format:
nemreader output example.zip
Which outputs transposed values to a csv file for all channels:
period_start,period_end,E1,Q1,quality_method
2004-02-01 00:00:00,2004-02-01 00:30:00,1.111,2.222,A
2004-02-01 00:30:00,2004-02-01 01:00:00,1.111,2.222,A
...
Charting
You can easily chart the usage data using pandas:
import matplotlib.pyplot as plt
from nemreader import output_as_data_frames
# Setup Pandas DataFrame
dfs = output_as_data_frames("examples/nem12/NEM12#000000000000002#CNRGYMDP#NEMMCO.zip")
nmi, df = dfs[0] # Return data for first NMI in file
df.set_index("period_start", inplace=True)
# Chart time of day profile
hourly = df.groupby([(df.index.hour)]).sum()
plot = hourly.plot(title=nmi, kind="bar", y=["E1"])
plt.show()
Or even generate a calendar with daily usage totals:
# Chart daily usage calendar
import pandas as pd
import calmap
plot = calmap.calendarplot(pd.Series(df.E1), daylabels="MTWTFSS")
plt.show()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for nemreader-0.5.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9e85b73c4d60a20cc119a0a3d8c6c4701151e61a93effdbba1639c3e2ede0fad |
|
MD5 | 330d451482c98f24b1a8e6f6853ce917 |
|
BLAKE2b-256 | 949887f54ffb7fef6696ae0895b8b1e35b8e8eb0ce796850937c13345a2bbe8d |