Release History
| Version | Date |
|---|---|
| 2.8.0 | 05 December 2025 |
| 2.7.1 | 24 November 2025 |
| 2.7.0 | 02 October 2025 |
| 2.6.0 | 28 August 2025 |
| 2.5.0 | 09 August 2025 |
| 2.4.0 | 08 August 2025 |
| 2.3.0 | 30 June 2025 |
| 2.2.0 | 05 March 2025 |
| 2.1.0 | 22 October 2024 |
| 2.0.0 | 27 October 2022 |
| 1.15.0 | 28 July 2022 |
| 1.14.0 | 21 June 2022 |
| 1.13.0 | 08 March 2022 |
| 1.12.0 | 20 January 2022 |
| 1.11.0 | 20 January 2022 |
| 1.10.0 | 19 January 2022 |
| 1.9.0 | 17 January 2022 |
| 1.8.0 | 08 December 2021 |
| 1.7.0 | 09 November 2021 |
| 1.6.0 | 25 October 2021 |
| 1.5.0 | 23 September 2021 |
[2.8.0]
Breaking Changes
- Added new required config parameter
server.publicAddresswhich is the URL to EAS, used to configure downstream services that may have to communicate with EAS. - The following customer list columns have been removed from the
customer_list_column_configanduser_customer_list_column_config:LIFE_SUPPORTSENSITIVE_LOAD
New Features
- Modify
GqlHcWorkPackageto returnloadType,timePeriodStart, andtimePeriodEndof the work package to allow front-end access. - Added GraphQL mutation
deleteWorkPackageto allow users to delete their own work packages. - Added new fields
openDssExporterEnabledandopenDssExporterOptionsin config.ui config section for enabling and configuring OpenDss exporter in the web UI. - Added
flaForecastConfigtoGqlFeederLoadAnalysisInputso forecast FLA models can be generated. User are limited to setting 1 forecast year only. - Modify
HostingCapacityWorkPackagestable with additional column to allow front end access.feeders- list of feeders for this work packagescenarios- list of scenarios for this work packageyears- list of years for this work packageload_type- the load time setting of this work package (fixedTime/TimePeriod/null for feederConfigs)configuration_type- SyfConfig type betweenForecastConfigorFeederConfigstime_period_start- start time for TimePeriod work package, null for everything elsetime_period_end- end time for TimePeriod work package, null for everything else
- Modify
GqlHcWorkPackageto returnfeeders,scenarios, andyearsinfo of the work package. - Added config option in AppConfig Ui to hide/show device tree as deviceTreeEnabled.
- Added config option
variantManagementEnabledin AppConfig Ui to enable/disable variant management - Added new
app_optionstable to store user customisable app options. These options will include a default value if the user does not wish to override it.- Added new graphql queries to support reading and updating app options.
getAppOptions- retrieve all app options (if no value exists in DB, will return default value for that option).setAppOption- update an app option (will add/update record in DB and use the new value). RequiresAPP_OPTIONS:UPDATEpermission.clearAppOption- clear an app option (will remove record from DB and fallback to the default value). RequiresAPP_OPTIONS:UPDATEpermission.
- Added new app option
assetNameFormatto allow user to format assets using the mustache template. Seehttps://mustache.github.io/.- Supported fields include:
- assetId
- voltage
- circuits
- lvFeeders
- substations
- sites
- energizingFeeders
- energizingSubstation
- assetName
- Supported fields include:
- Added new graphql queries to support reading and updating app options.
- Add API support for Variant Management with Powerfactory. See documentation for instructions on how to configure.
- The following additional columns have been added to the
customer_list_colum_configtable`:NMI_CLASS,PHONE_NUMBER,MOBILE_NUMBER,TARIFF,SENSITIVITY_CATEGORY,MOVE_IN_DATE,LV_FEEDER,POSTAL_ADDRESS,TNI,DLF.
- Added
api/diagrams/graphqlroute to proxy diagram symbol GraphQL calls to EWB via EAS (requiresEWB_DIAGRAM:READ). - Add UI feature flag
ui.layersControlMapPluginEnabled: Booleanto control enabling theLayers Controlplugin in the frontend map. Default value isfalse.
Enhancements
- Migrate old
HostingCapacityWorkpackageentries to support front end queries - Added the migration script to populate the
customer_list_column_configtable with all the available customer list columns.
Fixes
- H2 Database driver is now included the EAS JAR.
- Updated the GraphQL input field
HcGeneratorConfig.HcModelConfig.useSpanLevelThresholdto be nullable. This removes the requirement for it to always be provided in aHcModelConfig.
Notes
- Updated to
temporal-platform-definitionsv0.5.0
[2.7.1]
Fixes
- Updated the GraphQL input field
HcGeneratorConfig.HcModelConfig.useSpanLevelThresholdto be nullable. This removes the requirement for it to always be provided in aHcModelConfig.
[2.7.0]
Breaking Changes
- Renamed an existing graphQL query
getUserCustomerListColumnConfigtogetUserSavedCustomerListColumnConfig. - Updated
GqlCustomerListColumnConfig.columnNamedata type from string to enum. - GraphQL query
pagedOpenDssModelsnow returnsgenerationSpecas stringified JSON rather than a GraphQL object.
New Features
- Added GraphQL query
getUserPermittedCustomerListColumnConfigto return all permitted customer list columns for the requesting user. - Added GraphQL query
getAllWorkPackagesAuthorsto return all users that have created work packages. - Added
/internal/health/readyand/internal/health/livefor readiness and liveness probes in Kubernetes - Added support passing
inverterControlConfigtoModelConfigwhen running work packages to configure the modelling of generation equipment as PVSystems controlled by InvControls rather than Generators (Advanced PV).
Enhancements
- Default external role
TIMESERIES_MODELLERnow includes permissions to perform calibration runs. - Extended the getWorkPackages GraphQL query with a new
searchTextfilter, allowing flexible search by UUID (exact match), name, and email (fuzzy match).
Fixes
- Fixed network ingestor workflow so it does not restart EWB on completion if the network model is locked.
- Fixed
pagedOpenDssModelserror due to incompatiblegenerationSpecin previously generated models. - Fixed hosting capacity work package diff related query where duplicate keys can occur when there are multiple years worth of data in a result package
- Fixed hosting capacity work package diff related query where errors gets swallow up by Exposed's transaction error.
- Fix a check for empty string being passed through Generated Diff query.
Notes
- Updated to temporal-platform-definitions 0.4.0,
com.zepben.commonsandcom.zepben.ewbv1.1.0.
[2.6.0]
Breaking Changes
- Update to zepben commons 1.0.0 and EWB sdk 1.0.0. This will largely be incompatible with pre-1.0 versions.
- Renamed an existing config option
customerListTableVisibletocustomerListDrawerEnabled.
New Features
- Support node level results requests for hosting capacity work packages
- Support HC work packages configuring combineCommonImpedances, simplifyNetwork, and collapseNegligibleImpedances
- Added a permission based access control for viewing customer sensitive information in the customer list table in the UI.
- A new GraphQL query
getCustomerListadded to read all the customer related information based on the assigned permissions:CUSTOMER_PII:READCUSTOMER_NON_PII:READ.
- A new GraphQL query
downloadCustomerDetailsAsCsvadded to download all the customer related information based on the assigned permissions:CUSTOMER_PII:EXPORTCUSTOMER_NON_PII:EXPORT.
- A log containing the person requesting the customer information, the NMI's accessed and the date and time of access will be recorded.
- A new GraphQL query
Enhancements
- Sincal exporter APIs now support a Forecast config to allow modelling of future network
- Added new variable to hosting capacity configuration
useSpanLevelThreshold- use designRating for current comparison in this study.ratingThreshold- It will consider AcLineSegments with current rating difference within a threshold collapsable.simplifyPLSIThreshold- When provided, per length sequence impedance will be normalized between connected AcLineSegment when difference of their values are within this threshold.emergAmpScaling- emergency amp scaling factor used in creatingLineCode.
metrics.hierarchy_nameis now nullable - schema upgrades will be applied at startup.
Fixes
- Fixed bug that would result in null network model source dates if any of the job sources used to generate the model had a null source time.
- Disable the option to request for a basic report in feeder load analysis study.
Notes
- Removed hardcoded root logging level.
[2.5.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None
[2.4.0]
Breaking Changes
FixedTimeLoadOverridenow takes in lists of doubles just likeTimePeriodLoadOverrideLoadTimeandLocalLoadTimevariablefetchLoadTimehas been renamed toloadTimefor ease of use and consistency between python and non-python part.- Ingestor service now uses the common callback endpoint
/callbackrather than/ingestor-callback. - Ingestor service configuration has been updated to include support for Temporal workflows. Existing configurations must be updated to specify the
runtime type,
"type": "container",to continue working. Seeconfig.mdfor full details. - Modification to
ModelConfigto allow more customization for model generationvMinPuandvMaxPuhave been removed and replaced withloadVMinPu/loadVMaxPufor loads and separategenVMinPu/genVMaxPufor generators.- Added support for
ctPrimScalingFactorwhich is required when calculating newctPrimvalue when feeder proxy loads are not in use.
New Features
- Ingestor service now supports running via a Temporal workflow.
- Added GraphQL query
getUserCustomerListColumnConfigand mutationsaveUserCustomerListColumnConfigto support user-specific column configurations. User can now manage a unique column configuration tied to their profile. - Added the following new config options
customerListTableVisibleto display of the customer list table in the UI.networkMapSearch2Enabledto enable version 2 of the network map search component.sincalExporterTimeseriesEnabledto enable timeseries modelling for the Sincal ExportersincalExporterForecastEnabledto enable forecast modelling for the Sincal Exporter
- Added
feedersargument to therunCalibrationGraphQL mutation. This optional argument allows running a model calibration on a subset of feeders in the model. - Added support for passing a
CalibrationWorkPackageConfigobject to the CalibrationConfig in the EAS config file. This allows a custom scenario andGeneratorConfigto used for calibration work packages.
Enhancements
- Added common http endpoint (
/callback) for callbacks. All services will be migrated to use this endpoint eventually. - Upgrade ewb-grpc to 0.36.0 to provide mapbox vector tile proto.
- Add
generatorConfigparameter to therunCalibrationGraphQL mutation.
Fixes
- Wrap Kotlin exposed database query in transaction block to fix no transaction in context errors.
- Fix issue where EAS will hang when fetching JWKS from itself in single CPU environments
- Fix server shutdown hook not being registered correctly leading to unclean shutdowns
- Fixed bug that would cause power factory models to never reach the completed status even though they were available for download.
- Fixed issue where EAS was not recording the complete
CalibrationWorkPackageConfigto the EAS database after being merged with user supplied configuration.
Notes
- Support up to evolve-sdk 1.0.0
- Support up to temporal-platform-definitions 0.2.0
- Support up to test-utils 2.1.0
- Support up to evolve-conn 0.12.1
- Updated to ewb-grpc 1.0.0
- Updated to Ktor 3.0.3
[2.3.0]
Breaking Changes
- The metrics database that EAS connects to must now be hosted on Postgres instead of loaded from a SQLite file.
- EAS now uses Liquibase to create and update the schema of the metrics database, similar to how it does for the main database.
airflowconfig block has been removed. To continue using airflow for administering EWB, provide airflow configuration to theewbAdminobject. Seeconfig.mdfor details.- The GraphQL mutation
executeIngestorargumentrunConfignow takes an object of key/value pairs instead of the previous stringified JSON. It is also now optional. - When requesting the
HcWorkPackage.statusGraphQL field, it will now report100if the work package is found it the hosting capacity services' "completed" list rather than returning an error. - Update Hosting capacity configuration to support hosting capacity package with distinct study settings for each individual feeder.
- Added new configuration class
SyfConfigto group variables moved out ofWorkPackageRequestandWorkPackageConfig.ForecastConfig- Functionally similar to old set up where it holds a list of feeders, years, scenarios and load time.FeederConfigs- Holds a list of individual feeder settings so each feeder can run a hosting capacity study with distinct settings.
- Added new configuration class
LoadTimeandLocalLoadTimewhich holds load specific variables.FixedTime/LocalFixedTime- Fixed time setting for the study, includes an optional map ofFixedTimeLoadOverrides.TimePeriod/LocalTimePeriod- Time period setting for the study, includes an optional map ofTimePEriodLoadOverrides.
- Major refactoring of configuration.
WorkPackageRequest- Moved
feeders,years,scenarios,timePeriodandfixedTimeintoSyfConfigandLocalLoadTime.
- Moved
WorkPackageConfig- Moved
feeders,years,scenarios,timePeriodandfixedTimeintoSyfConfigandLocalLoadTime.
- Moved
CommonConfig- Moved
timePeriodandfixedTimeintoLoadTime.
- Moved
ModelConfig- Moved
fixedTimeLoadOverrideandtimePeriodLoadOverrideintoLoadTimeandLocalLoadTime
- Moved
- Added new configuration class
New Features
- Added support for reading from a metrics database served on Postgres.
- Liquibase is used to update the metrics schema to the latest supported version, similar to how it does for the main database.
- Added support for switching EWB network databases in a Kubernetes environment. See
ewbAdmininconfig.mdfor full configuration details. - Support for uploading hosting capacity unprocessed input database (sqlite) to a cloud file storage.
- Added new feature flag
hostingCapacityConfigurationEnabledinconfig.uiconfig section for enabling the Hosting Capacity admin page. - For the
runHostingCapacityWorkPackagemutation, added support for two additional classes of intervention:- Added ability to configure phase proportions for phase rebalance interventions via
input.intervention.phaseRebalanceProportions. - Added ability to configure DVMS via
input.intervention.dvms.
- Added ability to configure phase proportions for phase rebalance interventions via
- Intervention work packages record their base work package as the parent.
- Added new GraphQl query to fetch all or specific network_performance diffs
getProcessedDiffsretrieves all diffs base on filter criteriagetProcessDiffretrievesProcessedDiffbase on diffIdeditDiffPackageedit the meta property of generated diff
- New
isCompletedfield added toHcWorkPackageobject returned by GraphQL. This is true if the work package has been recently completed (regardless of failure status). Note: The hosting capacity service does not store completion status indefinitely, this field will be false if the completion status is not found. - Support for running hosting capacity calibration workflow and querying the run info.
- Added new GraphQL call
getWorkPackageCostEstimationto calculate an estimated cost of a specific hosting capacity work package. - Added new
runFeederLoadAnalysisGQL call to generate a feeder load analysis to be uploaded to the designated S3 bucket. - Added new
getFeederLoadAnalysisReportStatusGQL call to retrieve the status of a previously ran feeder load analysis job. - Support for running hosting capacity calibration workflow and querying the run info. The new GraphQl queries are:
runCalibrationinitiate a calibration run across the whole network.getCalibrationRunretrieve information for a calibration run.listCalibrationRunsretrieve a list of all calibration runs initiated by EAS, Optional filtering available.getCalibrationSetsretrieve a list of all completed calibration sets initiated by EAS.getTransformerTapSettingsretrieve the distribution transformer settings produced by a calibration run.
- Added new config option
connectedEquipmentNavigationEnabledto allow navigation between connected equipments. - Added new http endpoint
api/customers/graphqlto proxy GraphQL requests to the EWB query customer service. Please referpermissions.mdfor required permissions. - Added hosting capacity load override to
GqlHcModelConfigso specified meters can have their load data replaced by set profiles.- FixedTimeLoadOverride - Override single time point load data for specified meters.
- TimePeriodLoadOverride - Override load data with supplied profile for specified meters.
- Support for running opendss export and querying the run info. The new GraphQl queries are:
createOpenDssModelinitiate an opendss export run.pagedOpenDssModelsretrieves paginated information of 1 or more opendss export run.deleteOpenDssModeldeletes the opendss export run by passing the run id.
Enhancements
- Logging for permission checks.
- Configure Ktor with explicit
Cache-Controlheaders to cache static assets and to not cache anything else - Log the creation of access tokens.
- Added names to database connection pools.
executeIngestornow passes through therunConfigto the ingestor allowing users to override ingestor config- If no
input.nameis provided to thecreatePowerFactoryModelGraphQl mutation, once the model generation is complete thenameof this model in the EAS database will be updated with the name generated by the PowerFactory service. - Add
X-Content-Type-Optionsresponse header to all responses. - Added call back for feeder load analysis runs.
- Added
maxConnectionLifetimeMsfield to database configuration blocks.
Fixes
- Updated
getWorkPackagesandpagedStudiesqueries to return only the creators under theallUsersfield. - Updated logic to support nullable source time in metrics job sources.
Notes
- Update hosting-capacity-utils to 0.6.0
- Reduced the default max connection lifetime for database connections from 5 minutes to 4 minutes.
[v2.2.0]
Breaking Changes
- Updated configuration options for Sincal Model Exporter. Configuration files and input databases are no longer configured directly in the EAS config file and instead
are stored in the EAS Database and updated via the
updateSincalModelConfigFilePathGraphQl mutation. The cloud based storage locations for the input and output files configured viaStorageBackendobjects, Seeconfig.mdfor full details. - Updated the configuration options for the Ingestor Service.
additionalConfigEnvPrefixis a new required field that specifies the prefix to use when passing configuration items to the ingestor as environment variables.
New Features
-
Added
getAllExternalRolesGraphQl query to fetch all external roles from the database. -
Added
getMachineTokensGraphQL query to retrieve all users attached to machine-to-machine API keys. -
Added
getNetworkModelsGraphQL query to retrieve available Network Model databases -
Added new feature flag
networkStateControlEnabledinconfig.uiconfig section for allowing users to toggle viewingnormalandcurrentnetwork state in the map. -
Updated EAS generated Personal Access Tokens to allow use with the EWB server and SDK directly. To enable this, the audience of the configured EWB server is added to all personal access tokens and the following EAS permissions will map to EWB roles:
EWB:READ->read:ewbEWB:UPDATE->write:ewbEWB_CUSTOMER:READ->read:customerEWB_DIAGRAM:READ->read:diagram
If a token inherits any of these EAS permissions at the time of creation the corresponding EWB role will also be added to the token's roles claim. (Note: This permission check only happens at token creation time and cannot be revoked after the token is created).
-
Added default EAS External Roles
EWB_CUSTOMER_VIEWERandEWB_DIAGRAM_VIEWERthat map to EWB rolesread:customerandread:diagramrespectively. Please referpermissions.mdfor the full details of the new roles. -
Added default EAS External Role
EWB_UPDATERthat maps to EWB rolewrite:ewb. Please referpermissions.mdfor the full details of the new role. -
Added
inputDatabaseoption to thehostingCapacityconfiguration block to support connecting to a hosting capacity input database. Seeconfig.mdfor full details. -
Added
getScenarioConfigurationsGraphQl query to fetch scenario configurations from the hosting capacity input database if configured. -
Added the ability to track network ingestor runs triggered via EAS.
- Added new database table
ingestor_runsto record network ingestor runs triggered via EAS. - Added route
/ingestor-callbackto receive status callbacks from network ingestor containers. - Added
easUrlfield to ingestorruntimeconfig to manually specify the EAS domain to be used by ingestor containers when making status callbacks.
- Added new database table
-
Added two new map tile routes:
/normal/tile/{z}/{x}/{y}and/current/tile/{z}/{x}/{y}. These routes return tiles from EWB's new v2 map tile routes by the same names.- Requires an EWB version with the v2 map tile routes.
- See EWB documentation for what's new in the v2 tile routes.
- The existing
/tile/{z}/{x}/{y}route is now marked as Deprecated, but still functions as before.
-
Added hosting capacity default load variables to
GqlHcModelConfigso a hosting capacity with default load profile can be generated.defaultLoadWattsdefaultGenWattsdefaultLoadVardefaultGenVar
-
Support intervention work packages via the
interventionfield inWorkPackageInput. -
Added support for cloud based config and input files for the Sincal Model Exporter.
-
Added support for uploading sincal config and input files to a cloud based storage backend.
-
Added config option
primaryEwbServiceto specify a EWB service running in a supported container environment(Seeconfig.mdfor full list of supported options). -
Added support for restarting the
primaryEwbServicecontainer following a successful network ingestion run. This functionality can be enabled with theingestor.restartEwbOnCompletionEAS config option.
Enhancements
- Add new config item to allow certificate verification to be enabled/disabled when fetching JWKS keys. Certificate verification enabled by default.
- Add dependency to explicitly use Apache HttpClient 5 for Docker Java client. This removes a warning that appeared on startup.
- Better error message when
jwks.issueris misconfigured. - Explicit auth support for
sincalModel.ewbAuthClientconfig.
Fixes
- Fixed wrong ownership on /config directory in container image.
- Updated error messages for machine-to-machine and user token creation errors.
- Added missing routing for the profile path.
Notes
- Enabled JWT logging.
- Bump to using Azure BOM 1.2.30
- Upgrade to Ktor 2.3.13
- Update hosting-capacity-utils to 0.5.0
- Reduced the expiry time of Sincal and Power Factory, model download links from 5 minutes to 30 seconds\n\n---\n
[v2.1.0]
Breaking Changes
-
Updated the hosting capacity service logic to import the work package configuration from the hosting-capacity-utils library instead of duplicating all the required classes.
-
mapLayerColors has been superseded by
defaultMapLayerColors,themes, anddefaultTheme. If you previously specified layer colors you will have to update your configuration to match the new options. Seeconfig.mdandsample-config.mdfor information on the new settings and examples. -
Coloring lines by voltage now requires specifying a range of voltages. Previous
voltageColorsconfiguration is not compatible with the new required format and will need to be updated. -
API calls will now return Bad Request (502) instead of InternalServerError (500) when EWB cannot be contacted.
-
Updated GqlWorkPackageInput to have its 'modelConfig' property to be non-nullable.
-
Updated ModelConfig to include fixed time and time period.
-
Updated to evolve-super-pom version
0.35.2. -
Updated H2 database engine from
1.4.200to2.2.224. See https://www.h2database.com/html/migration-to-v2.html for more details. -
The following columns in the schema have been converted from
TEXTtoCLOB:net_models.generation_spec(Now namedpower_factory_models.generation_spec; see other breaking changes)net_model_templates.generation_spec(Now namedpower_factory_model_templates.generation_spec; see other breaking changes)result_sections.descriptionstudies.descriptionstudies.tags
-
Upgrade Jetbrains exposed from
0.38.2to0.48.2. See https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md for more details. -
Configuration for the EWB auth has changed:
- To use a specific issuer, provide
method,issuer,audience,clientID, andclientSecretparameters. Make sureaudienceandclientIDmatch the values expected by EWB. NOTE if using Managed Identity, skip clientSecret, and only provideclientID.
- To use a specific issuer, provide
-
Configuration for EAS auth has changed (consult the docs if needed):
- For EntraID and Auth0, provide the following parameters:
method("entraid" or "auth0")trustedIssuersaudience
- For EntraID and Auth0, provide the following parameters:
-
Removed Fault Location module
FaultLocationService. -
EAS is now exposing the same auth config endpoint to clients as EWB (Note: only the first configured trustedIssuer will be returned):
authTypeissueraudienceThis is a breaking change for the clients expectingtokenPath,issuerDomainorconfigType.
-
EAS now uses a Role based permissions system:
- Users requests now must provide External Roles in their access token that inherit the permissions required to perform the request.
- Existing REST API endpoints have been updated with new permission requirements, see docs for complete list.
- Existing GraphQL API queries have been updated with new permission requirements, see docs for complete list.
- Auth configuration is now required for EAS to start.
- For Auth type
None,defaultUserPermissionshas been removed and replaced bydefaultUserRoles. These roles must exist and have the relevant permissions in the EAS database. The default roles and permissions are populated when the EAS database is initialised byupdateSchemaOnStart(see docs for a complete list of default roles). - Auth type
Noneno longer provides access by default. If nodefaultUserRolesare configured, only requests that don't require any permissions will succeed. - Auth type
AUTH0,ENTRAID, no longer havepermissionsoption. - Default External Roles:
SUPER_ADMIN,EWB_ADMIN,TIMESERIES_MODELLER,MODELLER,DEVELOPER,MAP_VIEWER,METRICS_VIEWER,INTEGRATION_ADMIN.
-
Removed
/api/user/createUserand/api/user/queryUserhttp endpoints. -
Removed Evolve Gateway DER Service functionality.
evolveGatewayconfiguration options and DER related http endpoints have been removed, including/api/config/der,api/der/tile/{z}/{x}/{y},api/der/asset/{nmi}/andapi/der/logo/{aggregatorName}. -
Renamed all instances of "net model" to "power factory model":
NetModel→PowerFactoryModelnetModel→powerFactoryModelnet-model→power-factory-modelnet_model→power_factory_modelNET_MODEL→POWER_FACTORY_MODELnetmodel→powerfactorymodel
This was done to reduce confusion with the Sincal Model Service.
-
Removed
auth.issuerconfiguration option. Replaced byauth.trustedIssuersthat accepts a list of issuer domains. -
Updated to ewb-conn-jvm version
0.11.0to support trusting tokens from multiple issuers. -
Updated to evolve-sdk-jvm version
0.23.0to support new version of ewb-conn-jvm -
In a Power Factory Model Export, the LoadConfig value is now set and passed on to the Power Factory Model Service (and on to the exporter).
-
Updated
hostingCapacityconfiguration options. This now accepts:service- Hosting Capacity service connection information (what was previously configured directly inhostingCapacity).resultsDatabase- Hosting Capacity Results Database connection information.
-
Renamed
defaultUserIdtodefaultUsername.
New Features
- Configuring voltage colors now supports a range of voltages for a color. If a conductor has a color that doesn't match any range a default can be specified
through the
missingVoltageoption. - Added
defaultMapLayerColorswhich allows you to specify a set of default colors to be used on the map. - Added support for themes through the
ui.themesconfiguration. Each theme is a mapbox theme and can have its own set of color definitions through thelayerColorsoption. See config.md for details on how to configure themes. - Added support for specifying a default map theme with
ui.defaultTheme - Added support for specifying colors for partially off supply lines through the
partiallyOffSupplyoption. - Added basic hosting capacity functionality. At this stage only one graphql mutation exists with the purpose of running hosting capacity work packages.
- Added the functionality to specify
spreadMaxDemandas part of a NetModelGenerationSpec. - Added the functionality to specify whether
transmissionnetwork should be included as part of a NetModelGenerationSpec. - Filename from User input is pass on for power factory model generation.
- Hosting capacity work package run request now supports more configuration options.
- Added functionality to cancel hosting capacity work packages.
- Added functionality to request progress of currently running work packages.
- Added 'calibration' flag to ModelConfig.
- Added new fields to
GqlHcModelConfigthat are passed through toModelConfig. Consult opendss-model-processor docs for details.- pFactorBaseExports
- pFactorForecastPv
- pFactorBaseImports
- fixSinglePhaseLoads
- maxSinglePhaseLoad
- fixOverloadingConsumers
- maxLoadTxRatio
- maxGenTxRatio
- fixUndersizedServiceLines
- maxLoadLineRatio
- Add support for logging in with Microsoft EntraID
- Add support for M2M auth to EWB with Microsoft EntraID
- Added the functionality to control the network-model loaded by EWB. This can be used via the following GraphQL mutations.
switchNetworkModelDatabaseRestart EWB with the network-model of the specified date. Following the restart EWB will remain "locked" to the specified date.lockNetworkModelDatabaseLocks the EWB network-model date to the currently loaded model. If EWB restarts for any reason, it will continue to reload the "locked" date instead of the latest available.unlockNetworkModelDatabaseOn next restart EWB will load the latest network-model available in the data path instead of the date it was previously "locked" to.
- Added Admin page routes
- Added optional connection to a metrics database. This is configurable through the
metricsDatabaseoption. - Added a /metrics route, which serves the frontend static assets. The frontend can then load a new Metrics page at this route.
- Added
collapseLvNetworksfield to ModelConfig - Added
feederScenarioAllocationStrategyfield to ModelConfig - Added
includeEnergyConsumerMeterGroupfield to ModelConfig - Added GraphQL queries and types for the metrics database.
- EAS now uses a Role based permissions system.
- Added
permissionsfield to the response of thecurrentUserGraphQL query. This field contains a complete list of permissions inherited by the External Roles provided in the access token used to make the request (ordefaultUserPermissionsifNoneauth is configured). - Added GraphQL queries and mutations for Sincal Model management.
- Added routes for downloading Sincal models and logs.
- Added support for accepting client tokens from multiple issuers simultaneously. Multiple issuers can now be provided via the new configuration option
auth.trustedIssuers. Note: Only the first issuer is returned to clients via/config/auth. - Added new feature flags
sincalExporterEnabledandpowerFactoryExporterEnabledinconfig.uisection for PowerFactory/Sincal Exporters. Note: When enabling the flag, they require relevantpowerFactoryExporterOptionsorsincalExporterOptions. - Added optional connection to a Hosting Capacity Results Database. This is configurable through the
hostingCapacity.resultsDatabaseoption. - Added the following GraphQL queries for retrieving information from the Hosting Capacity Results Database
getOpportunity- Retrieve an Opportunity by ID.getOpportunityLocations- Retrieve all opportunity locations available for a specific year. (opportunity locations for all years if a year is not specified).getOpportunitiesForEquipment- Retrieve Opportunities attached to the supplied conducting equipment mRID.getOpportunities- Retrieve all Opportunities available for a specific year (Opportunities for all years if a year is not specified).getDurationCurves- Retrieve duration curves for a single piece of equipment in a specific SYF.
- Added
workPackageNameparameter torunWorkPackagewhich represents the name of the work package. This parameter is now mandatory. - Updated the
runHostingCapacityWorkPackageto accept theworkPackageNamefield as a parameter for storing the work package name and entries in the database. - Hosting capacity work packages created via EAS are now recorded in the
hosting_capacity_work_packagesdatabase table. - Added new
getWorkPackagesGraphQL query to support:- Pagination.
- Searching by id, name, and createdBy.
- Added support for partial matching on the name
- Returning work package details such as:
- status: Progress percentage if in progress.
- description, created_at, updated_at, parent_id.
- Added
getWorkPackageByIdGraphQL query to indicate work package progress with all other information.
- Added the following configuration option to generate jwks keys for Personal Access Tokens for EAS:
jwks- Configuration for generating jwks keys for Personal Access Tokens.currentUserSigningKey- The key name used to sign the Personal Access Tokens for users.currentMachineSigningKey- The key name used to sign the Personal Access Tokens for machines.issuer- The url of the issuer for the Personal Access Tokens.
- EAS now provides the OpenID configuration endpoint at
/.well-known/openid-configurationand JWKS endpoint at/.well-known/jwksfor verifying Personal Access Tokens issued by EAS. - Added functionality to allow EAS to trigger container based network ingestion tasks to generate new EWB Network Models. The container service to use is
configured by providing a
Ingestorconfig object (seeIngestor Service Configinconfig.mdfor full details). The ingestion tasks themselves can be triggered by the new GraphQL mutationexecuteIngestor. - Added GraphQl mutation
executeIngestorto initiate a new network ingestion. Calling this mutation requires the permissionINGESTOR:RUN. - Added
getWorkPackageTreeGraphQL query that takes a work package id and returns its ancestors and immediate children. - Added
createUserApiKeyGraphQL query to create user Personal Access Tokens/API keys:createUserApiKey- Creates a new user Personal Access Token for the user making the request and takes the following parameters:roles- Array of roles to delegate to the new Personal Access Token. Must be a subset of the user's existing roles.tokenName- Included in the newly created token as thetknclaim. This cannot be blank and can only include lowercase characters, numbers, dashes-, and underscores_, with a max length of 32 characters.
- Added support for passing a
seedin the ModelConfig for a work package. - Added support for "Public Access" mode to allow limited access to unauthenticated users alongside regular authenticated users. This can be enabled, and permissions
configured, by adding a
publicAccessobject(Seeconfig.mdfor full details.) to theauthconfig block. Note: Regardless of the permissions granted to unauthenticated users, unauthenticated requests for map tiles will always be directed to the EWB public tile endpoint/ewb/network/graphics/api/v1/mvt/geo-view/public/{x}/{y}/{z}instead of the regular tile endpoint/ewb/network/graphics/api/v1/mvt/geo-view/{x}/{y}/{z}. - Added the GraphQL query
getPublicGeoViewConfigto expose the GeoViewConfig used to configure the EWB public map tile endpoint. The returnedGeoViewConfigJson object is encoded to as string. - Added new GraphQL mutations to generate diffs between hosting capacity work package results
generateNetworkPerformanceDiff- Generate diff for data from network_performance_metrics table and insert them into network_performance_metrics_diffgenerateEnhancedNetworkPerformanceDiff- Generate diff for data from network_performance_metrics_enhanced table and insert them into network_performance_metrics_enhanced_diff
- Added
createMachineApiKeyGraphQL query to create machine Personal Access Tokens/API keys:createMachineApiKey- Creates a new machine Personal Access Token for the user making the request and takes the following parameters:roles- Can be any external role unlikecreateUserApiKeywhich takes a subset of the user's external roles.tokenName- Included in the newly created token as thetknclaim. This cannot be blank and can only include lowercase characters, numbers, dashes-, and underscores_, with a max length of 32 characters.
- Added
editWorkPackageGraphQL mutation to edit work package name and description. Calling this mutation requires the permissionHC_WORK_PACKAGE:UPDATE
Enhancements
- Updated vulnerable dependencies to latest version (H2, Postgres, Liquibase, Jackson, SnakeYAML)
- Added config option in AppConfig Ui to enable/disable work package browser option as workPackageBrowserEnabled
- Better error messages when attempting to update/delete PowerFactory/Sincal models/templates/presets as someone who isn't the owner
- Migrate eas to new config pattern using
kotlinx.serializationfor deserializing the json file
Fixes
- Errors are now returned to the client for hosting capacity calls.
- Upgraded ktor to fix hanging request issue
- Fixed execution order of SQL migration scripts
- Updated default
H2database connection string to includeDATABASE_TO_LOWER=TRUE. - Fixed issues caused by incorrect method of getting username from Entra ID JWT.
- Fixed issue where boolean is returned instead of ID of deleted template for
deletePowerFactoryModelTemplatemutation.- An error is now returned in the GraphQL response for this mutation if the current user is not the owner of the template.
- Make WorkPackagesProgress serialisable so it can be returned from the getWorkPackageProgress endpoint
Notes
- The REST endpoint
/api/map/symbol/{symbolPath...}does not requireEWB:READpermission. Its use only requires an authenticated user or that "Public Access" is enabled.\n\n---\n
[v2.0.0]
Breaking Changes
- Removed support for self auth.
New Features
- Added functionality to create and manage power-factory-models.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[v1.15.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[v1.14.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- Fix bug where studies and faults published by no-auth users are filtered out of queries
Notes
- None.
[v1.13.0]
Breaking Changes
- Updated to find the relocated connection point identifier. You will need to use a EWB server running a database generated from an updated migrator for this to work.
New Features
- The EWB connection point identified can be specified via the config file via the
ewb.connectionPointIdentifiersetting.
Enhancements
- None.
Fixes
- Made less cryptic error messages for malformed sealed object configurations (specifically
"auth"inconfig.json).
Notes
- None.
[v1.12.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[v1.11.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[v1.10.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[v1.9.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[v1.8.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[v1.7.0]
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.
[v1.6.0]
Breaking Changes
- None
New Features
- None
Enhancements
- None
Fixes
- None
Notes
- None
[v1.5.0]
Breaking Changes
- None
New Features
- None
Enhancements
- None
Fixes
- None
Notes
- None
Breaking Changes
- The metrics database that EAS connects to must now be hosted on Postgres instead of loaded from a SQLite file.
- EAS now uses Liquibase to create and update the schema of the metrics database, similar to how it does for the main database.
airflowconfig block has been removed. To continue using airflow for administering EWB, provide airflow configuration to theewbAdminobject. Seeconfig.mdfor details.- The GraphQL mutation
executeIngestorargumentrunConfignow takes an object of key/value pairs instead of the previous stringified JSON. It is also now optional. - When requesting the
HcWorkPackage.statusGraphQL field, it will now report100if the work package is found it the hosting capacity services' "completed" list rather than returning an error. - Update Hosting capacity configuration to support hosting capacity package with distinct study settings for each individual feeder.
- Added new configuration class
SyfConfigto group variables moved out ofWorkPackageRequestandWorkPackageConfig.ForecastConfig- Functionally similar to old set up where it holds a list of feeders, years, scenarios and load time.FeederConfigs- Holds a list of individual feeder settings so each feeder can run a hosting capacity study with distinct settings.
- Added new configuration class
LoadTimeandLocalLoadTimewhich holds load specific variables.FixedTime/LocalFixedTime- Fixed time setting for the study, includes an optional map ofFixedTimeLoadOverrides.TimePeriod/LocalTimePeriod- Time period setting for the study, includes an optional map ofTimePEriodLoadOverrides.
- Major refactoring of configuration.
WorkPackageRequest- Moved
feeders,years,scenarios,timePeriodandfixedTimeintoSyfConfigandLocalLoadTime.
- Moved
WorkPackageConfig- Moved
feeders,years,scenarios,timePeriodandfixedTimeintoSyfConfigandLocalLoadTime.
- Moved
CommonConfig- Moved
timePeriodandfixedTimeintoLoadTime.
- Moved
ModelConfig- Moved
fixedTimeLoadOverrideandtimePeriodLoadOverrideintoLoadTimeandLocalLoadTime
- Moved
- Added new configuration class
New Features
- Added support for reading from a metrics database served on Postgres.
- Liquibase is used to update the metrics schema to the latest supported version, similar to how it does for the main database.
- Added support for switching EWB network databases in a Kubernetes environment. See
ewbAdmininconfig.mdfor full configuration details. - Support for uploading hosting capacity unprocessed input database (sqlite) to a cloud file storage.
- Added new feature flag
hostingCapacityConfigurationEnabledinconfig.uiconfig section for enabling the Hosting Capacity admin page. - For the
runHostingCapacityWorkPackagemutation, added support for two additional classes of intervention:- Added ability to configure phase proportions for phase rebalance interventions via
input.intervention.phaseRebalanceProportions. - Added ability to configure DVMS via
input.intervention.dvms.
- Added ability to configure phase proportions for phase rebalance interventions via
- Intervention work packages record their base work package as the parent.
- Added new GraphQl query to fetch all or specific network_performance diffs
getProcessedDiffsretrieves all diffs base on filter criteriagetProcessDiffretrievesProcessedDiffbase on diffIdeditDiffPackageedit the meta property of generated diff
- New
isCompletedfield added toHcWorkPackageobject returned by GraphQL. This is true if the work package has been recently completed (regardless of failure status). Note: The hosting capacity service does not store completion status indefinitely, this field will be false if the completion status is not found. - Support for running hosting capacity calibration workflow and querying the run info.
- Added new GraphQL call
getWorkPackageCostEstimationto calculate an estimated cost of a specific hosting capacity work package. - Added new
runFeederLoadAnalysisGQL call to generate a feeder load analysis to be uploaded to the designated S3 bucket. - Added new
getFeederLoadAnalysisReportStatusGQL call to retrieve the status of a previously ran feeder load analysis job. - Support for running hosting capacity calibration workflow and querying the run info. The new GraphQl queries are:
runCalibrationinitiate a calibration run across the whole network.getCalibrationRunretrieve information for a calibration run.listCalibrationRunsretrieve a list of all calibration runs initiated by EAS, Optional filtering available.getCalibrationSetsretrieve a list of all completed calibration sets initiated by EAS.getTransformerTapSettingsretrieve the distribution transformer settings produced by a calibration run.
- Added new config option
connectedEquipmentNavigationEnabledto allow navigation between connected equipments. - Added new http endpoint
api/customers/graphqlto proxy GraphQL requests to the EWB query customer service. Please referpermissions.mdfor required permissions. - Added hosting capacity load override to
GqlHcModelConfigso specified meters can have their load data replaced by set profiles.- FixedTimeLoadOverride - Override single time point load data for specified meters.
- TimePeriodLoadOverride - Override load data with supplied profile for specified meters.
- Support for running opendss export and querying the run info. The new GraphQl queries are:
createOpenDssModelinitiate an opendss export run.pagedOpenDssModelsretrieves paginated information of 1 or more opendss export run.deleteOpenDssModeldeletes the opendss export run by passing the run id.
Enhancements
- Logging for permission checks.
- Configure Ktor with explicit
Cache-Controlheaders to cache static assets and to not cache anything else - Log the creation of access tokens.
- Added names to database connection pools.
executeIngestornow passes through therunConfigto the ingestor allowing users to override ingestor config- If no
input.nameis provided to thecreatePowerFactoryModelGraphQl mutation, once the model generation is complete thenameof this model in the EAS database will be updated with the name generated by the PowerFactory service. - Add
X-Content-Type-Optionsresponse header to all responses. - Added call back for feeder load analysis runs.
- Added
maxConnectionLifetimeMsfield to database configuration blocks.
Fixes
- Updated
getWorkPackagesandpagedStudiesqueries to return only the creators under theallUsersfield. - Updated logic to support nullable source time in metrics job sources.
Notes
- Update hosting-capacity-utils to 0.6.0
- Reduced the default max connection lifetime for database connections from 5 minutes to 4 minutes.\n\n---\n
Breaking Changes
FixedTimeLoadOverridenow takes in lists of doubles just likeTimePeriodLoadOverrideLoadTimeandLocalLoadTimevariablefetchLoadTimehas been renamed toloadTimefor ease of use and consistency between python and non-python part.- Ingestor service now uses the common callback endpoint
/callbackrather than/ingestor-callback. - Ingestor service configuration has been updated to include support for Temporal workflows. Existing configurations must be updated to specify the
runtime type,
"type": "container",to continue working. Seeconfig.mdfor full details. - Modification to
ModelConfigto allow more customization for model generationvMinPuandvMaxPuhave been removed and replaced withloadVMinPu/loadVMaxPufor loads and separategenVMinPu/genVMaxPufor generators.- Added support for
ctPrimScalingFactorwhich is required when calculating newctPrimvalue when feeder proxy loads are not in use.
New Features
- Ingestor service now supports running via a Temporal workflow.
- Added GraphQL query
getUserCustomerListColumnConfigand mutationsaveUserCustomerListColumnConfigto support user-specific column configurations. User can now manage a unique column configuration tied to their profile. - Added the following new config options
customerListTableVisibleto display of the customer list table in the UI.networkMapSearch2Enabledto enable version 2 of the network map search component.sincalExporterTimeseriesEnabledto enable timeseries modelling for the Sincal ExportersincalExporterForecastEnabledto enable forecast modelling for the Sincal Exporter
- Added
feedersargument to therunCalibrationGraphQL mutation. This optional argument allows running a model calibration on a subset of feeders in the model. - Added support for passing a
CalibrationWorkPackageConfigobject to the CalibrationConfig in the EAS config file. This allows a custom scenario andGeneratorConfigto used for calibration work packages.
Enhancements
- Added common http endpoint (
/callback) for callbacks. All services will be migrated to use this endpoint eventually. - Upgrade ewb-grpc to 0.36.0 to provide mapbox vector tile proto.
Fixes
- Wrap Kotlin exposed database query in transaction block to fix no transaction in context errors.
- Fix issue where EAS will hang when fetching JWKS from itself in single CPU enviroments
- Fix server shutdown hook not being registered correctly leading to unclean shutdowns
- Fixed bug that would cause power factory models to never reach the completed status even though they were available for download.
Notes
- Updated to hosting-capacity-utils 0.10.0
- Support up to evolve-sdk 0.29.0
- Support up to temporal-platform-definitions 0.2.0
- Support up to test-utils 2.1.0
- Support up to evolve-conn 0.13.0
- Updated to evolve-grpc 0.27.0.
- Updated to Ktor 3.0.3\n\n---\n
Breaking Changes
- None.
New Features
- None.
Enhancements
- None.
Fixes
- None.
Notes
- None.\n\n---\n
Breaking Changes
- Update to zepben commons 1.0.0 and EWB sdk 1.0.0. This will largely be incompatible with pre-1.0 versions.
- Renamed an existing config option
customerListTableVisibletocustomerListDrawerEnabled.
New Features
- Support node level results requests for hosting capacity work packages
- Support HC work packages configuring combineCommonImpedances, simplifyNetwork, and collapseNegligibleImpedances
- Added a permission based access control for viewing customer sensitive information in the customer list table in the UI.
- A new GraphQL query
getCustomerListadded to read all the customer related information based on the assigned permissions:CUSTOMER_PII:READCUSTOMER_NON_PII:READ.
- A new GraphQL query
downloadCustomerDetailsAsCsvadded to download all the customer related information based on the assigned permissions:CUSTOMER_PII:EXPORTCUSTOMER_NON_PII:EXPORT.
- A log containing the person requesting the customer information, the NMI's accessed and the date and time of access will be recorded.
- A new GraphQL query
Enhancements
- Sincal exporter APIs now support a Forecast config to allow modelling of future network
- Added new variable to hosting capacity configuration
useSpanLevelThreshold- use designRating for current comparison in this study.ratingThreshold- It will consider AcLineSegments with current rating difference within a threshold collapsable.simplifyPLSIThreshold- When provided, per length sequence impedance will be normalized between connected AcLineSegment when difference of their values are within this threshold.emergAmpScaling- emergency amp scaling factor used in creatingLineCode.
metrics.hierarchy_nameis now nullable - schema upgrades will be applied at startup.
Fixes
- Fixed bug that would result in null network model source dates if any of the job sources used to generate the model had a null source time.
- Disable the option to request for a basic report in feeder load analysis study.
Notes
- Removed hardcoded root logging level.\n\n---\n
Breaking Changes
- Renamed an existing graphQL query
getUserCustomerListColumnConfigtogetUserSavedCustomerListColumnConfig. - Updated
GqlCustomerListColumnConfig.columnNamedata type from string to enum. - GraphQL query
pagedOpenDssModelsnow returnsgenerationSpecas stringified JSON rather than a GraphQL object.
New Features
- Added GraphQL query
getUserPermittedCustomerListColumnConfigto return all permitted customer list columns for the requesting user. - Added GraphQL query
getAllWorkPackagesAuthorsto return all users that have created work packages. - Added
/internal/health/readyand/internal/health/livefor readiness and liveness probes in Kubernetes - Added support passing
inverterControlConfigtoModelConfigwhen running work packages to configure the modelling of generation equipment as PVSystems controlled by InvControls rather than Generators (Advanced PV).
Enhancements
- Default external role
TIMESERIES_MODELLERnow includes permissions to perform calibration runs. - Extended the getWorkPackages GraphQL query with a new
searchTextfilter, allowing flexible search by UUID (exact match), name, and email (fuzzy match).
Fixes
- Fixed network ingestor workflow so it does not restart EWB on completion if the network model is locked.
- Fixed
pagedOpenDssModelserror due to incompatiblegenerationSpecin previously generated models. - Fixed hosting capacity work package diff related query where duplicate keys can occur when there are multiple years worth of data in a result package
- Fixed hosting capacity work package diff related query where errors gets swallow up by Exposed's transaction error.
- Fix a check for empty string being passed through Generated Diff query.
Notes
- Updated to temporal-platform-definitions 0.4.0,
com.zepben.commonsandcom.zepben.ewbv1.1.0.