Skip to content

Releases: frequenz-floss/frequenz-sdk-python

v1.0.0-rc603

09 Aug 15:51
v1.0.0-rc603
956823f

Choose a tag to compare

v1.0.0-rc603 Pre-release
Pre-release

Frequenz Python SDK Release Notes

Bug Fixes

  • Fixes a bug in the ring buffer in case the updated value is missing and creates a gap in time.

  • Fixed a bug that was causing the PowerDistributor to exit if power requests to PV inverters or EV chargers timeout.

What's Changed

  • Fix gap in ring buffer when updating missing values by @cwasicki in #1034
  • Fix exit-on-timeout issue in PowerDistributor by @shsms in #1035

Full Changelog: v1.0.0-rc602...v1.0.0-rc603

v1.0.0-rc602

31 Jul 21:18
v1.0.0-rc602
c9115e0

Choose a tag to compare

v1.0.0-rc602 Pre-release
Pre-release

Frequenz Python SDK Release Notes

Bug Fixes

  • Fix PV power distribution excluding inverters that haven't sent any data since the application started.

What's Changed

Full Changelog: v1.0.0-rc601...v1.0.0-rc602

v1.0.0rc701

25 Jul 10:13
v1.0.0rc701
a385257

Choose a tag to compare

v1.0.0rc701 Pre-release
Pre-release

Frequenz Python SDK Release Notes

Bug Fixes

  • Bump the grpclib dependency to pull a fix for using IPv6 addresses.

What's Changed

Full Changelog: v1.0.0rc700...v1.0.0rc701

v1.0.0rc700

21 Jun 12:02
v1.0.0rc700
7563587

Choose a tag to compare

v1.0.0rc700 Pre-release
Pre-release

Frequenz Python SDK Release Notes

Upgrading

  • The frequenz-client-microgrid dependency was bumped to v0.4.0. If you are using the client directly in your code, you will need to upgrade too.

  • Calls to microgrid.*_pool methods now always need to specified a priority value, corresponding to the requirements/priority of the actor making the call.

  • The microgrid.*_pool methods would only accept keyword arguments from now on.

  • The microgrid.initialize() method now takes a server_url instead of a host and port.

    The following format is expected: grpc://hostname{:port}{?ssl=ssl}, where the port should be an int between 0 and 65535 (defaulting to 9090) and ssl should be a boolean (defaulting to false). For example: grpc://localhost or grpc://localhost:1090?ssl=true.

    The default was also removed, so you always need to specify the server URL.

    This applies to the ConnectionManager as well, which also now doesn't expose the host and port attributes, only the server_url. If you need to extract the host or port from the server_url, you can use the standard Python urllib.parse.urlparse() function.

  • The Config class was removed and the ConfigManagingActor now sends a plain dictionary rather than a Config object.

New Features

  • Calls to microgrid.*_pool methods now accept an optional set_operating_point parameter, for setting an operating point for the other actors. This would shift the target power by the operating point before actually applying it to the components.

Bug Fixes

  • When the PowerDistributor receives a zero power request for PV inverters, it now correctly sets zero power to the inverters, and no longer crashes.

What's Changed

  • Clear release notes by @llucax in #931
  • Always require a priority argument in calls to microgrid.*_pool methods by @shsms in #944
  • Set zero power for PV inverters not neccessary to reach target power by @shsms in #946
  • Update protobuf requirement from <5,>=4.21.6 to >=4.21.6,<6 by @dependabot in #936
  • Code quality improvements in the DataPipeline and *Pool classes by @shsms in #948
  • Bump types-protobuf from 4.24.0.20240129 to 5.26.0.20240422 by @dependabot in #937
  • Add support for Python 3.12 by @daniel-zullo-frequenz in #947
  • Miscelaneous improvements and fixes by @llucax in #953
  • Bump types-setuptools from 69.5.0.20240423 to 70.0.0.20240524 by @dependabot in #959
  • Improve code comment in power distribution to PV inverters by @shsms in #960
  • Support power requests from shifting actors in the PowerManager by @shsms in #957
  • Upgrade to microgrid client v0.4.0 by @llucax in #955
  • Bump the required group across 1 directory with 8 updates by @dependabot in #964
  • Update ConfigManagingActor to send a dictionary by @daniel-zullo-frequenz in #969
  • Don't sleep on PowerDistributor startup by @shsms in #971
  • Stop using a deprecated way to replace the event loop in tests by @llucax in #976
  • Rename parameter in_shifting_groupset_operating_point by @shsms in #970
  • Make some minor improvements for LastValueCache by @llucax in #974
  • Prepare release notes for v1.0.0rc700 by @llucax in #977

