Add standard deviation calculation to group (#112076)
* Add standard deviation calculation to group * Add missing bits --------- Co-authored-by: G Johansson <goran.johansson@shiftit.se>
This commit is contained in:
parent
8c54587d7e
commit
11f5b48724
4 changed files with 25 additions and 8 deletions
|
@ -35,14 +35,15 @@ from .sensor import async_create_preview_sensor
|
|||
from .switch import async_create_preview_switch
|
||||
|
||||
_STATISTIC_MEASURES = [
|
||||
"min",
|
||||
"last",
|
||||
"max",
|
||||
"mean",
|
||||
"median",
|
||||
"last",
|
||||
"range",
|
||||
"sum",
|
||||
"min",
|
||||
"product",
|
||||
"range",
|
||||
"stdev",
|
||||
"sum",
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ ATTR_MEDIAN = "median"
|
|||
ATTR_LAST = "last"
|
||||
ATTR_LAST_ENTITY_ID = "last_entity_id"
|
||||
ATTR_RANGE = "range"
|
||||
ATTR_STDEV = "stdev"
|
||||
ATTR_SUM = "sum"
|
||||
ATTR_PRODUCT = "product"
|
||||
SENSOR_TYPES = {
|
||||
|
@ -75,6 +76,7 @@ SENSOR_TYPES = {
|
|||
ATTR_MEDIAN: "median",
|
||||
ATTR_LAST: "last",
|
||||
ATTR_RANGE: "range",
|
||||
ATTR_STDEV: "stdev",
|
||||
ATTR_SUM: "sum",
|
||||
ATTR_PRODUCT: "product",
|
||||
}
|
||||
|
@ -250,6 +252,16 @@ def calc_range(
|
|||
return {}, value
|
||||
|
||||
|
||||
def calc_stdev(
|
||||
sensor_values: list[tuple[str, float, State]],
|
||||
) -> tuple[dict[str, str | None], float]:
|
||||
"""Calculate standard deviation value."""
|
||||
result = (sensor_value for _, sensor_value, _ in sensor_values)
|
||||
|
||||
value: float = statistics.stdev(result)
|
||||
return {}, value
|
||||
|
||||
|
||||
def calc_sum(
|
||||
sensor_values: list[tuple[str, float, State]],
|
||||
) -> tuple[dict[str, str | None], float]:
|
||||
|
@ -284,6 +296,7 @@ CALC_TYPES: dict[
|
|||
"median": calc_median,
|
||||
"last": calc_last,
|
||||
"range": calc_range,
|
||||
"stdev": calc_stdev,
|
||||
"sum": calc_sum,
|
||||
"product": calc_product,
|
||||
}
|
||||
|
|
|
@ -189,14 +189,15 @@
|
|||
"selector": {
|
||||
"type": {
|
||||
"options": {
|
||||
"min": "Minimum",
|
||||
"last": "Most recently updated",
|
||||
"max": "Maximum",
|
||||
"mean": "Arithmetic mean",
|
||||
"median": "Median",
|
||||
"last": "Most recently updated",
|
||||
"min": "Minimum",
|
||||
"product": "Product",
|
||||
"range": "Statistical range",
|
||||
"sum": "Sum",
|
||||
"product": "Product"
|
||||
"stdev": "Standard deviation",
|
||||
"sum": "Sum"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -48,6 +48,7 @@ MAX_VALUE = max(VALUES)
|
|||
MEAN = statistics.mean(VALUES)
|
||||
MEDIAN = statistics.median(VALUES)
|
||||
RANGE = max(VALUES) - min(VALUES)
|
||||
STDEV = statistics.stdev(VALUES)
|
||||
SUM_VALUE = sum(VALUES)
|
||||
PRODUCT_VALUE = prod(VALUES)
|
||||
|
||||
|
@ -61,6 +62,7 @@ PRODUCT_VALUE = prod(VALUES)
|
|||
("median", MEDIAN, {}),
|
||||
("last", VALUES[2], {ATTR_LAST_ENTITY_ID: "sensor.test_3"}),
|
||||
("range", RANGE, {}),
|
||||
("stdev", STDEV, {}),
|
||||
("sum", SUM_VALUE, {}),
|
||||
("product", PRODUCT_VALUE, {}),
|
||||
],
|
||||
|
|
Loading…
Add table
Reference in a new issue