Skip to content

Datamodel aanpassingen

GillisHommen edited this page Mar 1, 2023 · 31 revisions

Eigenlijk is het datamodel zoals dat nu in de cloudclient-repo, branch main-gillis staat de beste referentie. Maar hieronder alsnog een samenvatting van de belangrijkste veranderingen sinds de MVP.

Nieuwe energy assets

Extra production asset type (heat producer asset) met delivery temperature:

class ProductionAssetTypeEnum(Enum):
    photovoltaic = "PHOTOVOLTAIC"
    windmill = "WINDMILL"
    residualheatHT = "RESIDUALHEATHT"
    residualheatLT = "RESIDUALHEATLT"

class ProductionAsset(EnergyAsset):
    category = "PRODUCTION"
    type: ProductionAssetTypeEnum
    name: str


class ElectricProductionAsset(ProductionAsset):
    capacityElectricity_kW: float


class HeatProductionAsset(ProductionAsset):
    capacityHeat_kW: float
    deliveryTemp_degC: float

Lijst conversion assets uitgebreid

class ConversionAssetTypeEnum(Enum):
    electric_heater = "ELECTRIC_HEATER"
    gas_burner = "GAS_BURNER"
    heat_delivery_set = "HEAT_DELIVERY_SET"
    heat_pump_air = "HEAT_PUMP_AIR"
    heat_pump_ground = "HEAT_PUMP_GROUND"
    heat_pump_water = "HEAT_PUMP_WATER"
    hydrogen_furnace = "HYDROGEN_FURNACE"
    methane_furnace = "METHANE_FURNACE"
    # diesel_vehicle = "DIESEL_VEHICLE" # Verplaatst naar consumption-assets!
    electrolyser = "ELECTROLYSER"
    curtailer = "CURTAILER"
    methane_chp = "METHANE_CHP"

ElectricHOB en GasHOB

Dit zijn beide conversion asses, ElectricHOB gebruikt de bestaande asset "ELECTRIC_HEATER", GasHOB gebruikt de bestaande asset "GAS_BURNER"

In de JSON zien ze er alsvolgt uit:

      {
        "type": "GAS_PIT",
        "name": "Gas pit", //name can be anything
        "eta_r": 0.75,  //fixed value
        "category": "CONVERSION",
        "capacityHeat_kW": 8.0 //fixed value
      },
      {
        "type": "ELECTRIC_HOB",
        "name": "Electric hob", // name can be anything
        "category": "CONVERSION",
        "eta_r": 0.95,  //fixed value
        "capacityElectricity_kW": 5.0 //fixed value
      }

Diesel_vehicle

Dit is een consumption-asset geworden:

class DieselVehicleAsset(ConsumptionAsset):
    name : str
    energyConsumption_kWhpkm = 0.8
    type = ConsumptionAssetTypeEnum.diesel_vehicle
    vehicleScaling = 1

Heatmodel en heatbuffer

Heatmodellen en heatbuffers zijn in het datamodel niet nieuwe assets. Het zijn beiden assets van het bestaande type STORAGE_HEAT.

Maar wat nieuw is, is dat de input JSON nu input voor deze assets verwacht.

Gridconnections van het type huishouden moeten een heatmodel hebben, gebouwen kunnen een heatmodel hebben.

      {
        "type": "HEATMODEL",	
        "category": "STORAGE",
        "name": "Store heat mass", //name can be anything
        "capacityHeat_kW": 100.0,  //fixed value
        "initial_temperature_degC": 20.0,   //fixed value
        "minTemp_degC": -10.0,   //fixed value
        "maxTemp_degC": 50.0,    //fixed value
        "lossfactor_WpK": 70.0, //can be anything between 150-30, dependend on housetype and isolation level
        "heatCapacity_JpK": 10000000.0 //differs per housetype
      }

Gridconnections kunnen ook een heatbuffer hebben als ze een warmtepomp hebben. Bij huishoudens komen deze alsvolgt in de JSON terug:

      {
        "type": "STORAGE_HEAT",
        "name": "Household heat buffer", // name can be anything
        "category": "STORAGE",
        "capacityHeat_kW": 4.0,  //fixed value
        "initial_temperature_degC": 40.0, //fixed value
        "minTemp_degC": 25,  //fixed value
        "maxTemp_degC": 80,  //fixed value
        "setTemp_degC": 30,  //fixed value
        "lossFactor_WpK": 0.0,  //fixed value
        "heatCapacity_JpK": 1200000.0,  //uniform distribtion like : 1,000,000 to 1.500.000
        "ambientTempType": "AIR"
      }

Extra velden in objecten

Gridnodes met energy assets.

datamodel\gridnodes.py:

class HeatGridNode(GridNode):
    type: HeatGridTypeEnum
    category = "HEAT"
    assets = []  ## --> nieuw!

housegridconnection:

in gridconnections.py, extra optionele attributen:

