frequenz-api-common 0.7.0__tar.gz → 0.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {frequenz_api_common-0.7.0/py/frequenz_api_common.egg-info → frequenz_api_common-0.8.0}/PKG-INFO +5 -5
- frequenz_api_common-0.8.0/RELEASE_NOTES.md +35 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/grid/delivery_area.proto +62 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/grid/delivery_duration.proto +61 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/market/energy.proto +24 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/market/power.proto +30 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/market/price.proto +53 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/metrics/bounds.proto +23 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/metrics/metrics.proto +302 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/microgrid/communication_components/communication_components.proto +199 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/microgrid/electrical_components/electrical_components.proto +790 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/microgrid/lifetime.proto +41 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/microgrid/microgrid.proto +89 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/microgrid/sensors/sensors.proto +188 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/pagination/pagination_info.proto +27 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/pagination/pagination_params.proto +31 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/streaming/event.proto +26 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/types/decimal.proto +25 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/types/interval.proto +35 -0
- frequenz_api_common-0.8.0/proto/frequenz/api/common/v1alpha8/types/location.proto +22 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/grid/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/market/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/metrics/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/microgrid/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/microgrid/communication_components/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/microgrid/electrical_components/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/microgrid/sensors/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/pagination/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/streaming/__init__.py +4 -0
- frequenz_api_common-0.8.0/py/frequenz/api/common/v1alpha8/types/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0/py/frequenz_api_common.egg-info}/PKG-INFO +5 -5
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz_api_common.egg-info/SOURCES.txt +29 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz_api_common.egg-info/requires.txt +4 -4
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/pyproject.toml +4 -4
- frequenz_api_common-0.7.0/RELEASE_NOTES.md +0 -124
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/LICENSE +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/MANIFEST.in +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/README.md +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/components.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/location.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/metrics/electrical.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/metrics.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/grid/delivery_area.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/grid/delivery_duration.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/location.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/market/energy.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/market/power.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/market/price.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/metrics/bounds.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/metrics/metric_sample.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/components/battery.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/components/components.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/components/ev_charger.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/components/fuse.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/components/grid.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/components/inverter.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/components/transformer.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/lifetime.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/microgrid.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/microgrid/sensors/sensors.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/pagination/pagination_info.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/pagination/pagination_params.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1/types/decimal.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/grid/delivery_area.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/grid/delivery_duration.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/market/energy.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/market/power.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/market/price.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/metrics/bounds.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/metrics/metrics.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/microgrid/communication_components/communication_components.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/microgrid/electrical_components/electrical_components.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/microgrid/lifetime.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/microgrid/microgrid.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/microgrid/sensors/sensors.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/pagination/pagination_info.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/pagination/pagination_params.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/streaming/event.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/type/decimal.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/type/interval.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/proto/frequenz/api/common/v1alpha7/type/location.proto +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/metrics/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/py.typed +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/grid/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/market/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/metrics/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/microgrid/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/microgrid/components/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/microgrid/sensors/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/pagination/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1/types/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/grid/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/market/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/metrics/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/microgrid/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/microgrid/communication_components/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/microgrid/electrical_components/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/microgrid/sensors/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/pagination/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/streaming/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz/api/common/v1alpha7/type/__init__.py +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz_api_common.egg-info/dependency_links.txt +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/py/frequenz_api_common.egg-info/top_level.txt +0 -0
- {frequenz_api_common-0.7.0 → frequenz_api_common-0.8.0}/setup.cfg +0 -0
{frequenz_api_common-0.7.0/py/frequenz_api_common.egg-info → frequenz_api_common-0.8.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frequenz-api-common
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Summary: Frequenz common gRPC API and bindings
|
|
5
5
|
Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
|
|
6
6
|
License: MIT
|
|
@@ -22,7 +22,7 @@ License-File: LICENSE
|
|
|
22
22
|
Requires-Dist: protobuf<8,>=6.31.1
|
|
23
23
|
Requires-Dist: grpcio<2,>=1.72.1
|
|
24
24
|
Provides-Extra: dev-flake8
|
|
25
|
-
Requires-Dist: flake8==7.
|
|
25
|
+
Requires-Dist: flake8==7.3.0; extra == "dev-flake8"
|
|
26
26
|
Requires-Dist: flake8-docstrings==1.7.0; extra == "dev-flake8"
|
|
27
27
|
Requires-Dist: flake8-pyproject==1.2.3; extra == "dev-flake8"
|
|
28
28
|
Requires-Dist: pydoclint==0.6.6; extra == "dev-flake8"
|
|
@@ -34,11 +34,11 @@ Provides-Extra: dev-mkdocs
|
|
|
34
34
|
Requires-Dist: mike==1.1.2; extra == "dev-mkdocs"
|
|
35
35
|
Requires-Dist: mkdocs-gen-files==0.5.0; extra == "dev-mkdocs"
|
|
36
36
|
Requires-Dist: mkdocs-literate-nav==0.6.2; extra == "dev-mkdocs"
|
|
37
|
-
Requires-Dist: mkdocs-material==9.6.
|
|
37
|
+
Requires-Dist: mkdocs-material==9.6.15; extra == "dev-mkdocs"
|
|
38
38
|
Requires-Dist: mkdocstrings[python]==0.29.1; extra == "dev-mkdocs"
|
|
39
39
|
Requires-Dist: frequenz-repo-config[api]==0.13.5; extra == "dev-mkdocs"
|
|
40
40
|
Provides-Extra: dev-mypy
|
|
41
|
-
Requires-Dist: mypy==1.16.
|
|
41
|
+
Requires-Dist: mypy==1.16.1; extra == "dev-mypy"
|
|
42
42
|
Requires-Dist: grpc-stubs==1.53.0.6; extra == "dev-mypy"
|
|
43
43
|
Requires-Dist: frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
|
|
44
44
|
Provides-Extra: dev-noxfile
|
|
@@ -48,7 +48,7 @@ Provides-Extra: dev-pylint
|
|
|
48
48
|
Requires-Dist: pylint==3.3.7; extra == "dev-pylint"
|
|
49
49
|
Requires-Dist: frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
|
|
50
50
|
Provides-Extra: dev-pytest
|
|
51
|
-
Requires-Dist: pytest==8.
|
|
51
|
+
Requires-Dist: pytest==8.4.1; extra == "dev-pytest"
|
|
52
52
|
Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.13.5; extra == "dev-pytest"
|
|
53
53
|
Provides-Extra: dev
|
|
54
54
|
Requires-Dist: frequenz-api-common[dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest]; extra == "dev"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Frequenz Common API Release Notes
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release introduces the new `v1alpha8` version of the API, which includes several breaking changes compared to `v1alpha7`. The changes focus on improving consistency and clarity by renaming several symbols and removing unused components.
|
|
6
|
+
|
|
7
|
+
## Upgrading
|
|
8
|
+
|
|
9
|
+
- A new package `frequenz.api.common.v1alpha8` has been introduced, containing the following breaking changes from `v1alpha7`.
|
|
10
|
+
|
|
11
|
+
- Removed:
|
|
12
|
+
|
|
13
|
+
+ `electrical_components.Fuse`
|
|
14
|
+
+ `InverterType.INVERTER_TYPE_WIND_TURBINE`
|
|
15
|
+
|
|
16
|
+
- Renamed several symbols to increase consistency and clarity:
|
|
17
|
+
|
|
18
|
+
+ `microgrid`:
|
|
19
|
+
|
|
20
|
+
* `MicrogridComponentIds` to `MicrogridElectricalComponentIds`
|
|
21
|
+
* `MicrogridComponentIDs.component_ids` to `MicrogridElectricalComponentIds.electrical_component_ids`
|
|
22
|
+
|
|
23
|
+
+ `electrical_components`:
|
|
24
|
+
|
|
25
|
+
* `ElectricalComponentConnections.source_component_id` to `ElectricalComponentConnections.source_electrical_component_id`
|
|
26
|
+
* `ElectricalComponentConnections.destination_component_id` to `ElectricalComponentConnections.destination_electrical_component_id`
|
|
27
|
+
* `ElectricalComponentStateSnapshot.component_id` to `ElectricalComponentStateSnapshot.electrical_component_id`
|
|
28
|
+
* Transformer-related terms are renamed to align them with power transformers, which are more commonly used in electrical engineering:
|
|
29
|
+
* `electrical_components.VoltageTransformer` to `electrical_components.PowerTransformer`
|
|
30
|
+
* `ElectricalComponentCategorySpecificInfo.kind.voltage_transformer` to `ElectricalComponentCategorySpecificInfo.kind.power_transformer`
|
|
31
|
+
* `ElectricalComponentCategory.ELECTRICAL_COMPONENT_CATEGORY_VOLTAGE_TRANSFORMER` to `ElectricalComponentCategory.ELECTRICAL_COMPONENT_CATEGORY_POWER_TRANSFORMER`
|
|
32
|
+
|
|
33
|
+
+ `types`:
|
|
34
|
+
|
|
35
|
+
* The whole package has been renamed to `types` to avoid using reserved keywords in programming languages.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Frequenz definitions of grids as entities participating in trading.
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2025 Frequenz Energy-as-a-Service GmbH
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the MIT License (the "License");
|
|
6
|
+
// you may not use this file except in compliance with the License.
|
|
7
|
+
|
|
8
|
+
syntax = "proto3";
|
|
9
|
+
|
|
10
|
+
package frequenz.api.common.v1alpha8.grid;
|
|
11
|
+
|
|
12
|
+
// CodeType specifies the type of identification code used for uniquely
|
|
13
|
+
// identifying various entities such as delivery areas, market participants, and
|
|
14
|
+
// grid components within the energy market. This enumeration aims to offer
|
|
15
|
+
// compatibility across different jurisdictional standards.
|
|
16
|
+
//
|
|
17
|
+
// !!! note "Understanding Code Types"
|
|
18
|
+
// Different regions or countries may have their own standards for uniquely
|
|
19
|
+
// identifying various entities within the energy market. For example, in
|
|
20
|
+
// Europe, the Energy Identification Code (EIC) is commonly used for this
|
|
21
|
+
// purpose.
|
|
22
|
+
//
|
|
23
|
+
// !!! info "Extensibility"
|
|
24
|
+
// New code types can be added to this enum to accommodate additional
|
|
25
|
+
// regional standards, enhancing the API's adaptability.
|
|
26
|
+
//
|
|
27
|
+
// !!! caution "Validation Required"
|
|
28
|
+
// The chosen code type should correspond correctly with the `code` field in
|
|
29
|
+
// the relevant message objects, such as `DeliveryArea` or `Counterparty`.
|
|
30
|
+
// Failure to match the code type with the correct code could lead to
|
|
31
|
+
// processing errors.
|
|
32
|
+
//
|
|
33
|
+
enum EnergyMarketCodeType {
|
|
34
|
+
// Unspecified type. This value is a placeholder and should not be used.
|
|
35
|
+
ENERGY_MARKET_CODE_TYPE_UNSPECIFIED = 0;
|
|
36
|
+
|
|
37
|
+
// European Energy Identification Code Standard.
|
|
38
|
+
ENERGY_MARKET_CODE_TYPE_EUROPE_EIC = 1;
|
|
39
|
+
|
|
40
|
+
// North American Electric Reliability Corporation identifiers.
|
|
41
|
+
ENERGY_MARKET_CODE_TYPE_US_NERC = 2;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// DeliveryArea represents the geographical or administrative region, usually
|
|
45
|
+
// defined and maintained by a Transmission System Operator (TSO), where
|
|
46
|
+
// electricity deliveries for a contract occur.
|
|
47
|
+
//
|
|
48
|
+
// The concept is important to energy trading as it delineates the agreed-upon
|
|
49
|
+
// delivery location. Delivery areas can have different codes based on the//
|
|
50
|
+
// jurisdiction in which they operate.
|
|
51
|
+
//
|
|
52
|
+
// !!! note "Jurisdictional Differences"
|
|
53
|
+
// This is typically represented by specific codes according to local
|
|
54
|
+
// jurisdiction. In Europe, this is represented by an EIC
|
|
55
|
+
// (Energy Identification Code).
|
|
56
|
+
message DeliveryArea {
|
|
57
|
+
// Code representing the unique identifier for the delivery area.
|
|
58
|
+
string code = 1;
|
|
59
|
+
|
|
60
|
+
// Type of code used for identifying the delivery area itself.
|
|
61
|
+
EnergyMarketCodeType code_type = 2;
|
|
62
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Frequenz definitions of the time increment used for electricity
|
|
2
|
+
// deliveries and trading.
|
|
3
|
+
//
|
|
4
|
+
// Copyright 2025 Frequenz Energy-as-a-Service GmbH
|
|
5
|
+
//
|
|
6
|
+
// Licensed under the MIT License (the "License");
|
|
7
|
+
// you may not use this file except in compliance with the License.
|
|
8
|
+
|
|
9
|
+
syntax = "proto3";
|
|
10
|
+
|
|
11
|
+
package frequenz.api.common.v1alpha8.grid;
|
|
12
|
+
|
|
13
|
+
import "google/protobuf/timestamp.proto";
|
|
14
|
+
|
|
15
|
+
// DeliveryDuration represents the time increment, in minutes,
|
|
16
|
+
// used for electricity deliveries and trading. These durations
|
|
17
|
+
// serve as the basis for defining the delivery period in contracts,
|
|
18
|
+
// and they dictate how energy is scheduled and delivered to meet
|
|
19
|
+
// contractual obligations.
|
|
20
|
+
//
|
|
21
|
+
// !!! note "Compatibility Constraints"
|
|
22
|
+
// Not all delivery durations are universally
|
|
23
|
+
// compatible with all delivery areas or markets.
|
|
24
|
+
//
|
|
25
|
+
enum DeliveryDuration {
|
|
26
|
+
// Default value, indicates that the duration is unspecified.
|
|
27
|
+
DELIVERY_DURATION_UNSPECIFIED = 0;
|
|
28
|
+
|
|
29
|
+
// 5-minute duration
|
|
30
|
+
DELIVERY_DURATION_5 = 1;
|
|
31
|
+
|
|
32
|
+
// 15-minute contract duration.
|
|
33
|
+
DELIVERY_DURATION_15 = 2;
|
|
34
|
+
|
|
35
|
+
// 30-minute contract duration.
|
|
36
|
+
DELIVERY_DURATION_30 = 3;
|
|
37
|
+
|
|
38
|
+
// 1-hour contract duration.
|
|
39
|
+
DELIVERY_DURATION_60 = 4;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// DeliveryPeriod represents the time period during which the contract
|
|
43
|
+
// is delivered. It is defined by a start timestamp and a duration.
|
|
44
|
+
message DeliveryPeriod {
|
|
45
|
+
// Start UTC timestamp represents the beginning of the delivery period.
|
|
46
|
+
// This timestamp is inclusive, meaning that the delivery period starts
|
|
47
|
+
// from this point in time.
|
|
48
|
+
//
|
|
49
|
+
// !!! note
|
|
50
|
+
// Delivery period start time constraints:
|
|
51
|
+
// - 5-minute durations must start at times that are multiples of
|
|
52
|
+
// 5 minutes past the hour.
|
|
53
|
+
// - 15-minute durations must start at :00, :15, :30, or
|
|
54
|
+
// :45 past the hour.
|
|
55
|
+
// - 30-minute durations must start at :00 or :30 past the hour.
|
|
56
|
+
// - 60-minute durations must start at :00 past the hour.
|
|
57
|
+
google.protobuf.Timestamp start = 1;
|
|
58
|
+
|
|
59
|
+
// The length of the delivery period.
|
|
60
|
+
DeliveryDuration duration = 2;
|
|
61
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Frequenz definitions of energy.
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2025 Frequenz Energy-as-a-Service GmbH
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the MIT License (the "License");
|
|
6
|
+
// you may not use this file except in compliance with the License.
|
|
7
|
+
|
|
8
|
+
syntax = "proto3";
|
|
9
|
+
|
|
10
|
+
package frequenz.api.common.v1alpha8.market;
|
|
11
|
+
|
|
12
|
+
import "frequenz/api/common/v1alpha8/types/decimal.proto";
|
|
13
|
+
|
|
14
|
+
// Represents a single unit of electricity.
|
|
15
|
+
//
|
|
16
|
+
// !!! note
|
|
17
|
+
// The unit of energy is denominated in MWh, which is a unit of energy
|
|
18
|
+
// representing total output over a period.(Megawatt-hours). This differs
|
|
19
|
+
// from MW (Megawatts), a unit of power representing the rate of energy
|
|
20
|
+
// production or consumption.
|
|
21
|
+
message Energy {
|
|
22
|
+
// Energy unit in Megawatthours (MWh).
|
|
23
|
+
frequenz.api.common.v1alpha8.types.Decimal mwh = 1;
|
|
24
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Frequenz definitions of power.
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2024 Frequenz Energy-as-a-Service GmbH
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the MIT License (the "License");
|
|
6
|
+
// you may not use this file except in compliance with the License.
|
|
7
|
+
|
|
8
|
+
syntax = "proto3";
|
|
9
|
+
|
|
10
|
+
package frequenz.api.common.v1alpha8.market;
|
|
11
|
+
|
|
12
|
+
import "frequenz/api/common/v1alpha8/types/decimal.proto";
|
|
13
|
+
|
|
14
|
+
// Represents a single unit of power.
|
|
15
|
+
//
|
|
16
|
+
// !!! note
|
|
17
|
+
// The power unit is denominated in MW (Megawatts), which is a unit of
|
|
18
|
+
// power representing the rate of energy production or consumption at any
|
|
19
|
+
// given moment. This differs from MWh (Megawatt-hours), which measures
|
|
20
|
+
// the total amount of energy delivered or consumed over a period.
|
|
21
|
+
//
|
|
22
|
+
// Example:
|
|
23
|
+
// A power plant running at 10 MW for 1 hour generates 10 MWh of energy.
|
|
24
|
+
//
|
|
25
|
+
// This message standardizes the representation of power in MW across all
|
|
26
|
+
// market applications.
|
|
27
|
+
message Power {
|
|
28
|
+
// Power amount in Megawatts (MW).
|
|
29
|
+
frequenz.api.common.v1alpha8.types.Decimal mw = 1;
|
|
30
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Frequenz definitions of price for electricity trading.
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2025 Frequenz Energy-as-a-Service GmbH
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the MIT License (the "License");
|
|
6
|
+
// you may not use this file except in compliance with the License.
|
|
7
|
+
|
|
8
|
+
syntax = "proto3";
|
|
9
|
+
|
|
10
|
+
package frequenz.api.common.v1alpha8.market;
|
|
11
|
+
|
|
12
|
+
import "frequenz/api/common/v1alpha8/types/decimal.proto";
|
|
13
|
+
|
|
14
|
+
// Represents a monetary price for electricity trading, including
|
|
15
|
+
// the amount and currency. The currency used should align with the
|
|
16
|
+
// delivery area's standard currency.
|
|
17
|
+
//
|
|
18
|
+
// !!! caution "Validation Required"
|
|
19
|
+
// It's essential to ensure that the currency aligns with the
|
|
20
|
+
// standard currency of the associated delivery area. Failure to
|
|
21
|
+
// do so may result in the API service rejecting the request due to currency
|
|
22
|
+
// mismatches.
|
|
23
|
+
//
|
|
24
|
+
// !!! info "Relation to Delivery Area"
|
|
25
|
+
// The currency specified is intrinsically related to the delivery area
|
|
26
|
+
// for the contract. Make sure the chosen currency is compatible with
|
|
27
|
+
// the delivery area's currency standards.
|
|
28
|
+
//
|
|
29
|
+
message Price {
|
|
30
|
+
// List of supported currencies.
|
|
31
|
+
//
|
|
32
|
+
// !!! info "Extensibility"
|
|
33
|
+
// New currencies can be added to this enum to support additional markets.
|
|
34
|
+
enum Currency {
|
|
35
|
+
CURRENCY_UNSPECIFIED = 0;
|
|
36
|
+
CURRENCY_USD = 1;
|
|
37
|
+
CURRENCY_CAD = 2;
|
|
38
|
+
CURRENCY_EUR = 3;
|
|
39
|
+
CURRENCY_GBP = 4;
|
|
40
|
+
CURRENCY_CHF = 5;
|
|
41
|
+
CURRENCY_CNY = 6;
|
|
42
|
+
CURRENCY_JPY = 7;
|
|
43
|
+
CURRENCY_AUD = 8;
|
|
44
|
+
CURRENCY_NZD = 9;
|
|
45
|
+
CURRENCY_SGD = 10;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// The amount of the price.
|
|
49
|
+
frequenz.api.common.v1alpha8.types.Decimal amount = 1;
|
|
50
|
+
|
|
51
|
+
// The currency in which the price is denominated.
|
|
52
|
+
Currency currency = 2;
|
|
53
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Definitions for bounds.
|
|
2
|
+
//
|
|
3
|
+
// Copyright:
|
|
4
|
+
// Copyright 2025 Frequenz Energy-as-a-Service GmbH
|
|
5
|
+
//
|
|
6
|
+
// License:
|
|
7
|
+
// MIT
|
|
8
|
+
|
|
9
|
+
syntax = "proto3";
|
|
10
|
+
|
|
11
|
+
package frequenz.api.common.v1alpha8.metrics;
|
|
12
|
+
|
|
13
|
+
// A set of lower and upper bounds for any metric.
|
|
14
|
+
// The units of the bounds are always the same as the related metric.
|
|
15
|
+
message Bounds {
|
|
16
|
+
// The lower bound.
|
|
17
|
+
// If absent, there is no lower bound.
|
|
18
|
+
optional float lower = 1;
|
|
19
|
+
|
|
20
|
+
// The upper bound.
|
|
21
|
+
// If absent, there is no upper bound.
|
|
22
|
+
optional float upper = 2;
|
|
23
|
+
}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
// Metrics definitions.
|
|
2
|
+
//
|
|
3
|
+
// Copyright:
|
|
4
|
+
// Copyright 2025 Frequenz Energy-as-a-Service GmbH
|
|
5
|
+
//
|
|
6
|
+
// License:
|
|
7
|
+
// MIT
|
|
8
|
+
|
|
9
|
+
syntax = "proto3";
|
|
10
|
+
|
|
11
|
+
package frequenz.api.common.v1alpha8.metrics;
|
|
12
|
+
|
|
13
|
+
import "frequenz/api/common/v1alpha8/metrics/bounds.proto";
|
|
14
|
+
|
|
15
|
+
import "google/protobuf/timestamp.proto";
|
|
16
|
+
|
|
17
|
+
// Represents a single sample of a specific metric, the value of which is either
|
|
18
|
+
// measured or derived at a particular time.
|
|
19
|
+
message SimpleMetricValue {
|
|
20
|
+
// The value of the metric, which could be either measured or derived.
|
|
21
|
+
float value = 2;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Encapsulates derived statistical summaries of a single metric.
|
|
25
|
+
//
|
|
26
|
+
// The message allows for the reporting of statistical summaries — minimum,
|
|
27
|
+
// maximum, and average values - as well as the complete list of individual
|
|
28
|
+
// samples if available.
|
|
29
|
+
//
|
|
30
|
+
// This message represents derived metrics and contains fields for statistical
|
|
31
|
+
// summaries—minimum, maximum, and average values. Individual measurements are
|
|
32
|
+
// are optional, accommodating scenarios where only subsets of this information
|
|
33
|
+
// are available.
|
|
34
|
+
message AggregatedMetricValue {
|
|
35
|
+
// The derived average value of the metric.
|
|
36
|
+
float avg_value = 2;
|
|
37
|
+
|
|
38
|
+
// The minimum measured value of the metric.
|
|
39
|
+
optional float min_value = 3;
|
|
40
|
+
|
|
41
|
+
// The maximum measured value of the metric.
|
|
42
|
+
optional float max_value = 4;
|
|
43
|
+
|
|
44
|
+
// Optional array of all the raw individual values.
|
|
45
|
+
repeated float raw_values = 5;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// `MetricValueVariant` serves as a union type that can encapsulate either a
|
|
49
|
+
// `SimpleMetricValue` or an `AggregatedMetricValue`.
|
|
50
|
+
//
|
|
51
|
+
// This message is designed to offer flexibility in capturing different
|
|
52
|
+
// granularities of metric samples—either a simple single-point measurement
|
|
53
|
+
// or an aggregated set of measurements for a metric.
|
|
54
|
+
//
|
|
55
|
+
// A `MetricValueVariant` can hold either a `SimpleMetricValue` or an
|
|
56
|
+
// `AggregatedMetricValue`, but not both simultaneously. Setting one will
|
|
57
|
+
// nullify the other.
|
|
58
|
+
message MetricValueVariant {
|
|
59
|
+
oneof metric_value_variant {
|
|
60
|
+
SimpleMetricValue simple_metric = 1;
|
|
61
|
+
AggregatedMetricValue aggregated_metric = 2;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// List of supported metrics.
|
|
66
|
+
//
|
|
67
|
+
// !!! note
|
|
68
|
+
// AC energy metrics information:
|
|
69
|
+
//
|
|
70
|
+
// * This energy metric is reported directly from the component, and not a
|
|
71
|
+
// result of aggregations in our systems. If a component does not have this
|
|
72
|
+
// metric, this field cannot be populated.
|
|
73
|
+
//
|
|
74
|
+
// * Components that provide energy metrics reset this metric from time to
|
|
75
|
+
// time. This behaviour is specific to each component model. E.g., some
|
|
76
|
+
// components reset it on UTC 00:00:00.
|
|
77
|
+
//
|
|
78
|
+
// * This energy metric does not specify the timestamp since when the energy
|
|
79
|
+
// was being accumulated, and therefore can be inconsistent.
|
|
80
|
+
enum Metric {
|
|
81
|
+
// Default value.
|
|
82
|
+
METRIC_UNSPECIFIED = 0;
|
|
83
|
+
|
|
84
|
+
// DC electricity metrics
|
|
85
|
+
METRIC_DC_VOLTAGE = 1;
|
|
86
|
+
METRIC_DC_CURRENT = 2;
|
|
87
|
+
METRIC_DC_POWER = 3;
|
|
88
|
+
|
|
89
|
+
// General AC electricity metrics
|
|
90
|
+
METRIC_AC_FREQUENCY = 10;
|
|
91
|
+
METRIC_AC_VOLTAGE = 11;
|
|
92
|
+
METRIC_AC_VOLTAGE_PHASE_1_N = 12;
|
|
93
|
+
METRIC_AC_VOLTAGE_PHASE_2_N = 13;
|
|
94
|
+
METRIC_AC_VOLTAGE_PHASE_3_N = 14;
|
|
95
|
+
METRIC_AC_VOLTAGE_PHASE_1_PHASE_2 = 15;
|
|
96
|
+
METRIC_AC_VOLTAGE_PHASE_2_PHASE_3 = 16;
|
|
97
|
+
METRIC_AC_VOLTAGE_PHASE_3_PHASE_1 = 17;
|
|
98
|
+
METRIC_AC_CURRENT = 18;
|
|
99
|
+
METRIC_AC_CURRENT_PHASE_1 = 19;
|
|
100
|
+
METRIC_AC_CURRENT_PHASE_2 = 20;
|
|
101
|
+
METRIC_AC_CURRENT_PHASE_3 = 21;
|
|
102
|
+
|
|
103
|
+
// AC power metrics
|
|
104
|
+
METRIC_AC_POWER_APPARENT = 22;
|
|
105
|
+
METRIC_AC_POWER_APPARENT_PHASE_1 = 23;
|
|
106
|
+
METRIC_AC_POWER_APPARENT_PHASE_2 = 24;
|
|
107
|
+
METRIC_AC_POWER_APPARENT_PHASE_3 = 25;
|
|
108
|
+
METRIC_AC_POWER_ACTIVE = 26;
|
|
109
|
+
METRIC_AC_POWER_ACTIVE_PHASE_1 = 27;
|
|
110
|
+
METRIC_AC_POWER_ACTIVE_PHASE_2 = 28;
|
|
111
|
+
METRIC_AC_POWER_ACTIVE_PHASE_3 = 29;
|
|
112
|
+
METRIC_AC_POWER_REACTIVE = 30;
|
|
113
|
+
METRIC_AC_POWER_REACTIVE_PHASE_1 = 31;
|
|
114
|
+
METRIC_AC_POWER_REACTIVE_PHASE_2 = 32;
|
|
115
|
+
METRIC_AC_POWER_REACTIVE_PHASE_3 = 33;
|
|
116
|
+
|
|
117
|
+
// AC Power factor
|
|
118
|
+
METRIC_AC_POWER_FACTOR = 40;
|
|
119
|
+
METRIC_AC_POWER_FACTOR_PHASE_1 = 41;
|
|
120
|
+
METRIC_AC_POWER_FACTOR_PHASE_2 = 42;
|
|
121
|
+
METRIC_AC_POWER_FACTOR_PHASE_3 = 43;
|
|
122
|
+
|
|
123
|
+
// AC energy metrics
|
|
124
|
+
METRIC_AC_ENERGY_APPARENT = 50;
|
|
125
|
+
METRIC_AC_ENERGY_APPARENT_PHASE_1 = 51;
|
|
126
|
+
METRIC_AC_ENERGY_APPARENT_PHASE_2 = 52;
|
|
127
|
+
METRIC_AC_ENERGY_APPARENT_PHASE_3 = 53;
|
|
128
|
+
METRIC_AC_ENERGY_ACTIVE = 54;
|
|
129
|
+
METRIC_AC_ENERGY_ACTIVE_PHASE_1 = 55;
|
|
130
|
+
METRIC_AC_ENERGY_ACTIVE_PHASE_2 = 56;
|
|
131
|
+
METRIC_AC_ENERGY_ACTIVE_PHASE_3 = 57;
|
|
132
|
+
METRIC_AC_ENERGY_ACTIVE_CONSUMED = 58;
|
|
133
|
+
METRIC_AC_ENERGY_ACTIVE_CONSUMED_PHASE_1 = 59;
|
|
134
|
+
METRIC_AC_ENERGY_ACTIVE_CONSUMED_PHASE_2 = 60;
|
|
135
|
+
METRIC_AC_ENERGY_ACTIVE_CONSUMED_PHASE_3 = 61;
|
|
136
|
+
METRIC_AC_ENERGY_ACTIVE_DELIVERED = 62;
|
|
137
|
+
METRIC_AC_ENERGY_ACTIVE_DELIVERED_PHASE_1 = 63;
|
|
138
|
+
METRIC_AC_ENERGY_ACTIVE_DELIVERED_PHASE_2 = 64;
|
|
139
|
+
METRIC_AC_ENERGY_ACTIVE_DELIVERED_PHASE_3 = 65;
|
|
140
|
+
METRIC_AC_ENERGY_REACTIVE = 66;
|
|
141
|
+
METRIC_AC_ENERGY_REACTIVE_PHASE_1 = 67;
|
|
142
|
+
METRIC_AC_ENERGY_REACTIVE_PHASE_2 = 68;
|
|
143
|
+
METRIC_AC_ENERGY_REACTIVE_PHASE_3 = 69;
|
|
144
|
+
|
|
145
|
+
// AC harmonics
|
|
146
|
+
METRIC_AC_TOTAL_HARMONIC_DISTORTION_CURRENT = 80;
|
|
147
|
+
METRIC_AC_TOTAL_HARMONIC_DISTORTION_CURRENT_PHASE_1 = 81;
|
|
148
|
+
METRIC_AC_TOTAL_HARMONIC_DISTORTION_CURRENT_PHASE_2 = 82;
|
|
149
|
+
METRIC_AC_TOTAL_HARMONIC_DISTORTION_CURRENT_PHASE_3 = 83;
|
|
150
|
+
|
|
151
|
+
// General BMS metrics.
|
|
152
|
+
METRIC_BATTERY_CAPACITY = 100;
|
|
153
|
+
METRIC_BATTERY_SOC_PCT = 101;
|
|
154
|
+
METRIC_BATTERY_TEMPERATURE = 102;
|
|
155
|
+
|
|
156
|
+
// General inverter metrics.
|
|
157
|
+
METRIC_INVERTER_TEMPERATURE = 120;
|
|
158
|
+
METRIC_INVERTER_TEMPERATURE_CABINET = 121;
|
|
159
|
+
METRIC_INVERTER_TEMPERATURE_HEATSINK = 122;
|
|
160
|
+
METRIC_INVERTER_TEMPERATURE_TRANSFORMER = 123;
|
|
161
|
+
|
|
162
|
+
// EV charging station metrics.
|
|
163
|
+
METRIC_EV_CHARGER_TEMPERATURE = 140;
|
|
164
|
+
|
|
165
|
+
// General sensor metrics
|
|
166
|
+
METRIC_SENSOR_WIND_SPEED = 160;
|
|
167
|
+
METRIC_SENSOR_WIND_DIRECTION = 161;
|
|
168
|
+
METRIC_SENSOR_TEMPERATURE = 162;
|
|
169
|
+
METRIC_SENSOR_RELATIVE_HUMIDITY = 163;
|
|
170
|
+
METRIC_SENSOR_DEW_POINT = 164;
|
|
171
|
+
METRIC_SENSOR_AIR_PRESSURE = 165;
|
|
172
|
+
METRIC_SENSOR_IRRADIANCE = 166;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Enumerated categories of connections from which metrics can be obtained for a
|
|
176
|
+
// given electrical component or sensor.
|
|
177
|
+
enum MetricConnectionCategory {
|
|
178
|
+
// Default value.
|
|
179
|
+
// Do not use this value.
|
|
180
|
+
METRIC_CONNECTION_CATEGORY_UNSPECIFIED = 0;
|
|
181
|
+
|
|
182
|
+
// A generic connection for metrics that do not fit into any other category.
|
|
183
|
+
METRIC_CONNECTION_CATEGORY_OTHER = 1;
|
|
184
|
+
|
|
185
|
+
// A connection to a metric representing a battery.
|
|
186
|
+
METRIC_CONNECTION_CATEGORY_BATTERY = 2;
|
|
187
|
+
|
|
188
|
+
// A connection to a metric representing a PV (photovoltaic) array or string.
|
|
189
|
+
METRIC_CONNECTION_CATEGORY_PV = 3;
|
|
190
|
+
|
|
191
|
+
// A connection to a metric representing ambient conditions.
|
|
192
|
+
METRIC_CONNECTION_CATEGORY_AMBIENT = 10;
|
|
193
|
+
|
|
194
|
+
// A connection to a metric representing a cabinet or an enclosure.
|
|
195
|
+
METRIC_CONNECTION_CATEGORY_CABINET = 11;
|
|
196
|
+
|
|
197
|
+
// A connection to a metric representing a heatsink.
|
|
198
|
+
METRIC_CONNECTION_CATEGORY_HEATSINK = 12;
|
|
199
|
+
|
|
200
|
+
// A connection to a metric representing a transformer.
|
|
201
|
+
METRIC_CONNECTION_CATEGORY_TRANSFORMER = 13;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// A connection to a metric representing from which a metric was obtained.
|
|
205
|
+
message MetricConnection {
|
|
206
|
+
// The category of the connection from which the metric was obtained.
|
|
207
|
+
MetricConnectionCategory category = 1;
|
|
208
|
+
|
|
209
|
+
// A string that can be used to identify the specific connection from which
|
|
210
|
+
// the metric was obtained.
|
|
211
|
+
//
|
|
212
|
+
// This is expected to be populated when the same `Metric` variant can be
|
|
213
|
+
// obtained from multiple distinct inputs or connection points on the
|
|
214
|
+
// component. Knowing the connection for the metric can help in certain
|
|
215
|
+
// control and monitoring applications.
|
|
216
|
+
string name = 2;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Representation of a sampled metric along with its value.
|
|
220
|
+
//
|
|
221
|
+
// !!! note
|
|
222
|
+
// This represents a single sample of a specific metric, the value of which
|
|
223
|
+
// is either measured or derived at a particular time. The real-time
|
|
224
|
+
// system-defined bounds are optional and may not always be present or set.
|
|
225
|
+
//
|
|
226
|
+
// !!! note
|
|
227
|
+
// ### Relationship Between Bounds and Metric Samples
|
|
228
|
+
// Suppose a metric sample for active power has a lower-bound of -10,000 W,
|
|
229
|
+
// and an upper-bound of 10,000 W. For the system to accept a charge
|
|
230
|
+
// command, clients need to request current values within the bounds.
|
|
231
|
+
message MetricSample {
|
|
232
|
+
// The UTC timestamp of when the metric was sampled.
|
|
233
|
+
google.protobuf.Timestamp sample_time = 1;
|
|
234
|
+
|
|
235
|
+
// The metric that was sampled.
|
|
236
|
+
Metric metric = 2;
|
|
237
|
+
|
|
238
|
+
// The value of the sampled metric.
|
|
239
|
+
MetricValueVariant value = 3;
|
|
240
|
+
|
|
241
|
+
// List of bounds that apply to the metric sample.
|
|
242
|
+
//
|
|
243
|
+
// These bounds adapt in real-time to reflect the operating conditions at the
|
|
244
|
+
// time of aggregation or derivation.
|
|
245
|
+
//
|
|
246
|
+
// #### Multiple Bounds
|
|
247
|
+
//
|
|
248
|
+
// In the case of certain components like batteries, multiple bounds might
|
|
249
|
+
// exist. These multiple bounds collectively extend the range of allowable
|
|
250
|
+
// values, effectively forming a union of all given bounds. In such cases,
|
|
251
|
+
// the value of the metric must be within at least one of the bounds.
|
|
252
|
+
// In accordance with the passive sign convention, bounds that limit discharge
|
|
253
|
+
// would have negative numbers, while those limiting charge, such as for the
|
|
254
|
+
// State of Power (SoP) metric, would be positive. Hence bounds can have
|
|
255
|
+
// positive and negative values depending on the metric they represent.
|
|
256
|
+
//
|
|
257
|
+
// #### Example
|
|
258
|
+
//
|
|
259
|
+
// The diagram below illustrates the relationship between the bounds.
|
|
260
|
+
// ```
|
|
261
|
+
// bound[0].lower bound[1].upper
|
|
262
|
+
// <-------|============|------------------|============|--------->
|
|
263
|
+
// bound[0].upper bound[1].lower
|
|
264
|
+
// ```
|
|
265
|
+
// ---- values here are disallowed and will be rejected
|
|
266
|
+
// ==== values here are allowed and will be accepted
|
|
267
|
+
repeated Bounds bounds = 4;
|
|
268
|
+
|
|
269
|
+
// An optional field that can be used to identify the specific connection
|
|
270
|
+
// from which the metric was obtained.
|
|
271
|
+
//
|
|
272
|
+
// This is expected to be populated when the same `Metric` variant can be
|
|
273
|
+
// obtained from multiple distinct inputs or connection points on the
|
|
274
|
+
// component. Knowing the connection for the metric can help in certain
|
|
275
|
+
// control and monitoring applications.
|
|
276
|
+
//
|
|
277
|
+
// E.g.,
|
|
278
|
+
// - A PV inverter might have multiple PV strings connected (e.g.,
|
|
279
|
+
// `pv_string_1`, `pv_string_2`).
|
|
280
|
+
// - A hybrid inverter can have a DC connection for a battery (e.g.,
|
|
281
|
+
// `dc_battery_0`) and another for a PV array (e.g., `dc_pv_0`). A metric
|
|
282
|
+
// like DC voltage can be obtained from both connections. For an application
|
|
283
|
+
// to determine the SoC of the battery using its voltage, identifying the
|
|
284
|
+
// `dc_battery_0` connection is important.
|
|
285
|
+
// - A sensor unit might report temperature from different connected probes
|
|
286
|
+
// (e.g., `temp_sensor_outdoor`, `temp_sensor_transformer`).
|
|
287
|
+
//
|
|
288
|
+
// !!! note "Default Connection Behavior"
|
|
289
|
+
// If this field is unset, it is implicitly assumed that the component
|
|
290
|
+
// only has a single connection for this metric, and the connection is
|
|
291
|
+
// uniquely identified by the component itself.
|
|
292
|
+
//
|
|
293
|
+
// !!! example
|
|
294
|
+
// ```
|
|
295
|
+
// // DC power from battery string 0 in a hybrid inverter
|
|
296
|
+
// source {
|
|
297
|
+
// category: METRIC_CONNECTION_CATEGORY_BATTERY
|
|
298
|
+
// name: "dc_battery_0"
|
|
299
|
+
// }
|
|
300
|
+
// ```
|
|
301
|
+
optional MetricConnection connection = 5;
|
|
302
|
+
}
|