frequenz-api-common 0.6.4__tar.gz → 0.7.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.
Files changed (89) hide show
  1. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/MANIFEST.in +1 -1
  2. {frequenz-api-common-0.6.4/py/frequenz_api_common.egg-info → frequenz_api_common-0.7.0}/PKG-INFO +29 -3
  3. frequenz_api_common-0.7.0/RELEASE_NOTES.md +124 -0
  4. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/grid/delivery_area.proto +1 -1
  5. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/market/energy.proto +6 -6
  6. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1/market/power.proto +30 -0
  7. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/metrics/metric_sample.proto +14 -0
  8. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/components/components.proto +1 -2
  9. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1/microgrid/lifetime.proto +41 -0
  10. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/microgrid.proto +6 -0
  11. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1/pagination/pagination_params.proto +31 -0
  12. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/grid/delivery_area.proto +62 -0
  13. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/grid/delivery_duration.proto +61 -0
  14. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/market/energy.proto +24 -0
  15. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/market/power.proto +30 -0
  16. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/market/price.proto +53 -0
  17. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/metrics/bounds.proto +23 -0
  18. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/metrics/metrics.proto +302 -0
  19. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/microgrid/communication_components/communication_components.proto +199 -0
  20. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/microgrid/electrical_components/electrical_components.proto +800 -0
  21. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/microgrid/lifetime.proto +41 -0
  22. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/microgrid/microgrid.proto +88 -0
  23. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/microgrid/sensors/sensors.proto +188 -0
  24. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/pagination/pagination_info.proto +27 -0
  25. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/pagination/pagination_params.proto +31 -0
  26. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/streaming/event.proto +26 -0
  27. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/type/decimal.proto +25 -0
  28. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/type/interval.proto +35 -0
  29. frequenz_api_common-0.7.0/proto/frequenz/api/common/v1alpha7/type/location.proto +22 -0
  30. frequenz_api_common-0.7.0/py/frequenz/api/common/metrics/__init__.py +4 -0
  31. {frequenz-api-common-0.6.4/py/frequenz/api/common/metrics → frequenz_api_common-0.7.0/py/frequenz/api/common/v1}/__init__.py +1 -1
  32. {frequenz-api-common-0.6.4/py/frequenz/api/common/v1/market → frequenz_api_common-0.7.0/py/frequenz/api/common/v1/grid}/__init__.py +1 -1
  33. frequenz_api_common-0.7.0/py/frequenz/api/common/v1/market/__init__.py +4 -0
  34. frequenz_api_common-0.7.0/py/frequenz/api/common/v1/metrics/__init__.py +4 -0
  35. frequenz_api_common-0.7.0/py/frequenz/api/common/v1/microgrid/__init__.py +4 -0
  36. frequenz_api_common-0.7.0/py/frequenz/api/common/v1/microgrid/components/__init__.py +4 -0
  37. frequenz_api_common-0.7.0/py/frequenz/api/common/v1/microgrid/sensors/__init__.py +4 -0
  38. frequenz_api_common-0.7.0/py/frequenz/api/common/v1/pagination/__init__.py +4 -0
  39. {frequenz-api-common-0.6.4/py/frequenz/api/common/v1/metrics → frequenz_api_common-0.7.0/py/frequenz/api/common/v1/types}/__init__.py +1 -1
  40. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/__init__.py +4 -0
  41. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/grid/__init__.py +4 -0
  42. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/market/__init__.py +4 -0
  43. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/metrics/__init__.py +4 -0
  44. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/microgrid/__init__.py +4 -0
  45. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/microgrid/communication_components/__init__.py +4 -0
  46. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/microgrid/electrical_components/__init__.py +4 -0
  47. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/microgrid/sensors/__init__.py +4 -0
  48. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/pagination/__init__.py +4 -0
  49. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/streaming/__init__.py +4 -0
  50. frequenz_api_common-0.7.0/py/frequenz/api/common/v1alpha7/type/__init__.py +4 -0
  51. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0/py/frequenz_api_common.egg-info}/PKG-INFO +29 -3
  52. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/py/frequenz_api_common.egg-info/SOURCES.txt +30 -1
  53. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/py/frequenz_api_common.egg-info/requires.txt +17 -17
  54. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/py/frequenz_api_common.egg-info/top_level.txt +0 -1
  55. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/pyproject.toml +39 -23
  56. frequenz-api-common-0.6.4/RELEASE_NOTES.md +0 -9
  57. frequenz-api-common-0.6.4/proto/frequenz/api/common/v1/microgrid/lifetime.proto +0 -28
  58. frequenz-api-common-0.6.4/proto/frequenz/api/common/v1/pagination/pagination_params.proto +0 -26
  59. frequenz-api-common-0.6.4/py/conftest.py +0 -13
  60. frequenz-api-common-0.6.4/py/frequenz/api/common/__init__.py +0 -7
  61. frequenz-api-common-0.6.4/py/frequenz/api/common/v1/grid/__init__.py +0 -0
  62. frequenz-api-common-0.6.4/py/frequenz/api/common/v1/microgrid/__init__.py +0 -0
  63. frequenz-api-common-0.6.4/py/frequenz/api/common/v1/microgrid/components/__init__.py +0 -0
  64. frequenz-api-common-0.6.4/py/frequenz/api/common/v1/microgrid/sensors/__init__.py +0 -0
  65. frequenz-api-common-0.6.4/py/frequenz/api/common/v1/pagination/__init__.py +0 -4
  66. frequenz-api-common-0.6.4/py/frequenz/api/common/v1/types/__init__.py +0 -0
  67. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/LICENSE +0 -0
  68. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/README.md +0 -0
  69. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/components.proto +0 -0
  70. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/location.proto +0 -0
  71. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/metrics/electrical.proto +0 -0
  72. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/metrics.proto +0 -0
  73. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/grid/delivery_duration.proto +0 -0
  74. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/location.proto +0 -0
  75. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/market/price.proto +0 -0
  76. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/metrics/bounds.proto +0 -0
  77. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/components/battery.proto +0 -0
  78. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/components/ev_charger.proto +0 -0
  79. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/components/fuse.proto +0 -0
  80. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/components/grid.proto +0 -0
  81. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/components/inverter.proto +0 -0
  82. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/components/transformer.proto +0 -0
  83. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/microgrid/sensors/sensors.proto +0 -0
  84. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/pagination/pagination_info.proto +0 -0
  85. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/proto/frequenz/api/common/v1/types/decimal.proto +0 -0
  86. {frequenz-api-common-0.6.4/py/frequenz/api/common/v1 → frequenz_api_common-0.7.0/py/frequenz/api/common}/__init__.py +0 -0
  87. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/py/frequenz/api/common/py.typed +0 -0
  88. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/py/frequenz_api_common.egg-info/dependency_links.txt +0 -0
  89. {frequenz-api-common-0.6.4 → frequenz_api_common-0.7.0}/setup.cfg +0 -0
