Skip to content

GENUNITS

GENUNITS shows Genset details for each physical unit with the relevant station.

GENUNITS is a public table, and is available to all participants.

Source

GENUNITS updates whenever plant details change.

Column Schema

GENSETID

Physical Unit identifier

SQL Type: VARCHAR2(20) Polars Type: pl.Categorical

This column is mandatory, and a primary key.

Examples:

  • ADPBA1
  • ADPBA1G
  • ADPBA1L
  • ADPMH1
  • ADPPV1
  • ADPPV2
  • ADPPV3
  • AGLHAL
  • AGLNOW1
  • AGLSITA1

AGCFLAG

AGC Available flag

SQL Type: VARCHAR2(2) Polars Type: pl.Boolean

This column is not mandatory.

AEMO's documentation says this is a string type, even though it is logically a binary value. You may want to map letters to a boolean with {'Y': 1, 'N': 0}.

CDINDICATOR

Centrally dispatched Indicator

SQL Type: VARCHAR2(10) Polars Type: str

This column is not mandatory.

Examples:

  • N
  • Y

CO2E_DATA_SOURCE

An indicator as to the source of the emission factor used in the calculation of the index. The applicable values for this field would be NTNDP which indicates the emission factor is quoted from the National Transmission Network Development Plan or Estimated to indicate the emission factor has been calculated using an internal AEMO procedure based upon the Department of Climate Change and Energy Efficiency NGA factors

SQL Type: VARCHAR2(20) Polars Type: str

This column is not mandatory.

Examples:

  • Estimate - NGA 2011
  • Estimate - NGA 2012
  • Estimate - NGA 2014
  • Estimate - NGA 2015
  • Estimate - NGA 2016
  • Estimate - Other
  • Excluded NMNS
  • ISP 2018
  • ISP 2020
  • ISP2020

CO2E_EMISSIONS_FACTOR

The emissions factor for the generating unit, as calculated by Settlements staff members

SQL Type: NUMBER(18,8) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.01561827, 0, 1.64871738

CO2E_ENERGY_SOURCE

The energy source for the generating unit, as used in the calculation of the CO2-e emissions factor. Distinct from the Energy Source for a generating unit published as part of the Registration Master List

SQL Type: VARCHAR2(100) Polars Type: str

This column is not mandatory.

Examples:

  • Bagasse
  • Battery Storage
  • Biomass and industrial materials
  • Black coal
  • Brown coal
  • Coal Seam Methane
  • Coal mine waste gas
  • Coal seam methane
  • Diesel oil
  • Ethane

DISPATCHTYPE

Type NET/NET identifies if DUID is a Scheduled and GROSS/NET identifies if DUID is either Semi-Scheduled or Non-Scheduled.

Warning

The values here differ from the same column in other tables.

The SQL type is VARCHAR2(20). This is actually a factor/enum, with values:

  • GROSS/NET

  • NET/NET

This column is not mandatory.

GENSETNAME

Genset name

SQL Type: VARCHAR2(40) Polars Type: str

This column is not mandatory.

GENSETTYPE

Identifies LOAD, GENERATOR or BIDIRECTIONAL. This will likely expand to more generic models as new technology types are integrated into the NEM.

SQL Type: VARCHAR2(15) Polars Type: pl.Categorical

This column is not mandatory.

Examples:

  • BIDIRECTIONAL
  • GENERATOR
  • LOAD

LASTCHANGED

Last date and time record changed

For more information, see the dedicated documentation page.

SQL Type: DATE Polars Type: pl.Datetime()

This column is not mandatory.

Example: 2005/11/23 09:55:53

MAXCAPACITY

Maximum capacity

SQL Type: NUMBER(6,0) Polars Type: pl.Int32

This column is not mandatory.

Examples: 1, 3756

MAXSTORAGECAPACITY

The rated storage capacity (MWh), information only

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 4.8, 2, 1997

MINCAPACITY

Minimum capacity only for load side of BDU, otherwise 0 (MW)

SQL Type: NUMBER(6,0) Polars Type: pl.Int32

This column is not mandatory.

Examples: 2, 500

MKTGENERATORIND

Market Generator Indicator Flag

SQL Type: VARCHAR2(10) Polars Type: pl.Boolean

This column is not mandatory.

AEMO's documentation says this is a string type, even though it is logically a binary value. You may want to map letters to a boolean with {'Y': 1, 'N': 0}.

NORMALSTATUS