smart_assets = SmartAssetsEnum.false  ## --> nieuw!
temp_setpoint_night_degC: 14.0 ## --> uniform distrubtion e.g. 13-18   
temp_setpoint_night_start_hr: 22.5 ## --> uniform distribution e.g. 21-23.5
temp_setpoint_day_degC: 20.0 ## -->uniform distribution e.g. 18-23
temp_setpoint_day_start_hr: 6.0 ## -->uniform distribution e.g. 6.5-9.0
pricelevel_low_dif_from_avg_eurpkWh: 0.05 ## -->uniform distribution
pricelevel_high_dif_from_avg_eurpkWh: 0.03 ## -->uniform distribution with dependency on the pricelevel_low

Contracten

class ContractTypeEnum(Enum):
    delivery = "DELIVERY"
    transport = "TRANSPORT"
    connection = "CONNECTION"
    tax = "TAX"


class Contract(BaseModel, extra=Extra.forbid):
    contractType: ContractTypeEnum
    contractScope: str
    energyCarrier: EnergyCarrierEnum
    annualFee_eur = 0.0


class DeliveryContractTypeEnum(Enum):
    fixed = "ELECTRICITY_FIXED"
    variable = "ELECTRICITY_VARIABLE"


class DeliveryContract(Contract):
    contractType = ContractTypeEnum.delivery
    deliveryContractType: DeliveryContractTypeEnum
    deliveryPrice_eurpkWh: float
    feedinPrice_eurpkWh: float


class ConnectionContractTypeEnum(Enum):
    default = "DEFAULT"
    nfATO = "NFATO"


class ConnectionContract(Contract):
    contractType = ContractTypeEnum.connection
    connectionContractType: ConnectionContractTypeEnum
    nfATO_capacity_kW = 0.0
    nfATO_starttime_h = 0.0
    nfATO_endtime_h = 0.0


class TaxContractTypeEnum(Enum):
    salderen = "SALDEREN"
    nietsalderen = "NIETSALDEREN"


class TaxContract(Contract):
    contractType = ContractTypeEnum.tax
    taxContractType: TaxContractTypeEnum
    taxDelivery_eurpkWh: float
    taxFeedin_eurpkWh: float
    proportionalTax_pct: float


class TransportContractTypeEnum(Enum):
    default = "DEFAULT"
    nodalpricing = "NODALPRICING"
    bandwidth = "BANDWIDTH"


class TransportContract(Contract):
    contractType = ContractTypeEnum.transport
    transportContractType: TransportContractTypeEnum
    bandwidthTreshold_kW = 0.0
    bandwidthTariff_eurpkWh = 0.0

Aanpassingen actoren (attributen)

class ActorTypeEnum(Enum):
    gridoperator = "GRIDOPERATOR"
    administrativeholon = "ADMINISTRATIVEHOLON"
    energyholon = "ENERGYHOLON"
    connectionowner = "CONNECTIONOWNER"
    energysupplier = "ENERGYSUPPLIER"

class Actor(BaseModel, extra=Extra.forbid):
    category: ActorTypeEnum
    group: str
    subgroup = ""
    id: str
    contracts = []  # Optional[List[Contract]]

ETM-opschalings parameters? Onderdeel datamodel?

Op dit moment staan er een aantal opschalings-parameters in de case files, zoals voor de bedrijventerrein-case bijvoorbeeld:

etm_upscale_slider_settings = {
    "share_of_electric_trucks": 100,  # Impacts costs, HV netload, sustainability and selfsufficiency
    "installed_energy_grid_battery": 0,
    "share_of_buildings_with_solar_panels": 0,
    # "fooled_you": -100,  # so you can just add any silly etm_key, it will just be ignored...
}


curve_mapping_for_upscaling = {
    "totalEHGVHourlyChargingProfile_kWh": "totalEHGVHourlyChargingProfile_kWh",
    "totalGridBatteryHourlyChargingProfile_kWh": "totalBatteryHourlyChargingProfile_kWh",
    # "haha": "totalBatteryHourlyChargingProfile_kWh", # so you can just add any silly etm_key, it will just be ignored...
}

payload = Payload(
    actors=actors,
    gridconnections=gridconnections,
    gridnodes=gridnodes,
    policies=policies,
    etm_upscale_sliders=etm_upscale_slider_settings,
    etm_upscale_curve_labels=curve_mapping_for_upscaling,
)

Wellicht kunnen we dit voor nu via de json-wildcards toevoegen aan een scenario?

Enums

ChargingModeEnum

Optie 'simple' toegevoegd

class ChargingModeEnum(Enum):
    max_power = "MAX_POWER"
    max_spread = "MAX_SPREAD"
    cheap = "CHEAP"
    simple = "SIMPLE"

AmbientTempTypeEnum

-water = "WATER"

Production asset type

-residualheatHT = "RESIDUALHEATHT" -residualheatLT = "RESIDUALHEATLT"  

Conversion asset type:

-electric_hob = "ELECTRIC_HOB" -gas_pit = "GAS_PIT"

HeatGridTypeEnum

-lt = "LT"

(-mt = "MT")

HeatingTypeEnum:

-gasfired_CHPpeak = "GASFIRED_CHPPEAK"

-lt_residual_heatpump_gaspeak = "LT_RESIDUAL_HEATPUMP_GASPEAK"

HousingTypeEnum(Enum):

highrise = "HIGHRISE"

ProductionCategoryEnum:

-residualheat = "RESIDUALHEAT"