@@ -6,7 +6,7 @@ exclude CODEOWNERS
6
6
  exclude CONTRIBUTING.md
7
7
  exclude mkdocs.yml
8
8
  exclude noxfile.py
9
- exclude src/conftest.py
9
+ exclude py/frequenz/api/common/conftest.py
10
10
  recursive-exclude .github *
11
11
  recursive-exclude benchmarks *
12
12
  recursive-exclude docs *
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: frequenz-api-common
3
- Version: 0.6.4
3
+ Version: 0.7.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
@@ -18,15 +18,41 @@ Classifier: Topic :: Software Development :: Libraries
18
18
  Classifier: Typing :: Typed
19
19
  Requires-Python: <4,>=3.11
20
20
  Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: protobuf<8,>=6.31.1
23
+ Requires-Dist: grpcio<2,>=1.72.1
21
24
  Provides-Extra: dev-flake8
25
+ Requires-Dist: flake8==7.2.0; extra == "dev-flake8"
26
+ Requires-Dist: flake8-docstrings==1.7.0; extra == "dev-flake8"
27
+ Requires-Dist: flake8-pyproject==1.2.3; extra == "dev-flake8"
28
+ Requires-Dist: pydoclint==0.6.6; extra == "dev-flake8"
29
+ Requires-Dist: pydocstyle==6.3.0; extra == "dev-flake8"
22
30
  Provides-Extra: dev-formatting
31
+ Requires-Dist: black==25.1.0; extra == "dev-formatting"
32
+ Requires-Dist: isort==6.0.1; extra == "dev-formatting"
23
33
  Provides-Extra: dev-mkdocs