On / Off for load

Warning

Despite AEMO's description of On/Off, this actually takes values Y and N. This differs from columns with the same name in other tables (which use ON and OFF).

SQL Type: VARCHAR2(10) Polars Type: pl.Boolean

This column is not mandatory.

AEMO's documentation says this is a string type, even though it is logically a binary value. You may want to map letters to a boolean with {'Y': 1, 'N': 0}.

REGISTEREDCAPACITY

Registered capacity

SQL Type: NUMBER(6,0) Polars Type: pl.Int32

This column is not mandatory.

Examples: 1, 3756

REGISTEREDMINCAPACITY

Registered minimum capacity only for load side of BDU, otherwise 0 (MW)

SQL Type: NUMBER(6,0) Polars Type: pl.Int32

This column is not mandatory.

Examples: 2, 755

STARTTYPE

Fast / Slow / Not Dispatched

SQL Type: VARCHAR2(20) Polars Type: pl.Categorical

This column is not mandatory.

Examples:

  • FAST
  • SLOW

STATIONID

Station Identifier

For more information, see the dedicated documentation page.

SQL Type: VARCHAR2(10) Polars Type: pl.Categorical

This column is not mandatory.

VOLTLEVEL

Voltage level

SQL Type: NUMBER(6,0) Polars Type: pl.Int32

This column is not mandatory.

Examples: 1, 500

SETLOSSFACTOR

Not used

SQL Type: NUMBER(16,6) Polars Type: pl.Float64

This column is unused.

SPINNINGFLAG

Not used

SQL Type: VARCHAR2(2) Polars Type: pl.Categorical

This column is unused.

Examples:

  • N
  • Y

New Data Timing

When plant details change

Code Examples

Polars

Casting is enums, categoricals etc is not essential, but may speed up parsing. Swapping int for pl.UInt16, pl.Int32 would also speed up parsing. However some of the datatypes are inferred, so they may be wrong.

This code deduplicates for you. Deduplication is normally only required across multiple months.

This code assumes that all columns are present, which may not be true for older files.

import polars as pl
import polars.selectors as cs

# e.g. "2029/03/15 00:05:00"
dt_s_fmt = "%Y/%m/%d %H:%M:%S"

csv_paths = ["SOMEFILE.CSV", "OTHERFILE.CSV"]

lf = (
    pl.concat(
        [
            pl.scan_csv(
                csv_path,  # must be unzipped beforehand
                skip_rows=1,  # skip the header
                infer_schema=False,  # much faster
            )
            .filter(cs.by_index(0) == "D")  # drop the footer
            .select(~cs.by_index(range(4)))  # drop metadata columns
            for csv_path in csv_paths
        ],
        how="diagonal_relaxed",
    )
    .with_columns(
        pl.col("AGCFLAG").replace({"Y": 1, "N": 0}),
        pl.col("MKTGENERATORIND").replace({"Y": 1, "N": 0}),
        pl.col("NORMALSTATUS").replace({"Y": 1, "N": 0}),
    )
    .with_columns(
        pl.col("LASTCHANGED").str.strptime(pl.Datetime, dt_s_fmt),
    )
    # Polars can't cast string straight to bool. Need to go via something else.
    .cast({"AGCFLAG": pl.UInt8, "MKTGENERATORIND": pl.UInt8, "NORMALSTATUS": pl.UInt8})
    .cast(
        {
            "GENSETID": pl.Categorical,
            "AGCFLAG": pl.Boolean,
            "CDINDICATOR": str,
            "CO2E_DATA_SOURCE": str,
            "CO2E_EMISSIONS_FACTOR": pl.Float64,
            "CO2E_ENERGY_SOURCE": str,
            "DISPATCHTYPE": pl.Enum(["GROSS/NET", "NET/NET"]),
            "GENSETNAME": str,
            "GENSETTYPE": pl.Categorical,
            "MAXCAPACITY": int,  # or pl.Int32
            "MAXSTORAGECAPACITY": pl.Float64,
            "MINCAPACITY": int,  # or pl.Int32
            "MKTGENERATORIND": pl.Boolean,
            "NORMALSTATUS": pl.Boolean,
            "REGISTEREDCAPACITY": int,  # or pl.Int32
            "REGISTEREDMINCAPACITY": int,  # or pl.Int32
            "STARTTYPE": pl.Categorical,
            "STATIONID": pl.Categorical,
            "VOLTLEVEL": int,  # or pl.Int32
            "SETLOSSFACTOR": pl.Float64,
            "SPINNINGFLAG": pl.Categorical,
        }
    )
    # Drop deprecated/unused columns
    .drop("SETLOSSFACTOR", "SPINNINGFLAG")
    # Deduplicate
    # We want one row per ['GENSETID']
    # Tie-breaker: greatest value of ['LASTCHANGED']
    .sort(["LASTCHANGED"], descending=False)
    .unique(subset=["GENSETID"], keep="last")
)

