* introduce preserve last value option
* improve comments
* add unit test
* skip scheduling purge on a preserved value
* do not schedule sensor update if preserving last value
* fix unit test to use new mock time pattern
pattern introduced in https://github.com/home-assistant/core/pull/93499
* rename preserve_last_val to keep_last_sample
* add keep_last_sample config validation
* Add circular mean
Add support for circular mean for sensors in units of degrees, e.g. direction data.
* Update test_sensor.py
* Update sensor.py
* Remove whitespace
* Revert to degC
* Fix: shift atan2 output to positive degrees
* Add new dedicated test
* Simplify test
* Decrease event loop latency by binding time.monotonic to loop.time directly
This is a small improvment to decrease event loop latency. While the goal is
is to reduce Bluetooth connection time latency, everything using asyncio
is a bit more responsive as a result.
* relo per comments
* fix too fast by adding resolution, ensure monotonic time is patchable by freezegun
* fix test that freezes time too late and has a race loop
* Improve config checking, add device_class timestamp
* Move additional characteristics into separate branch
* Move deprecation warning for sampling_size default to other branch
* Add supports list description
* Implement optional manually defined uniqueid
* Fix test case via mocked environment
* Refactor testcases
* Fix missing awaits
* Revert order changes, reduce use of block command
* Tidy up mocked time testcases
* Add additional statistics characterics, improve rounding
* Improve name of age_usage_ratio
* Replace difference by three relevant distances
* Refactor attributes, remove stats, add metadata
* Fix binary sensor testcase
* Fix sensor defaults testcase
* Fix and enhance all testcases
* Remove age coverage from attr when not configured
* Refactor so only the relevant characteristic value is calculated
* Rename unclear characteristics, add timebound average
* Fix coverage warning
* Remove explicit functions dict
* Make statistics state characteristic selectable
* Move computation in helper function
* Add relevant config elements for clarity
* Rename variables for better readability
* Avoid reserved prefix ATTR_ for stats
* Fix NoneType base_unit error
* Add testcases for statistics characteristic
* Add testcases for state_class, unitless, and characteristics
* Add testcase coverage for no unit with binary
* Replace error catching by an exception
* Attend to review comments
* Fix statistics precision error when configured 0, fix#42547
* Add tests for statistics precision
* Apply precision=0 logic to float numbers only
* Implement contextlib way of exception handling
* Catch statistics startup error for None value states, fix#49254
* Add test for statistics None handling
* Update tests/components/statistics/test_sensor.py
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* Switch test case logic to remove sensor last
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* Add quantiles as another Statistics attribute
Quantiles divide states into intervals of equal probability. The
statistics.quantiles() function was added in Python 3.8 and can now
be included in the Statistics integration without new dependencies.
Quantiles can be used in conjunction with other distribution metrics to
create box plots (quartiles) and other graphical resources for
visualizing the distribution of states.
* Add quantiles reference to basic tests
* Switch async_track_state_change to the faster async_track_state_change_event part 4
Calling async_track_state_change_event directly is faster than async_track_state_change (see #37251) since async_track_state_change is a wrapper around async_track_state_change_event now
* pylint
* added update listener if max_age is set
* remove commented out code
* streamline test code
* schedule next update based on the next state to expire
* fixed update process
* isort
* fixed callback function
* fixed log message
* removed logging from test case