34
+ Requires-Dist: mike==1.1.2; extra == "dev-mkdocs"
35
+ Requires-Dist: mkdocs-gen-files==0.5.0; extra == "dev-mkdocs"
36
+ Requires-Dist: mkdocs-literate-nav==0.6.2; extra == "dev-mkdocs"
37
+ Requires-Dist: mkdocs-material==9.6.14; extra == "dev-mkdocs"
38
+ Requires-Dist: mkdocstrings[python]==0.29.1; extra == "dev-mkdocs"
39
+ Requires-Dist: frequenz-repo-config[api]==0.13.5; extra == "dev-mkdocs"
24
40
  Provides-Extra: dev-mypy
41
+ Requires-Dist: mypy==1.16.0; extra == "dev-mypy"
42
+ Requires-Dist: grpc-stubs==1.53.0.6; extra == "dev-mypy"
43
+ Requires-Dist: frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
25
44
  Provides-Extra: dev-noxfile
45
+ Requires-Dist: nox==2025.5.1; extra == "dev-noxfile"
46
+ Requires-Dist: frequenz-repo-config[api]==0.13.5; extra == "dev-noxfile"
26
47
  Provides-Extra: dev-pylint
48
+ Requires-Dist: pylint==3.3.7; extra == "dev-pylint"
49
+ Requires-Dist: frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
27
50
  Provides-Extra: dev-pytest
51
+ Requires-Dist: pytest==8.3.5; extra == "dev-pytest"
52
+ Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.13.5; extra == "dev-pytest"
28
53
  Provides-Extra: dev
29
- License-File: LICENSE
54
+ Requires-Dist: frequenz-api-common[dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest]; extra == "dev"
55
+ Dynamic: license-file
30
56
 
31
57
  # Frequenz Common API
32
58
 