Full Changelog: v1.0.0-rc601...v1.0.0rc700

v1.0.0-rc601

02 May 12:58
v1.0.0-rc601
9c54f8d

Choose a tag to compare

v1.0.0-rc601 Pre-release
Pre-release

Frequenz Python SDK Release Notes

In this release we have changed the versioning scheme for pre-releases. rc601 means rc6.1, which we can't use due to limitations on the Python version specification. From now on rc versions will have 3 digits, so next rc will be rc700, and then rc800 etc, so we have some room to make patch releases in case it is necessary (which will be named rc701, rc702, etc.).

Bug Fixes

  • Fix getting reactive power from meters, inverters and EV chargers.

What's Changed

Read more

v1.0.0-rc6

12 Apr 14:25
v1.0.0-rc6
57337df

Choose a tag to compare

v1.0.0-rc6 Pre-release
Pre-release

Frequenz Python SDK Release Notes

Summary

The most notable features for this release is the addition of the PVPool (exposed via microgrid.pv_pool()), which can be used to manage PV arrays as a single entity and the EVChargerPool (microgrid.ev_charger_pool()) learning to manage power for the whole pool (before it could only be used to control chargers individually).

Another notable change is the microgrid API client being moved to its own repository.

Upgrading

  • The SDK is now using the microgrid API client from frequenz-client-microgrid. You should update your code if you are using the microgrid API client directly.

  • The minimum required frequenz-channels version is now v1.0.0-rc1.

  • The set of battery IDs managed by a battery pool are now available through BatteryPool.component_ids, and no longer through BatteryPool.battery_ids. This is done to have a consistent interface with other *Pools.

  • The maxsize parameter in calls to BatteryPool.{soc/capacity/temperature}.new_receiver() methods have now been renamed to limit, to be consistent with the channels repository.

  • Support for per-component interaction in EVChargerPool has been removed. Please use the new propose_power() method to manage power for the whole pool. If you still need to manage power of chargers individually, you can create one pool per charger.

  • PV power is now available from microgrid.pv_pool().power, and no longer from microgrid.logical_meter().pv_power.

New Features

  • EVChargerPool/microgrid.ev_charger_pool(): New propose_power and power_status methods have been added, similar to the BatteryPool. These method interface with the PowerManager and PowerDistributor, which currently uses a first-come-first-serve algorithm to distribute power to EVs.

  • A PV pool (PVPool/microgrid.pv_pool()) was added, with propose_power, power_status and power methods similar to Battery and EV pools.

  • The microgrid API client now exposes the reactive power for inverters, meters and EV chargers.

Enhancements

  • Warning messages are logged when multiple instances of *Pools are created for the same set of batteries, with the same priority values.

  • A warning message will now be logged if no relevant samples are found in a component for resampling.

Bug Fixes

  • A bug was fixed where the grid fuse was not created properly and would end up with a max_current with type float instead of Current.

  • BatteryPool.propose_discharge now converts power values to the passive-sign convention. Earlier it was not doing this and that was causing it to charge instead of discharge.

  • Fix a bug that was causing the power managing actor to crash and restart when cleaning up old proposals.

What's Changed

Read more

v1.0.0-rc5

26 Feb 14:42
v1.0.0-rc5
9f9520c

Choose a tag to compare

v1.0.0-rc5 Pre-release
Pre-release

Frequenz Python SDK Release Notes

Summary

This is a minor non-breaking release that adds new features and fixes a few bug.

New Features

  • Allow multiplying and dividing any Quantity by a float. This just scales the Quantity value.
  • Allow dividing any Quantity by another quaintity of the same type. This just returns a ration between both quantities.
  • The battery pool power method now supports scenarios where one or more inverters can have multiple batteries connected to it and one or more batteries can have multiple inverters connected to it.

Bug Fixes

  • Fix grid current formula generator to add the operator + to the engine only when the component category is handled.
  • Fix bug where sometimes the base_value of a Quantity could be of a different type than float.

