Releases: frequenz-floss/frequenz-sdk-python
v0.24.0
Frequenz Python SDK Release Notes
Summary
Now the microgrid API v0.15.x is being used. The SDK can only connect to microgrids using this version of the API. Inclusion and exclusion bounds in the new API are now handled by the power distributor and battery pool.
Upgrading
-
Upgrade to microgrid API v0.15.1. If you're using any of the lower level microgrid interfaces, you will need to upgrade your code.
-
The argument
conf_fileof theConfigManagingActorconstructor was renamed toconfig_path. -
The
BatteryPool.power_boundsmethod now streams inclusion/exclusion bounds. The bounds are now represented byPowerobjects and notfloats.
New Features
-
The
ConfigManagingActorconstructor now can accept apathlib.Pathasconfig_pathtoo (before it accepted only astr). -
The
PowerDistributingActornow considers exclusion bounds, when finding an optimal distribution for power between batteries.
What's Changed
- Use
Timer.periodicin theResamplerby @jh2007github in #520 - Allow running release notes check in merge queues by @llucax in #566
- Clear release notes by @llucax in #560
- Update
frequenz-api-microgridto v0.15.1 by @shsms in #416 - Improvements to the
ConfigManagingActorby @llucax in #565 - Bump brettcannon/check-for-changed-files from 294a99714e0d350b5083472a293d41bc91804e68 to 4170644959a21843b31f1181f2a1761d65ef4791 by @dependabot in #567
- Bump types-protobuf from 4.23.0.2 to 4.23.0.3 by @dependabot in #568
- Bump polars from 0.18.11 to 0.18.12 by @dependabot in #569
- Stream exclusion bounds from the battery pool by @shsms in #537
- Bump polars from 0.18.12 to 0.18.13 by @dependabot in #570
- Add docs cross-linking to APIs by @llucax in #571
- Support exclusion bounds in power distributor by @shsms in #562
- Update release notes for the v0.24.0 release by @llucax in #573
Full Changelog: v0.23.0...v0.24.0
v0.23.0
Frequenz Python SDK Release Notes
Summary
This release ships many small improvements and bug fixes to Quantitys. It also depends on channels v0.16.0, so users must update the dependency too.
Upgrading
Channelshas been upgraded to version 0.16.0, for information on how to upgrade please read the [channels v0.16.0 release notes](visit https://github.com/frequenz-floss/frequenz-channels-python/releases/tag/v0.16.0).Quantityobjects are no longer hashable. This is because of the pitfalls of hashingfloatvalues.
New Features
-
Quantities
- Add support for the unary negative operator (negation of a quantity).
- Add
abs(). - Add a
isclose()method on quantities to compare them to other values of the same type. BecauseQuantitytypes are just wrappers aroundfloats, direct comparison might not always be desirable. - Add
zero()constructor (which returns a singleton) to easily get a zero value. - Add multiplication by
Percentagetypes. - Add a new quantity class
Frequencyfor frequency values. - Add a new quantity class
Temperaturefor temperature values.
-
FormulaEnginearithmetics now supports scalar multiplication withfloats and addition withQuantitys. -
Add a new
temperaturemethod for streaming average temperature values for the battery pool.
Bug Fixes
- Fix formatting issue for
Quantityobjects with zero values. - Fix formatting issue for
Quantitywhen the base value fulfillsmath.isinf()ormath.isnan(). - Fix clamping to 100% for the battery pool SoC scaling calculation.
- Fix indexing for empty
MovingWindows (now it properly raises anIndexError).
What's Changed
- Bump polars from 0.18.4 to 0.18.5 by @dependabot in #486
- Add installation instructions by @llucax in #487
- Updated float("NaN") to math.nan by @jh2007github in #484
- Bump polars from 0.18.5 to 0.18.6 by @dependabot in #491
- Add methods for sending individual mock component data messages in tests by @shsms in #483
- Clear release notes by @llucax in #493
- Migrate to repo-config by @llucax in #488
- Bump actions/labeler from 4.2.0 to 4.3.0 by @dependabot in #496
- Bump time-machine from 2.10.0 to 2.11.0 by @dependabot in #497
- Bump black from 23.3.0 to 23.7.0 by @dependabot in #498
- Fix formatting bug for zero value Quantities by @shsms in #505
- Add quantity class
Frequencyby @Marenz in #506 - Add documentation on how to receive power request results by @Marenz in #507
- Bump pytest-asyncio from 0.21.0 to 0.21.1 by @dependabot in #510
- Bump polars from 0.18.6 to 0.18.7 by @dependabot in #509
- Update to channels 0.16.x by @jh2007github in #490
- Bump sybil from 5.0.2 to 5.0.3 by @dependabot in #513
- Support negation of quantities by @Marenz in #515
- Support float.inf and float.nan in quantities by @Marenz in #514
- Add from_receiver method to FormulaEngine by @matthias-wende-frequenz in #489
- Add abs() support for quantities by @Marenz in #516
- Bump mkdocs-material from 9.1.18 to 9.1.19 by @dependabot in #521
- Bump polars from 0.18.7 to 0.18.8 by @dependabot in #526
- Add capability to multiply quantities with percentage by @Marenz in #512
- Implement dunder iadd, isub, imul methods for Quantity by @shsms in #527
- Bump types-protobuf from 4.23.0.1 to 4.23.0.2 by @dependabot in #528
- Add constant to FormulaEngine arithmetic by @matthias-wende-frequenz in #525
- Quantity improvements by @shsms in #533
- Add BatteryStatus tests to ensure it recovers automatically after issues by @shsms in #522
- Nice error message for empty buffer and new test case by @jh2007github in #517
- Bump pylint from 2.17.4 to 2.17.5 by @dependabot in #539
- Update to repo-config v0.4.0 by @llucax in #540
- Bump mkdocs-material from 9.1.19 to 9.1.21 by @dependabot in #549
- Bump polars from 0.18.8 to 0.18.9 by @dependabot in #553
- Bump polars from 0.18.9 to 0.18.11 by @dependabot in #554
- Add zero() constructor for Quantities by @llucax in #535
- Temperature streaming from the BatteryPool by @shsms in #552
- Add BatteryPool.temperature and quantity Temperature by @christianparpart in #485
- Update battery pool SoC calculation by @matthias-wende-frequenz in #557
- Add CI check that RELEASE_NOTES.md was updated by @Marenz in #544
- Prepare for release v0.23.0 by @llucax in #559
New Contributors
- @jh2007github made their first contribution in #484
Full Changelog: v0.22.0...v0.23.0
v0.22.1
Release Notes
Bug Fixes
- Fix formatting issue for
Quantityobjects with zero values.
What's Changed
Full Changelog: v0.22.0...v0.22.1
v0.22.0
Release Notes
Summary
New Quantity types! These types can have units (power, current, voltage, etc.) and are type- and unit-safe in the sense that users can't accidentally sum a power with a voltage, or a power in kW with a power in W.
Upgrading
-
Sampleobjects no longer holdfloats, but ratherQuantityor one of its subclasses, likePower,Current,Energy, etc. based on the type of values being streamed.sample: Sample[Power] = await battery_pool.power.new_receiver().receive() power: float = sample.value.as_watts()
-
BatteryPool.socnow streams values of typeSample[Quantity], andBatteryPool.capacitynow streams values of typeSample[Energy].battery_pool = microgrid.battery_pool() soc_sample: Sample[Quantity] = await battery_pool.soc.new_receiver().receive() soc: float = soc_sample.value.base_value capacity_sample: Sample[Energy] = await battery_pool.capacity.new_receiver().receive() capacity: float = soc_sample.value.as_watt_hours()
-
MicrogridApiClient.set_powerno longer returns aprotobuf.Emptyresult, but aNone. This won't affect you unless you are using the low level APIs of the SDK.
New Features
-
The logical meter has a new method that returns producer power, that is the sum of all energy producers.
-
Quantitytypes (Power,Current,Energy,Voltage) for providing type- and unit-safety when dealing with physical quantities.
Bug Fixes
-
Two bugs in the ring buffer which is used by the
MovingWindowclass were fixed:len(buffer)was not considering potentially existing gaps (areas without elements) in the buffer.- A off-by-one error in the gap calculation logic was fixed that recorded a gap when there was none if an element with a future timestamp was added that would create a gap of exactly 1.
-
A formula engine lifetime issue, when creating higher order formula receivers without holding on to a reference to the engine, was fixed.
What's Changed
- Clear release notes by @leandro-lucarella-frequenz in #423
- Bump polars from 0.18.0 to 0.18.2 by @dependabot in #432
- Bump pytest from 7.3.1 to 7.3.2 by @dependabot in #431
- Add more unit tests for PeriodicFeatureExtractor by @cwasicki in #375
- Enhance battery pool documentation by @matthias-wende-frequenz in #425
- Fix seconds in MovingWindow doc example by @cwasicki in #437
- Add
--diffas a default argument forisortby @shsms in #438 - Bump mkdocs-material from 9.1.15 to 9.1.16 by @dependabot in #439
- Add producer power formula by @matthias-wende-frequenz in #444
- Bump polars from 0.18.2 to 0.18.3 by @dependabot in #448
- Bump pytest-mock from 3.10.0 to 3.11.1 by @dependabot in #440
- Bump time-machine from 2.9.0 to 2.10.0 by @dependabot in #447
- Add Quantity types and update formulas to produce typed Samples by @shsms in #422
- Bump mypy from 1.3.0 to 1.4.0 by @dependabot in #458
- Remove example programs for internal components by @shsms in #453
- Expose only usable SoC and Capacity through the BatteryPool by @shsms in #459
- Bump polars from 0.18.3 to 0.18.4 by @dependabot in #464
- Bump pytest from 7.3.2 to 7.4.0 by @dependabot in #463
- Bump mkdocs-material from 9.1.16 to 9.1.17 by @dependabot in #461
- Bump mypy from 1.4.0 to 1.4.1 by @dependabot in #462
- Fix ring buffer len by @Marenz in #445
- Disable default constructor in specialized
Quantitytypes by @shsms in #465 - A
Percentagequantity by @shsms in #470 - Bump actions/labeler from 4.0.4 to 4.2.0 by @dependabot in #471
- Fix broken reference to
ResamplingFunctionin documentation by @Marenz in #472 - Limit pydantic to v1 by @shsms in #474
- Remove unused
JUNCTIONandLOADcomponent categories by @shsms in #467 - Fix release notes and add a summary by @llucax in #476
- Bump mkdocs-material from 9.1.17 to 9.1.18 by @dependabot in #481
- Store a reference to the engine in receiver objects by @shsms in #478
New Contributors
Full Changelog: v0.21.1...v0.22.0
v0.16.2
Release Notes
Bug Fixes
- Ping
pypanticversion to< 2.
What's Changed
Full Changelog: v0.16.1...v0.16.2
v0.21.1
Release Notes
Note
Please note that even when there is a v0.21.0 tag in the project's repository, there is no public release for v0.21.0 in GitHub or pypi.
This is due to a bug in the automation to create releases for new tags in v0.21.0. This release is exactly the same as v0.21.0 but with that bug fixed, so the full changes introduced by v0.21.0 are included here.
Summary
This release mainly introduces the new PeriodicFeatureExtractor, the control interface to the BatteryPool, and a new naming scheme for retrieving LogicalMeter and BatteryPool metrics. It also drops support for Python versions older than 3.11.
Upgrading
-
Now Python 3.11 is the minimum supported version. All users must upgrade to Python 3.11 (including virtual environments used for development).
-
BatteryPoolmetric streaming interfaces have changed forsoc,capacityandpower_bounds:soc_rx = battery_pool.soc() # old soc_rx = battery_pool.soc.new_receiver() # new
-
Formulas now follow the new naming scheme.
BatteryPool.{power, production_power, consumption_power}EVChargerPool.{power, production_power, consumption_power}LogicalMeter:consumer_powergrid_powergrid_production_powergrid_consumption_powerchp_powerchp_production_powerchp_consumption_power
-
A power request can now be forced by setting the
include_broken_batteriesattribute. This is especially helpful as a safety measure when components appear to be failing, such as when battery metrics are unavailable. Note that applications previously relying on automatic fallback to all batteries when none of them was working will now require theinclude_broken_batteriesattribute to be explicitly set in the request. -
Now
floatis used everywhere for representing power (before power metrics werefloatbut setting power was done usingint).frequenz.sdk.actor.power_distributing: thepowerattribute of theRequestclass has been updated fromintto afloat.frequenz.sdk.microgrid: theset_power()method of both theMicrogridApiClientandMicrogridGrpcClientclasses now expect afloatvalue for thepower_wparameter instead ofint.
-
The
LogicalMeterno longer takes acomponent_graphparameter. -
Now
frequenz.sdk.timeseries.Sampleuses a more sensible comparison. Before this releaseSamples were compared only based on thetimestamp. This was due to a limitation in Python versions earlier than 3.10. Now that the minimum supported version is 3.11 this hack is not needed anymore andSamples are compared using bothtimestampandvalueas most people probably expects. -
The dependency to
sympywas unused and thus removed from the SDK. If you used it indirectly without declaring the dependency in your project you should do it now.
New Features
-
The
MovingWindowhas new public methods that return the oldest and newest timestamp of all stored samples. -
The
PeriodicFeatureExtractorhas been added.This is a tool to create certain profiles out of periodic reoccurring windows inside a
MovingWindow.As an example one can create a daily profile of specific weekdays which will be returned as numpy arrays.
-
The
BatteryPoolcan now be used to control the batteries in it via the new methodscharge(),discharge(), andset_power().
Bug Fixes
- Fixed many examples in the documentation.
What's Changed
- ci: Fix building of tags by @leandro-lucarella-frequenz in #426
Full Changelog: v0.21.0...v0.21.1
v0.20.0
Release Notes
Summary
The main feature in the release is the high-level interface. Now all base pipeline actors are created automatically when the SDK is initialized, and the wrapper classes can be accessed directly via frequenz.sdk.microgrid: logical_meter(), battery_pool() and ev_charger_pool().
Upgrading
-
Battery power is no longer available through the
LogicalMeter, but through theBatteryPool(#338)battery_power_receiver = microgrid.battery_pool().power.new_receiver()
-
Formulas composition has changed (#327)
- Receivers from formulas are no longer composable.
- Formula composition is now done by composing FormulaEngine instances.
- Automatic formulas from the logical meter and *pools, are now properties, and return
FormulaEngineinstances, which can be composed further, or can provide a receiver to fetch values.
grid_power_receiver = microgrid.logical_meter().grid_power.new_receiver() self._inverter_power = ( microgrid.logical_meter().pv_power + microgrid.battery_pool().power ).build("inverter_power") inverter_power_receiver = self._inverter_power.new_receiver()
-
Update
BatteryStatusto mark battery with unknown capacity as not working (#263) -
The channels dependency was updated to v0.14.0 (#292)
-
Some properties for
PowerDistributingActorresults were renamed to be more consistent betweenSuccessandPartialFailure:- The
Success.used_batteriesproperty was renamed tosucceeded_batteries. - The
PartialFailure.success_batteriesproperty was renamed tosucceeded_batteries. - The
succeed_powerproperty was renamed tosucceeded_powerfor bothSuccessandPartialFailure.
- The
-
MovingWindow-
The class is now publicly available in the
frequenz.sdk.timeseriespackage. -
Accept the
sizeparameter astimedeltainstead ofint(#269).This change allows users to define the time span of the moving window more intuitively, representing the duration over which samples will be stored.
-
The input data will be resampled if a
resampler_configis passed (#269).This allows controlling the granularity of the samples to be stored in the underlying buffer.
Note that the parameter
sampling_periodhas been renamed toinput_sampling_periodto better distinguish it from the sampling period parameter in theresampler_config. -
Rename the constructor argument
window_alignmenttoalign_toand change the default toUNIX_EPOCH. This is to make it more consistent with theResamplerConfig.
-
-
Resampler-
The
ResamplerConfigclass is now publicly available in thefrequenz.sdk.timeseriespackage. -
The
ResamplerConfignow takes the resampling period as atimedelta. The configuration was renamed fromresampling_period_storesampling_periodaccordingly. -
The
SourcePropertiesof the resampler now uses atimedeltafor the input sampling period. The attribute was renamed fromsampling_period_stosampling_periodaccordingly. -
The periods are now aligned to the
UNIX_EPOCHby default.To use the old behaviour (aligning to the time the resampler was created), pass
align_to=Noneto theResamplerConfig.
-
New Features
-
The core data-pipeline actors are now created automatically (#270).
This eliminates a lot of boiler plate code and makes it much simpler to deploy apps.
For example:
async def run(): await microgrid.initialize( host=HOST, port=PORT, resampler_config=ResamplerConfig(resampling_period_s=1.0) ) grid_power = microgrid.logical_meter().grid_power()
-
The
Resultclass (and subclasses) for thePowerDistributingActorare nowdataclasses, so logging them will produce a more detailed output. -
The
Resamplercan now can align the resampling period to an arbitrarydatetime.This can be configured via the new
align_tooption in theResamplerConfig. By default the resampling period is aligned to theUNIX_EPOCH.
Bug Fixes
-
Change
PowerDistributorto use all batteries when none are working (#258) -
Update the ordered ring buffer used by the
MovingWindowto fix thelen()function so that it returns a value equal to or greater than zero, as expected (#274)
What's Changed
- Power Distributing: Documentation enhancements by @mathias-baumann-frequenz in #257
- Clean release notes by @ela-kotulska-frequenz in #271
- Check battery capacity in BatteryStatus by @ela-kotulska-frequenz in #263
- Use all batteries when none are working in PowerDistributor by @ela-kotulska-frequenz in #258
- Configure dependabot to automated version updates by @daniel-zullo-frequenz in #268
- Bump pylint from 2.17.0 to 2.17.1 by @dependabot in #288
- Bump mypy from 1.0.1 to 1.1.1 by @dependabot in #286
- Bump actions/labeler from 4.0.1 to 4.0.3 by @dependabot in #279
- Bump pytest from 7.2.1 to 7.2.2 by @dependabot in #287
- Bump black from 23.1.0 to 23.3.0 by @dependabot in #284
- Update channels dependency to v0.14.0 by @mathias-baumann-frequenz in #295
- Various small fixes by @mathias-baumann-frequenz in #277
- Fix len() of the OrderedRingBuffer by @daniel-zullo-frequenz in #274
- Bump pytest-asyncio from 0.20.3 to 0.21.0 by @dependabot in #281
- Bump mkdocstrings[python] from 0.19.1 to 0.20.0 by @dependabot in #283
- Update networkx requirement from <3,>=2.8 to >=2.8,<4 by @dependabot in #282
- Bump mkdocs-material from 8.5.11 to 9.1.5 by @dependabot in #298
- Add a
DataPipelineimplementation by @shsms in #270 - Bump pylint from 2.17.1 to 2.17.2 by @dependabot in #300
- Use a bigger request receiver buffer size in data pipeline actors by @shsms in #302
- Refactor power distributor's
Results by @leandro-lucarella-frequenz in #305 - Bump mkdocstrings[python] from 0.20.0 to 0.21.1 by @dependabot in #308
- Add
component_datamethod to EVChargerPool by @shsms in #266 - benchmark data sourcing actor by @mathias-baumann-frequenz in #211
- Add ringbuffer memory benchmark by @mathias-baumann-frequenz in #278
- Update MovingWindow to add resampler by @daniel-zullo-frequenz in #272
- Bump mkdocs-material from 9.1.5 to 9.1.6 by @dependabot in #312
- Add a
EVChargerPool.set_boundsmethod for setting current bounds by @shsms in #297 - Bump mkdocstrings[python] from 0.21.1 to 0.21.2 by @dependabot in #309
- Bump pytest from 7.2.2 to 7.3.0 by @dependabot in #313
- Bump mypy from 1.1.1 to 1.2.0 by @dependabot in #310
- Add BatteryPool and PowerDistributingActor to the DataPipeline by @sahas-subramanian-frequenz in #317
- Expose BatteryPool and PowerDistributingHandle from
sdk.microgridby @sahas-subramanian-frequenz in #323 - Fix ring buffer benchmarks by @daniel-zullo-frequenz in #324
- Make interface for serializing a ringbuffer more flexible. by @mathias-baumann-frequenz in #326
- Ringbuffer: Moved files into a package by @mathias-baumann-frequenz in #329
- Update
BatteryPooltests, examples to usemicrogrid.battery_pool()by @sahas-subramanian-frequenz in #336 - Bump pytest from 7.3.0 to 7.3.1 by @dependabot in #339
- Make the resampler use timedelta for periods by @leandro-lucarella-frequenz in #334
- Bump frequenz-floss/setup-git-user from 1 to 2 by @dependabot in #345
- Make FormulaEngine instances composable, instead of FormulaReceivers by @sahas-subramanian-frequenz in #327
- Add
powerformula toBatteryPoolby @sahas-subramanian-frequenz in https://github.com/fr...
v0.19.0
Release Notes
Summary
Upgrading
- Remove
_socformula from the LogicalMeter. This feature has been moved to the BatteryPool. - Upgrade PowerDistributingActor to handle components with the NaN metrics (#247):
- if power bounds are NaN, then it tries to replace them with corresponding power bounds from adjacent component. If these components are also NaN, then it ignores battery.
- if other metrics metrics are NaN then it ignores battery.
- BatteryStatus to track that a component stopped sending messages. If the battery or its adjacent inverter stopped sending messages, then the battery would be considered as not working. (#207)
- PowerDistributing to send battery status to subscribed users (#205)
- Rename microgrid.Microgrid to microgrid.ConnectionManager (#208)
- Change few resampler logs from info to debug, because they were polluting startup logs (#238)
New Features
- A new class
SerializableRingbufferis now available, extending theOrderedRingBufferclass with the ability to load & dump the data to disk. - Add the
run(*actors)function for running and synchronizing the execution of actors. This new function simplifies the way actors are managed on the client side, allowing for a cleaner and more streamlined approach. Users/apps can now run actors simply by calling run(actor1, actor2, actor3...) without the need to manually call join() and deal with linting errors. - The datasourcing actor now automatically closes all sending channels when the input channel closes.
- BatteryPool implementation for aggregating battery-inverter metrics into higher level metrics. (#205)
- Add EV power and current streams to
EVChargerPool(#201)
Bug Fixes
- The resampler now correctly produces resampling windows of exact resampling period size, which only include samples emitted during the resampling window (see #170)
Removing
- Deprecated code (#232):
- frequenz.sdk._data_ingestion
- frequenz.sdk._data_handling
- The pandas(-stubs) and pytz dependencies are no longer needed (#261).
What's Changed
- Serializing Ringbuffer by @mathias-baumann-frequenz in #167
- Rename microgrid.Microgrid to microgrid.ConnectionManager and its Insecure-companion by @christianparpart in #208
- Add EV power and current streams to
EVChargerPoolby @shsms in #201 - Change battery status when component stopped sending data by @ela-kotulska-frequenz in #207
- Remove deprecated code by @ela-kotulska-frequenz in #232
- Fix mypy invocation in noxfile by @leandro-lucarella-frequenz in #219
- Add wrappers for the component data in unit tests by @ela-kotulska-frequenz in #231
- Fix flaky LogicalMeter test_soc by @ela-kotulska-frequenz in #235
- Update MockMicrogrid for use with datasourcing benchmark by @mathias-baumann-frequenz in #224
- Change few resampler logs from info to debug by @ela-kotulska-frequenz in #238
- Add a run() method to run/wait for actors completion by @daniel-zullo-frequenz in #200
- Add & use close channel method in the registry by @mathias-baumann-frequenz in #225
- Add BatteryPool implementation for aggregating battery-inverter data by @ela-kotulska-frequenz in #205
- Remove
_socformula from the LogicalMeter by @ela-kotulska-frequenz in #248 - Increase sampling rate in the flaky formula test by @ela-kotulska-frequenz in #251
- Make resampling window size constant by @leandro-lucarella-frequenz in #236
- Change PowerDistributor to ignore components with NaN metrics by @ela-kotulska-frequenz in #247
- Update release notes by @ela-kotulska-frequenz in #252
- Pin dev/test dependencies by @daniel-zullo-frequenz in #256
- Fix resampler behaviour when resampling is to late by @ela-kotulska-frequenz in #255
- Change BatteryPool to send metrics only when they change by @ela-kotulska-frequenz in #254
- Remove pandas(-stubs) dependencies by @daniel-zullo-frequenz in #261
New Contributors
- @christianparpart made their first contribution in #208
Full Changelog: v0.18.0...v0.19.0
v0.16.1
Release Notes
Bug Fixes
- Fix battery status logic: inverter that was discharging was considered as not working. So it was impossible to set any command until its state changed.
What's Changed
- Fix bug in battery status by @ela-kotulska-frequenz in #237
- Update release notes by @ela-kotulska-frequenz in #244
Full Changelog: v0.16.0...v0.16.1
v0.18.0
Release Notes
Summary
Upgrading
New Features
- A new class
OrderedRingBufferis now available, providing a sorted ring buffer of datetime-value pairs with tracking of any values that have not yet been written. - Add logical meter formula for EV power.
- A
MovingWindowclass has been added that consumes a data stream from a logical meter and updates anOrderedRingBuffer. - Add EVChargerPool implementation. It has only streaming state changes for ev chargers, now.
- Add 3-phase current formulas:
3-phase grid_currentand3-phase ev_charger_currentto the LogicalMeter.
Bug Fixes
- Add COMPONENT_STATE_DISCHARGING as valid state for the inverter. DISCHARGING state was missing by mistake and this caused the power distributor to error out if the inverter is already discharging.
What's Changed
- Clean release notes by @ela-kotulska-frequenz in #179
- Add 3-phase current formulas by @shsms in #164
- Sorted Ringbuffer by @mathias-baumann-frequenz in #139
- Use MockMicrogridClient instead of a MockMicrogridServer in LogicalMeter tests by @shsms in #180
- Battery status with channel communication by @ela-kotulska-frequenz in #171
- Update code to pass newly-released
black v23.1.0by @shsms in #192 - Update to work with newly-release
pylint v2.16by @shsms in #193 - Use
Sampletype with the RingBuffer by @mathias-baumann-frequenz in #186 - Add logical meter formula generator for EV power by @daniel-zullo-frequenz in #185
- Add an
EVChargerPoolimplementation by @shsms in #194 - Add 3.11 to the supported Python versions by @leandro-lucarella-frequenz in #195
- Add a Moving Window Class by @matthias-wende-frequenz in #190
- Move dev dependencies to pyproject.toml by @leandro-lucarella-frequenz in #199
- Add COMPONENT_STATE_DISCHARGING to valid inverter states by @ela-kotulska-frequenz in #202
New Contributors
- @matthias-wende-frequenz made their first contribution in #190
Full Changelog: v0.17.0...v0.18.0