@@ -0,0 +1,124 @@
1
+ # Frequenz Common API Release Notes
2
+
3
+ ## Summary
4
+
5
+ This release introduces several breaking changes, new features, and improvements to the existing API. The most significant changes include renaming and restructuring of the `components` package to `electrical_components`, the introduction of new diagnostic codes, and the addition of new messages for communication components and streaming events.
6
+
7
+ ## Upgrading
8
+
9
+ - Removed:
10
+
11
+ + `microgrid.components.ComponentStatus`, use `microgrid.electrical_components.ElectricalComponentControlMode` instead
12
+ + `ComponentErrorCode.UNDERVOLTAGE_SHUTDOWN`, use `ElectricalComponentDiagnosticCode.UNDERVOLTAGE` instead
13
+ + `microgrid.sensors.SensorMetric`, use `metrics.Metric` instead
14
+ + `microgrid.sensors.SensorMetricSample`, use `metrics.MetricSample` instead
15
+ + `microgrid.sensors.SensorCategory`, since it was not useful and potentially confusing
16
+
17
+ Sensors can report different sensor metrics, and they could belong to several of these categories simultaneously. This defeats the purpose of having singular categories for sensors. Some more useful categorization may be introduced again in the future.
18
+
19
+ - Renamed several symbols to increase consistency and clarity:
20
+
21
+ + `microgrid.components`:
22
+
23
+ * The whole package and all proto files, messages, field, enums were renamed to `electrical_components`
24
+ * `ComponentCategoryMetadataVariant` to `ElectricalComponentCategorySpecificInfo`
25
+ * `ComponentCategory` to `ElectricalComponentCategory`
26
+ * `Component.category_type` to `ElectricalComponent.category_specific_info`
27
+ * `ComponentCategoryMetadataVariant.metadata` to `ElectricalComponentCategorySpecificInfo.kind`
28
+ * `ComponentErrorCode` to `ElectricalComponentDiagnosticCode`
29
+ * `ComponentState` to `ElectricalComponentStateSnapshot`
30
+ * `ComponentState.sampled_at` to `ElectricalComponentStateSnapshot.origin_time`
31
+ * `ComponentData` to `ElectricalComponentTelemetry` (to better specify its purpose of encapsulating general telemetry data from electrical components)
32
+ * `ComponentData.states` to `ElectricalComponentTelemetry.state_snapshots`
33
+ * Grid-related terms to clarify their meaning and purpose:
34
+
35
+ + `COMPONENT_CATEGORY_GRID` to `ELECTRICAL_COMPONENT_CATEGORY_GRID_CONNECTION_POINT`
36
+ + `ComponentCategoryMetadataVariant.metadata.grid` to `ElectricalComponentCategorySpecificInfo.kind.grid_connection_point`
37
+ * `InverterType.INVERTER_TYPE_SOLAR` to `InverterType.INVERTER_TYPE_PV` (to align with the more colloquial term "PV inverter")
38
+ * `ComponentCategory.COMPONENT_CATEGORY_RELAY` to `ElectricalComponentCategory.ELECTRICAL_COMPONENT_CATEGORY_BREAKER` (to better align with the common terminology used in electrical engineering).
39
+ * All contents of all the files in the `electrical_components` directory (previously `components`) are now moved into the `electrical_components.proto` file.
40
+
41
+ + `microgrid.sensors`:
42
+
43
+ * `SensorErrorCode` to `SensorDiagnosticCode`
44
+ * `SensorData` to `SensorTelemetry` (to better specify its purpose of encapsulating general telemetry data from sensors)
45
+ * `SensorState` to `SensorStateSnapshot`
46
+ * `SensorData.states` to `SensorTelemetry.state_snapshots`
47
+ * `SensorState.sampled_at` to `SensorStateSnapshot.origin_time`
48
+ * `SensorStateCode.SENSOR_STATE_CODE_ON` to `SensorStateCode.SENSOR_STATE_CODE_OK` (to better indicate that we do not control on/off state of sensors)
49
+
50
+ + `metrics`:
51
+
52
+ * The file `metric_sample.proto` to `metrics.proto`
53
+ * `MetricSample.source` to `MetricSample.connection`
54
+ * `MetricSample.sampled_at` to `sample_time`
55
+
56
+ + `metrics.Metric`:
57
+
58
+ * The enum variants to follow a more consistent naming scheme of core-concept to modifier.
59
+ * `METRIC_AC_APPARENT_POWER*` to `METRIC_AC_POWER_APPARENT*`
60
+ * `METRIC_AC_ACTIVE_POWER*` to `METRIC_AC_POWER_ACTIVE*`
61
+ * `METRIC_AC_REACTIVE_POWER*` to `METRIC_AC_POWER_REACTIVE*`
62
+ * `METRIC_AC_APPARENT_ENERGY*` to `METRIC_AC_ENERGY_APPARENT*`
63
+ * `METRIC_AC_ACTIVE_ENERGY*` to `METRIC_AC_ENERGY_ACTIVE*`
64
+ * `METRIC_AC_REACTIVE_ENERGY*` to `METRIC_AC_ENERGY_REACTIVE*`
65
+
66
+ + `types`:
67
+
68
+ * The whole package has been renamed to `type`.
69
+
70
+ - Renumbered some enum values to remove unnecessary gaps:
71
+
72
+ + `microgrid.components.ComponentCategory` (`microgrid.electrical_components.ElectricalComponentCategory`)
73
+ + `microgrid.components.ComponentErrorCode` (`microgrid.electrical_components.ElectricalComponentDiagnosticCode`)
74
+ + `metrics.Metric`
75
+
76
+ - The minimum allowed version of `protobuf` and `grpcio` has been updated to 6.31.1 and 1.72.1 respectively, you might also need to bump your dependencies accordingly.
77
+
78
+ - The file `location.proto` has been moved to the `types` package, moving the message `Location` to `types.Location`.
79
+
80
+ - The type of the field `metrics.MetricSample.connection` has been changed from `string` to `metrics.MetricConnection`. The latter is a newly added message that provides a better categorization of the connection type.
81
+
82
+ - The `v1` package has been renamed to `v1alpha7`. The current `v1` package now consists of the contents the same directory from the v0.6.x branch, which is the latest stable version of the API.
83
+
84
+ - The enum `ComponentCategory` (now `ElectricalComponentCategory`) has been extended with new variants.
85
+
86
+ ## New Features
87
+
88
+ Added many new messages and enum values:
89
+
90
+ - `microgrid.communication_components`: Package with message definitions for communication components
91
+
92
+ + `CommunicationComponentDiagnostic`: Message to represent warnings and errors in microgrid communication components
93
+ + `CommunicationComponentStateSnapshot`: Message to represent the state of communication components
94
+
95
+ - `microgrid.electrical_components` (previously `microgrid.components`)
96
+
97
+ + `ElectricalComponentDiagnostic`: Message to represent warnings and errors in microgrid electrical components
98
+ + `ElectricalComponentDiagnosticCode` (previously `ComponentErrorCode`): New diagnostic codes to cover more cases, especially for inverters
99
+ + `InverterType.INVERTER_TYPE_WIND_TURBINE`: Enum value to represent wind turbine inverters
100
+
101
+ - `microgrid.ElectricalComponentCategory` (previously `microgrid.ComponentCategory`) has been extended with new enum values:
102
+ + `ELECTRICAL_COMPONENT_CATEGORY_PLC`
103
+ + `ELECTRICAL_COMPONENT_CATEGORY_STATIC_TRANSFER_SWITCH`
104
+ + `ELECTRICAL_COMPONENT_CATEGORY_UNINTERRUPTIBLE_POWER_SUPPLY`
105
+ + `ELECTRICAL_COMPONENT_CATEGORY_CAPACITOR_BANK`
106
+ + `ELECTRICAL_COMPONENT_CATEGORY_SMART_LOAD`
107
+ + `ELECTRICAL_COMPONENT_CATEGORY_WIND_TURBINE`
108
+
109
+ - `microgrid.sensors`
110
+
111
+ + Message linking microgrid and sensor IDs
112
+ + `SensorDiagnostic`: Message to represent warnings and errors in microgrid sensors
113
+ + Added warnings to sensor `SensorState`
114
+
115
+ - `streaming`: Package with message definitions for streaming events
116
+
117
+ + `Event`: Enum to represent different types of streaming events (Created, Deleted, Updated)
118
+
119
+ - `types`
120
+
121
+ + `Interval`: Message to standardize time interval filtering across APIs
122
+
123
+ This uses `start_time` (inclusive) and `end_time` (exclusive) fields, aligning with ISO 8601 and common programming conventions.
124
+
@@ -1,4 +1,4 @@
1
- // Frequenz definitions of grids as entites participating in trading.
1
+ // Frequenz definitions of grids as entities participating in trading.
2
2
  //