What's Changed

  • Clear release notes by @llucax in #871
  • Fetch and stream 3-phase power by @daniel-zullo-frequenz in #847
  • Remove remaining traces of darglint by @llucax in #873
  • Make sure base_value is always float by @llucax in #874
  • Remove the last reference to darglint by @llucax in #877
  • Mock resampler: Improve variable names by @llucax in #879
  • Allow multiplying Quantity by float by @llucax in #875
  • Remove unnecessary send adapter by @llucax in #878
  • Bump actions/{up,down}load-artifact from 3 to 4 by @dependabot in #833
  • Allow all quantities division by float | Self by @llucax in #876
  • Cleanup and modularization of Power Manager, Power Distributor and DataPipeline by @shsms in #881
  • More updates for n:m support - battery pool's power formula by @Marenz in #730
  • Prepare release notes for 1.0.0-rc5 by @llucax in #884

Full Changelog: v1.0.0-rc4...v1.0.0-rc5

v1.0.0-rc4

02 Feb 13:20
v1.0.0-rc4
3ef0981

Choose a tag to compare

v1.0.0-rc4 Pre-release
Pre-release

Frequenz Python SDK Release Notes

Summary

This release represents 3 months of work so it includes a lot of changes. Most of them are (breaking) API changes, in the hopes to make a more consistent and easier to use SDK 1.0. There are also quite a few bug fixes and a couple of new features.

Upgrading

  • The BatteryPool.power_status method now streams objects of type BatteryPoolReport, replacing the previous Report objects.

  • Channels has been upgraded to version 1.0.0b2, for information on how to upgrade please read Channels release notes.

  • In BatteryPoolReport.distribution_result,

    • the following fields have been renamed:
      • Result.succeeded_batteriesResult.succeeded_components
      • Result.failed_batteriesResult.failed_components
      • Request.batteriesRequest.component_ids
    • and the following fields are now type-hinted as collections.abc.Set, to clearly indicate that they are read-only:
      • Result.succeeded_components
      • Result.failed_components
  • The Fuse class has been moved to the frequenz.sdk.timeseries module.

  • microgrid.grid()

    • A Grid object is always instantiated now, even if the microgrid is not connected to the grid (islanded microgrids).

    • The rated current of the grid fuse is set to Current.zero() in case of islanded microgrids.

    • The grid fuse is set to None when the grid connection component metadata lacks information about the fuse.

    • Grid power and current metrics were moved from microgrid.logical_meter() to microgrid.grid().

      Previously,

      logical_meter = microgrid.logical_meter()
      grid_power_recv = logical_meter.grid_power.new_receiver()
      grid_current_recv = logical_meter.grid_current.new_receiver()

      Now,

      grid = microgrid.grid()
      grid_power_recv = grid.power.new_receiver()
      grid_current_recv = grid.current.new_receiver()
  • Consumer and producer power formulas were moved from microgrid.logical_meter() to microgrid.consumer() and microgrid.producer(), respectively.

    Previously,

    logical_meter = microgrid.logical_meter()
    consumer_power_recv = logical_meter.consumer_power.new_receiver()
    producer_power_recv = logical_meter.producer_power.new_receiver()

    Now,

    consumer_power_recv = microgrid.consumer().power.new_receiver()
    producer_power_recv = microgrid.producer().power.new_receiver()
  • The ComponentGraph.components() parameters component_id and component_category were renamed to component_ids and component_categories, respectively.

  • The GridFrequency.component property was renamed to GridFrequency.source

  • The microgrid.frequency() method no longer supports passing the component parameter. Instead the best component is automatically selected.

  • The actor.ChannelRegistry was rewritten to be type-aware and just a container of channels. You now need to provide the type of message that will be contained by the channel and use the get_or_create() method to get a channel and the stop_and_remove() method to stop and remove a channel. Once you get a channel you can create new senders and receivers, or set channel options, as usual. Please read the docs for a full description, but in general this:

    r = registry.new_receiver(name)
    s = registry.new_sender(name)

    Should be replaced by:

    r = registry.get_or_create(T, name).new_receiver()
    s = registry.get_or_create(T, name).new_sender()
  • The ReceiverFetcher interface was slightly changed to make maxsize a keyword-only argument. This is to make it compatible with the Broadcast channel, so it can be considered a ReceiverFetcher.

New Features

  • A new method microgrid.voltage() was added to allow easy access to the phase-to-neutral 3-phase voltage of the microgrid.

  • The actor.ChannelRegistry is now type-aware.

  • A new class method Quantity.from_string() has been added to allow the creation of Quantity objects from strings.

