> [!NOTE]
> Read more on these features on `the FlexMeasures blog <https://flexmeasures.io/015-process-scheduling-heatmap/>`__.
> [!WARNING]
> Upgrading to this version requires running ``flexmeasures db upgrade`` (you can create a backup first with ``flexmeasures db-ops dump``).
> [!WARNING]
> Upgrading to this version requires installing the LP/MILP solver HiGHS using ``pip install highspy``.
> [!WARNING]
> If your server is running in play mode (``FLEXMEASURES_MODE = "play"``), users will be able to see sensor data from any account [see `PR 740 <https://www.github.com/FlexMeasures/flexmeasures/pull/740>`_].
Overview
New features
* Add `ProcessScheduler` class to optimize the starting time of processes one of the policies developed (INFLEXIBLE, SHIFTABLE and BREAKABLE), accessible via the CLI command `flexmeasures add schedule for-process` [see `PR 729 <https://www.github.com/FlexMeasures/flexmeasures/pull/729>`_ and `PR #768 <https://www.github.com/FlexMeasures/flexmeasures/pull/768>`_]
* Users can select a new chart type (daily heatmap) on the sensor page of the UI, showing how sensor values are distributed over the time of day [see `PR 715 <https://www.github.com/FlexMeasures/flexmeasures/pull/715>`_]
* Added API endpoints `/sensors/<id>` (GET) for fetching a single sensor, `/sensors` (POST) for adding a sensor, `/sensors/<id>` (PATCH) for updating a sensor and `/sensors/<id>` (DELETE) for deleting a sensor. [see `PR 759 <https://www.github.com/FlexMeasures/flexmeasures/pull/759>`_] and [see `PR #767 <https://www.github.com/FlexMeasures/flexmeasures/pull/767>`_] and [see `PR #773 <https://www.github.com/FlexMeasures/flexmeasures/pull/773>`_] and [see `PR #784 <https://www.github.com/FlexMeasures/flexmeasures/pull/784>`_]
* Users are warned in the UI on when the data they are seeing includes one or more Daylight Saving Time (DST) transitions, and heatmaps (see previous feature) visualize these transitions intuitively [see `PR 723 <https://www.github.com/FlexMeasures/flexmeasures/pull/723>`_]
* Allow deleting multiple sensors with a single call to ``flexmeasures delete sensor`` by passing the ``--id`` option multiple times [see `PR 734 <https://www.github.com/FlexMeasures/flexmeasures/pull/734>`_]
* Make it a lot easier to read off the color legend on the asset page, especially when showing many sensors, as they will now be ordered from top to bottom in the same order as they appear in the chart (as defined in the ``sensors_to_show`` attribute), rather than alphabetically [see `PR 742 <https://www.github.com/FlexMeasures/flexmeasures/pull/742>`_]
* Users on FlexMeasures servers in play mode (``FLEXMEASURES_MODE = "play"``) can use the ``sensors_to_show`` attribute to show any sensor on their asset pages, rather than only sensors registered to assets in their own account or to public assets [see `PR 740 <https://www.github.com/FlexMeasures/flexmeasures/pull/740>`_]
* Having percentages within the [0, 100] domain is such a common use case that we now always include it in sensor charts with % units, making it easier to read off individual charts and also to compare across charts [see `PR 739 <https://www.github.com/FlexMeasures/flexmeasures/pull/739>`_]
* DataSource table now allows storing arbitrary attributes as a JSON (without content validation), similar to the Sensor and GenericAsset tables [see `PR 750 <https://www.github.com/FlexMeasures/flexmeasures/pull/750>`_]
* Users will be able to see (e.g. in the UI) exactly which reporter created the report (saved as sensor data), and hosts will be able to identify exactly which configuration was used to create a given report [see `PR 751 <https://www.github.com/FlexMeasures/flexmeasures/pull/751>`_ and `PR #788 <https://www.github.com/FlexMeasures/flexmeasures/pull/788>`_]
* The CLI `flexmeasures add report` now allows passing `config` and `parameters` in YAML format as files or editable via the system's default editor [see `PR 752 <https://www.github.com/FlexMeasures/flexmeasures/pull/752>`_ and `PR #788 <https://www.github.com/FlexMeasures/flexmeasures/pull/788>`_]
* The CLI now allows to set lists and dicts as asset & sensor attributes (formerly only single values) [see `PR 762 <https://www.github.com/FlexMeasures/flexmeasures/pull/762>`_]
Bugfixes
* Add binary constraint to avoid energy leakages during periods with negative prices [see `PR 770 <https://www.github.com/FlexMeasures/flexmeasures/pull/770>`_]
Infrastructure / Support
* Add support for profiling Flask API calls using ``pyinstrument`` (if installed). Can be enabled by setting the environment variable ``FLEXMEASURES_PROFILE_REQUESTS`` to ``True`` [see `PR 722 <https://www.github.com/FlexMeasures/flexmeasures/pull/722>`_]
* The endpoint `[POST] /health/ready <api/v3_0.htmlget--api-v3_0-health-ready>`_ returns the status of the Redis connection, if configured [see `PR 699 <https://www.github.com/FlexMeasures/flexmeasures/pull/699>`_]
* Document the `device_scheduler` linear program [see `PR 764 <https://www.github.com/FlexMeasures/flexmeasures/pull/764>`_]
* Add support for `HiGHS <https://highs.dev/>`_ solver [see `PR #766 <https://www.github.com/FlexMeasures/flexmeasures/pull/766>`_]
* Add support for installing FlexMeasures under Python 3.11 [see `PR 771 <https://www.github.com/FlexMeasures/flexmeasures/pull/771>`_]
* Start keeping sets of pinned requirements per supported Python version. Also fixes recent Docker build problem. [see `PR 776 <https://www.github.com/FlexMeasures/flexmeasures/pull/776>`_]
* Removed obsolete code dealing with deprecated data models (e.g. assets, markets and weather sensors), and sunset the fm0 scheme for entity addresses [see `PR 695 <https://www.github.com/FlexMeasures/flexmeasures/pull/695>`_ and `project 11 <https://www.github.com/FlexMeasures/flexmeasures/projects/11>`_]
Complete overview from merge log
* fix: relax decimal resolution in constraint validation by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/731
* fix: timerange for sensor with a single belief by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/732
* feat: CLI can delete multiple sensors at once by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/734
* fix: drop NaN values when saving the report to the database by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/735
* feat: add pyinstrument integration to Flask API endpoints by Nischay-Pro in https://github.com/FlexMeasures/flexmeasures/pull/722
* fix: relax constraint for overlaying plot traces for sensors with various resolutions by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/743
* Fix/report offsets in local time by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/744
* Feature/sort sensor legend in order of appearence by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/742
* feat: sensors with % units get chart including 0-100% in their domain by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/739
* fix: prevent mutating the original FIELD_DEFINITIONS dict by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/746
* Fix absolute currency units by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/738
* ci: PR template by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/753
* docs: mention the ongoing work on shifting algorithm in the API notation by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/747
* feat: add attributes column to `data_source` table by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/750
* Upgrade dependencies after v014 by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/757
* Docs: clear up capacity limit in toy tutorial by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/760
* feat: 674 let the GitHub action test pipeline also use the latest dependency versions by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/749
* feat: add redis liveness probe by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/699
* try new coveralls Github Action by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/655
* feat: let CLI users pass a JSON list (as a string) to set an asset or sensor attribute by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/762
* feat(sensors): adds fetch_one sensor endpoint to API by GustaafL in https://github.com/FlexMeasures/flexmeasures/pull/759
* docs: add device_scheduler page by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/764
* fix(storage): fixes too many args in constraint_message function by GustaafL in https://github.com/FlexMeasures/flexmeasures/pull/758
* docs: improve documentation of flexmeasures by Nischay-Pro in https://github.com/FlexMeasures/flexmeasures/pull/756
* enable usage of Highs solver by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/766
* feat: add `ProcessScheduler` by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/729
* 433 post sensor by GustaafL in https://github.com/FlexMeasures/flexmeasures/pull/767
* fix(sensor): removes resolution from fetch one response to only retur… by GustaafL in https://github.com/FlexMeasures/flexmeasures/pull/779
* feat: in play mode, allow showing any sensor on the asset page by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/740
* feature: add command `flexmeasures add schedule for-process` by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/768
* feat: add support for python 3.11 by Nischay-Pro in https://github.com/FlexMeasures/flexmeasures/pull/771
* mention that the higher version 2.10 works by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/783
* 433 patch sensor by GustaafL in https://github.com/FlexMeasures/flexmeasures/pull/773
* feat: new chart type for sensor data: daily heatmap by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/715
* feat: show split data during fall DST transition in daily heatmap by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/723
* Remove obsolete data classes by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/695
* documentation: `ProcessScheduler` by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/777
* fix unresolved reference by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/786
* feat: add Binary constraint to prevent energy losses (at negative prices) by Flix6x in https://github.com/FlexMeasures/flexmeasures/pull/770
* feat: save/fetch `Reporter` as `DataSource` by victorgarcia98 in https://github.com/FlexMeasures/flexmeasures/pull/751
* Help for running on Windows by Ahmad-Wahid in https://github.com/FlexMeasures/flexmeasures/pull/710
* feat(sensor): only allow admins to patch by GustaafL in https://github.com/FlexMeasures/flexmeasures/pull/790
* feat: change Makefile to generate dedicated python requirements.txt files by Nischay-Pro in https://github.com/FlexMeasures/flexmeasures/pull/776
* chore: use Cbc in unit testing, adapt documentation by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/796
* docs:fix sensor numbering in docker-compose tutorial for devs by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/797
* fix: stop making app.reporters a property by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/798
* fix: do not use async_mode in profiler, as we might run several by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/803
* feat(sensor): add attributes to sensor schema by GustaafL in https://github.com/FlexMeasures/flexmeasures/pull/802
* fix: getSourceMasking safe for pages other than sensor view by nhoening in https://github.com/FlexMeasures/flexmeasures/pull/807
New Contributors
* Nischay-Pro made their first contribution in https://github.com/FlexMeasures/flexmeasures/pull/722
**Full Changelog**: https://github.com/FlexMeasures/flexmeasures/compare/v0.14...v0.15