3
3
  // Copyright 2023 Frequenz Energy-as-a-Service GmbH
4
4
  //
@@ -1,4 +1,4 @@
1
- // Frequenz definitions of energy for electricity trading.
1
+ // Frequenz definitions of energy.
2
2
  //
3
3
  // Copyright 2023 Frequenz Energy-as-a-Service GmbH
4
4
  //
@@ -14,11 +14,11 @@ import "frequenz/api/common/v1/types/decimal.proto";
14
14
  // Represents a single unit of electricity.
15
15
  //
16
16
  // !!! note
17
- // In these trading orders, the unit of energy is denominated in MWh
18
- // (Megawatt-hours) as opposed to MW (Megawatts). MWh is a unit of energy
19
- // representing total output over a period, while MW is a unit of power that
20
- // represents the rate of energy production or consumption.
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
21
  message Energy {
22
- // Represents energy unit in Megawatthours (MWh).
22
+ // Energy unit in Megawatthours (MWh).
23
23
  frequenz.api.common.v1.types.Decimal mwh = 1;
24
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.v1.market;
11
+
12
+ import "frequenz/api/common/v1/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.v1.types.Decimal mw = 1;
30
+ }
@@ -63,6 +63,20 @@ message MetricValueVariant {
63
63
  }
64
64
 