Bug Fixes

  • 0W power requests are now not adjusted to exclusion bounds by the PowerManager and PowerDistributor, and are sent over to the microgrid API directly.

  • microgrid.frequency() / GridFrequency:

    • Fix sent samples to use Frequency objects instead of raw Quantity.
    • Handle None values in the received samples properly.
    • Convert nan values in the received samples to None.
  • The resampler now properly handles sending zero values.

    A bug made the resampler interpret zero values as None when generating new samples, so if the result of the resampling is zero, the resampler would just produce None values.

  • The PowerManager no longer holds on to proposals from dead actors forever. If an actor hasn't sent a new proposal in 60 seconds, the available proposal from that actor is dropped.

  • Fix Quantity.__format__() sometimes skipping the number for very small values.

  • Not strictly a bug fix, but the microgrid API version was bumped to v0.15.3, which indirectly bumps the common API dependency to v0.5.x, so the SDK can be compatible with other APIs using a newer version of the common API.

    Downstream projects that require a frequenz-api-common v0.5.x and want to ensure proper dependency resolution should update their minimum SDK version to this release.

What's Changed

Read more

v0.25.2

11 Dec 13:51
v0.25.2
7716937

Choose a tag to compare

Frequenz Python SDK Release Notes

Bug Fixes

  • The resampler now properly handles sending zero values.

    A bug made the resampler interpret zero values as None when generating new samples, so if the result of the resampling is zero, the resampler would just produce None values.

What's Changed

Full Changelog: v0.25.1...v0.25.2

v1.0.0-rc3

08 Nov 11:35
v1.0.0-rc3
504b86f

Choose a tag to compare

v1.0.0-rc3 Pre-release
Pre-release

Frequenz Python SDK Release Notes

Summary

The microgrid package now exposes grid connections uniformly and introduces formula operators for consumption and production, replacing the logical_meter.*_{production,consumption}() formulas. The actor package restarts crashed actors with a delay, and the ConnectionManager exposes the microgrid_id and location details.

There are also a few bug fixes, documentation improvements and other minor breaking changes.

Upgrading

  • actor package

    • Actors are now restarted after a small delay when they crash to avoid a busy loop and spamming the logs if the actor keeps failing to start.

    • The include_broken_batteries argument was removed from the PowerDistributingActor's Request. This option is no longer supported.

  • microgrid package

    • grid: The grid connection is now exposed as microgrid.grid(). This is more consistent with other objects exposed in the microgrid module, such as microgrid.battery_pool() and microgrid.logical_meter().

    • battery_pool(): The include_broken_batteries argument was removed from the propose_*() methods (it was also removed from the underlying type, timeseries.BatteryPool). This option is no longer supported.

    • ComponentGraph: The component graph is now exposed as microgrid.component_graph.ComponentGraph.

    • logical_meter(): The *_consumption() and *_production() methods were removed. You should use the new consumption and production formula operators instead.

      For example:

      # Old:
      pv_consumption = logical_meter.pv_consumption_power()
      production = (logical_meter.pv_production_power() + logical_meter.chp_production_power()).build()
      # New:
      pv_consumption = logical_meter.pv_power().consumption().build()
      production = (logical_meter.pv_power().production() + logical_meter.chp_power().production()).build()

New Features

  • The configuration flag resend_latest can now be changed for channels owned by the ChannelRegistry.

  • New formula operators for calculating consumption() and production() were added.

  • The ConnectionManager now fetches microgrid metadata when connecting to the microgrid and exposes microgrid_id and location properties of the connected microgrid.

    Users can access this information using microgrid.connection_manager.get().microgrid_id and microgrid.connection_manager.get().location.

  • The documentation has been improved to:

    • Display signatures with types.
    • Show inherited members.
    • Publish documentation for pre-releases.
    • Present the full tag name as the documentation version.
    • Ensure all development branches have their documentation published (the next version has been removed).
    • Fix the order of the documentation versions.

Bug Fixes

  • Fixed incorrect grid current calculations in locations where the calculations depended on current measurements from an inverter.

  • Corrected the power failure report to exclude any failed power calculations from the successful ones.

What's Changed

New Contributors

  • @andrew-stevenson-frequenz made their first contribution in #760

Full Changelog: v1.0.0-rc2...v1.0.0-rc3