diff --git a/CHANGELOG.md b/CHANGELOG.md index 70e2650..9a1d48b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,18 @@ PlanDetailV2 data rather than user-entered rates. - **Universal CDR wizard.** New 4-step flow: state → distributor → retailer (from the AER registry) → CDR plan. Replaces the bespoke GloBird-only rate-entry form. +- **117 retailers via EME refdata2** registry (Phase 3.1 prep). Wizard + sources retailer endpoints from `api.energymadeeasy.gov.au/refdata2` with + the baked-in EME snapshot as the offline fallback. +- `RetailerEndpoint.cdr_brand` field carries the CDR-PlanDetail `brand` + discriminator. Disambiguates the 14 brands that share a base URI + (Energy Locals hosts ARCLINE / RAA / Cooperative / Indigo / Sonnen / + iO; OVO hosts MYOB + CTM; Radian hosts iO; Future X hosts Sunswitch). +- `fetch_plan_list` / `fetch_plan_detail` accept optional `brand=` + parameter and append `?brand=` so shared-base-URI plans are + correctly disambiguated. +- Baked-in EME refdata2 snapshot at + `custom_components/pricehawk/cdr/data/eme_refdata.json`. - **8 retailer incentive parsers.** GloBird (ZEROHERO + Super Export + 3-for-Free), AGL (Solar Savers bonus FIT + Three for Free), Origin (tiered FIT), Alinta (stepped FiT), EnergyAustralia (Solar Max + PowerResponse VPP), Engie (free @@ -90,6 +102,8 @@ PlanDetailV2 data rather than user-entered rates. are gone. - Skip-CDR sentinel and "enter rates manually" copy from the retailer + plan pickers (with manual entry deleted, the affordance dead-ended on itself). +- `cdr/data/cdr_endpoints.json` (legacy jxeeno snapshot) — superseded by + the EME baked-in copy. ### Breaking Changes diff --git a/custom_components/pricehawk/cdr/cdr_client.py b/custom_components/pricehawk/cdr/cdr_client.py index cf9b9eb..c55f8e5 100644 --- a/custom_components/pricehawk/cdr/cdr_client.py +++ b/custom_components/pricehawk/cdr/cdr_client.py @@ -59,6 +59,7 @@ async def fetch_plan_list( *, customer_type: str = "RESIDENTIAL", fuel_type: str = "ELECTRICITY", + brand: str | None = None, ) -> list[dict[str, Any]]: """Fetch all residential-electricity MARKET plans for ``base_url``. @@ -69,6 +70,11 @@ async def fetch_plan_list( Filtering is done client-side because the CDR list endpoint does not accept ``customerType`` as a query param. + ``brand`` is the CDR ``brand`` discriminator for shared base URIs + (e.g. seven brands hosted on ``cdr.energymadeeasy.gov.au/energy-locals/``). + Passed as ``?brand=`` and harmlessly ignored by single-brand + endpoints. + A 404 at the list endpoint indicates a bad base URL or proxy-path regression, not a stale plan — surfaces as ``CdrAPIError`` rather than ``CdrPlanNotFound`` (which is reserved for the detail @@ -78,14 +84,15 @@ async def fetch_plan_list( seen_ids: set[str] = set() out: list[dict[str, Any]] = [] while True: - params = urllib.parse.urlencode( - { - "type": "ALL", - "fuelType": fuel_type, - "page": page, - "page-size": _LIST_PAGE_SIZE, - } - ) + query: dict[str, Any] = { + "type": "ALL", + "fuelType": fuel_type, + "page": page, + "page-size": _LIST_PAGE_SIZE, + } + if brand: + query["brand"] = brand + params = urllib.parse.urlencode(query) url = f"{base_url.rstrip('/')}/cds-au/v1/energy/plans?{params}" try: body = await _get_json(session, url, x_v="1") @@ -116,6 +123,8 @@ async def fetch_plan_detail( session: aiohttp.ClientSession, base_url: str, plan_id: str, + *, + brand: str | None = None, ) -> dict[str, Any]: """Fetch PlanDetailV2 envelope for ``plan_id``. @@ -123,8 +132,13 @@ async def fetch_plan_detail( so callers can store the raw bytes as a config-entry fixture without losing audit fields. Raises ``CdrPlanNotFound`` on 404 — that actually does mean a stale planId at this endpoint. + + ``brand`` is the CDR brand discriminator for shared base URIs — see + ``fetch_plan_list`` docstring. Appended as ``?brand=`` when set. """ url = f"{base_url.rstrip('/')}/cds-au/v1/energy/plans/{plan_id}" + if brand: + url = f"{url}?{urllib.parse.urlencode({'brand': brand})}" return await _get_json(session, url, x_v="3") diff --git a/custom_components/pricehawk/cdr/data/cdr_endpoints.json b/custom_components/pricehawk/cdr/data/cdr_endpoints.json deleted file mode 100644 index 1716313..0000000 --- a/custom_components/pricehawk/cdr/data/cdr_endpoints.json +++ /dev/null @@ -1,1045 +0,0 @@ -{ - "data": [ - { - "dataHolderBrandId": "0f04b9b4-3881-ef11-9443-000d3a79c46e", - "interimId": "8a28d246-46ba-4ff3-afcd-14b7d728fa1c", - "brandName": "Arcline by RACV", - "industries": [ - "energy" - ], - "logoUri": "https://public.energylocals.com.au/public/cdr_arcline.png", - "publicBaseUri": "https://public.cdr.energy.arcline.com.au", - "abn": "23606408879", - "acn": "606408879", - "lastUpdated": "2026-05-06T04:22:04Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/arcline" - }, - { - "dataHolderBrandId": "94bec46a-2308-ef11-989a-6045bd4001ae", - "interimId": "1a7c7ab5-f351-4039-8c99-21ff2a8f1787", - "brandName": "Energy Locals", - "industries": [ - "energy" - ], - "logoUri": "https://public.energylocals.com.au/public/cdr.png", - "publicBaseUri": "https://public.cdr.energylocalsretail.com.au", - "abn": "23606408879", - "acn": "606408879", - "lastUpdated": "2026-05-06T04:22:04Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/energy-locals" - }, - { - "dataHolderBrandId": "721f880f-8e74-ef11-a4e6-000d3a79f8aa", - "interimId": "d5693987-1937-4f43-bddc-9df57b1866b0", - "brandName": "Aurora Energy", - "industries": [ - "energy" - ], - "logoUri": "https://www.auroraenergy.com.au/sites/default/files/2020-05/aurora-logo-transparent.png", - "publicBaseUri": "https://public.cdr.auroraenergy.com.au", - "abn": "85082464622", - "acn": "082464622", - "lastUpdated": "2026-05-06T04:22:06Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/aurora" - }, - { - "dataHolderBrandId": "244d8a80-3828-ed11-a832-000d3a8830d6", - "interimId": "37aebb2d-d96c-419f-8be4-f42cdffdb238", - "brandName": "Origin Energy", - "industries": [ - "energy" - ], - "logoUri": "https://res.cloudinary.com/originenergy/image/upload/v1667947270/CDR/origin-energy-logo.png", - "publicBaseUri": "https://public.mydata.cdr.originenergy.com.au", - "abn": "30000051696", - "acn": "000051696", - "lastUpdated": "2026-05-06T04:22:06Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/origin" - }, - { - "dataHolderBrandId": "d177e382-b12d-ed11-a832-000d3a8830d6", - "interimId": "a94e942b-6d39-4b4d-9b31-88e7cb65f6d1", - "brandName": "AGL", - "industries": [ - "energy" - ], - "logoUri": "https://agl.com.au/content/dam/digital/agl/images/logos/agl/agl-vertical-gradient.svg", - "publicBaseUri": "https://public.cdr.agl.com.au", - "abn": "74115061375", - "lastUpdated": "2026-05-06T04:21:59Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/agl", - "acn": "115061375" - }, - { - "dataHolderBrandId": "1cc7833a-b834-ed11-a832-000d3a8830d6", - "interimId": "1f1ef12a-f96f-467d-a69a-08160f2e6576", - "brandName": "EnergyAustralia", - "industries": [ - "energy" - ], - "logoUri": "https://www.energyaustralia.com.au/themes/custom/ea/assets/images/EA_logo.svg", - "publicBaseUri": "https://authncdr.energyaustralia.com.au", - "abn": "99086014968", - "acn": "086014968", - "lastUpdated": "2026-05-06T04:22:01Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/energyaustralia" - }, - { - "dataHolderBrandId": "40128cc1-56f8-ed11-a83b-000d3a8830d6", - "interimId": "1954f65b-b0c4-4e4d-8ae9-c1359ef09ce4", - "brandName": "ENGIE", - "industries": [ - "energy" - ], - "logoUri": "https://www.engie.com.au/sites/default/files/icons/engie_logo.png", - "publicBaseUri": "https://public.cdr.engie.com.au", - "abn": "67269241237", - "lastUpdated": "2026-05-06T04:22:04Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/engie", - "acn": "269241237" - }, - { - "dataHolderBrandId": "8bd0fd93-9d26-ee11-a83d-000d3a8830d6", - "interimId": "cd3f2e4f-bbef-4890-864b-67b7698c4624", - "brandName": "Alinta Energy", - "industries": [ - "energy" - ], - "logoUri": "https://www.alintaenergy.com.au/-/jssmedia/alinta-website/data/media/img/alinta_default_logo.png", - "publicBaseUri": "https://public.cdr.alintaenergy.com.au", - "abn": "22149658300", - "acn": "149658300", - "lastUpdated": "2026-05-06T04:22:06Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/alinta" - }, - { - "dataHolderBrandId": "b969898e-572f-ee11-a83d-000d3a8830d6", - "interimId": "ee2a4982-1616-4fe4-982a-8633293002ec", - "brandName": "Sumo Power", - "industries": [ - "energy" - ], - "logoUri": "https://sumo-public-share.s3.ap-southeast-2.amazonaws.com/SumoIT/URI/Sumo_Logo.png", - "publicBaseUri": "https://public-cdr-sumo.bravecloud.com/m8k36eqyhrvhqxeeic/public", - "abn": "86601199151", - "acn": "601199151", - "lastUpdated": "2026-05-06T04:22:04Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/sumo-power" - }, - { - "dataHolderBrandId": "49298578-5132-ee11-a83d-000d3a8830d6", - "interimId": "0ca1b95d-7f73-4bf9-99a3-fa428d26d733", - "brandName": "Kogan Energy", - "industries": [ - "energy" - ], - "logoUri": "https://s45145.pcdn.co/wp-content/uploads/2023/06/kogan-energy.png", - "publicBaseUri": "https://public.cdr.koganenergy.com.au", - "abn": "41154914075", - "acn": "154914075", - "lastUpdated": "2026-05-06T04:22:05Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/kogan" - }, - { - "dataHolderBrandId": "6aaeaf9b-5132-ee11-a83d-000d3a8830d6", - "interimId": "5141e4da-11cf-44ef-900b-54682bc0a49f", - "brandName": "Powershop", - "industries": [ - "energy" - ], - "logoUri": "https://www.powershop.com.au/_next/image?url=%2Fpowershop-logo.png&w=256&q=75", - "publicBaseUri": "https://public.cdr.powershop.com.au", - "abn": "41154914075", - "acn": "154914075", - "lastUpdated": "2026-05-06T04:22:05Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/powershop" - }, - { - "dataHolderBrandId": "de70398c-7e35-ee11-a83d-000d3a8830d6", - "interimId": "be9f78ea-d0cb-44a3-8318-09e41b2a0118", - "brandName": "ActewAGL", - "industries": [ - "energy" - ], - "logoUri": "https://www.actewagl.com.au/-/media/project/actewagl/actewagldigital/logos/common/logo/brand-logo-actewagl-blue/actewagl_logo_green.png?h=172&w=1343&rev=b507a6379b2542b2afd10075d3318112&hash=640B0A9ED3B13973AEE5A7968C8AEB6A", - "publicBaseUri": "https://public.cdr.actewagl.com.au", - "abn": "46221314841", - "lastUpdated": "2026-05-06T04:22:03Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/actewagl", - "acn": "221314841" - }, - { - "dataHolderBrandId": "40596bd5-f037-ee11-a83d-000d3a8830d6", - "interimId": "3a767c2a-017c-44ac-b5c8-436689d397b6", - "brandName": "Diamond Energy", - "industries": [ - "energy" - ], - "logoUri": "https://diamondenergy.com.au/wp-content/uploads/2023/06/DE-logo-approved_your-pure-power-people.png", - "publicBaseUri": "https://cdr.diamondenergy.com.au:18101", - "abn": "97107516334", - "acn": "107516334", - "lastUpdated": "2026-05-06T04:22:02Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/diamond" - }, - { - "dataHolderBrandId": "32c3ea87-ce3b-ee11-a81c-002248143709", - "interimId": "15ed284e-f7b0-440d-b5dc-e9fe4c28c410", - "brandName": "COVAU PTY LIMITED", - "industries": [ - "energy" - ], - "logoUri": "https://covau.com.au/wp-content/uploads/2022/01/covau-logo-300.png", - "publicBaseUri": "https://public.cdr.covau.com.au", - "abn": "54090117730", - "acn": "090117730", - "lastUpdated": "2026-05-06T04:22:02Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/covau" - }, - { - "dataHolderBrandId": "4f2f096c-5841-ee11-a81c-002248143709", - "interimId": "97d5098f-d882-454b-979c-3c2b3cdbf44d", - "brandName": "Next Business Energy", - "industries": [ - "energy" - ], - "logoUri": "https://nextbusinessenergy.com.au/logo/nbe-logo.png", - "publicBaseUri": "https://public.cdr.nextbusinessenergy.com.au", - "abn": "91167937555", - "acn": "167937555", - "lastUpdated": "2026-05-06T04:22:06Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/next-business" - }, - { - "dataHolderBrandId": "ee8b5d25-93ae-ee11-a81c-0022481494e2", - "interimId": "78943358-0f53-4518-ac7d-f6a1903e276d", - "brandName": "1st Energy", - "industries": [ - "energy" - ], - "logoUri": "https://1stenergy.com.au/wp-content/uploads/2023/11/1stEnergy_colour_RGB.png", - "publicBaseUri": "https://public.cdr.1stenergy.com.au", - "abn": "71604999706", - "acn": "604999706", - "lastUpdated": "2026-05-06T04:22:03Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/1st-energy" - }, - { - "interimId": "45cd7adb-8830-4189-b5d7-4010c6dabb3c", - "brandName": "MYOB powered by OVO", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/ovo.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/ovo-energy", - "lastUpdated": "2025-07-07T05:24:42Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/ovo-energy", - "acn": "623475089", - "abn": "99623475089" - }, - { - "dataHolderBrandId": "f120a1b5-4c00-ef11-a73d-002248e1c726", - "interimId": "f918026a-b02c-4dea-89a0-e3295b7e7812", - "brandName": "Blue NRG", - "industries": [ - "energy" - ], - "logoUri": "https://www.bluenrg.com.au/wp-content/uploads/2024/02/Blue-NRGLogo-Inverted-RGB-1200px-W-72ppi.png", - "publicBaseUri": "https://public.cdr.bluenrg.com.au", - "abn": "30151014658", - "acn": "151014658", - "lastUpdated": "2026-05-06T04:22:02Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/blue-nrg" - }, - { - "dataHolderBrandId": "47dd2161-c951-ee11-a81c-002248e31327", - "interimId": "6b6e0923-4a4a-455a-a1b0-9f3228175788", - "brandName": "Nectr", - "industries": [ - "energy" - ], - "logoUri": "https://nectr.com.au/wp-content/uploads/2023/04/header-logo.svg", - "publicBaseUri": "https://public.cdr.nectr.com.au", - "abn": "82630397214", - "acn": "630397214", - "lastUpdated": "2026-05-06T04:22:06Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/nectr" - }, - { - "dataHolderBrandId": "3b80d279-c455-ee11-a81c-002248e31327", - "interimId": "052218fc-fb37-4087-b2cc-ced3f0dad299", - "brandName": "Dodo Power & Gas", - "industries": [ - "energy" - ], - "logoUri": "https://s0.2mdn.net/creatives/assets/4983616/Dodo_Logo_Aug23_V1.svg", - "publicBaseUri": "https://public.cdr.dodo.com", - "abn": "15123155840", - "acn": "123155840", - "lastUpdated": "2026-05-06T04:22:04Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/dodo" - }, - { - "dataHolderBrandId": "a18c6866-f45c-ee11-a81c-002248e31327", - "interimId": "b43ff855-5598-4dbb-8c1c-582f02c71e6f", - "brandName": "Momentum Energy", - "industries": [ - "energy" - ], - "logoUri": "https://www.momentumenergy.com.au/assets/images/logo.svg", - "publicBaseUri": "https://public.cdr.momentumenergy.com.au", - "abn": "42100569159", - "acn": "100569159", - "lastUpdated": "2026-05-06T04:22:01Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/momentum" - }, - { - "dataHolderBrandId": "d37e16d2-dd5d-ee11-a81c-002248e31327", - "interimId": "a53e525f-5ca0-4764-9617-3d2c161d828c", - "brandName": "Pacific Blue Retail", - "industries": [ - "energy" - ], - "logoUri": "https://www.pacificblue.com.au/sites/default/files/2023-04/Pacific_Blue_300px.png", - "publicBaseUri": "https://public.cdr.pacificblue.com.au", - "abn": "43155908839", - "acn": "155908839", - "lastUpdated": "2026-05-06T04:22:04Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/pacific-blue" - }, - { - "dataHolderBrandId": "8bbfb815-515e-ee11-a81c-002248e31327", - "interimId": "5c3a9def-c09b-4cbc-807d-a18364ee5232", - "brandName": "Tango Energy", - "industries": [ - "energy" - ], - "logoUri": "https://www.tangoenergy.com/sites/default/files/2022-08/Default-Logo-Tango.png", - "publicBaseUri": "https://public.cdr.tangoenergy.com", - "abn": "43155908839", - "acn": "155908839", - "lastUpdated": "2026-05-06T04:22:04Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/tango" - }, - { - "dataHolderBrandId": "c12829c8-3a63-ee11-a81c-002248e31327", - "interimId": "a259655d-31c2-4492-a5d9-2207f46c0713", - "brandName": "GloBird Energy", - "industries": [ - "energy" - ], - "logoUri": "https://www.globirdenergy.com.au/wp-content/uploads/2017/09/GloBird_web_logo.svg", - "publicBaseUri": "https://publiccdr.globirdenergy.com.au", - "abn": "68600285827", - "acn": "600285827", - "lastUpdated": "2026-05-06T04:22:01Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/globird" - }, - { - "dataHolderBrandId": "dc328d2c-a56c-ee11-a81c-002248e31327", - "interimId": "bc9c8ab7-5dc7-4b6b-ac48-2fe68fa781db", - "brandName": "Lumo Energy", - "industries": [ - "energy" - ], - "logoUri": "https://www.lumoenergy.com.au/assets/images/logo--lumo.svg", - "publicBaseUri": "https://public.cdr.lumoenergy.com.au", - "abn": "69100528327", - "acn": "100528327", - "lastUpdated": "2026-05-06T04:22:02Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/lumo" - }, - { - "dataHolderBrandId": "39230258-a56c-ee11-a81c-002248e31327", - "interimId": "eb76743a-4ee5-40a7-aa1b-bd3b719a7622", - "brandName": "Red Energy", - "industries": [ - "energy" - ], - "logoUri": "https://www.redenergy.com.au/assets/img/logo-red-energy.png", - "publicBaseUri": "https://public.cdr.redenergy.com.au", - "abn": "60107479372", - "acn": "107479372", - "lastUpdated": "2026-05-06T04:22:06Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/red-energy" - }, - { - "dataHolderBrandId": "54968899-b7b5-ef11-95f6-6045bd3f1493", - "interimId": "dbfb4be7-27bf-4335-9d92-7e25f1bb8e2a", - "brandName": "Amber", - "industries": [ - "energy" - ], - "logoUri": "https://cdn.prod.website-files.com/65bcfbd87eded73b1edd9413/65bcfdc9d78f09c7ba620068_amber-logo.svg", - "publicBaseUri": "https://public.cdr.amber.com.au", - "abn": "98623603805", - "acn": "623603805", - "lastUpdated": "2026-05-06T04:22:01Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/amber" - }, - { - "dataHolderBrandId": "3a732abd-b2e1-ee11-a73d-6045bd4001ae", - "interimId": "3f85802e-1636-4e3a-9395-cba0062bfab9", - "brandName": "Ergon Energy Retail", - "industries": [ - "energy" - ], - "logoUri": "https://www.ergon.com.au/__data/assets/image/0013/210613/retail-logo.png", - "publicBaseUri": "https://public.cdr.ergonretail.com.au", - "abn": "11121177802", - "acn": "121177802", - "lastUpdated": "2026-05-06T04:22:01Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/ergon" - }, - { - "interimId": "fb416e50-6dda-470e-a2aa-a108efd433b4", - "brandName": "Active Utilities Retail", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/0fc6da1797227c2758c074c2506e0c7d.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/active-utilities", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/active-utilities", - "acn": "606139931", - "abn": "31606139931" - }, - { - "interimId": "d4aa3c79-ef00-454c-b1f0-dbd01b25bcca", - "brandName": "Altogether", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/6323fd40edf62f74f5a9d5c5b6063d74.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/altogether", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/altogether", - "acn": "136272298", - "abn": "28136272298" - }, - { - "interimId": "e48e8b94-ff6b-44cf-a572-0dff928cf056", - "brandName": "Ampol Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/1f4cf2cf0bfad2bb4395dc39c40e94b8.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/ampol", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/ampol", - "acn": "652913347", - "abn": "21652913347" - }, - { - "interimId": "e7efef1f-22b8-4a15-826c-047f71aa2d20", - "brandName": "Arc Energy Group", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/arc.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/arc-energy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/arc-energy", - "acn": "614276827", - "abn": "33614276827" - }, - { - "interimId": "bd2863a7-8430-4656-88bf-56bb5c12663c", - "brandName": "Arcstream", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/1c6c90d1b567cfb1109697663889577b.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/arcstream", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/arcstream", - "acn": "141108590", - "abn": "84141108590" - }, - { - "interimId": "ea94715b-96fa-4ed2-9a44-6a7f1f40676c", - "brandName": "Besy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/79a78f730f64c2eab1fb9c9064a7c22c.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/besy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/besy", - "acn": "612341849", - "abn": "64612341849" - }, - { - "interimId": "736b2c27-aa4b-4554-987b-80101a93b728", - "brandName": "Brighte Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/278bfeac35840aa0ee0dfa49b8023379.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/brighte", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/brighte", - "acn": "646449247", - "abn": "36646449247" - }, - { - "interimId": "40c3b4cd-2df1-4d55-843e-a7ff32aa9dc6", - "brandName": "CleanCo Queensland", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/510e8c51f58822e92227d28fc6ddac6c.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/cleanco", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/cleanco", - "acn": "628008159", - "abn": "85628008159" - }, - { - "interimId": "d2c959ec-e0d4-4fc4-bcb3-2faf8060cd18", - "brandName": "CleanPeak Energy Retail", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/cleanpeak.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/cleanpeak", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/cleanpeak", - "acn": "623916138", - "abn": "18623916138" - }, - { - "interimId": "db23f052-0bec-48ab-87fe-59290d142704", - "brandName": "Coles Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/a89c1ff57030ee93211e9fba27e29cb3.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/coles", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/coles", - "acn": "154914075", - "abn": "41154914075" - }, - { - "interimId": "46b1550c-fd41-40ff-8374-2af6d0cc7293", - "brandName": "CPE Mascot", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/6be5f44e7564ead2bec088071373bc83.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/cpe-mascot", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/cpe-mascot", - "acn": "100209354", - "abn": "22100209354" - }, - { - "interimId": "89b94654-8f1b-4e49-bcdb-7ab5df451372", - "brandName": "Discover Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/discover.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/discover", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/discover", - "acn": "619204750", - "abn": "20619204750" - }, - { - "interimId": "6dfc2033-f5ba-4e61-8119-1eac508e0ad1", - "brandName": "Ellis Air Connect", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/c549c1067f3f1be2ab953068fa95e9d4.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/ea-connect", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/ea-connect", - "acn": "0563248", - "abn": "640563248" - }, - { - "interimId": "d433eba6-dfb2-4d88-94e2-771b1157dd62", - "brandName": "Evergy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/1e07d1e6eae2d98071ff87b922db926e.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/evergy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/evergy", - "acn": "623005836", - "abn": "56623005836" - }, - { - "interimId": "6b04484e-f1a0-483d-8860-95b50a27bb22", - "brandName": "Flipped Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/438ff02d87cec3f985c465552312d2e1.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/flipped", - "lastUpdated": "2025-07-07T05:16:38Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/flipped", - "acn": "653445740", - "abn": "73653445740" - }, - { - "interimId": "ee434966-7168-4884-9b98-98d71bd3ef3c", - "brandName": "Flow Power", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/a2e3b81a479f4c3ea9434600700a3b67.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/flow-power", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/flow-power", - "acn": "130175343", - "abn": "27130175343" - }, - { - "interimId": "f112314b-b7f3-45a0-b586-49573f8953ce", - "brandName": "Future X Power", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/futurex.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/future-x", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/future-x", - "acn": "164285634", - "abn": "95164285634" - }, - { - "interimId": "a983ebe7-14b5-4c15-8d69-6d5aac7f47ef", - "brandName": "GEE Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/95b4d2ac177e0a88ee18a3f2b9a2f298.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/gee-energy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/gee-energy", - "acn": "636908220", - "abn": "42636908220" - }, - { - "interimId": "6fd3819d-4c31-4525-82cc-bd6f445af3d2", - "brandName": "Glow Power", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/7ca0ac97d770e7b90b88b51aaed827ff.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/glow-power", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/glow-power", - "acn": "619512935", - "abn": "95619512935" - }, - { - "interimId": "126f03dc-3947-428b-99fd-685b94fe1363", - "brandName": "Humenergy Group", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/8d50b464df3c0f95b4837906f3102842.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/humenergy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/humenergy", - "acn": "601324387", - "abn": "15601324387" - }, - { - "interimId": "3e2d5a2a-2fb4-4ef6-bf7f-86e2f68ef620", - "brandName": "iGENO", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/93991c39a20e5240af4d607533308377.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/igeno", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/igeno", - "acn": "080675485", - "abn": "17080675485" - }, - { - "interimId": "4fd2ea8f-504b-4432-a5ca-d6d6a22fa5c8", - "brandName": "Radian Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/e7aa7fceceb34995a6eb53c666162ba3.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/radian", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/radian", - "acn": "633200656", - "abn": "94633200656" - }, - { - "interimId": "d1c6becb-c00e-4e23-8117-227a4ecc03b0", - "brandName": "Locality Planning Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/55de99f8e820b3d8db3de814e5b0da6c.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/locality-planning", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/locality-planning", - "acn": "147867301", - "abn": "90147867301" - }, - { - "interimId": "9f59f54f-aeec-44ff-b481-a7e10be6a28e", - "brandName": "Localvolts", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/cf8f859eacb53a5b56f3467a7813d6fe.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/localvolts", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/localvolts", - "acn": "609840379", - "abn": "12609840379" - }, - { - "interimId": "911c4a0a-6bba-4b30-86b6-bcec385b0dd1", - "brandName": "Macarthur Energy Retail", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/cec99be1c421ae486fb308b68f8b2fa5.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/macarthur", - "lastUpdated": "2025-07-07T05:21:45Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/macarthur", - "acn": "643524921", - "abn": "89643524921" - }, - { - "interimId": "81e1f31b-c676-4f7b-8648-4a59b29be236", - "brandName": "Macquarie", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/macquarie.jpg", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/macquarie", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/macquarie", - "acn": "008583542", - "abn": "46008583542" - }, - { - "interimId": "cd90f1f3-a930-4674-9ce7-18a9dbc1eeb3", - "brandName": "Metered Energy Holdings", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/meh.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/metered-energy", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/metered-energy", - "acn": "108143862", - "abn": "44108143862" - }, - { - "interimId": "db8a51cd-63f3-4979-8002-e410cb95a8f3", - "brandName": "Microgrid Power", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/6a4f4c8e6b6ce4a275f4c611cd533913.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/microgrid", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/microgrid", - "acn": "628991131", - "abn": "93628991131" - }, - { - "interimId": "e4959768-2b87-42f0-aa24-328acd8c3126", - "brandName": "Perpetual Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/f4ae158e047663faaa3ce5893553cd33.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/perpetual", - "lastUpdated": "2025-07-07T05:37:41Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/perpetual", - "acn": "643401496", - "abn": "20643401496" - }, - { - "interimId": "9a676d1f-6ec5-48a4-98af-5a2ab293d373", - "brandName": "PowerHub", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/92e99e4f5476201689124f90239d8397.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/powerhub", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/powerhub", - "acn": "618362888", - "abn": "27618362888" - }, - { - "interimId": "499d880c-ee78-44ba-9442-a275f9465290", - "brandName": "Powow Power", - "industries": [ - "energy" - ], - "logoUri": "https://powowpower.com.au/wp-content/uploads/2022/02/logo-whitepowowpower.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/powow", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/powow", - "acn": "644212322", - "abn": "39644212322" - }, - { - "interimId": "a10b23c3-af4d-458a-a22b-7b91ba09e8d2", - "brandName": "Real Utilities", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/real_utilities.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/real-utilities", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/real-utilities", - "acn": "150290814", - "abn": "97150290814" - }, - { - "interimId": "859e29b4-4a81-4038-9533-3b3ff7b6dbe5", - "brandName": "Savant Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/e29e6529f6c6eb05c5b2ca255938937c.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/savant", - "lastUpdated": "2025-07-07T05:42:40Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/savant", - "acn": "604736638", - "abn": "31604736638" - }, - { - "interimId": "3d4f1a26-66b6-4457-9877-5389818f1b75", - "brandName": "seene", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/seene.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/seene", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/seene", - "acn": "119677431", - "abn": "32119677431" - }, - { - "interimId": "baa3b594-2022-48ed-bf0d-9abeb74f4952", - "brandName": "Shell Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/3193ce6ea2a6923ead7b75e5775725cc.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/shell-energy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/shell-energy", - "acn": "126175460", - "abn": "87126175460" - }, - { - "interimId": "d3181009-82ca-4dde-8c30-a19db4412374", - "brandName": "Smart Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/939334bc494d4e99ac8848644a45a066.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/smart-energy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/smart-energy", - "acn": "639060405", - "abn": "49639060405" - }, - { - "interimId": "82128706-3e7c-4fc5-bc2b-fc04ee8eab6c", - "brandName": "Solstice Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/d0eb4af452fbc3eb0c2e4396ee5269ac.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/solstice", - "lastUpdated": "2024-07-17T04:52:24.383Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/solstice", - "acn": "110370726", - "abn": "90110370726" - }, - { - "interimId": "58e05a48-1826-4adb-be5f-4d71af1494ca", - "brandName": "Stanwell Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/stanwell.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/stanwell", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/stanwell", - "acn": "078848674", - "abn": "37078848674" - }, - { - "interimId": "d709dd2d-e1df-44ec-b427-90865c77b7bf", - "brandName": "Telstra Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/d318cecab0b910697a5fe7f5c6e8c6a3.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/telstra-energy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/telstra-energy", - "acn": "645100447", - "abn": "23645100447" - }, - { - "interimId": "51d53af9-55d6-42ff-b94a-0b54f9bf5af6", - "brandName": "Tesla Energy Ventures", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/b5ebd982506da96c4d0db64bfead8e6c.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/tesla", - "lastUpdated": "2024-07-17T04:52:24.383Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/tesla", - "acn": "665982365", - "abn": "24665982365" - }, - { - "interimId": "d43e8fb4-b1a2-4cfd-bde4-ab91daec7399", - "brandName": "YES Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/be6f8a17ead25b8be74e876d83e5c53c.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/yes-energy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/yes-energy", - "acn": "627706594", - "abn": "22627706594" - }, - { - "interimId": "6cbf6fb7-f565-4f2e-9b65-903b0badb20c", - "brandName": "ZEN Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/1fc3b6168abbd718eab34718a4faac54.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/zen-energy", - "lastUpdated": "2022-10-21T05:35:24Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/zen-energy", - "acn": "615751052", - "abn": "54615751052" - }, - { - "interimId": "0dfc837b-563a-40e4-ad61-bc3ae4ba02bd", - "brandName": "ASENO", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/d750f9dd2f6ce940f13061e2f5f44883.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/aseno", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/aseno", - "acn": "660232664", - "abn": "62660232664" - }, - { - "interimId": "2b41d472-89d2-45e5-879a-644ec17298b3", - "brandName": "Commander Power & Gas", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/commander.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/commander", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/commander", - "acn": "123155840", - "abn": "15123155840" - }, - { - "interimId": "c3698c76-4441-4ab0-946b-4f0e6c7cbc96", - "brandName": "Energy Locals Urban", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/627094e73c210df02fadab1ea9ebac5e.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/energy-locals-urban", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/energy-locals-urban", - "acn": "165688568", - "abn": "79165688568" - }, - { - "interimId": "9b48c5f7-f842-45b0-85e3-161272172ab1", - "brandName": "ERC Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/05b1bac4159890222db6b2b5d9b91029.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/erc-energy", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/erc-energy", - "acn": "629720994", - "abn": "93629720994" - }, - { - "interimId": "7985e477-007f-429b-a58f-b39df8b5b89c", - "brandName": "Silver Asset Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/a8729139c8a1cf211627c90592449b46.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/silver-asset", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/silver-asset", - "acn": "631775105", - "abn": "11631775105" - }, - { - "interimId": "751d0efd-70cd-417e-ac49-f497cc953c41", - "brandName": "Veolia Energy", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/7e8dde1540b66ff92227909e7165c559.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/veolia", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/veolia", - "acn": "140547226", - "abn": "74140547226" - }, - { - "interimId": "cb97e271-6c22-4bb5-85cc-deb41635706f", - "brandName": "WINconnect", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/win_connect.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/winconnect", - "lastUpdated": "2026-02-09T06:52:53Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/winconnect", - "acn": "112175710", - "abn": "71112175710" - }, - { - "interimId": "e656b6f0-0ff0-400c-880d-51a33e3820ad", - "brandName": "iO Energy Retail Services", - "industries": [ - "energy" - ], - "logoUri": "https://energymadeeasy.gov.au/static/organisations/logos/6b0b83e2b11787bca329dae1eeb49f62.png", - "publicBaseUri": "https://cdr.energymadeeasy.gov.au/io-energy", - "lastUpdated": "2024-07-17T04:52:24.383Z", - "productReferenceDataBaseUri": "https://cdr.energymadeeasy.gov.au/io-energy", - "acn": "606408879", - "abn": "23606408879" - } - ] -} \ No newline at end of file diff --git a/custom_components/pricehawk/cdr/data/eme_refdata.json b/custom_components/pricehawk/cdr/data/eme_refdata.json new file mode 100644 index 0000000..9db5814 --- /dev/null +++ b/custom_components/pricehawk/cdr/data/eme_refdata.json @@ -0,0 +1,2325 @@ +{ + "data": { + "thirdParties": { + "510250": { + "name": "iSelect", + "logo": "/static/organisations/logos/iselect.png", + "id": 510250, + "websiteURL": "iselect.com.au/energy", + "contact": "13 19 20" + }, + "707794": { + "name": "JG King", + "logo": "/static/organisations/logos/jgking.png", + "id": 707794, + "websiteURL": "buyinggroup.originenergy.com.au/JGK", + "contact": "1800 240 240" + }, + "707796": { + "name": "Supply Nation", + "logo": "/static/organisations/logos/supplynation.png", + "id": 707796, + "websiteURL": "buyinggroup.originenergy.com.au/SPN", + "contact": "1800 240 240" + }, + "707798": { + "name": "One Big Switch", + "logo": "/static/organisations/logos/onebigswitch.png", + "id": 707798, + "websiteURL": "www.onebigswitch.com.au", + "contact": "1300 858 737" + }, + "707800": { + "name": "UBT", + "logo": "/static/organisations/logos/ubt.png", + "id": 707800, + "websiteURL": "products.originenergy.com.au/4767/UBT", + "contact": "1800 240 240" + }, + "707804": { + "name": "SkoolBag", + "logo": "/static/organisations/logos/skoolbag.png", + "id": 707804, + "websiteURL": "buyinggroup.originenergy.com.au/SKB", + "contact": "1800 240 240" + }, + "713326": { + "name": "Beevo", + "logo": "/static/organisations/logos/beevo.png", + "id": 713326, + "websiteURL": "www.beevo.com.au", + "contact": "1300 763 764" + }, + "713330": { + "name": "Compare & Connect", + "logo": "/static/organisations/logos/compareandconnect.png", + "id": 713330, + "websiteURL": "www.compareandconnect.com.au", + "contact": "1300 859 258" + }, + "713332": { + "name": "Make It Cheaper", + "logo": "/static/organisations/logos/makeitcheaper.png", + "id": 713332, + "websiteURL": "www.makeitcheaper.com.au", + "contact": "1300 957 721" + }, + "713334": { + "name": "Connect Now", + "logo": "/static/organisations/logos/connectnow.png", + "id": 713334, + "websiteURL": "connectnow.com.au", + "contact": "1300 554 323" + }, + "713336": { + "name": "On The Move", + "logo": "/static/organisations/logos/onthemove.png", + "id": 713336, + "websiteURL": "www.onthemove.com.au", + "contact": "1300 850 360" + }, + "713338": { + "name": "Direct Connect", + "logo": "/static/organisations/logos/directconnect.png", + "id": 713338, + "websiteURL": "www.directconnect.com.au", + "contact": "1300 739 751" + }, + "713340": { + "name": "My Connect", + "logo": "/static/organisations/logos/myconnect.png", + "id": 713340, + "websiteURL": "www.myconnect.com.au", + "contact": "1300 854 478" + }, + "713342": { + "name": "You Compare", + "logo": "/static/organisations/logos/youcompare.png", + "id": 713342, + "websiteURL": "youcompare.com.au", + "contact": "1300 321 160" + }, + "713344": { + "name": "Go Switch", + "logo": "/static/organisations/logos/goswitch.png", + "id": 713344, + "websiteURL": "www.goswitch.com.au", + "contact": "1300 107 074" + }, + "713346": { + "name": "Electricity Wizard", + "logo": "/static/organisations/logos/electricitywizard.png", + "id": 713346, + "websiteURL": "electricitywizard.com.au", + "contact": "1300 359 779" + }, + "713348": { + "name": "iSelect ISE", + "logo": "/static/organisations/logos/iselect.png", + "id": 713348, + "websiteURL": "www.iselect.com.au/energy", + "contact": "13 19 20" + }, + "713350": { + "name": "Energy Watch", + "logo": "/static/organisations/logos/energywatch.png", + "id": 713350, + "websiteURL": "www.energywatch.com.au", + "contact": "13 92 82" + }, + "713352": { + "name": "CPM", + "logo": "/static/organisations/logos/cpm.png", + "id": 713352, + "websiteURL": "www.cpm-aus.com.au", + "contact": "03 9211 2300" + }, + "713354": { + "name": "Fast Connect", + "logo": "/static/organisations/logos/fastconnect.png", + "id": 713354, + "websiteURL": "www.fastconnect.net.au/home", + "contact": "1300 661 464" + }, + "713357": { + "name": "Split It", + "logo": "/static/organisations/logos/splitit.png", + "id": 713357, + "websiteURL": "www.splitit.com.au", + "contact": "1300 86 22 55" + }, + "713464": { + "name": "Compare The Market", + "logo": "/static/organisations/logos/comparethemarket.png", + "id": 713464, + "websiteURL": "www.comparethemarket.com.au/energy", + "contact": "1800 990 003" + }, + "713468": { + "name": "Ray White Home Now", + "logo": "/static/organisations/logos/raywhitehomenow.png", + "id": 713468, + "websiteURL": "www.raywhitehomenow.com", + "contact": "1300 862 255" + }, + "713470": { + "name": "Home Now Loan Market", + "logo": "/static/organisations/logos/homenowloanmarket.png", + "id": 713470, + "websiteURL": "homenow.loanmarket.com.au", + "contact": "1300 867 283" + }, + "713472": { + "name": "Warwick", + "logo": "/static/organisations/logos/warwick.png", + "id": 713472, + "websiteURL": "warwickconnects.com", + "contact": "1300 367 058" + }, + "713474": { + "name": "Morton", + "logo": "/static/organisations/logos/morton.png", + "id": 713474, + "websiteURL": "www.mortonconnects.com", + "contact": "1300 883 656" + }, + "716466": { + "name": "Sonnen", + "logo": "/static/organisations/logos/sonnen.png", + "id": 716466, + "websiteURL": "sonnen.com.au/energy", + "contact": "13 76 66" + }, + "716468": { + "name": "Amber", + "logo": "/static/organisations/logos/amber.png", + "id": 716468, + "websiteURL": "www.amberelectric.com.au", + "contact": "03 6144 7022" + }, + "722135": { + "name": "EcoU Energy", + "logo": "/static/organisations/logos/ecouenergy.png", + "id": 722135, + "websiteURL": "www.ecouenergy.com", + "contact": "1300 911 135" + }, + "722552": { + "name": "Grouply", + "logo": "/static/organisations/logos/grouply.png", + "id": 722552, + "websiteURL": "grouply.co/energy", + "contact": "1300 420 182" + }, + "722554": { + "name": "RACV", + "logo": "/static/organisations/logos/racv.png", + "id": 722554, + "websiteURL": "energycompare.racv.com.au/energy", + "contact": "1300 420 182" + }, + "741534": { + "name": "Connect With Us", + "logo": "/static/organisations/logos/connectwithus.png", + "id": 741534, + "websiteURL": "www.connectwithus.com.au", + "contact": "1300 156 660" + }, + "744499": { + "name": "Move Me In", + "logo": "/static/organisations/logos/movemein.png", + "id": 744499, + "websiteURL": "movemein.com.au", + "contact": "1300 911 947" + }, + "744501": { + "name": "Movinghub", + "logo": "/static/organisations/logos/movinghub.png", + "id": 744501, + "websiteURL": "movinghub.com.au", + "contact": "1300 744 334" + }, + "744503": { + "name": "9Saver", + "logo": "/static/organisations/logos/9saver.png", + "id": 744503, + "websiteURL": "www.9saver.com.au", + "contact": "1300 189 151" + }, + "744505": { + "name": "FiftyUp Club", + "logo": "/static/organisations/logos/fiftyupclub.png", + "id": 744505, + "websiteURL": "www.fiftyupclub.com", + "contact": "1300 969 382" + }, + "765997": { + "name": "Choice", + "logo": "/static/organisations/logos/choice.png", + "id": 765997, + "websiteURL": "www.choice.com.au", + "contact": "1800 069 552" + }, + "766005": { + "name": "CIMET", + "logo": "/static/organisations/logos/cimet.png", + "id": 766005, + "websiteURL": "www.cimet.com.au", + "contact": "1800 013 000" + }, + "766007": { + "name": "Econnex", + "logo": "/static/organisations/logos/econnex.png", + "id": 766007, + "websiteURL": "www.econnex.com.au", + "contact": "1800 013 000" + }, + "773767": { + "name": "Handled", + "logo": "/static/organisations/logos/handled.png", + "id": 773767, + "websiteURL": "handled.com.au" + }, + "778774": { + "name": "Lifestyle Communities", + "logo": "/static/organisations/logos/lifestylecommunities.png", + "id": 778774, + "websiteURL": "www.lifestylecommunities.com.au", + "contact": "1800 240 240" + }, + "778784": { + "name": "Master Builders Association NSW", + "logo": "/static/organisations/logos/mba_nsw.png", + "id": 778784, + "websiteURL": "www.mbansw.asn.au", + "contact": "1800 240 240" + }, + "778786": { + "name": "NARTA", + "logo": "/static/organisations/logos/narta.png", + "id": 778786, + "websiteURL": "www.narta.com.au", + "contact": "1800 240 240" + }, + "803394": { + "name": "Sorted Services", + "logo": "/static/organisations/logos/sortedservices.png", + "id": 803394, + "websiteURL": "www.sortedservices.com", + "contact": "1300 484 141" + }, + "873477": { + "name": "Energy Locals Urban", + "logo": "/static/organisations/logos/c7261559ddf08affa02fdcdfcbeaef43.png", + "id": 873477, + "comments": "Formerly Energy Trade,\nRebranded on the 4th of March 2024", + "websiteURL": "energylocals.com.au/urban ", + "contact": "1300 001 255" + }, + "883247": { + "name": "Chartered Accountants", + "logo": "/static/organisations/logos/charteredaccountants.png", + "id": 883247, + "websiteURL": "www.charteredaccountantsanz.com", + "contact": "1300 647 446" + }, + "893129": { + "name": "ForNRG", + "logo": "/static/organisations/logos/fornrg.png", + "id": 893129, + "websiteURL": "www.fornrg.com", + "contact": "03 9598 9485" + }, + "898280": { + "name": "Schoolzine", + "logo": "/static/organisations/logos/schoolzine.png", + "id": 898280, + "websiteURL": "www.schoolzine.com.au", + "contact": "1300 795 503" + }, + "899650": { + "name": "Family Travel", + "logo": "/static/organisations/logos/familytravel.png", + "id": 899650, + "websiteURL": "www.familytravel.com.au", + "contact": "1300 404 100" + }, + "1045176": { + "name": "hipages", + "logo": "/static/organisations/logos/hipages.png", + "id": 1045176, + "websiteURL": "hipages.com.au/tradie", + "contact": "1300 762 994" + }, + "1045230": { + "name": "Team App", + "logo": "/static/organisations/logos/teamapp.png", + "id": 1045230, + "websiteURL": "www.teamapp.com" + }, + "1045231": { + "name": "Residential Connections", + "logo": "/static/organisations/logos/addc2a12ffa57076d81d099e4d08cb29.png", + "comments": "Requested on 26 June 2020", + "id": "1045231", + "websiteURL": "www.residentialconnections.com.au", + "contact": "1300 859 238" + }, + "1045232": { + "name": "Select and Switch", + "logo": "/static/organisations/logos/fa57438ee6fe4fdd375c6106ce1470a3.png", + "id": "1045232", + "websiteURL": "www.selectandswitch.com.au", + "contact": "1800 959 969" + }, + "1045233": { + "name": "Electricity Monster", + "logo": "/static/organisations/logos/91e86234ea0820550b0723c38834a382.png", + "id": "1045233", + "websiteURL": "electricitymonster.com.au", + "contact": "1300 584 872" + }, + "1045234": { + "name": "Captain Compare", + "logo": "/static/organisations/logos/3d55365e32553cdd18c4374304337d24.png", + "id": "1045234", + "websiteURL": "www.captaincompare.com.au" + }, + "1045235": { + "name": "Ten Ants", + "logo": "/static/organisations/logos/095bb4c1b7117beba0bb33609d51c369.png", + "id": "1045235", + "websiteURL": "tenantsconnect.com.au", + "contact": "1800015699" + }, + "1045236": { + "name": "Deal Reveal", + "logo": "/static/organisations/logos/78cb2c3fcd980326e079f129138c8e6a.png", + "id": "1045236", + "websiteURL": "www.dealreveal.com.au/", + "contact": "1300036952" + }, + "1045237": { + "name": "9Saver (Sumo)", + "logo": "/static/organisations/logos/bc52ecf6b85ae55921ed865974b288f2.png", + "comments": "Created on 25 March 2022. For Sumo Power use only. Phone number directs to Sumo not 9Saver.", + "id": "1045237", + "websiteURL": "www.9saver.com.au", + "contact": "13 88 60" + }, + "1045238": { + "name": "HOOD", + "logo": "/static/organisations/logos/c8e834a065c1a8e3feaddaacfb91d760.png", + "id": "1045238", + "websiteURL": "www.hood.ai/", + "contact": "1300242824" + }, + "1045239": { + "name": "Smarter Communities", + "logo": "/static/organisations/logos/0948a8bf97b002e126f87844bc1decde.png", + "id": "1045239", + "websiteURL": "www.smartercommunities.com.au/", + "contact": "0292662600" + }, + "1045240": { + "name": "Muval", + "logo": "/static/organisations/logos/7fd35fff4486940fad1d839147df6ad1.png", + "id": "1045240", + "websiteURL": "www.Muval.com.au", + "contact": "1300168825" + }, + "1045241": { + "name": "Rent.com.au", + "logo": "/static/organisations/logos/4f8b98e5c6cdbeb2b52d99b9f0d82de3.png", + "id": "1045241", + "websiteURL": "www.rent.com.au", + "contact": "1300 736 810" + }, + "1045242": { + "name": "Energy Deal ", + "logo": "/static/organisations/logos/718a462f86c7b5da0e3f0fa5235e5ff3.png", + "id": 1045242, + "websiteURL": "www.energydeal.com.au/", + "contact": "1300368886" + }, + "1045243": { + "name": "Compare Club", + "logo": "/static/organisations/logos/138167fd1bffb1467493890b3bd01a05.png", + "comments": "Created on 03/05/2024\nRequested by Korah Kurian - Origin", + "id": 1045243, + "websiteURL": "compareclub.com.au/ ", + "contact": "1300836816 " + }, + "1045244": { + "name": "Virtual Watt", + "logo": "/static/organisations/logos/3fc0377b33065a2ad11644d416c319c1.png", + "comments": "Created on 31/07/2024", + "id": 1045244, + "websiteURL": "www.virtualwatt.com.au", + "contact": "1300 665 199" + }, + "1045245": { + "name": "Mindlabz", + "logo": "/static/organisations/logos/0f0d22ba3300abf5918090b30042eed9.png", + "id": 1045245, + "websiteURL": "mindlabz.com.au", + "contact": "0386959970" + }, + "1045246": { + "name": "One Click Switch", + "logo": "/static/organisations/logos/9be29a28c8fe86fa22fb9190b1e034e0.png", + "id": 1045246, + "websiteURL": "oneclickswitch.com.au", + "contact": "1300 661 464" + }, + "1045247": { + "name": "Chameleon", + "logo": "/static/organisations/logos/e4e0d241bedd434bfadfb11578cadf7d.png", + "comments": "Created on 06/05/2025", + "id": 1045247, + "websiteURL": "www.chameleoncustomercontact.com.au", + "contact": "0393293990" + }, + "1045248": { + "name": "Awaken Energy", + "logo": "/static/organisations/logos/5f96e2692a2ed3162fb32673d1d20df9.png", + "comments": "Created on 12/05/2025", + "id": 1045248, + "websiteURL": "www.awakenenergy.com.au", + "contact": "0483909329" + }, + "1045249": { + "name": "Zembl", + "logo": "/static/organisations/logos/1555e63d4167e3a3cd9e002cbef8ca83.png", + "comments": "Created on 16/05/2025", + "id": 1045249, + "websiteURL": "www.zembl.com.au/", + "contact": "1300957721" + }, + "1045250": { + "name": "Comparable", + "logo": "/static/organisations/logos/2ab26c9d27d04a2a9c3f208219970582.png", + "id": 1045250, + "comments": "Requested by Anju Angelin on 31.10.25\nActioned by WL 11.11.25", + "websiteURL": "www.comparable.com.au", + "contact": "1300 754 155" + }, + "1045251": { + "name": "Cable Energy", + "logo": "/static/organisations/logos/7ef0abcbd45dbd077bda9279f4ea8515.png", + "id": 1045251, + "websiteURL": "www.cable.energy", + "contact": "02 7908 5746" + } + }, + "organisations": { + "1559": { + "tradingName": "Ergon Energy Queensland Pty Ltd", + "orgName": "Ergon Energy", + "cdrCode": "ergon", + "smallBusinessContact": "1300 135 210", + "abn": "11 121 177 802", + "orgId": "1559", + "orgStatus": "active", + "cdrBrand": "ergon", + "websiteURL": "www.ergon.com.au", + "electricityBillURL": "www.ergon.com.au/retail/residential/billing-and-payments/understanding-your-bill", + "logo": "/static/organisations/logos/04406045549ba2ea3773d3ea0ef06f89.png", + "retailerCode": "ERG", + "residentialContact": "13 10 46" + }, + "1560": { + "orgStatus": "inactive", + "tradingName": "People Energy Pty Ltd", + "orgName": "People Energy", + "cdrBrand": "people-energy", + "websiteURL": "www.peopleenergy.com.au", + "logo": "/static/organisations/logos/people_energy.png", + "cdrCode": "people-energy", + "retailerCode": "PEO", + "smallBusinessContact": "1300 780 025", + "residentialContact": "1300 788 970", + "abn": "20 159 727 401", + "orgId": "1560" + }, + "9611": { + "tradingName": "CovaU Pty Ltd", + "gasBillURL": null, + "orgName": "CovaU", + "cdrCode": "covau", + "smallBusinessContact": "1300 689 866", + "abn": "54 090 117 730", + "orgId": "9611", + "orgStatus": "active", + "cdrBrand": "covau", + "websiteURL": "signup.covau.com.au/", + "electricityBillURL": "covau.com.au/eme/", + "logo": "/static/organisations/logos/cova_u.png", + "retailerCode": "COV", + "residentialContact": "1300 689 866" + }, + "9612": { + "orgStatus": "active", + "tradingName": "Next Business Energy Pty Ltd", + "orgName": "Next Business Energy", + "cdrBrand": "next-business", + "websiteURL": "www.nextbusinessenergy.com.au", + "logo": "/static/organisations/logos/01007813b3482f5bbb2e8b38736df0bc.png", + "cdrCode": "next-business", + "retailerCode": "NEX", + "smallBusinessContact": "1300 208 966", + "residentialContact": "1300 208 966", + "abn": "91 167 937 555", + "orgId": "9612" + }, + "9616": { + "tradingName": "Blue NRG Pty Ltd", + "gasBillURL": null, + "orgName": "Blue NRG", + "cdrCode": "blue-nrg", + "smallBusinessContact": "1300 599 888", + "abn": "30 151 014 658", + "orgId": "9616", + "orgStatus": "active", + "cdrBrand": "blue-nrg", + "websiteURL": "www.bluenrg.com.au", + "electricityBillURL": "www.bluenrg.com.au/uploaded/How%20to%20read%20my%20bill/Bill%20explainer_Final_uploaded.pdf", + "logo": "/static/organisations/logos/blue_nrg.png", + "retailerCode": "BLU", + "residentialContact": "1300 599 888" + }, + "9617": { + "orgStatus": "active", + "tradingName": "Pacific Blue Retail Pty Ltd", + "orgName": "Tango Energy", + "cdrBrand": "tango", + "websiteURL": "www.tangoenergy.com", + "logo": "/static/organisations/logos/4a9a1b580f5892c7ca3d1b77c2026835.png", + "cdrCode": "tango", + "retailerCode": "TAN", + "smallBusinessContact": "1800 861 952", + "residentialContact": "1800 861 952", + "abn": "43 155 908 839", + "orgId": "9617" + }, + "9618": { + "tradingName": "Commander Power & Gas (M2 Energy Pty Ltd)", + "gasBillURL": "www.commander.com.au/sites/default/files/2018-12/cmdrcommander_power_gas_bill_explainer05032015.pdf", + "orgName": "Commander Power & Gas", + "cdrCode": "commander", + "smallBusinessContact": "13 12 01", + "abn": "15 123 155 840", + "orgId": "9618", + "orgStatus": "active", + "cdrBrand": "commander", + "websiteURL": "www.commander.com.au", + "electricityBillURL": "www.commander.com.au/sites/default/files/2018-12/cmdrcommander_power_gas_bill_explainer05032015.pdf", + "logo": "/static/organisations/logos/commander.png", + "retailerCode": "M2E", + "residentialContact": "13 12 01" + }, + "9619": { + "tradingName": "Click Energy Pty Ltd", + "orgName": "Click Energy", + "cdrCode": "click-energy", + "smallBusinessContact": "1800 775 929", + "abn": "41 116 567 492", + "orgId": "9619", + "orgStatus": "inactive", + "cdrBrand": "click-energy", + "websiteURL": "www.clickenergy.com.au", + "electricityBillURL": "www.clickenergy.com.au/bill-info/know-your-bill/", + "logo": "/static/organisations/logos/click_energy.png", + "retailerCode": "CLI", + "residentialContact": "1800 775 929" + }, + "9620": { + "tradingName": "AGL Retail Energy Limited", + "gasBillURL": "www.agl.com.au/-/media/aglmedia/documents/help/invoice-explainer/agl0400-bill_explainer_resi_gas_digital.pdf", + "orgName": "AGL", + "cdrCode": "agl", + "smallBusinessContact": "13 12 45", + "abn": "21 074 839 464", + "orgId": "9620", + "orgStatus": "active", + "cdrBrand": "agl", + "websiteURL": "www.agl.com.au/emecompare", + "electricityBillURL": "www.agl.com.au/-/media/aglmedia/documents/help/invoice-explainer/agl0400-bill_explainer_resi_elec_digital.pdf", + "logo": "/static/organisations/logos/agl.png", + "retailerCode": "AGL", + "residentialContact": "13 12 45" + }, + "9621": { + "tradingName": "AGL Sales Pty Limited", + "gasBillURL": "www.agl.com.au/-/media/aglmedia/documents/help/invoice-explainer/agl0400-bill_explainer_resi_gas_digital.pdf", + "orgName": "AGL", + "cdrCode": "agl", + "smallBusinessContact": "13 12 45", + "abn": "88 090 538 337", + "orgId": "9621", + "orgStatus": "inactive", + "cdrBrand": "agl", + "websiteURL": "www.agl.com.au/emecompare", + "electricityBillURL": "www.agl.com.au/-/media/aglmedia/documents/help/invoice-explainer/agl0400-bill_explainer_resi_elec_digital.pdf", + "logo": "/static/organisations/logos/agl.png", + "retailerCode": "AGL", + "residentialContact": "13 12 45" + }, + "9623": { + "tradingName": "ERM Power Retail Pty Ltd", + "orgName": "ERM Power", + "cdrCode": "erm-power", + "smallBusinessContact": "13 23 76", + "abn": "87 126 175 460", + "orgId": "9623", + "orgStatus": "active", + "cdrBrand": "erm-power", + "websiteURL": "www.ermpower.com.au", + "electricityBillURL": "ermpower.com.au/bill-explainer/", + "logo": "/static/organisations/logos/erm.png", + "retailerCode": "ERM", + "residentialContact": "13 23 76" + }, + "9624": { + "tradingName": "Alinta Energy Retail Sales Pty Ltd", + "gasBillURL": "www.alintaenergy.com.au/help-and-support/help-and-support/billing-and-pricing/how-to-read-your-bill", + "orgName": "Alinta Energy", + "cdrCode": "alinta", + "smallBusinessContact": "13 39 08", + "abn": "22 149 658 300", + "orgId": "9624", + "orgStatus": "active", + "cdrBrand": "alinta", + "websiteURL": "alintaenergy.com.au", + "electricityBillURL": "www.alintaenergy.com.au/help-and-support/help-and-support/billing-and-pricing/how-to-read-your-bill", + "logo": "/static/organisations/logos/alinta.png", + "retailerCode": "ALI", + "residentialContact": "13 37 02" + }, + "9625": { + "orgStatus": "active", + "tradingName": "Powershop Australia Pty Ltd", + "orgName": "Powershop", + "cdrBrand": "powershop", + "websiteURL": "www.powershop.com.au", + "logo": "/static/organisations/logos/435e86067932be52e28abb3fbe0b6e82.png", + "cdrCode": "powershop", + "retailerCode": "PSH", + "smallBusinessContact": "1800 462 668", + "residentialContact": "1800 462 668", + "abn": "41 154 914 075", + "orgId": "9625" + }, + "9626": { + "orgStatus": "inactive", + "tradingName": "QEnergy", + "orgName": "QEnergy", + "cdrBrand": "qenergy", + "websiteURL": "www.qenergy.com.au", + "logo": "/static/organisations/logos/qenergy.png", + "cdrCode": "qenergy", + "retailerCode": "QEN", + "smallBusinessContact": "1300 448 535", + "residentialContact": "1300 448 535", + "abn": "58 120 124 101", + "orgId": "9626" + }, + "9627": { + "tradingName": "Sanctuary Energy Pty Ltd", + "gasBillURL": null, + "orgName": "Sanctuary Energy", + "cdrCode": "sanctuary", + "smallBusinessContact": "1800 109 099", + "abn": "62 128 995 433", + "orgId": "9627", + "orgStatus": "inactive", + "cdrBrand": "sanctuary", + "websiteURL": "sanctuaryenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/sanctuary.png", + "retailerCode": "SAN", + "residentialContact": "1800 109 099" + }, + "9630": { + "tradingName": "ActewAGL Retail", + "gasBillURL": "www.actewagl.com.au/save-energy/understand-your-usage/how-to-read-your-bill.aspx", + "orgName": "ActewAGL", + "cdrCode": "actewagl", + "smallBusinessContact": "13 14 93", + "abn": "46 221 314 841", + "orgId": "9630", + "orgStatus": "active", + "cdrBrand": "actewagl", + "websiteURL": "www.actewagl.com.au", + "electricityBillURL": "www.actewagl.com.au/save-energy/understand-your-usage/how-to-read-your-bill.aspx", + "logo": "/static/organisations/logos/6611c87938a7a1be03ee55314ba225d3.png", + "retailerCode": "ACT", + "residentialContact": "13 14 93" + }, + "9631": { + "orgStatus": "active", + "tradingName": "Aurora Energy", + "orgName": "Aurora Energy", + "cdrBrand": "aurora ", + "websiteURL": "www.auroraenergy.com.au", + "logo": "/static/organisations/logos/e9bfabdf2fc18919eb7f0709bcc8af31.png", + "cdrCode": "aurora", + "retailerCode": "AUR", + "smallBusinessContact": "1300 132 003", + "residentialContact": "1300 132 003", + "abn": "85 082 464 622", + "orgId": "9631" + }, + "9632": { + "tradingName": "Momentum Energy Pty Ltd", + "gasBillURL": "www.momentumenergy.com.au/docs/default-source/default-document-library/gas-bill-explainer.pdf", + "orgName": "Momentum Energy", + "cdrCode": "momentum", + "smallBusinessContact": "1800 794 824", + "abn": "42 100 569 159", + "orgId": "9632", + "orgStatus": "active", + "cdrBrand": "momentum", + "websiteURL": "www.momentumenergy.com.au", + "electricityBillURL": "www.momentumenergy.com.au/docs/default-source/default-document-library/residential-electricity-bill-guide.pdf", + "logo": "/static/organisations/logos/momentum.png", + "retailerCode": "MOM", + "residentialContact": "1800 794 824" + }, + "9633": { + "tradingName": "Diamond Energy Pty Ltd", + "orgName": "Diamond Energy", + "cdrCode": "diamond", + "smallBusinessContact": "1300 838 009", + "abn": "97 107 516 334", + "orgId": "9633", + "orgStatus": "active", + "cdrBrand": "diamond", + "websiteURL": "www.diamondenergy.com.au", + "electricityBillURL": "diamondstaging.wpengine.com/wp-content/uploads/2014/11/How-to-Read-Your-Diamond-Energy-Bill.pdf", + "logo": "/static/organisations/logos/diamond.jpg", + "retailerCode": "DIA", + "residentialContact": "1300 838 009" + }, + "9634": { + "tradingName": "Red Energy Pty Ltd", + "gasBillURL": "www.redenergy.com.au/docs/Red-Energy-Quarterly-Bill-Explained.pdf", + "orgName": "Red Energy", + "cdrCode": "red-energy", + "smallBusinessContact": "13 18 06", + "abn": "60 107 479 372", + "orgId": "9634", + "orgStatus": "active", + "cdrBrand": "red-energy", + "websiteURL": "www.redenergy.com.au", + "electricityBillURL": "www.redenergy.com.au/docs/Red-Energy-Quarterly-Bill-Explained.pdf", + "logo": "/static/organisations/logos/red_energy.png", + "retailerCode": "RED", + "residentialContact": "13 18 06" + }, + "9635": { + "tradingName": "Simply Energy", + "gasBillURL": "www.simplyenergy.com.au/help-centre/billing-and-payment/how-to-read-my-bill", + "orgName": "Simply Energy", + "cdrCode": "simply-energy", + "smallBusinessContact": "1800 009 147", + "abn": "67 269 241 237", + "orgId": "9635", + "orgStatus": "active", + "cdrBrand": "simply-energy", + "websiteURL": "www.simplyenergy.com.au", + "electricityBillURL": "www.simplyenergy.com.au/help-centre/billing-and-payment/how-to-read-my-bill", + "logo": "/static/organisations/logos/c2c300f383369e531a45e25986c84641.png", + "retailerCode": "SIM", + "residentialContact": "1800 009 147" + }, + "9637": { + "tradingName": "EnergyAustralia Pty Ltd", + "gasBillURL": "www.energyaustralia.com.au/home/bills-and-accounts/understand-your-bill/bill-guides", + "orgName": "EnergyAustralia", + "cdrCode": "energyaustralia", + "smallBusinessContact": "1800 146 749", + "abn": "99 086 014 968", + "orgId": "9637", + "orgStatus": "active", + "cdrBrand": "energyaustralia", + "websiteURL": "www.energyaustralia.com.au", + "electricityBillURL": "www.energyaustralia.com.au/home/bills-and-accounts/understand-your-bill/bill-guides", + "logo": "/static/organisations/logos/energy_australia.png", + "retailerCode": "ENE", + "residentialContact": "13 34 66" + }, + "9638": { + "orgStatus": "active", + "tradingName": "M2 Energy Pty Ltd", + "orgName": "Dodo", + "cdrBrand": "dodo", + "websiteURL": "www.dodo.com/energy", + "logo": "/static/organisations/logos/dodo.png", + "cdrCode": "dodo", + "retailerCode": "DOD", + "smallBusinessContact": "13 36 36", + "residentialContact": "13 36 36", + "abn": "15 123 155 840", + "orgId": "9638" + }, + "9639": { + "tradingName": "Origin Energy Electricity", + "gasBillURL": "www.originenergy.com.au/for-home/electricity-and-gas/billing-payments/how-to-read-my-bill.html", + "orgName": "Origin Energy", + "cdrCode": "origin", + "smallBusinessContact": "13 24 61", + "abn": "33 071 052 287", + "orgId": "9639", + "orgStatus": "active", + "cdrBrand": "origin", + "websiteURL": "www.originenergy.com.au", + "electricityBillURL": "www.originenergy.com.au/for-home/electricity-and-gas/billing-payments/how-to-read-my-bill.html", + "logo": "/static/organisations/logos/068a3484995b2d5a09c0708a68051c14.png", + "retailerCode": "ORI", + "residentialContact": "13 24 61" + }, + "9643": { + "tradingName": "Lumo Energy (SA) Pty Ltd", + "gasBillURL": "lumoenergy.com.au/understandingyourbill", + "orgName": "Lumo Energy (SA)", + "cdrCode": "lumo", + "smallBusinessContact": "1300 115 866", + "abn": "61 114 356 697", + "orgId": "9643", + "orgStatus": "active", + "cdrBrand": "lumo", + "websiteURL": "www.lumoenergy.com.au", + "electricityBillURL": "lumoenergy.com.au/understandingyourbill", + "logo": "/static/organisations/logos/lumo.png", + "retailerCode": "LUM", + "residentialContact": "1300 115 866" + }, + "9644": { + "orgStatus": "inactive", + "tradingName": "Powerdirect Pty Ltd", + "orgName": "Powerdirect", + "cdrBrand": "powerdirect", + "websiteURL": "www.powerdirect.com.au", + "logo": "/static/organisations/logos/power_direct.png", + "cdrCode": "powerdirect", + "retailerCode": "POW", + "smallBusinessContact": "1300 307 966", + "residentialContact": "1300 307 966", + "abn": "28 067 609 803", + "orgId": "9644" + }, + "9645": { + "tradingName": "AGL", + "gasBillURL": "www.agl.com.au/-/media/aglmedia/documents/help/invoice-explainer/agl0400-bill_explainer_resi_gas_digital.pdf", + "orgName": "AGL", + "cdrCode": "agl", + "smallBusinessContact": "13 12 45", + "abn": "74 115 061 375", + "orgId": "9645", + "orgStatus": "inactive", + "cdrBrand": "agl", + "websiteURL": "www.agl.com.au/emecompare", + "electricityBillURL": "www.agl.com.au/-/media/aglmedia/documents/help/invoice-explainer/agl0400-bill_explainer_resi_elec_digital.pdf", + "logo": "/static/organisations/logos/agl.png", + "retailerCode": "AGL", + "residentialContact": "13 12 45" + }, + "9646": { + "tradingName": "Lumo Energy (QLD) Pty Ltd", + "gasBillURL": "lumoenergy.com.au/understandingyourbill", + "orgName": "Lumo Energy (QLD)", + "cdrCode": "lumo", + "smallBusinessContact": "1300 115 866", + "abn": "63 114 356 642", + "orgId": "9646", + "orgStatus": "active", + "cdrBrand": "lumo", + "websiteURL": "www.lumoenergy.com.au", + "electricityBillURL": "lumoenergy.com.au/understandingyourbill", + "logo": "/static/organisations/logos/lumo.png", + "retailerCode": "LUM", + "residentialContact": "1300 115 866" + }, + "9648": { + "tradingName": "Origin Energy Retail Limited", + "gasBillURL": "www.originenergy.com.au/for-home/electricity-and-gas/billing-payments/how-to-read-my-bill.html", + "orgName": "Origin Energy", + "cdrCode": "origin", + "smallBusinessContact": "13 24 61", + "abn": "22 078 868 425", + "orgId": "9648", + "orgStatus": "inactive", + "cdrBrand": "origin", + "websiteURL": "www.originenergy.com.au", + "electricityBillURL": "www.originenergy.com.au/for-home/electricity-and-gas/billing-payments/how-to-read-my-bill.html", + "logo": "/static/organisations/logos/41313628bc260364dc8803dcb3340de9.png", + "retailerCode": "ORI", + "residentialContact": "13 24 61" + }, + "9649": { + "tradingName": "Origin Energy LPG Limited", + "gasBillURL": "www.originenergy.com.au/for-home/electricity-and-gas/billing-payments/how-to-read-my-bill.html", + "orgName": "Origin Energy", + "cdrCode": "origin", + "smallBusinessContact": "13 24 61", + "abn": "77 000 508 369", + "orgId": "9649", + "orgStatus": "inactive", + "cdrBrand": "origin", + "websiteURL": "www.originenergy.com.au", + "electricityBillURL": "www.originenergy.com.au/for-home/electricity-and-gas/billing-payments/how-to-read-my-bill.html", + "logo": "/static/organisations/logos/6e8710de3bdff597d54198cc4b9d8797.png", + "retailerCode": "ORI", + "residentialContact": "13 24 61" + }, + "9650": { + "tradingName": "Lumo Energy (NSW) Pty Ltd", + "gasBillURL": "lumoenergy.com.au/understandingyourbill", + "orgName": "Lumo Energy (NSW)", + "cdrCode": "lumo", + "smallBusinessContact": "1300 115 866", + "abn": "92 121 155 011", + "orgId": "9650", + "orgStatus": "active", + "cdrBrand": "lumo", + "websiteURL": "www.lumoenergy.com.au", + "electricityBillURL": "lumoenergy.com.au/understandingyourbill", + "logo": "/static/organisations/logos/lumo.png", + "retailerCode": "LUM", + "residentialContact": "1300 115 866" + }, + "24186": { + "orgStatus": "inactive", + "tradingName": "Pooled Energy Pty Ltd", + "orgName": "Pooled Energy", + "cdrBrand": "pooled-energy", + "websiteURL": "www.pooledenergy.com", + "logo": "/static/organisations/logos/19969d6e234fd0189911de666767e427.png", + "cdrCode": "pooled-energy", + "retailerCode": "PLD", + "smallBusinessContact": "1300 364 703", + "residentialContact": "1300 364 703", + "abn": "31 163 873 078", + "orgId": "24186" + }, + "24187": { + "tradingName": "Bright Spark Power Pty Ltd", + "gasBillURL": null, + "orgName": "Bright Spark Power", + "cdrCode": "bright-spark", + "smallBusinessContact": "1300 010 277", + "abn": "54 622 864 984", + "orgId": "24187", + "orgStatus": "inactive", + "cdrBrand": "bright-spark", + "websiteURL": "www.brightsparkpower.com.au/eme", + "electricityBillURL": null, + "logo": "/static/organisations/logos/07e379b4a9b01c82e789aa00d4f1daf4.png", + "retailerCode": "BSP", + "residentialContact": "1300 010 277" + }, + "24188": { + "tradingName": "Humenergy Group Pty Ltd", + "gasBillURL": null, + "orgName": "Humenergy Group", + "cdrCode": "humenergy", + "smallBusinessContact": "1300 322 622", + "abn": "15 601 324 387", + "orgId": "24188", + "orgStatus": "active", + "cdrBrand": "humenergy", + "websiteURL": "www.humenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/8d50b464df3c0f95b4837906f3102842.png", + "retailerCode": "HUM", + "residentialContact": "1300 322 622" + }, + "24189": { + "tradingName": "Electricity in a Box Pty Ltd", + "gasBillURL": null, + "orgName": "Electricity in a Box", + "cdrCode": "electricity-in-a-box", + "smallBusinessContact": "1300 933 039", + "abn": "74140547226", + "orgId": "24189", + "orgStatus": "inactive", + "cdrBrand": "electricity-in-a-box", + "websiteURL": "electricityinabox.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/0082c19f38cbb2364509982eccfeb1d3.png", + "retailerCode": "BOX", + "residentialContact": "1300 933 039" + }, + "24190": { + "tradingName": "CleanCo Queensland Limited", + "gasBillURL": null, + "orgName": "CleanCo Queensland", + "cdrCode": "cleanco", + "smallBusinessContact": "07 3328 3740", + "abn": "85 628 008 159", + "orgId": "24190", + "orgStatus": "active", + "cdrBrand": "cleanco", + "websiteURL": "www.cleancoqld.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/510e8c51f58822e92227d28fc6ddac6c.png", + "retailerCode": "CCQ", + "residentialContact": "07 3328 3740" + }, + "24191": { + "tradingName": "Y.E.S. Energy (SA) Pty Ltd", + "gasBillURL": null, + "orgName": "YES Energy", + "cdrCode": "yes-energy", + "smallBusinessContact": "1300 777 937", + "abn": "22 627 706 594", + "orgId": "24191", + "orgStatus": "active", + "cdrBrand": "yes-energy", + "websiteURL": "www.yesenergy.net.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/be6f8a17ead25b8be74e876d83e5c53c.png", + "retailerCode": "YES", + "residentialContact": "1300 777 937" + }, + "24192": { + "tradingName": "Radian Holdings Pty Ltd", + "gasBillURL": null, + "orgName": "Radian Energy", + "cdrCode": "radian", + "smallBusinessContact": "1300 805 925", + "abn": "92 633 200 647", + "orgId": "24192", + "orgStatus": "active", + "cdrBrand": "radian", + "websiteURL": "radian.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/d3d3d70acacace49b7f04cc35bdcce75.png", + "retailerCode": "RAD", + "residentialContact": "1300 805 925" + }, + "24193": { + "tradingName": "Energy Services Management Pty Ltd", + "gasBillURL": null, + "orgName": "Glow Power", + "cdrCode": "glow-power", + "smallBusinessContact": "1300 092 572", + "abn": "95 619 512 935", + "orgId": "24193", + "orgStatus": "active", + "cdrBrand": "glow-power", + "websiteURL": "myglowpower.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/7ca0ac97d770e7b90b88b51aaed827ff.png", + "retailerCode": "ESM", + "residentialContact": "1300 092 572" + }, + "24194": { + "tradingName": "Social Energy Australia Pty Ltd", + "gasBillURL": null, + "orgName": "Social Energy", + "cdrCode": "social-energy", + "smallBusinessContact": "1300 322 059", + "abn": "75 631 510 042", + "orgId": "24194", + "orgStatus": "inactive", + "cdrBrand": "social-energy", + "websiteURL": "www.social.energy/australia", + "electricityBillURL": null, + "logo": "/static/organisations/logos/39e9c54ce81e4a7fcefb2a43891ade77.png", + "retailerCode": "SEA", + "residentialContact": "1300 322 059" + }, + "24195": { + "tradingName": "Altogether Group Pty Ltd", + "gasBillURL": null, + "orgName": "Altogether", + "cdrCode": "altogether", + "smallBusinessContact": "1300 806 806", + "abn": "28 136 272 298", + "orgId": "24195", + "orgStatus": "active", + "cdrBrand": "altogether", + "websiteURL": "www.altogethergroup.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/6323fd40edf62f74f5a9d5c5b6063d74.png", + "retailerCode": "ALT", + "residentialContact": "1300 806 806" + }, + "24196": { + "tradingName": "Shell Energy Retail Pty Ltd ", + "gasBillURL": null, + "orgName": "Shell Energy ", + "cdrCode": "shell-energy", + "smallBusinessContact": "13 23 76", + "abn": "87 126 175 460", + "orgId": "24196", + "orgStatus": "active", + "cdrBrand": "shell-energy", + "websiteURL": "www.shellenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/3193ce6ea2a6923ead7b75e5775725cc.png", + "retailerCode": "SHL", + "residentialContact": "13 23 76" + }, + "24197": { + "tradingName": "Smart Energy Retail Pty Ltd", + "gasBillURL": null, + "orgName": "Smart Energy ", + "cdrCode": "smart-energy", + "smallBusinessContact": "1300133055", + "abn": "49 639 060 405", + "orgId": "24197", + "orgStatus": "active", + "cdrBrand": "smart-energy", + "websiteURL": "www.smartenergygroup.com.au", + "electricityBillURL": "www.smartenergygroup.com.au/how-to-read-your-bill ", + "logo": "/static/organisations/logos/939334bc494d4e99ac8848644a45a066.png", + "retailerCode": "SEG", + "residentialContact": "1300133055" + }, + "24198": { + "tradingName": "Microgrid Power Pty Ltd", + "gasBillURL": null, + "orgName": "Microgrid Power", + "cdrCode": "microgrid", + "smallBusinessContact": "1300 647 888", + "abn": "93 628 991 131", + "orgId": "24198", + "orgStatus": "active", + "cdrBrand": "microgrid", + "websiteURL": "www.microgridpower.com.au/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/6a4f4c8e6b6ce4a275f4c611cd533913.png", + "retailerCode": "MGP", + "residentialContact": "1300 647 888" + }, + "24199": { + "tradingName": "Localvolts Pty Ltd", + "gasBillURL": null, + "orgName": "Localvolts ", + "cdrCode": "localvolts", + "smallBusinessContact": "02 8006 8052", + "abn": "12 609 840 379", + "orgId": "24199", + "orgStatus": "active", + "cdrBrand": "localvolts", + "websiteURL": "localvolts.com/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/cf8f859eacb53a5b56f3467a7813d6fe.png", + "retailerCode": "LVS", + "residentialContact": "02 8006 8052" + }, + "24200": { + "tradingName": "EnergyAustralia Pty Ltd", + "gasBillURL": null, + "orgName": "On by EnergyAustralia", + "cdrCode": "on-by-energyaustralia", + "smallBusinessContact": "1800 108 633", + "abn": "99 086 014 968", + "orgId": "24200", + "orgStatus": "inactive", + "cdrBrand": "on-by-energyaustralia", + "websiteURL": "www.experienceon.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/ed2e5106218d9e617216949b37e6e73f.png", + "retailerCode": "OEA", + "residentialContact": "1800 108 633" + }, + "24201": { + "tradingName": "Powershop Australia Pty Limited", + "gasBillURL": null, + "orgName": "Coles Energy", + "cdrCode": "coles", + "smallBusinessContact": "1300 265 375", + "abn": "41 154 914 075", + "orgId": "24201", + "orgStatus": "active", + "cdrBrand": "coles", + "websiteURL": "www.coles.com.au/energy", + "electricityBillURL": null, + "logo": "/static/organisations/logos/a89c1ff57030ee93211e9fba27e29cb3.png", + "retailerCode": "COL", + "residentialContact": "1300 265 375" + }, + "24202": { + "tradingName": "Energy Locals Pty Ltd", + "gasBillURL": null, + "orgName": "Sonnen", + "cdrCode": "sonnen", + "smallBusinessContact": "1300 693 637", + "abn": "23 606 408 879", + "orgId": "24202", + "orgStatus": "inactive", + "cdrBrand": "sonnen", + "websiteURL": "energylocals.com.au/sonnen", + "electricityBillURL": null, + "logo": "/static/organisations/logos/f24cf95912d90a60409282a147a4c2b2.png", + "retailerCode": "SON", + "residentialContact": "1300 693 637" + }, + "24203": { + "tradingName": "Ellis Air Connect Pty Ltd", + "gasBillURL": null, + "orgName": "SEAC Energy", + "cdrCode": "ea-connect", + "smallBusinessContact": "1300236906", + "abn": "640 563 248", + "orgId": "24203", + "orgStatus": "active", + "cdrBrand": "ea-connect", + "websiteURL": "seacenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/c549c1067f3f1be2ab953068fa95e9d4.png", + "retailerCode": "EAC", + "residentialContact": "1300236906" + }, + "24204": { + "tradingName": "GEE Power & Gas Pty Ltd ", + "gasBillURL": null, + "orgName": "GEE Energy ", + "cdrCode": "gee-energy", + "smallBusinessContact": "1300 707 042", + "abn": "42 636 908 220", + "orgId": "24204", + "orgStatus": "active", + "cdrBrand": "gee-energy", + "websiteURL": "gee.com.au", + "electricityBillURL": "workdrive.zohoexternal.com/external/56EDu0cO4R5-LQlHY", + "logo": "/static/organisations/logos/95b4d2ac177e0a88ee18a3f2b9a2f298.png", + "retailerCode": "GEE", + "residentialContact": "1300 707 042" + }, + "24205": { + "tradingName": "Brighte Energy Pty Ltd", + "gasBillURL": null, + "orgName": "Brighte Energy ", + "cdrCode": "brighte", + "smallBusinessContact": "1300274448", + "abn": "36 646 449 247", + "orgId": "24205", + "orgStatus": "active", + "cdrBrand": "brighte ", + "websiteURL": "brighte.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/278bfeac35840aa0ee0dfa49b8023379.png", + "retailerCode": "BRI", + "residentialContact": "1300274448" + }, + "24206": { + "tradingName": "Maximum Energy Retail Pty Ltd", + "gasBillURL": null, + "orgName": "Circular Energy", + "cdrCode": "circular", + "smallBusinessContact": "1300 204 462", + "abn": "90 632 900 139", + "orgId": "24206", + "orgStatus": "inactive", + "cdrBrand": "circular ", + "websiteURL": "www.thepeoplesgrid.com/collectives/The-SA-Peoples-Grid", + "electricityBillURL": null, + "logo": "/static/organisations/logos/fd82878b16bd34f4c2d2e4f8eb233680.png", + "retailerCode": "CIR", + "residentialContact": "1300 204 462" + }, + "24207": { + "tradingName": "Telstra Energy (Retail) Pty Ltd", + "gasBillURL": "www.telstra.com/electricity-and-gas/billing-and-payments/read-your-bill", + "orgName": "Telstra Energy", + "cdrCode": "telstra-energy", + "smallBusinessContact": "13 22 00", + "abn": "23 645 100 447", + "orgId": "24207", + "orgStatus": "active", + "cdrBrand": "telstra-energy", + "websiteURL": "Telstra.com", + "electricityBillURL": "www.telstra.com/electricity-and-gas/billing-and-payments/read-your-bill", + "logo": "/static/organisations/logos/d318cecab0b910697a5fe7f5c6e8c6a3.png", + "retailerCode": "TLS", + "residentialContact": "13 22 00" + }, + "24208": { + "tradingName": "EPC Technologies Pty Ltd", + "gasBillURL": null, + "orgName": "Besy", + "cdrCode": "besy", + "smallBusinessContact": "00000000", + "abn": "64 612 341 849", + "orgId": "24208", + "orgStatus": "active", + "cdrBrand": "besy", + "websiteURL": "besy.energy", + "electricityBillURL": null, + "logo": "/static/organisations/logos/79a78f730f64c2eab1fb9c9064a7c22c.png", + "retailerCode": "BES", + "residentialContact": "00000000" + }, + "24209": { + "tradingName": "ZEN Energy Retail Pty Ltd", + "gasBillURL": null, + "orgName": "ZEN Energy ", + "cdrCode": "zen-energy", + "smallBusinessContact": "1300 936 466", + "abn": "54615751052", + "orgId": "24209", + "orgStatus": "active", + "cdrBrand": "zen-energy", + "websiteURL": "www.zenenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/1fc3b6168abbd718eab34718a4faac54.png", + "retailerCode": "ZEN", + "residentialContact": "1300 936 466" + }, + "24210": { + "tradingName": "PowerHub Pty Ltd", + "gasBillURL": null, + "orgName": "PowerHub", + "cdrCode": "powerhub", + "smallBusinessContact": "1300196673", + "abn": "27618362888", + "orgId": "24210", + "orgStatus": "active", + "cdrBrand": "powerhub", + "websiteURL": "www.powerhub.net.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/92e99e4f5476201689124f90239d8397.png", + "retailerCode": "HUB", + "residentialContact": "1300196673" + }, + "24211": { + "tradingName": "Electricity in a Box Pty Ltd", + "gasBillURL": null, + "orgName": "Arcstream", + "cdrCode": "arcstream", + "smallBusinessContact": "1800170555", + "abn": "84 141 108590", + "orgId": "24211", + "orgStatus": "active", + "cdrBrand": "arcstream", + "websiteURL": "arcstream.solutions/energy-made-easy/?utm_source=energy+made+easy&utm_medium=referral&utm_campaign=dec-22&utm_id=Energy+Made+Easy", + "electricityBillURL": null, + "logo": "/static/organisations/logos/1c6c90d1b567cfb1109697663889577b.png", + "retailerCode": "AST", + "residentialContact": "1800170555" + }, + "24212": { + "tradingName": "iGENO Pty Limited", + "gasBillURL": null, + "orgName": "iGENO", + "cdrCode": "igeno", + "smallBusinessContact": "1300989689", + "abn": "17080675485", + "orgId": "24212", + "orgStatus": "active", + "cdrBrand": "igeno", + "websiteURL": "igeno.com.au/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/93991c39a20e5240af4d607533308377.png", + "retailerCode": "IGN", + "residentialContact": "1300989689" + }, + "24213": { + "tradingName": "Ampol Energy (Retail) Pty Ltd", + "gasBillURL": null, + "orgName": "Ampol Energy", + "cdrCode": "ampol", + "smallBusinessContact": "131404", + "abn": "21652913347", + "orgId": "24213", + "orgStatus": "active", + "cdrBrand": "ampol ", + "websiteURL": "ampolenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/1f4cf2cf0bfad2bb4395dc39c40e94b8.png", + "retailerCode": "AMP", + "residentialContact": "131404" + }, + "24214": { + "tradingName": "Powow Power Pty Ltd", + "gasBillURL": null, + "orgName": "Powow Power ", + "cdrCode": "powow", + "smallBusinessContact": "1800 401 421", + "abn": "39 644 212 322", + "orgId": "24214", + "orgStatus": "active", + "cdrBrand": "powow", + "websiteURL": "powowpower.com.au/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/d9a5cd1c90b50b6ef3a36d213a574245.png", + "retailerCode": "PWP", + "residentialContact": "1800 401 421" + }, + "24215": { + "tradingName": "OVO Energy Pty Ltd", + "gasBillURL": null, + "orgName": "OVO Energy for ComparetheMarket", + "cdrCode": "ovo-energy", + "smallBusinessContact": "1800 467 698", + "abn": "99 623 475 089", + "orgId": "24215", + "orgStatus": "active", + "cdrBrand": "ovo-energy-ctm", + "websiteURL": "www.comparethemarket.com.au/energy/journey/start", + "electricityBillURL": null, + "logo": "/static/organisations/logos/ba5872c5cf89f79b9ab14f19cb2d8e72.png", + "retailerCode": "OVC", + "residentialContact": "1800 467 698" + }, + "24216": { + "tradingName": "Progressive Green Pty Ltd", + "gasBillURL": null, + "orgName": "Flow Power", + "cdrCode": "flow-power", + "smallBusinessContact": "1800 001 240", + "abn": "27130175343", + "orgId": "24216", + "orgStatus": "active", + "cdrBrand": "flow-power", + "websiteURL": "flowpower.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/a2e3b81a479f4c3ea9434600700a3b67.png", + "retailerCode": "FP1", + "residentialContact": "1800 001 240" + }, + "24217": { + "tradingName": "Pacific Blue Retail Pty Ltd", + "gasBillURL": null, + "orgName": "Pacific Blue Retail", + "cdrCode": "pacific-blue", + "smallBusinessContact": "133 669", + "abn": "43 155 908 839", + "orgId": "24217", + "orgStatus": "active", + "cdrBrand": "pacific-blue", + "websiteURL": "www.pacificblue.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/13771f1d9fad4a0f17c6d95eab8f82a8.png", + "retailerCode": "PAC", + "residentialContact": "133 669" + }, + "25000": { + "tradingName": "Energy Locals Pty Ltd", + "gasBillURL": null, + "orgName": "iO Energy Retail Services", + "cdrCode": "io-energy", + "smallBusinessContact": "1300 313 463", + "abn": "23 606 408 879", + "orgId": "25000", + "orgStatus": "inactive", + "cdrBrand": "io-energy", + "websiteURL": "ioenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/6b0b83e2b11787bca329dae1eeb49f62.png", + "retailerCode": "IOE", + "residentialContact": "1300 313 463" + }, + "25001": { + "tradingName": "IPower Pty Ltd and IPower 2 Pty Ltd", + "gasBillURL": "www.engie.com.au/help-centre/billing-and-payment/how-to-read-my-bill", + "orgName": "ENGIE", + "cdrCode": "engie", + "smallBusinessContact": "1800090836", + "abn": "67269241237", + "orgId": "25001", + "orgStatus": "active", + "cdrBrand": "engie", + "websiteURL": "www.engie.com.au/residential/electricity-and-gas-plans/compare-electricity-and-gas-plans?utm_source=Energy+Made+Easy&utm_medium=referral", + "electricityBillURL": "www.engie.com.au/help-centre/billing-and-payment/how-to-read-my-bill", + "logo": "/static/organisations/logos/e9a389558bc196629d27a0ade1772676.png", + "retailerCode": "ENG", + "residentialContact": "1300067348" + }, + "25002": { + "tradingName": "Flipped Energy Australia Pty Ltd", + "gasBillURL": null, + "orgName": "Flipped Energy", + "cdrCode": "flipped", + "smallBusinessContact": "1300 110 100", + "abn": "73 653 445 740", + "orgId": "25002", + "orgStatus": "active", + "cdrBrand": "flipped", + "websiteURL": "www.flipped.energy", + "electricityBillURL": null, + "logo": "/static/organisations/logos/438ff02d87cec3f985c465552312d2e1.png", + "retailerCode": "FEA", + "residentialContact": "1300 110 100" + }, + "25003": { + "tradingName": "EL Retail Energy Pty Ltd ", + "gasBillURL": null, + "orgName": "Arcline by RACV", + "cdrCode": "arcline", + "smallBusinessContact": "1300 884 849", + "abn": "23 606 408 879", + "orgId": "25003", + "orgStatus": "active", + "cdrBrand": "arcline", + "websiteURL": "energy.arcline.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/cc1f9d42109cdfd0dbf841a340f2a127.png", + "retailerCode": "ARL", + "residentialContact": "1300 884 849" + }, + "25004": { + "tradingName": "Lumo Energy Australia Pty Ltd", + "gasBillURL": null, + "orgName": "Lumo Energy", + "cdrCode": "lumo", + "smallBusinessContact": "1300 360 434", + "abn": "69 100 528 327", + "orgId": "25004", + "orgStatus": "active", + "cdrBrand": "lumo", + "websiteURL": "www.lumoenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/0b0dc529ab604c5888c14da15cc16ff7.png", + "retailerCode": "LU2", + "residentialContact": "1300 115 866" + }, + "25005": { + "tradingName": "SmartestEnergy Australia Pty Ltd", + "gasBillURL": null, + "orgName": "SmartestEnergy", + "cdrCode": "smartestenergy", + "smallBusinessContact": "1300 176 031", + "abn": "37 632 313 029", + "orgId": "25005", + "orgStatus": "inactive", + "cdrBrand": "smartestEnergy", + "websiteURL": "www.smartestenergy.com/en_au/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/116d93f30044cfc65bbe86a25626bf0a.png", + "retailerCode": "SMA", + "residentialContact": "1300 176 031" + }, + "25006": { + "tradingName": "Sumo Gas Pty Ltd", + "gasBillURL": null, + "orgName": "Sumo", + "cdrCode": "sumo-gas", + "smallBusinessContact": "13 88 60", + "abn": "67 606 951 713", + "orgId": "25006", + "orgStatus": "inactive", + "cdrBrand": "sumo-gas", + "websiteURL": "www.sumo.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/57aa1c7550dbea0ef05aaba3f105d69c.png", + "retailerCode": "SUM", + "residentialContact": "13 88 60" + }, + "25007": { + "tradingName": "Online Power and Gas Pty Ltd", + "gasBillURL": null, + "orgName": "Sunswitch Energy Pty Ltd", + "cdrCode": "future-x", + "smallBusinessContact": "0387957091", + "abn": "12 655 918 871", + "orgId": "25007", + "orgStatus": "active", + "cdrBrand": "sunswitch", + "websiteURL": "sunswitchenergy.com.au/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/a1e89851ecf8301831c2c55089518007.png", + "retailerCode": "SUN", + "residentialContact": "0387957091" + }, + "25008": { + "tradingName": "Tesla Energy Ventures Australia Pty Ltd", + "gasBillURL": null, + "orgName": "Tesla Energy Ventures Australia", + "cdrCode": "tesla", + "smallBusinessContact": "02 8015 2834", + "abn": "24 665 982 365", + "orgId": "25008", + "orgStatus": "active", + "cdrBrand": "tesla", + "websiteURL": "www.tesla.com.au", + "electricityBillURL": "teslaenergy.com.au/how-to-read-your-bill", + "logo": "/static/organisations/logos/b5ebd982506da96c4d0db64bfead8e6c.png", + "retailerCode": "TVA", + "residentialContact": "02 8015 2834" + }, + "25009": { + "tradingName": "Energy Locals Pty Ltd", + "gasBillURL": null, + "orgName": "Indigo Power", + "cdrCode": "energy-locals", + "smallBusinessContact": "1800 491 739", + "abn": "23 606 408 879", + "orgId": "25009", + "orgStatus": "inactive", + "cdrBrand": "indigo", + "websiteURL": "www.indigopower.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/2b5b28aff0646cf034b41617c7a2add0.png", + "retailerCode": "IND", + "residentialContact": "1800 491 739" + }, + "25010": { + "tradingName": "EL Retail Energy Pty Ltd ", + "gasBillURL": null, + "orgName": "Cooperative Power", + "cdrCode": "energy-locals", + "smallBusinessContact": "1300 693 637", + "abn": "23606408879", + "orgId": "25010", + "orgStatus": "active", + "cdrBrand": "cooperative", + "websiteURL": "www.cooperativepower.org.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/7bcf81755bc27d9553d0d7d065124ce6.png", + "retailerCode": "COP", + "residentialContact": "1300 693 637" + }, + "25011": { + "tradingName": "MYOB powered by OVO Pty Ltd", + "gasBillURL": null, + "orgName": "MYOB powered by OVO", + "cdrCode": "ovo-energy", + "smallBusinessContact": "1800 467 698", + "abn": "99623475089", + "orgId": "25011", + "orgStatus": "active", + "cdrBrand": "myob", + "websiteURL": "www.comparethemarket.com.au/energy/journey/start", + "electricityBillURL": null, + "logo": "/static/organisations/logos/b8085989c8729c8c6bb2ebf6906678aa.png", + "retailerCode": "MYO", + "residentialContact": "1800 467 698" + }, + "25012": { + "tradingName": "Macarthur Energy Retail Pty Ltd", + "gasBillURL": null, + "orgName": "Macarthur Energy Retail", + "cdrCode": "macarthur", + "smallBusinessContact": "02 4606 3524", + "abn": "89643524921", + "orgId": "25012", + "orgStatus": "active", + "cdrBrand": "macarthur", + "websiteURL": "ww.macarthurenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/cec99be1c421ae486fb308b68f8b2fa5.png", + "retailerCode": "MCA", + "residentialContact": "02 4606 3524" + }, + "25013": { + "tradingName": "EL Retail Energy Pty Ltd ", + "gasBillURL": null, + "orgName": "RAA Energy", + "cdrCode": "energy-locals", + "smallBusinessContact": "08 8202 8118", + "abn": "90 020 001 807", + "orgId": "25013", + "orgStatus": "active", + "cdrBrand": "raa", + "websiteURL": "raa.com.au/energy", + "electricityBillURL": null, + "logo": "/static/organisations/logos/b039d127a4aeff412153c66494f2ed89.png", + "retailerCode": "RAA", + "residentialContact": "08 8202 8118" + }, + "25014": { + "tradingName": "Perpetual Energy Pty Ltd", + "gasBillURL": null, + "orgName": "Perpetual Energy", + "cdrCode": "perpetual", + "smallBusinessContact": "02 8077 8592", + "abn": "20 643 401 496", + "orgId": "25014", + "orgStatus": "active", + "cdrBrand": "perpetual", + "websiteURL": "perpetualenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/f4ae158e047663faaa3ce5893553cd33.png", + "retailerCode": "PER", + "residentialContact": "02 8077 8592" + }, + "25015": { + "tradingName": "Savant Energy Power Networks Pty Limited", + "gasBillURL": null, + "orgName": "Savant Energy", + "cdrCode": "savant", + "smallBusinessContact": "1300 587 623", + "abn": "31 604 736 638", + "orgId": "25015", + "orgStatus": "active", + "cdrBrand": "savant", + "websiteURL": "savantenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/e29e6529f6c6eb05c5b2ca255938937c.png", + "retailerCode": "SAV", + "residentialContact": "1300 587 623" + }, + "25016": { + "tradingName": "Veolia Energy (ANZ) Pty Ltd", + "gasBillURL": null, + "orgName": "Veolia Energy", + "cdrCode": "veolia", + "smallBusinessContact": "07 3212 6641", + "abn": "74 140 547 226", + "orgId": "25016", + "orgStatus": "active", + "cdrBrand": "veolia", + "websiteURL": "www.anz.veolia.com/energy-retail", + "electricityBillURL": null, + "logo": "/static/organisations/logos/7e8dde1540b66ff92227909e7165c559.png", + "retailerCode": "VEA", + "residentialContact": "07 3212 6641" + }, + "25017": { + "tradingName": "Ezi Power Pty Ltd", + "gasBillURL": null, + "orgName": "Ezi Power", + "cdrCode": "silver-asset", + "smallBusinessContact": "1300 972 702", + "abn": "11 631 775 105", + "orgId": "25017", + "orgStatus": "active", + "cdrBrand": "silver-asset", + "websiteURL": "silverasset.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/a8729139c8a1cf211627c90592449b46.png", + "retailerCode": "SLV", + "residentialContact": "1300 972 702" + }, + "25018": { + "tradingName": "Radian Holdings Pty Ltd", + "gasBillURL": null, + "orgName": "iO Energy", + "cdrCode": "radian", + "smallBusinessContact": "1300 313 463", + "abn": "94 633 200 656", + "orgId": "25018", + "orgStatus": "active", + "cdrBrand": "io-energy", + "websiteURL": "ioenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/e7aa7fceceb34995a6eb53c666162ba3.png", + "retailerCode": "IOR", + "residentialContact": "1300 313 463" + }, + "25019": { + "tradingName": "ERC Energy Pty Ltd", + "gasBillURL": null, + "orgName": "ERC Energy", + "cdrCode": "erc-energy", + "smallBusinessContact": "1300650849", + "abn": "93629720994", + "orgId": "25019", + "orgStatus": "active", + "cdrBrand": "erc-energy", + "websiteURL": "ercenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/05b1bac4159890222db6b2b5d9b91029.png", + "retailerCode": "ERC", + "residentialContact": "1300650849" + }, + "25020": { + "tradingName": "Energy Trade Pty Ltd", + "gasBillURL": null, + "orgName": "Energy Locals Urban", + "cdrCode": "energy-locals-urban", + "smallBusinessContact": "1300 001 255", + "abn": "79165688568", + "orgId": "25020", + "orgStatus": "active", + "cdrBrand": "energy-locals-urban", + "websiteURL": "energylocals.com.au/", + "electricityBillURL": "energylocals.com.au/urban-help-faqs/", + "logo": "/static/organisations/logos/627094e73c210df02fadab1ea9ebac5e.png", + "retailerCode": "ELU", + "residentialContact": "1300 001 255" + }, + "25021": { + "tradingName": "ASENO Pty Ltd", + "gasBillURL": null, + "orgName": "ASENO", + "cdrCode": "aseno", + "smallBusinessContact": "1300 027 366", + "abn": "62 660 232 664", + "orgId": "25021", + "orgStatus": "active", + "cdrBrand": "aseno", + "websiteURL": "www.aseno.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/d750f9dd2f6ce940f13061e2f5f44883.png", + "retailerCode": "ASE", + "residentialContact": "1300 027 366" + }, + "103820": { + "tradingName": "1st Energy Pty Ltd", + "gasBillURL": null, + "orgName": "1st Energy", + "cdrCode": "1st-energy", + "smallBusinessContact": "1300 426 594", + "abn": "71 604 999 706", + "orgId": "103820", + "orgStatus": "active", + "cdrBrand": "1st-energy", + "websiteURL": "www.1stenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/7d60dc912ecc8c32110796b21393b349.png", + "retailerCode": "1ST", + "residentialContact": "1300 426 594" + }, + "114571": { + "tradingName": "Mojo Power Pty Ltd", + "gasBillURL": null, + "orgName": "Mojo Power", + "cdrCode": "mojo", + "smallBusinessContact": "1300 019 649", + "abn": "85 604 909 837", + "orgId": "114571", + "orgStatus": "inactive", + "cdrBrand": "mojo", + "websiteURL": "www.mojopower.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/mojo.png", + "retailerCode": "MOJ", + "residentialContact": "1300 019 649" + }, + "152706": { + "orgStatus": "inactive", + "tradingName": "Enova Energy", + "orgName": "Enova Energy", + "cdrBrand": "enova", + "websiteURL": "www.enovaenergy.com.au", + "logo": "/static/organisations/logos/9f6bf6b8a38fdeb5ef425f7295339223.png", + "cdrCode": "enova", + "retailerCode": "ENO", + "smallBusinessContact": "02 5622 1700", + "residentialContact": "02 5622 1700", + "abn": "16 606 176 759", + "orgId": "152706" + }, + "201064": { + "orgStatus": "active", + "tradingName": "EL Retail Energy Pty Ltd", + "orgName": "Energy Locals Retail", + "cdrBrand": "energy-locals", + "websiteURL": "energylocalsretail.com.au", + "logo": "/static/organisations/logos/energy_locals.png", + "cdrCode": "energy-locals", + "retailerCode": "LCL", + "smallBusinessContact": "1300 869 573", + "residentialContact": "1300 869 573", + "abn": "23 606 408 879", + "orgId": "201064" + }, + "211603": { + "orgStatus": "active", + "tradingName": "WINconnect Pty Ltd", + "orgName": "WINconnect", + "cdrBrand": "winconnect", + "websiteURL": "www.winconnect.com.au", + "logo": "/static/organisations/logos/win_connect.png", + "cdrCode": "winconnect", + "retailerCode": "WIN", + "smallBusinessContact": "1300 791 970", + "residentialContact": "1300 791 970", + "abn": "71 112 175 710", + "orgId": "211603" + }, + "434028": { + "tradingName": "Click Energy Pty Ltd", + "orgName": "amaysim Energy", + "cdrCode": "amaysim", + "smallBusinessContact": "1300 808 300", + "abn": "41 116 567 492", + "orgId": "434028", + "orgStatus": "inactive", + "cdrBrand": "amaysim", + "websiteURL": "www.amaysim.com.au", + "electricityBillURL": "www.amaysim.com.au/help/account/energy/understand-bill", + "logo": "/static/organisations/logos/amaysim.png", + "retailerCode": "AMA", + "residentialContact": "1300 808 300" + }, + "456311": { + "orgStatus": "inactive", + "tradingName": "OC Energy Pty Ltd", + "orgName": "OC Energy", + "cdrBrand": "oc-energy", + "websiteURL": "www.ocenergy.com.au", + "logo": "/static/organisations/logos/oc_energy.png", + "cdrCode": "oc-energy", + "retailerCode": "OCE", + "smallBusinessContact": "1300 494 080", + "residentialContact": "1300 494 080", + "abn": "62 144 655 514", + "orgId": "456311" + }, + "539680": { + "orgStatus": "inactive", + "tradingName": "Macquarie Bank Limited", + "orgName": "Macquarie", + "cdrBrand": "macquarie", + "websiteURL": "www.macquarie.com/au/corporate", + "logo": "/static/organisations/logos/macquarie.jpg", + "cdrCode": "macquarie", + "retailerCode": "MAC", + "smallBusinessContact": "02 8232 3324", + "residentialContact": "02 8232 3324", + "abn": "46 008 583 542", + "orgId": "539680" + }, + "544846": { + "tradingName": "Sumo Power Pty Ltd", + "gasBillURL": "www.sumo.com.au/how-to-read-my-bill/", + "orgName": "Sumo", + "cdrCode": "sumo-power", + "smallBusinessContact": "13 88 60", + "abn": "86 601 199 151", + "orgId": "544846", + "orgStatus": "active", + "cdrBrand": "sumo-power", + "websiteURL": "www.sumo.com.au", + "electricityBillURL": "www.sumo.com.au/how-to-read-my-bill/", + "logo": "/static/organisations/logos/sumo.png", + "retailerCode": "SUM", + "residentialContact": "13 88 60" + }, + "555268": { + "orgStatus": "inactive", + "tradingName": "ReAmped Energy Pty Ltd", + "orgName": "ReAmped Energy", + "cdrBrand": "reamped", + "websiteURL": "www.reampedenergy.com.au/go/re-eme/", + "logo": "/static/organisations/logos/efcc2e0414d559815d5080b40d11ecd1.png", + "cdrCode": "reamped", + "retailerCode": "REA", + "smallBusinessContact": "1800 841 627", + "residentialContact": "1800 841 627", + "abn": "21 605 682 684", + "orgId": "555268" + }, + "562102": { + "tradingName": "Evergy Pty Ltd", + "gasBillURL": null, + "orgName": "Evergy", + "cdrCode": "evergy", + "smallBusinessContact": "1300 383 749", + "abn": "56 623 005 836", + "orgId": "562102", + "orgStatus": "active", + "cdrBrand": "evergy", + "websiteURL": "evergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/1e07d1e6eae2d98071ff87b922db926e.png", + "retailerCode": "EVE", + "residentialContact": "1300 383 749" + }, + "586942": { + "tradingName": "Discover Energy Pty Ltd", + "orgName": "Discover Energy", + "cdrCode": "discover", + "smallBusinessContact": "1300658519", + "abn": "20 619 204 750", + "orgId": "586942", + "orgStatus": "active", + "cdrBrand": "discover", + "websiteURL": "www.discoverenergy.com.au", + "electricityBillURL": "s3-ap-southeast-2.amazonaws.com/discover-energy/assets/pdf/understanding_your_bill.pdf", + "logo": "/static/organisations/logos/discover.png", + "retailerCode": "DEN", + "residentialContact": "1300658519" + }, + "665493": { + "tradingName": "CleanPeak Energy Retail Pty Ltd", + "gasBillURL": null, + "orgName": "CleanPeak Energy Retail", + "cdrCode": "cleanpeak", + "smallBusinessContact": "1300 038 069", + "abn": "18 623 916 138", + "orgId": "665493", + "orgStatus": "active", + "cdrBrand": "cleanpeak", + "websiteURL": "www.cleanpeakenergy.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/cleanpeak.png", + "retailerCode": "CPE", + "residentialContact": "1300 038 069" + }, + "686699": { + "orgStatus": "active", + "tradingName": "Real Utilities Pty Limited", + "orgName": "Real Utilities", + "cdrBrand": "real-utilities", + "websiteURL": "www.realutilities.com.au", + "logo": "/static/organisations/logos/real_utilities.png", + "cdrCode": "real-utilities", + "retailerCode": "REU", + "smallBusinessContact": "0300161668", + "residentialContact": "0300161668", + "abn": "97 150 290 814", + "orgId": "686699" + }, + "700390": { + "orgStatus": "inactive", + "tradingName": "Powershop Australia Pty Ltd", + "orgName": "DC Power Co", + "cdrBrand": "dc-power", + "websiteURL": "www.dcpowerco.com.au", + "logo": "/static/organisations/logos/dcpowerco.png", + "cdrCode": "dc-power", + "retailerCode": "DCP", + "smallBusinessContact": "1800 686 686", + "residentialContact": "1800 686 686", + "abn": "41 154 914 075", + "orgId": "700390" + }, + "711461": { + "tradingName": "LPE", + "orgName": "Locality Planning Energy", + "cdrCode": "locality-planning", + "smallBusinessContact": "1800 040 168", + "abn": "90 147 867 301", + "orgId": "711461", + "orgStatus": "active", + "cdrBrand": "locality-planning", + "websiteURL": "www.localityenergy.com.au/", + "electricityBillURL": "localityenergy.com.au/how-to-read-your-bill-1", + "logo": "/static/organisations/logos/55de99f8e820b3d8db3de814e5b0da6c.png", + "retailerCode": "LPE", + "residentialContact": "1800 040 168" + }, + "714020": { + "orgStatus": "active", + "tradingName": "The Embedded Networks Company Pty Ltd", + "orgName": "Seene", + "cdrBrand": "seene", + "websiteURL": "www.seene.com.au", + "logo": "/static/organisations/logos/seene.png", + "cdrCode": "seene", + "retailerCode": "SEE", + "smallBusinessContact": "1300 609 387", + "residentialContact": "1300 609 387", + "abn": "32 119 677 431", + "orgId": "714020" + }, + "719464": { + "orgStatus": "active", + "tradingName": "Online Power and Gas Pty Ltd", + "orgName": "Future X Power", + "cdrBrand": "future-x", + "websiteURL": "www.futurexpower.com.au", + "logo": "/static/organisations/logos/futurex.png", + "cdrCode": "future-x", + "retailerCode": "FXP", + "smallBusinessContact": "1300 599 008", + "residentialContact": "1300 599 008", + "abn": "95 164 285 634", + "orgId": "719464" + }, + "756356": { + "orgStatus": "inactive", + "tradingName": "Flow Systems Pty Ltd", + "orgName": "Flow Systems", + "cdrBrand": "flow-systems", + "websiteURL": "flowutilities.com.au", + "logo": "/static/organisations/logos/flow.png", + "cdrCode": "flow-systems", + "retailerCode": "FLO", + "smallBusinessContact": "1300 806 806", + "residentialContact": "1300 806 806", + "abn": "28 136 272 298", + "orgId": "756356" + }, + "756360": { + "orgStatus": "inactive", + "tradingName": "Power Club Limited", + "orgName": "Powerclub", + "cdrBrand": "powerclub", + "websiteURL": "powerclub.com.au", + "logo": "/static/organisations/logos/powerclub.png", + "cdrCode": "powerclub", + "retailerCode": "PWR", + "smallBusinessContact": "1300 294 459", + "residentialContact": "1300 294 459", + "abn": "71 603 346 836", + "orgId": "756360" + }, + "788632": { + "orgStatus": "active", + "tradingName": "Stanwell Corporation Limited", + "orgName": "Stanwell Energy", + "cdrBrand": "stanwell", + "websiteURL": "stanwellenergy.com", + "logo": "/static/organisations/logos/stanwell.png", + "cdrCode": "stanwell", + "retailerCode": "STA", + "smallBusinessContact": "1300 454 058", + "residentialContact": "1300 454 058", + "abn": "37 078 848 674", + "orgId": "788632" + }, + "887030": { + "orgStatus": "active", + "tradingName": "CPE Mascot Pty Ltd", + "orgName": "CPE Mascot", + "cdrBrand": "cpe-mascot", + "websiteURL": "www.cleanpeakenergy.com.au", + "logo": "/static/organisations/logos/6be5f44e7564ead2bec088071373bc83.png", + "cdrCode": "cpe-mascot", + "retailerCode": "ENW", + "smallBusinessContact": "1300 057 405", + "residentialContact": "1300 057 405", + "abn": "22 100 209 354", + "orgId": "887030" + }, + "897829": { + "orgStatus": "inactive", + "tradingName": "Elysian Energy Pty Ltd", + "orgName": "Elysian Energy", + "cdrBrand": "elysian", + "websiteURL": "www.elysianenergy.com.au", + "logo": "/static/organisations/logos/04316e35d3fb1dde6d70a6485888beed.png", + "cdrCode": "elysian", + "retailerCode": "ELY", + "smallBusinessContact": "1300 870 300", + "residentialContact": "1300 870 300", + "abn": "85 617 526 333", + "orgId": "897829" + }, + "898484": { + "orgStatus": "active", + "tradingName": "Globird Energy Pty Ltd", + "orgName": "Globird Energy", + "cdrBrand": "globird", + "websiteURL": "www.globirdenergy.com.au", + "logo": "/static/organisations/logos/globird.png", + "cdrCode": "globird", + "retailerCode": "GLO", + "smallBusinessContact": "13 34 56", + "residentialContact": "13 34 56", + "abn": "68 600 285 827", + "orgId": "898484" + }, + "1001466": { + "orgStatus": "active", + "tradingName": "Solstice Energy Pty Ltd", + "orgName": "Solstice Energy", + "cdrBrand": "solstice", + "websiteURL": "www.solsticeenergy.com.au/", + "logo": "/static/organisations/logos/d0eb4af452fbc3eb0c2e4396ee5269ac.png", + "cdrCode": "solstice", + "retailerCode": "SOL", + "smallBusinessContact": "1800 750 750", + "residentialContact": "1800 750 750", + "abn": "90110370726", + "orgId": "1001466" + }, + "1026340": { + "orgStatus": "active", + "tradingName": "Powershop Australia Pty Ltd", + "orgName": "Kogan Energy", + "cdrBrand": "kogan", + "websiteURL": "www.koganenergy.com.au", + "logo": "/static/organisations/logos/kogan.png", + "cdrCode": "kogan", + "retailerCode": "KOG", + "smallBusinessContact": "1300 005 123", + "residentialContact": "1300 005 123", + "abn": "41 154 914 075", + "orgId": "1026340" + }, + "1028959": { + "orgStatus": "active", + "tradingName": "Amber Electric Pty Ltd", + "orgName": "Amber Electric", + "cdrBrand": "amber ", + "websiteURL": "www.amber.com.au/plan/energy-made-easy", + "logo": "/static/organisations/logos/6537c905dff42c5ecf1d65df90a8e057.png", + "cdrCode": "amber", + "retailerCode": "AMB", + "smallBusinessContact": "1800 531 907", + "residentialContact": "1800 531 907", + "abn": "98 623 603 805", + "orgId": "1028959" + }, + "1060386": { + "tradingName": "Hanwha Energy Retail Australia Pty Ltd", + "gasBillURL": null, + "orgName": "Nectr", + "cdrCode": "nectr", + "smallBusinessContact": "1300 111 211", + "abn": "82 630 397 214", + "orgId": "1060386", + "orgStatus": "active", + "cdrBrand": "nectr", + "websiteURL": "on.nectr.com.au", + "electricityBillURL": null, + "logo": "/static/organisations/logos/nectr.png", + "retailerCode": "NTR", + "residentialContact": "1300 111 211" + }, + "1085327": { + "orgStatus": "active", + "tradingName": "OVO Energy Pty Ltd", + "orgName": "OVO Energy", + "cdrBrand": "ovo-energy", + "websiteURL": "www.ovoenergy.com.au/eme", + "logo": "/static/organisations/logos/ovo.png", + "cdrCode": "ovo-energy", + "retailerCode": "OVO", + "smallBusinessContact": "1300 937 686", + "residentialContact": "1300 937 686", + "abn": "99 623 475 089", + "orgId": "1085327" + }, + "1095771": { + "tradingName": "Arc Energy Corporation Pty Ltd", + "gasBillURL": null, + "orgName": "Arc Energy Group", + "cdrCode": "arc-energy", + "smallBusinessContact": "1300 025 965", + "abn": "33 614 276 827", + "orgId": "1095771", + "orgStatus": "active", + "cdrBrand": "arc-energy ", + "websiteURL": "www.arcenergygroup.com.au/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/arc.png", + "retailerCode": "ARC", + "residentialContact": "1300 025 965" + }, + "1111812": { + "tradingName": "Metered Energy Holdings Pty Ltd", + "gasBillURL": null, + "orgName": "Metered Energy Holdings", + "cdrCode": "metered-energy", + "smallBusinessContact": "1300633637", + "abn": "44108143862", + "orgId": "1111812", + "orgStatus": "active", + "cdrBrand": "metered-energy", + "websiteURL": "www.meteredenergy.com.au/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/meh.png", + "retailerCode": "MEH", + "residentialContact": "1300633637" + }, + "1114936": { + "tradingName": "Active Utilities Retail Pty Ltd", + "gasBillURL": null, + "orgName": "Active Utilities Retail", + "cdrCode": "active-utilities", + "smallBusinessContact": "1300 587 623", + "abn": "31 606 139 931", + "orgId": "1114936", + "orgStatus": "active", + "cdrBrand": "active-utilities", + "websiteURL": "www.activeutilities.com.au/", + "electricityBillURL": null, + "logo": "/static/organisations/logos/0fc6da1797227c2758c074c2506e0c7d.png", + "retailerCode": "AUT", + "residentialContact": "1300 587 623" + } + } + } +} \ No newline at end of file diff --git a/custom_components/pricehawk/cdr/registry.py b/custom_components/pricehawk/cdr/registry.py index 0d4f8c6..157fde5 100644 --- a/custom_components/pricehawk/cdr/registry.py +++ b/custom_components/pricehawk/cdr/registry.py @@ -3,23 +3,31 @@ Source of truth for "which retailers does PriceHawk know about, and where do we send CDR list / detail requests for each one". -Strategy (per design doc §H.10): - -1. The package ships a baked-in copy of the jxeeno community registry at - `cdr/data/cdr_endpoints.json`. This guarantees the wizard works - offline at install time. -2. At first use, the wizard attempts a live fetch from - `https://raw.githubusercontent.com/jxeeno/energy-cdr-prd-endpoints/main/docs/energy-prd-endpoints.json`. -3. If the live fetch succeeds, those entries replace the baked-in - set in memory for the lifetime of the wizard session. If it fails - (network down, 404, malformed body), the baked-in copy is used - silently — wizard never blocks on registry availability. -4. A quarterly CI cron PR refreshes the baked-in copy from upstream - (added to the workflow set in Phase 2.5). +Strategy (Phase 3.1 prep — EME refdata2): + +1. The package ships a baked-in copy of the + ``https://api.energymadeeasy.gov.au/refdata2`` ``organisations`` map at + ``cdr/data/eme_refdata.json``. EME covers 117 orgs and carries the + metadata PriceHawk needs to disambiguate shared base URIs + (``cdrCode`` → URL path segment, ``cdrBrand`` → ``?brand=`` query + param matching ``PlanDetail.brand``). +2. At first use, the wizard tries a live fetch from EME. On any failure + it loads the baked-in EME snapshot. The wizard never blocks on + registry availability. +3. A quarterly CI cron PR refreshes the baked-in EME copy from upstream. + +Sources NOT used and why: +- jxeeno community registry has 2 known base-URI bugs (ARCLINE, + iO Energy) and drifts from AER PDF. Two unreliable sources are not + better than one good source + offline cache. +- ACCC Register API is broken for energy PRD (SM#561, unresolved since + Dec 2022). +- AER PDF is authoritative but human-curated monthly — not suitable + for a live source. This module deliberately does NOT persist refreshed copies to HA Store — that lives in the coordinator's nightly job (post-v1.5.0) where there is -a stable `hass` reference. The wizard treats each session as ephemeral. +a stable ``hass`` reference. The wizard treats each session as ephemeral. """ from __future__ import annotations @@ -39,17 +47,29 @@ _LOGGER = logging.getLogger(__name__) -_BAKED_IN_PATH = Path(__file__).parent / "data" / "cdr_endpoints.json" +_BAKED_IN_PATH = Path(__file__).parent / "data" / "eme_refdata.json" + LIVE_REGISTRY_URL = ( - "https://raw.githubusercontent.com/" - "jxeeno/energy-cdr-prd-endpoints/main/docs/energy-prd-endpoints.json" + "https://api.energymadeeasy.gov.au/refdata2?keys=organisations,thirdParties" ) + _FETCH_TIMEOUT_SEC = 15 +_EME_BASE_URI_TEMPLATE = "https://cdr.energymadeeasy.gov.au/{cdr_code}" +_EME_LOGO_PREFIX = "https://energymadeeasy.gov.au" @dataclass(frozen=True) class RetailerEndpoint: - """A single AU retailer's CDR data-holder configuration.""" + """A single AU retailer's CDR data-holder configuration. + + ``brand_id`` is the EME ``orgId`` — opaque, do not parse. + + ``cdr_brand`` is the ``brand`` discriminator in CDR PlanDetailV2. + When multiple retailers share a base URI (e.g. seven brands hosted + on ``cdr.energymadeeasy.gov.au/energy-locals/``), ``cdr_brand`` + distinguishes them. Pass it through ``?brand=`` on plan + list / detail requests. + """ brand_id: str brand_name: str @@ -57,6 +77,7 @@ class RetailerEndpoint: logo_uri: str | None = None abn: str | None = None last_updated: str | None = None + cdr_brand: str | None = None @property def slug(self) -> str: @@ -65,56 +86,87 @@ def slug(self) -> str: return self.brand_name.lower().replace(" ", "_").replace("-", "_") -def _parse_entries(raw: Any) -> list[RetailerEndpoint]: - """Convert a raw jxeeno JSON envelope into RetailerEndpoint records. +def _parse_eme_entries(raw: Any) -> list[RetailerEndpoint]: + """Convert an EME ``refdata2`` envelope into RetailerEndpoint records. - Filters to entries that have a usable productReferenceDataBaseUri. - Industry filter is "energy" (all entries in the jxeeno registry are - energy retailers; CDR sector overlap with banking is not represented - in this file). + EME structure: ``{"data": {"organisations": {"": {...}, ...}}}``. + We only keep orgs that have a ``cdrCode`` (the URL path segment) — + a handful of broker-only entries lack one. ``cdrBrand`` may differ + from ``cdrCode`` for shared-base-URI brands; it is preserved so + callers can disambiguate plans via ``?brand=``. """ if not isinstance(raw, dict): - raise ValueError("registry root is not a dict") - entries = raw.get("data") - if not isinstance(entries, list): - raise ValueError("registry data field is not a list") + raise ValueError("EME registry root is not a dict") + data = raw.get("data") + if not isinstance(data, dict): + raise ValueError("EME registry data field is not a dict") + orgs = data.get("organisations") + if not isinstance(orgs, dict): + raise ValueError("EME registry organisations field is not a dict") out: list[RetailerEndpoint] = [] - for e in entries: - if not isinstance(e, dict): + for org_id, o in orgs.items(): + if not isinstance(o, dict): continue - base = e.get("productReferenceDataBaseUri") - brand = e.get("brandName") - bid = e.get("dataHolderBrandId") or e.get("interimId") - if not (base and brand and bid): + # CR-fix: every upstream string is coerced via _safe_str (handles + # None, int, bool, missing keys) before .strip() — avoids + # AttributeError when EME ships a non-string in cdrCode/cdrBrand. + cdr_code = _safe_str(o.get("cdrCode")) + # Upstream has trailing-space bugs in some cdrBrand values + # ("aurora ", "brighte ", "amber " etc); _safe_str strips + # defensively. + cdr_brand = _safe_str(o.get("cdrBrand")) or None + # CR-fix: trim display names too — several EME orgs ship + # trailing whitespace in tradingName/orgName which would leak + # into UI labels. + display = _safe_str(o.get("tradingName")) or _safe_str(o.get("orgName")) + if not (cdr_code and display): continue + logo_path = o.get("logo") + if isinstance(logo_path, str) and logo_path: + logo_uri = ( + f"{_EME_LOGO_PREFIX}{logo_path}" + if logo_path.startswith("/") + else logo_path + ) + else: + logo_uri = None out.append( RetailerEndpoint( - brand_id=str(bid), - brand_name=str(brand), - base_uri=str(base).rstrip("/"), - logo_uri=e.get("logoUri"), - abn=e.get("abn"), - last_updated=e.get("lastUpdated"), + brand_id=str(org_id), + brand_name=display, + base_uri=_EME_BASE_URI_TEMPLATE.format(cdr_code=cdr_code), + logo_uri=logo_uri, + abn=str(o.get("abn")) if o.get("abn") else None, + last_updated=None, # EME envelope has no per-row mtime + cdr_brand=cdr_brand, ) ) return out +def _safe_str(value: Any) -> str: + """Defensive string coercion for upstream registry payloads. + + Returns ``""`` for None / non-string types. Strips whitespace. + Used wherever we need to call ``.strip()`` on a value that EME + might ship as something other than a string (rare but observed). + """ + if not isinstance(value, str): + return "" + return value.strip() + + def load_baked_in() -> list[RetailerEndpoint]: - """Load the JSON shipped inside the package.""" + """Load the EME snapshot shipped inside the package.""" raw = json.loads(_BAKED_IN_PATH.read_text()) - return _parse_entries(raw) + return _parse_eme_entries(raw) async def fetch_live(session: aiohttp.ClientSession) -> list[RetailerEndpoint]: - """Pull the live jxeeno registry. Raises ``CdrUnavailable`` on any - failure (HTTP non-200, network error, malformed body) so callers can - decide whether to fall back to baked-in. - - Unlike `cdr_client._get_json` (which is fine-grained about 4xx vs 5xx - semantics), the registry endpoint is a single static GitHub raw URL - with one happy path. Any failure → unavailable. + """Pull the live EME refdata2 registry. Raises ``CdrUnavailable`` on + any failure (HTTP non-200, network error, malformed body) so callers + can decide whether to fall back to baked-in. """ try: async with session.get( @@ -129,11 +181,16 @@ async def fetch_live(session: aiohttp.ClientSession) -> list[RetailerEndpoint]: raw = await resp.json(content_type=None) except CdrUnavailable: raise - except Exception as err: # noqa: BLE001 — single-URL endpoint, any failure is unavailable + except Exception as err: # noqa: BLE001 — single-URL endpoint _LOGGER.info("registry live fetch failed: %s", err) raise CdrUnavailable(str(err)) from err - - return _parse_entries(raw) + try: + return _parse_eme_entries(raw) + except (ValueError, TypeError, KeyError, AttributeError) as err: + # Malformed payload from EME (schema drift) — treat as + # unavailable so callers fall back to baked-in. + _LOGGER.info("registry parse failed: %s", err) + raise CdrUnavailable(f"parse failed: {err}") from err async def get_registry( @@ -173,11 +230,11 @@ def find_by_brand( # --------------------------------------------------------------------------- -def parse_entries_for_test(raw: dict[str, Any]) -> list[RetailerEndpoint]: - """Public re-export of the internal jxeeno-envelope parser.""" - return _parse_entries(raw) +def parse_eme_for_test(raw: dict[str, Any]) -> list[RetailerEndpoint]: + """Public re-export of the EME refdata2 envelope parser.""" + return _parse_eme_entries(raw) def baked_in_path_for_test() -> Path: - """Resolved filesystem path of the baked-in JSON, for sanity tests.""" + """Resolved filesystem path of the EME baked-in JSON, for sanity tests.""" return _BAKED_IN_PATH diff --git a/custom_components/pricehawk/config_flow.py b/custom_components/pricehawk/config_flow.py index 5f265b9..626987a 100644 --- a/custom_components/pricehawk/config_flow.py +++ b/custom_components/pricehawk/config_flow.py @@ -1281,9 +1281,9 @@ async def async_step_cdr_retailer( self, user_input: dict[str, Any] | None = None ) -> config_entries.ConfigFlowResult: """Phase 2.2 — CDR happy-path entry. Show retailer dropdown sourced - from the live jxeeno registry (with baked-in fallback). The "Skip - CDR" sentinel routes to the legacy manual GloBird flow so v1.4.x - behaviour is preserved for users whose retailer is not in CDR. + from the live EME refdata2 registry (with baked-in fallback). The + "Skip CDR" sentinel routes to the legacy manual GloBird flow so + v1.4.x behaviour is preserved for users whose retailer is not in CDR. On registry-load failure, routes to async_step_cdr_error (Phase 2.3) so the user can retry or pick "Skip" deliberately. @@ -1473,7 +1473,8 @@ async def async_step_cdr_plan_select( try: session = async_get_clientsession(self.hass) detail = await fetch_plan_detail( - session, retailer.base_uri, chosen_plan_id + session, retailer.base_uri, chosen_plan_id, + brand=retailer.cdr_brand, ) except (CdrPlanNotFound, CdrUnavailable, CdrAPIError) as err: _LOGGER.warning( @@ -1495,7 +1496,9 @@ async def async_step_cdr_plan_select( # First entry — fetch list. try: session = async_get_clientsession(self.hass) - plans = await fetch_plan_list(session, retailer.base_uri) + plans = await fetch_plan_list( + session, retailer.base_uri, brand=retailer.cdr_brand, + ) except (CdrUnavailable, CdrAPIError) as err: _LOGGER.warning( "CDR list fetch failed for %s (%s); routing to retry", @@ -2031,7 +2034,8 @@ async def async_step_cdr_plan_pick( try: session = async_get_clientsession(self.hass) detail = await fetch_plan_detail( - session, retailer.base_uri, chosen_plan_id + session, retailer.base_uri, chosen_plan_id, + brand=retailer.cdr_brand, ) except (CdrPlanNotFound, CdrUnavailable, CdrAPIError) as err: _LOGGER.warning( @@ -2054,7 +2058,9 @@ async def async_step_cdr_plan_pick( try: session = async_get_clientsession(self.hass) - plans = await fetch_plan_list(session, retailer.base_uri) + plans = await fetch_plan_list( + session, retailer.base_uri, brand=retailer.cdr_brand, + ) except (CdrUnavailable, CdrAPIError) as err: _LOGGER.warning( "options: CDR list fetch failed for %s (%s)", diff --git a/custom_components/pricehawk/strings.json b/custom_components/pricehawk/strings.json index 6d9c71e..eca2336 100644 --- a/custom_components/pricehawk/strings.json +++ b/custom_components/pricehawk/strings.json @@ -218,7 +218,7 @@ "peak_offpeak_overlap": "Peak and Off-Peak time windows overlap. Each time slot can only belong to one period.", "shoulder_offpeak_overlap": "Shoulder and Off-Peak time windows overlap. Each time slot can only belong to one period.", "incomplete_tou_coverage": "Your TOU time windows don't cover all 24 hours. Uncovered periods will be charged at 0 c/kWh.", - "cdr_registry_unavailable": "Could not load the retailer registry. The jxeeno endpoint may be down or your network is blocking github.com.", + "cdr_registry_unavailable": "Could not load the retailer registry. The Energy Made Easy refdata service may be down, or your network is blocking energymadeeasy.gov.au.", "cdr_list_unavailable": "Could not load this retailer's plan list. Their Consumer Data Right data holder may be temporarily offline.", "cdr_detail_unavailable": "Could not fetch the chosen plan's details. The planId may be stale, or the data holder is rate-limiting.", "cdr_empty_unavailable": "This retailer's CDR list returned no residential electricity plans. Pick a different retailer.", diff --git a/custom_components/pricehawk/translations/en.json b/custom_components/pricehawk/translations/en.json index 6d9c71e..eca2336 100644 --- a/custom_components/pricehawk/translations/en.json +++ b/custom_components/pricehawk/translations/en.json @@ -218,7 +218,7 @@ "peak_offpeak_overlap": "Peak and Off-Peak time windows overlap. Each time slot can only belong to one period.", "shoulder_offpeak_overlap": "Shoulder and Off-Peak time windows overlap. Each time slot can only belong to one period.", "incomplete_tou_coverage": "Your TOU time windows don't cover all 24 hours. Uncovered periods will be charged at 0 c/kWh.", - "cdr_registry_unavailable": "Could not load the retailer registry. The jxeeno endpoint may be down or your network is blocking github.com.", + "cdr_registry_unavailable": "Could not load the retailer registry. The Energy Made Easy refdata service may be down, or your network is blocking energymadeeasy.gov.au.", "cdr_list_unavailable": "Could not load this retailer's plan list. Their Consumer Data Right data holder may be temporarily offline.", "cdr_detail_unavailable": "Could not fetch the chosen plan's details. The planId may be stale, or the data holder is rate-limiting.", "cdr_empty_unavailable": "This retailer's CDR list returned no residential electricity plans. Pick a different retailer.", diff --git a/tests/test_cdr_client.py b/tests/test_cdr_client.py index ae9eed3..6692364 100644 --- a/tests/test_cdr_client.py +++ b/tests/test_cdr_client.py @@ -181,3 +181,68 @@ def test_unexpected_4xx_raises_api_error(): with pytest.raises(CdrAPIError): asyncio.run(fetch_plan_detail(session, "https://test", "Z")) + + +# --------------------------------------------------------------------------- +# Brand disambiguation (Phase 3.1 prep) — shared base URIs need ?brand= +# --------------------------------------------------------------------------- + + +def _mock_session_capturing(*responses: tuple[int, dict | None]): + """Like _mock_session_returning but also records every URL requested + so tests can assert query-string composition.""" + seen: list[str] = [] + queue = list(responses) + session = MagicMock() + + def _get(url, **_kwargs): + seen.append(url) + status, body = queue.pop(0) + resp = MagicMock() + resp.status = status + resp.json = AsyncMock(return_value=body or {}) + resp.text = AsyncMock(return_value="") + ctx = MagicMock() + ctx.__aenter__ = AsyncMock(return_value=resp) + ctx.__aexit__ = AsyncMock(return_value=False) + return ctx + + session.get = MagicMock(side_effect=_get) + return session, seen + + +def test_fetch_plan_list_appends_brand_when_set(): + envelope = build_list_envelope_for_test([]) + session, seen = _mock_session_capturing((200, envelope)) + + asyncio.run(fetch_plan_list(session, "https://test", brand="arcline")) + + assert len(seen) == 1 + assert "brand=arcline" in seen[0] + + +def test_fetch_plan_list_omits_brand_param_when_none(): + envelope = build_list_envelope_for_test([]) + session, seen = _mock_session_capturing((200, envelope)) + + asyncio.run(fetch_plan_list(session, "https://test")) + + assert "brand=" not in seen[0] + + +def test_fetch_plan_detail_appends_brand_when_set(): + detail = build_detail_envelope_for_test({"planId": "Z"}) + session, seen = _mock_session_capturing((200, detail)) + + asyncio.run(fetch_plan_detail(session, "https://test", "Z", brand="cooperative")) + + assert "?brand=cooperative" in seen[0] + + +def test_fetch_plan_detail_omits_brand_when_none(): + detail = build_detail_envelope_for_test({"planId": "Z"}) + session, seen = _mock_session_capturing((200, detail)) + + asyncio.run(fetch_plan_detail(session, "https://test", "Z")) + + assert "?" not in seen[0] diff --git a/tests/test_cdr_registry.py b/tests/test_cdr_registry.py index 296ec60..f630af6 100644 --- a/tests/test_cdr_registry.py +++ b/tests/test_cdr_registry.py @@ -1,10 +1,12 @@ -"""Tests for cdr.registry — Phase 2.1 retailer endpoint registry. +"""Tests for cdr.registry — EME refdata2 retailer endpoint registry. Covers: -- Pure-Python envelope parsing against the jxeeno shape. -- Baked-in JSON is loadable, well-formed, and contains the big-4 retailers. +- Pure-Python envelope parsing against the EME refdata2 shape. +- ``cdr_brand`` discriminator preserved for shared base URIs. +- Baked-in EME JSON loadable, well-formed, contains the big-4 retailers. - ``fetch_live`` happy path returns parsed entries. -- ``fetch_live`` failure modes raise CdrUnavailable. +- ``fetch_live`` failure modes (HTTP, network, malformed body) raise + ``CdrUnavailable``. - ``get_registry`` falls back to baked-in when live fetch fails. """ from __future__ import annotations @@ -17,68 +19,235 @@ from custom_components.pricehawk.cdr.cdr_client import CdrUnavailable from custom_components.pricehawk.cdr.registry import ( + LIVE_REGISTRY_URL, RetailerEndpoint, baked_in_path_for_test, fetch_live, find_by_brand, get_registry, load_baked_in, - parse_entries_for_test, + parse_eme_for_test, ) # --------------------------------------------------------------------------- -# Pure-Python envelope parsing +# EME refdata2 envelope parsing # --------------------------------------------------------------------------- -class TestParseEntries: - def test_parses_single_entry(self): +class TestParseEmeEntries: + def test_parses_single_org(self): raw = { - "data": [ - { - "dataHolderBrandId": "abc", - "brandName": "Origin Energy", - "productReferenceDataBaseUri": "https://example/origin/", - "logoUri": "https://example/logo.png", - "abn": "12345", - "lastUpdated": "2026-05-01", + "data": { + "organisations": { + "9611": { + "tradingName": "CovaU Pty Ltd", + "orgName": "CovaU", + "cdrCode": "covau", + "cdrBrand": "covau", + "abn": "54 090 117 730", + "logo": "/static/organisations/logos/cova_u.png", + } } - ] + } } - result = parse_entries_for_test(raw) + result = parse_eme_for_test(raw) assert len(result) == 1 e = result[0] - assert e.brand_id == "abc" - assert e.brand_name == "Origin Energy" - # Trailing slash is stripped so callers can join URL segments cleanly. - assert e.base_uri == "https://example/origin" - assert e.logo_uri == "https://example/logo.png" + assert e.brand_id == "9611" + assert e.brand_name == "CovaU Pty Ltd" # tradingName preferred + assert e.base_uri == "https://cdr.energymadeeasy.gov.au/covau" + assert e.cdr_brand == "covau" + assert e.abn == "54 090 117 730" + assert e.logo_uri == ( + "https://energymadeeasy.gov.au/static/organisations/logos/cova_u.png" + ) + + def test_falls_back_to_org_name_when_trading_name_missing(self): + raw = { + "data": { + "organisations": { + "1": { + "orgName": "Foo Energy", + "cdrCode": "foo", + "cdrBrand": "foo", + } + } + } + } + assert parse_eme_for_test(raw)[0].brand_name == "Foo Energy" + + def test_skips_orgs_missing_cdr_code(self): + raw = { + "data": { + "organisations": { + "1": {"orgName": "No Code", "cdrBrand": "x"}, + "2": { + "orgName": "Has Code", + "cdrCode": "has-code", + "cdrBrand": "has-code", + }, + } + } + } + assert [e.brand_name for e in parse_eme_for_test(raw)] == ["Has Code"] + + def test_strips_trailing_whitespace_in_cdr_brand(self): + """Upstream EME has trailing-space bugs in several cdrBrand fields + (Aurora, Brighte, Amber etc). Strip so ``?brand=amber+`` doesn't + end up sent to the CDR endpoint.""" + raw = { + "data": { + "organisations": { + "1": { + "orgName": "Aurora Energy", + "cdrCode": "aurora", + "cdrBrand": "aurora ", # bug in upstream + } + } + } + } + assert parse_eme_for_test(raw)[0].cdr_brand == "aurora" - def test_skips_entries_missing_required_fields(self): + def test_strips_trailing_whitespace_in_display_name(self): + """Same trailing-space bug appears in tradingName / orgName on + some EME orgs. Trim so UI labels don't render with stray spaces.""" raw = { - "data": [ - {"brandName": "X", "productReferenceDataBaseUri": "https://x"}, - {"dataHolderBrandId": "1", "brandName": "Y"}, # no base - { - "dataHolderBrandId": "2", - "brandName": "Z", - "productReferenceDataBaseUri": "https://z", - }, - ] + "data": { + "organisations": { + "1": { + "orgName": "Origin Energy ", # trailing space + "cdrCode": "origin", + "cdrBrand": "origin", + } + } + } + } + assert parse_eme_for_test(raw)[0].brand_name == "Origin Energy" + + def test_non_string_fields_safely_skipped(self): + """EME has been observed shipping non-string values in fields + we expect to be strings (numeric cdrCode, None tradingName). + Parser must not raise — affected orgs are silently dropped.""" + raw = { + "data": { + "organisations": { + "bad_code": { + "orgName": "Numeric cdrCode", + "cdrCode": 12345, # int, not str + "cdrBrand": "x", + }, + "bad_name": { + "orgName": None, + "tradingName": None, + "cdrCode": "no-name", + "cdrBrand": "no-name", + }, + "good": { + "orgName": "Good Org", + "cdrCode": "good", + "cdrBrand": "good", + }, + } + } + } + result = parse_eme_for_test(raw) + assert [e.brand_name for e in result] == ["Good Org"] + + def test_logo_uri_normalised_to_str_or_none(self): + """``RetailerEndpoint.logo_uri`` is typed ``str | None``. EME has + been observed dropping odd shapes into the ``logo`` field + (dicts, ints, empty strings); coerce to ``None`` so downstream + consumers can rely on the declared type.""" + raw = { + "data": { + "organisations": { + "1": { + "orgName": "Dict Logo", + "cdrCode": "dict", + "cdrBrand": "dict", + "logo": {"url": "/foo.png"}, # dict, not str + }, + "2": { + "orgName": "Empty Logo", + "cdrCode": "empty", + "cdrBrand": "empty", + "logo": "", + }, + "3": { + "orgName": "None Logo", + "cdrCode": "none-logo", + "cdrBrand": "none-logo", + "logo": None, + }, + "4": { + "orgName": "Absolute Logo", + "cdrCode": "abs", + "cdrBrand": "abs", + "logo": "https://cdn.example.com/x.png", + }, + "5": { + "orgName": "Relative Logo", + "cdrCode": "rel", + "cdrBrand": "rel", + "logo": "/static/x.png", + }, + } + } + } + by_name = {e.brand_name: e.logo_uri for e in parse_eme_for_test(raw)} + assert by_name["Dict Logo"] is None + assert by_name["Empty Logo"] is None + assert by_name["None Logo"] is None + assert by_name["Absolute Logo"] == "https://cdn.example.com/x.png" + assert by_name["Relative Logo"] == ( + "https://energymadeeasy.gov.au/static/x.png" + ) + + def test_preserves_brand_discriminator_for_shared_base_uris(self): + """Energy Locals hosts seven brands. Each org gets the same base + URI but a distinct ``cdr_brand`` so plan list/detail can be + disambiguated via ``?brand=``.""" + raw = { + "data": { + "organisations": { + "1": { + "orgName": "Energy Locals", + "cdrCode": "energy-locals", + "cdrBrand": "energy-locals", + }, + "2": { + "orgName": "ARCLINE by RACV", + "cdrCode": "energy-locals", + "cdrBrand": "arcline", + }, + "3": { + "orgName": "Cooperative Power", + "cdrCode": "energy-locals", + "cdrBrand": "cooperative", + }, + } + } + } + result = parse_eme_for_test(raw) + assert {e.base_uri for e in result} == { + "https://cdr.energymadeeasy.gov.au/energy-locals" + } + assert {e.cdr_brand for e in result} == { + "energy-locals", "arcline", "cooperative", } - result = parse_entries_for_test(raw) - # Entry 1 has no brand_id, entry 2 has no base — both skipped. - # Entry 3 is complete. - assert [e.brand_name for e in result] == ["Z"] def test_invalid_root_raises(self): with pytest.raises(ValueError): - parse_entries_for_test([1, 2, 3]) # type: ignore[arg-type] + parse_eme_for_test([]) # type: ignore[arg-type] + + def test_missing_organisations_raises(self): + with pytest.raises(ValueError): + parse_eme_for_test({"data": {"thirdParties": {}}}) - def test_missing_data_field_raises(self): + def test_organisations_not_dict_raises(self): with pytest.raises(ValueError): - parse_entries_for_test({"not_data": []}) + parse_eme_for_test({"data": {"organisations": "garbage"}}) def test_slug_normalises_brand_name(self): e = RetailerEndpoint(brand_id="x", brand_name="Red Energy", base_uri="https://x") @@ -96,21 +265,30 @@ class TestBakedIn: def test_baked_in_path_exists(self): assert baked_in_path_for_test().is_file() - def test_baked_in_has_data_field(self): + def test_baked_in_has_organisations(self): raw = json.loads(baked_in_path_for_test().read_text()) assert "data" in raw - assert isinstance(raw["data"], list) - assert len(raw["data"]) > 10 # Sanity: jxeeno had 78 at time of bake + assert isinstance(raw["data"], dict) + orgs = raw["data"].get("organisations") + assert isinstance(orgs, dict) + # EME shipped 117 orgs at time of bake; >50 is a generous floor. + assert len(orgs) > 50 def test_load_baked_in_contains_big_4(self): endpoints = load_baked_in() names = {e.brand_name.lower() for e in endpoints} - # Big-4 AU retailers must be present; if not, the bake is stale. for required in ["origin", "agl", "energyaustralia", "red energy"]: assert any(required in n for n in names), ( f"baked-in registry missing required brand fragment '{required}'" ) + def test_load_baked_in_populates_cdr_brand(self): + """EME exposes cdrBrand for every org; baked-in load must carry it + through so shared-base-URI plans can be queried with ``?brand=``.""" + endpoints = load_baked_in() + with_brand = [e for e in endpoints if e.cdr_brand] + assert len(with_brand) > 50, "EME load lost cdr_brand on most entries" + def test_find_by_brand_substring(self): endpoints = load_baked_in() agl = find_by_brand(endpoints, "AGL") @@ -120,8 +298,7 @@ def test_find_by_brand_substring(self): def test_find_by_brand_miss(self): endpoints = load_baked_in() - result = find_by_brand(endpoints, "NotARealRetailer123") - assert result is None + assert find_by_brand(endpoints, "NotARealRetailer123") is None # --------------------------------------------------------------------------- @@ -129,7 +306,7 @@ def test_find_by_brand_miss(self): # --------------------------------------------------------------------------- -def _mock_session_for_url(status: int, body: dict | None) -> MagicMock: +def _mock_session(status: int, body: dict | None) -> MagicMock: session = MagicMock() def _get(_url, **_kwargs): @@ -145,24 +322,29 @@ def _get(_url, **_kwargs): return session -def test_fetch_live_happy_path(): - body = { - "data": [ - { - "dataHolderBrandId": "id", - "brandName": "Test Retailer", - "productReferenceDataBaseUri": "https://test/", +_EME_BODY = { + "data": { + "organisations": { + "1": { + "orgName": "Test Retailer", + "cdrCode": "test", + "cdrBrand": "test", } - ] + } } - session = _mock_session_for_url(200, body) +} + + +def test_fetch_live_happy_path(): + session = _mock_session(200, _EME_BODY) result = asyncio.run(fetch_live(session)) assert len(result) == 1 assert result[0].brand_name == "Test Retailer" + assert result[0].cdr_brand == "test" def test_fetch_live_non_200_raises_unavailable(): - session = _mock_session_for_url(503, None) + session = _mock_session(503, None) with pytest.raises(CdrUnavailable): asyncio.run(fetch_live(session)) @@ -171,7 +353,6 @@ def test_fetch_live_network_error_raises_unavailable(): session = MagicMock() def _get(_url, **_kwargs): - # Simulate aiohttp.ClientError mid-request import aiohttp raise aiohttp.ClientConnectorError(MagicMock(), OSError("nx")) @@ -180,33 +361,59 @@ def _get(_url, **_kwargs): asyncio.run(fetch_live(session)) +def test_fetch_live_malformed_body_raises_unavailable(): + """Schema drift / partial outage at EME should surface as + ``CdrUnavailable`` so ``get_registry`` falls through to baked-in + rather than crashing the wizard.""" + session = _mock_session(200, {"data": {"organisations": "garbage"}}) + with pytest.raises(CdrUnavailable): + asyncio.run(fetch_live(session)) + + +def test_fetch_live_uses_eme_url(): + """Smoke-check: the request hits the EME refdata2 URL, not any other.""" + seen: list[str] = [] + session = MagicMock() + + def _get(url, **_kwargs): + seen.append(url) + resp = MagicMock() + resp.status = 200 + resp.json = AsyncMock(return_value=_EME_BODY) + ctx = MagicMock() + ctx.__aenter__ = AsyncMock(return_value=resp) + ctx.__aexit__ = AsyncMock(return_value=False) + return ctx + + session.get = MagicMock(side_effect=_get) + asyncio.run(fetch_live(session)) + assert seen == [LIVE_REGISTRY_URL] + + def test_get_registry_prefers_live_when_available(): - body = { - "data": [ - { - "dataHolderBrandId": "id", - "brandName": "Live Retailer", - "productReferenceDataBaseUri": "https://live/", - } - ] - } - session = _mock_session_for_url(200, body) + session = _mock_session(200, _EME_BODY) endpoints, source = asyncio.run(get_registry(session)) assert source == "live" - assert any(e.brand_name == "Live Retailer" for e in endpoints) + assert any(e.brand_name == "Test Retailer" for e in endpoints) def test_get_registry_falls_back_to_baked_in_on_failure(): - session = _mock_session_for_url(503, None) + session = _mock_session(503, None) + endpoints, source = asyncio.run(get_registry(session)) + assert source == "baked-in" + assert len(endpoints) > 50 # baked-in EME has 117 at time of write + + +def test_get_registry_falls_back_on_malformed_live_body(): + session = _mock_session(200, {"data": "not-a-dict"}) endpoints, source = asyncio.run(get_registry(session)) assert source == "baked-in" - assert len(endpoints) > 10 # baked-in has 78 at time of write + assert len(endpoints) > 50 def test_get_registry_offline_mode_skips_network(): session = MagicMock() - # If prefer_live=False, session.get must NEVER be called. session.get = MagicMock(side_effect=AssertionError("network was hit")) endpoints, source = asyncio.run(get_registry(session, prefer_live=False)) assert source == "baked-in" - assert len(endpoints) > 10 + assert len(endpoints) > 50