{
    "vtn": "ZEROKW_VTN",
    "operator": "Zero kW",
    "documented": "https://mail.zerokw.com/integrations.php",
    "profiles": [
        {
            "profile": "2.0a",
            "label": "OpenADR 2.0a",
            "transport": "xml",
            "endpoint": "https://mail.zerokw.com/oadr.php/OpenADR2/Simple/2.0a",
            "services": [
                "EiEvent",
                "EiRegisterParty",
                "OadrPoll"
            ],
            "signals": [
                "level"
            ],
            "reports": false,
            "push": false,
            "auth": "HTTP Basic over TLS",
            "note": "Profile A is pull-only and carries the simple 0-3 level signal. Prices, setpoints and kW limits are downgraded to a level."
        },
        {
            "profile": "2.0b",
            "label": "OpenADR 2.0b",
            "transport": "xml",
            "endpoint": "https://mail.zerokw.com/oadr.php/OpenADR2/Simple/2.0b",
            "services": [
                "EiEvent",
                "EiReport",
                "EiRegisterParty",
                "EiOpt",
                "OadrPoll"
            ],
            "signals": [
                "level",
                "price",
                "load_dispatch",
                "load_shed",
                "capacity_limit",
                "charge_setpoint"
            ],
            "reports": true,
            "push": true,
            "auth": "HTTP Basic over TLS",
            "note": "Full Profile B: reports, opt schedules and PUSH as well as PULL."
        },
        {
            "profile": "3.0",
            "label": "OpenADR 3.0",
            "transport": "rest",
            "endpoint": "https://mail.zerokw.com/oadr.php/openadr3/3.0.1",
            "services": [
                "auth",
                "programs",
                "events",
                "reports",
                "subscriptions",
                "vens"
            ],
            "signals": [
                "level",
                "price",
                "load_dispatch",
                "load_shed",
                "capacity_limit",
                "charge_setpoint"
            ],
            "reports": true,
            "push": true,
            "auth": "OAuth2 client_credentials (Bearer)",
            "note": "REST/JSON with OAuth2 client-credentials. Opts are expressed as report data, not as a separate service."
        }
    ],
    "signals": {
        "level": {
            "label": "Simple level",
            "units": null,
            "oadr2": "simple / level",
            "oadr3": "SIMPLE",
            "meaning": "Normal / moderate / high / special. Understood by every device that speaks OpenADR at all."
        },
        "price": {
            "label": "Price",
            "units": "USD/kWh",
            "oadr2": "ELECTRICITY_PRICE / price",
            "oadr3": "PRICE",
            "meaning": "The actual $/kWh for the interval. Drives arbitrage and price-responsive setpoints."
        },
        "load_dispatch": {
            "label": "Dispatch to kW",
            "units": "KW",
            "oadr2": "LOAD_DISPATCH / setpoint",
            "oadr3": "DISPATCH_SETPOINT",
            "meaning": "Hold total load at this kW. The instruction a battery or a chiller plant can act on directly."
        },
        "load_shed": {
            "label": "Shed kW",
            "units": "KW",
            "oadr2": "LOAD_DISPATCH / delta",
            "oadr3": "DISPATCH_SETPOINT_RELATIVE",
            "meaning": "Reduce by this many kW from baseline. What most capacity programs settle against."
        },
        "capacity_limit": {
            "label": "Capacity limit",
            "units": "KW",
            "oadr2": "LOAD_CONTROL / x-loadControlCapacity",
            "oadr3": "IMPORT_CAPACITY_LIMIT",
            "meaning": "A hard ceiling on import. This is the one that protects a demand charge and a ratchet."
        },
        "charge_setpoint": {
            "label": "State of charge",
            "units": "PERCENT",
            "oadr2": "LOAD_DISPATCH / setpoint",
            "oadr3": "CHARGE_STATE_SETPOINT",
            "meaning": "Target state of charge. Used to pre-charge a battery before a peak or a price spike."
        }
    }
}