Nemosis

This table is not yet available in Nemosis.

Example File

From PUBLIC_ARCHIVE_GENUNITS_FILE01_202609010000.zip

GENSETIDSTATIONIDSETLOSSFACTORCDINDICATORAGCFLAGSPINNINGFLAGVOLTLEVELREGISTEREDCAPACITYDISPATCHTYPESTARTTYPEMKTGENERATORINDNORMALSTATUSMAXCAPACITYGENSETTYPEGENSETNAMELASTCHANGEDCO2E_EMISSIONS_FACTORCO2E_ENERGY_SOURCECO2E_DATA_SOURCEMINCAPACITYREGISTEREDMINCAPACITYMAXSTORAGECAPACITY
CALL_A_1YNY13230GROSS/NETSLOWYN30GENERATOR2008/12/10 09:32:21
CALL_A_3YNY13230GROSS/NETSLOWYN30GENERATOR2008/12/10 09:32:21
MRIDGEYNN27556GROSS/NETFASTYN56GENERATOR2008/12/10 09:32:21
SWAN_A_1YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
SWAN_A_2YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
SWAN_A_3YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
SWAN_A_4YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
SWAN_A_5YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
SWAN_A_6YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
SWAN_B_1YYY275125GROSS/NETSLOWYN125GENERATOR2012/06/08 12:35:441.091Black coalNTNDP 2011
SWAN_B_2YYY275125GROSS/NETSLOWYN125GENERATOR2012/06/08 12:35:441.091Black coalNTNDP 2011
...

CSETP.WORLDDVD_GENUNITSAEMOPUBLIC2026/10/0915:36:59001791524219360MONTHLY_ARCHIVE001791524219360
IPARTICIPANT_REGISTRATIONGENUNITS3GENSETIDSTATIONIDSETLOSSFACTORCDINDICATORAGCFLAGSPINNINGFLAGVOLTLEVELREGISTEREDCAPACITYDISPATCHTYPESTARTTYPEMKTGENERATORINDNORMALSTATUSMAXCAPACITYGENSETTYPEGENSETNAMELASTCHANGEDCO2E_EMISSIONS_FACTORCO2E_ENERGY_SOURCECO2E_DATA_SOURCEMINCAPACITYREGISTEREDMINCAPACITYMAXSTORAGECAPACITY
DPARTICIPANT_REGISTRATIONGENUNITS3CALL_A_1YNY13230GROSS/NETSLOWYN30GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3CALL_A_3YNY13230GROSS/NETSLOWYN30GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3MRIDGEYNN27556GROSS/NETFASTYN56GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3SWAN_A_1YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3SWAN_A_2YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3SWAN_A_3YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3SWAN_A_4YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3SWAN_A_5YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3SWAN_A_6YYY11068GROSS/NETSLOWYN68GENERATOR2008/12/10 09:32:21
DPARTICIPANT_REGISTRATIONGENUNITS3SWAN_B_1YYY275125GROSS/NETSLOWYN125GENERATOR2012/06/08 12:35:441.091Black coalNTNDP 2011
DPARTICIPANT_REGISTRATIONGENUNITS3SWAN_B_2YYY275125GROSS/NETSLOWYN125GENERATOR2012/06/08 12:35:441.091Black coalNTNDP 2011
...
CEND OF REPORT985