65
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.
66
80
  enum Metric {
67
81
  // Default value.
68
82
  METRIC_UNSPECIFIED = 0;
@@ -24,8 +24,7 @@ import "google/protobuf/timestamp.proto";
24
24
 
25
25
  // Enumrated component categories.
26
26
  enum ComponentCategory {
27
- // An unknown component categories, useful for error handling, and marking
28
- // unknown components in a list of components with otherwise known categories.
27
+ // The component category is unspecified. This should not be used.
29
28
  COMPONENT_CATEGORY_UNSPECIFIED = 0;
30
29
 
31
30
  // The point where the local microgrid is connected to the grid.
@@ -0,0 +1,41 @@
1
+ // Frequenz definition of entity lifetimes, based upon start and end timestamps.
2
+ //
3
+ // Copyright 2023 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.v1.microgrid;
11
+
12
+ import "google/protobuf/timestamp.proto";
13
+
14
+ // Lifetime captures the timestamps indicating the active operational period of
15
+ // a microgrid asset, such as a component, connection, sensor, or any other
16
+ // entity with a limited operational lifetime.
17
+ //
18
+ // It is normally used to track the historical evolution of assets, and it
19
+ // determines the validity period for the asset's data.
20
+ //
21
+ // If the `start_timestamp` is not set, the asset is considered to be in
22
+ // operation since the beginning of the system's operational history.
23
+ //
24
+ // If the `end_timestamp` is not set, the asset is considered to be in
25
+ // operation indefinitely into the future.
26
+ //
27
+ // If the Lifetime message is completely missing, it means both timestamps are
28
+ // not set, which means the asset is considered to be in operation since the
29
+ // beginning of the system's operational history and indefinitely into the
30
+ // future.
31
+ message Lifetime {
32
+ // The timestamp when the asset became operationally active.
33
+ // If not set, the asset is considered to be in operation since the beginning
34
+ // of the system's operational history.
35
+ google.protobuf.Timestamp start_timestamp = 1;
36
+
37
+ // Optional timestamp when the asset's operational activity ceased.
38
+ // If not set, the asset is considered to be in operation indefinitely into
39
+ // the future.
40
+ google.protobuf.Timestamp end_timestamp = 2;
41
+ }
@@ -51,9 +51,15 @@ message Microgrid {
51
51
 
52
52
  // The delivery area where the microgrid is located, as identified by a
53
53
  // specific code.
54
+ //
55
+ // If a microgrid is not connected to the grid (it is an island) it does not
56
+ // belong to any delivery area and this field will be missing, but it could
57
+ // be missing for other reasons as well.
54
58
  frequenz.api.common.v1.grid.DeliveryArea delivery_area = 4;
55
59
 
56
60
  // Physical location of the microgrid, in geographical co-ordinates.
61
+ //
62
+ // If the location is not known, this field will be missing.
57
63
  frequenz.api.common.v1.Location location = 5;
58
64
 
59
65
  // The current status of the microgrid.
@@ -0,0 +1,31 @@
1
+ // Parameters for pagination.
2
+ //
3
+ // Copyright 2023 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.v1.pagination;
11
+
12
+ // A message defining parameters for paginating list requests.
13
+ // It can be appended to a request message to specify the desired page of
14
+ // results and the maximum number of results per page.
15
+ message PaginationParams {
16
+ oneof params {
17
+ // The maximum number of results to return in a single page. The service may
18
+ // return fewer results than requested. If unspecified, the service may
19
+ // choose a reasonable default.
20
+ // May only be specified in the first request.
21
+ uint32 page_size = 1;
22
+
23
+ // A token identifying a page of results to return. This should be the value
24
+ // of the `next_page_token` field in the previous response's PaginationInfo.
25
+ // For the first request, this field should be omitted.
26
+ //
27
+ // To avoid keeping remembering the page_size across requests, service
28
+ // implementations may choose to encode the page_size in the page_token.
29
+ string page_token = 2;
30
+ }
31
+ }
@@ -0,0 +1,62 @@
1
+ // Frequenz definitions of grids as entities participating in trading.
2
+ //
3
+ // Copyright 2023 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.v1alpha7.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 2023 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.v1alpha7.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 2023 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.v1alpha7.market;
11
+
12
+ import "frequenz/api/common/v1alpha7/type/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.v1alpha7.type.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.v1alpha7.market;
11
+
12
+ import "frequenz/api/common/v1alpha7/type/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.v1alpha7.type.Decimal mw = 1;
30
+ }
@@ -0,0 +1,53 @@
1
+ // Frequenz definitions of price for electricity trading.
2
+ //
3
+ // Copyright 2023 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.v1alpha7.market;
11
+
12
+ import "frequenz/api/common/v1alpha7/type/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.v1alpha7.type.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 2023 Frequenz Energy-as-a-Service GmbH
5
+ //
6
+ // License:
7
+ // MIT
8
+
9
+ syntax = "proto3";
10
+
11
+ package frequenz.api.common.v1alpha7.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
+ }