-
Notifications
You must be signed in to change notification settings - Fork 0
Datamodel aanpassingen
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.
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: floatclass 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"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
}
Dit is een consumption-asset geworden:
class DieselVehicleAsset(ConsumptionAsset):
name : str
energyConsumption_kWhpkm = 0.8
type = ConsumptionAssetTypeEnum.diesel_vehicle
vehicleScaling = 1Heatmodellen 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"
}
datamodel\gridnodes.py:
class HeatGridNode(GridNode):
type: HeatGridTypeEnum
category = "HEAT"
assets = [] ## --> nieuw!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_lowclass 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.0class 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]]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?
Optie 'simple' toegevoegd
class ChargingModeEnum(Enum):
max_power = "MAX_POWER"
max_spread = "MAX_SPREAD"
cheap = "CHEAP"
simple = "SIMPLE"-water = "WATER"
-residualheatHT = "RESIDUALHEATHT" -residualheatLT = "RESIDUALHEATLT"
-electric_hob = "ELECTRIC_HOB" -gas_pit = "GAS_PIT"
-lt = "LT"
(-mt = "MT")
-gasfired_CHPpeak = "GASFIRED_CHPPEAK"
-lt_residual_heatpump_gaspeak = "LT_RESIDUAL_HEATPUMP_GASPEAK"
highrise = "HIGHRISE"
-residualheat = "RESIDUALHEAT"