GENSETID,STATIONID,SETLOSSFACTOR,CDINDICATOR,AGCFLAG,SPINNINGFLAG,VOLTLEVEL,REGISTEREDCAPACITY,DISPATCHTYPE,STARTTYPE,MKTGENERATORIND,NORMALSTATUS,MAXCAPACITY,GENSETTYPE,GENSETNAME,LASTCHANGED,CO2E_EMISSIONS_FACTOR,CO2E_ENERGY_SOURCE,CO2E_DATA_SOURCE,MINCAPACITY,REGISTEREDMINCAPACITY,MAXSTORAGECAPACITY
CALL_A_1,,,Y,N,Y,132,30,GROSS/NET,SLOW,Y,N,30,GENERATOR,,"2008/12/10 09:32:21",,,,,,
CALL_A_3,,,Y,N,Y,132,30,GROSS/NET,SLOW,Y,N,30,GENERATOR,,"2008/12/10 09:32:21",,,,,,
MRIDGE,,,Y,N,N,275,56,GROSS/NET,FAST,Y,N,56,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_1,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_2,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_3,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_4,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_5,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_A_6,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
SWAN_B_1,,,Y,Y,Y,275,125,GROSS/NET,SLOW,Y,N,125,GENERATOR,,"2012/06/08 12:35:44",1.091,"Black coal","NTNDP 2011",,,
SWAN_B_2,,,Y,Y,Y,275,125,GROSS/NET,SLOW,Y,N,125,GENERATOR,,"2012/06/08 12:35:44",1.091,"Black coal","NTNDP 2011",,,
...
C,SETP.WORLD,DVD_GENUNITS,AEMO,PUBLIC,2026/10/09,15:36:59,001791524219360,MONTHLY_ARCHIVE,001791524219360
I,PARTICIPANT_REGISTRATION,GENUNITS,3,GENSETID,STATIONID,SETLOSSFACTOR,CDINDICATOR,AGCFLAG,SPINNINGFLAG,VOLTLEVEL,REGISTEREDCAPACITY,DISPATCHTYPE,STARTTYPE,MKTGENERATORIND,NORMALSTATUS,MAXCAPACITY,GENSETTYPE,GENSETNAME,LASTCHANGED,CO2E_EMISSIONS_FACTOR,CO2E_ENERGY_SOURCE,CO2E_DATA_SOURCE,MINCAPACITY,REGISTEREDMINCAPACITY,MAXSTORAGECAPACITY
D,PARTICIPANT_REGISTRATION,GENUNITS,3,CALL_A_1,,,Y,N,Y,132,30,GROSS/NET,SLOW,Y,N,30,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,CALL_A_3,,,Y,N,Y,132,30,GROSS/NET,SLOW,Y,N,30,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,MRIDGE,,,Y,N,N,275,56,GROSS/NET,FAST,Y,N,56,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_1,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_2,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_3,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_4,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_5,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_A_6,,,Y,Y,Y,110,68,GROSS/NET,SLOW,Y,N,68,GENERATOR,,"2008/12/10 09:32:21",,,,,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_B_1,,,Y,Y,Y,275,125,GROSS/NET,SLOW,Y,N,125,GENERATOR,,"2012/06/08 12:35:44",1.091,"Black coal","NTNDP 2011",,,
D,PARTICIPANT_REGISTRATION,GENUNITS,3,SWAN_B_2,,,Y,Y,Y,275,125,GROSS/NET,SLOW,Y,N,125,GENERATOR,,"2012/06/08 12:35:44",1.091,"Black coal","NTNDP 2011",,,
...
C,"END OF REPORT",985

Availability

Visibility: Public

This table is in the public monthly MMSDM archive.

I have collated the list of all those files into one place, in this CSV metadata file. (Columns year, month, url, compressed_size in bytes).

The earliest available data is month 1 of 2015. The most recent available data is month 9 of 2026.

Every month in between has a file. (No gaps.)

Data Size

Each year of data is approximately 183 KB when zipped, 2 MB as unzipped CSV.

Deduplication and PDR Loader Configuration

The primary keys are:

The transaction type is "INSERT-UPDATE", which means that you will likely see duplicate data with different values.

You should deduplicate by sorting based on LASTCHANGED, within each group of primary keys.

PDR Loader configuration is:

Report Name Report Subtype Version
PARTICIPANT_REGISTRATION GENUNITS 2
PARTICIPANT_REGISTRATION GENUNITS 3

This means that the CSV files start with metadata columns:

I,PARTICIPANT_REGISTRATION,GENUNITS,2,...
D,PARTICIPANT_REGISTRATION,GENUNITS,2,...

or

I,PARTICIPANT_REGISTRATION,GENUNITS,3,...
D,PARTICIPANT_REGISTRATION,GENUNITS,3,...

ROW_FILTER_TYPE is LASTCHANGED

Indexes

This page as JSON (schema documented here, but may change)

Download a JSON Schema specification for this table.

Official AEMO schema documentation

Other Information

Package: PARTICIPANT_REGISTRATION