NEMFile(file_path, strict=False)

An NEM file object

nmi_channels: dict property

NMI channels in file

nmis: set property

NMIs in file

zipped: bool property

Check whether file is zipped or not

get_data_frame(split_days=False, set_interval=None)

Return NEMData as a DataFrame

get_pivot_data_frame(split_days=False, set_interval=None, include_serno=False)

Return NEMData as a DataFrame with suffix columns

nem_data()

Return data in legacy data format

parse_nem_file(nem_file, file_name='')

Parse NEM file and return meter readings named tuple

calculate_manual_reading(basic_data)

Calculate the interval between two manual readings

flatten_list(l)

takes a list of lists, l and returns a flat list

nth(iterable, n, default=None)

Returns the nth item or a default value

parse_100_row(row, file_name)

Parse header record (100)

RecordIndicator,VersionHeader,DateTime,FromParticipant,ToParticipant Example: 100,NEM12,200301011534,MDP1,Retailer1

parse_200_row(row)

Parse NMI data details record (200)

RecordIndicator,NMI,NMIConfiguration,RegisterID,NMISuffix,MDMDataStreamIdentifier,MeterSerialNumber,UOM,IntervalLength,NextScheduledReadDate Example: 200,VABD000163,E1Q1,1,E1,N1,METSER123,kWh,30,20040120

parse_250_row(row)

Parse basic meter data record (250)

RecordIndicator,NMI,NMIConfiguration,RegisterID,NMISuffix,MDMDataStreamIdentifier,MeterSeri

alNumber,DirectionIndicator,PreviousRegisterRead,PreviousRegisterReadDateTime,PreviousQuali tyMethod,PreviousReasonCode,PreviousReasonDescription,CurrentRegisterRead,CurrentRegister ReadDateTime,CurrentQualityMethod,CurrentReasonCode,CurrentReasonDescription,Quantity,U OM,NextScheduledReadDate,UpdateDateTime,MSATSLoadDateTime Example: 250,1234567890,1141,01,11,11,METSER66,E,000021.2,20031001103230,A,,,000534.5,20040201100030,E64,77,,343.5,kWh,20040509, 20040202125010,20040203000130

parse_300_row(row, interval, uom, meter_serial_number)

Interval data record (300)

RecordIndicator,IntervalDate,IntervalValue1 . . . IntervalValueN, QualityMethod,ReasonCode,ReasonDescription,UpdateDateTime,MSATSLoadDateTime Example: 300,20030501,50.1, . . . ,21.5,V,,,20030101153445,20030102023012

parse_400_row(row, interval_length)

Interval event record (400)

RecordIndicator,StartInterval,EndInterval,QualityMethod,ReasonCode,ReasonDescription Example: 400,1,28,S14,32

Note that intervals are indexed from 1 not 0.

parse_500_row(row)

Parse B2B details record

RecordIndicator,TransCode,RetServiceOrder,ReadDateTime,IndexRead Example: 500,S,RETNSRVCEORD1,20031220154500,001123.5

parse_550_row(row)

Parse B2B details record

RecordIndicator,PreviousTransCode,PreviousRetServiceOrder,CurrentTransCode,CurrentRetServiceOrder Example: 550,N,,A,

parse_datetime(record)

Parse a datetime string into a python datetime object

parse_interval_records(interval_record, interval_date, interval, uom, quality_method, meter_serial_number, event_code='', event_desc='')

Convert interval values into tuples with datetime

parse_nem12_rows(nem_list, file_name=None)

Parse NEM row iterator and return meter readings named tuple

parse_nem13_rows(nem_list)

Parse NEM row iterator and return meter readings named tuple

parse_reading(val)

Convert reading value to float (if possible)

read_nem_file(file_path, ignore_missing_header=False)

Read in NEM file and return meter readings named tuple

:param file_path: The NEM file to process :param ignore_missing_header: Whether to continue parsing if missing header. Will assume NEM12 format. :returns: The file that was created

update_reading_events(readings, event_record)

Updates readings from a 300 row to reflect any events found in a subsequent 400 row