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
|
from .switch import async_create_preview_switch
|
||||||
|
|
||||||
_STATISTIC_MEASURES = [
|
_STATISTIC_MEASURES = [
|
||||||
"min",
|
"last",
|
||||||
"max",
|
"max",
|
||||||
"mean",
|
"mean",
|
||||||
"median",
|
"median",
|
||||||
"last",
|
"min",
|
||||||
"range",
|
|
||||||
"sum",
|
|
||||||
"product",
|
"product",
|
||||||
|
"range",
|
||||||
|
"stdev",
|
||||||
|
"sum",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ ATTR_MEDIAN = "median"
|
||||||
ATTR_LAST = "last"
|
ATTR_LAST = "last"
|
||||||
ATTR_LAST_ENTITY_ID = "last_entity_id"
|
ATTR_LAST_ENTITY_ID = "last_entity_id"
|
||||||
ATTR_RANGE = "range"
|
ATTR_RANGE = "range"
|
||||||
|
ATTR_STDEV = "stdev"
|
||||||
ATTR_SUM = "sum"
|
ATTR_SUM = "sum"
|
||||||
ATTR_PRODUCT = "product"
|
ATTR_PRODUCT = "product"
|
||||||
SENSOR_TYPES = {
|
SENSOR_TYPES = {
|
||||||
|
@ -75,6 +76,7 @@ SENSOR_TYPES = {
|
||||||
ATTR_MEDIAN: "median",
|
ATTR_MEDIAN: "median",
|
||||||
ATTR_LAST: "last",
|
ATTR_LAST: "last",
|
||||||
ATTR_RANGE: "range",
|
ATTR_RANGE: "range",
|
||||||
|
ATTR_STDEV: "stdev",
|
||||||
ATTR_SUM: "sum",
|
ATTR_SUM: "sum",
|
||||||
ATTR_PRODUCT: "product",
|
ATTR_PRODUCT: "product",
|
||||||
}
|
}
|
||||||
|
@ -250,6 +252,16 @@ def calc_range(
|
||||||
return {}, value
|
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(
|
def calc_sum(
|
||||||
sensor_values: list[tuple[str, float, State]],
|
sensor_values: list[tuple[str, float, State]],
|
||||||
) -> tuple[dict[str, str | None], float]:
|
) -> tuple[dict[str, str | None], float]:
|
||||||
|
@ -284,6 +296,7 @@ CALC_TYPES: dict[
|
||||||
"median": calc_median,
|
"median": calc_median,
|
||||||
"last": calc_last,
|
"last": calc_last,
|
||||||
"range": calc_range,
|
"range": calc_range,
|
||||||
|
"stdev": calc_stdev,
|
||||||
"sum": calc_sum,
|
"sum": calc_sum,
|
||||||
"product": calc_product,
|
"product": calc_product,
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,14 +189,15 @@
|
||||||
"selector": {
|
"selector": {
|
||||||
"type": {
|
"type": {
|
||||||
"options": {
|
"options": {
|
||||||
"min": "Minimum",
|
"last": "Most recently updated",
|
||||||
"max": "Maximum",
|
"max": "Maximum",
|
||||||
"mean": "Arithmetic mean",
|
"mean": "Arithmetic mean",
|
||||||
"median": "Median",
|
"median": "Median",
|
||||||
"last": "Most recently updated",
|
"min": "Minimum",
|
||||||
|
"product": "Product",
|
||||||
"range": "Statistical range",
|
"range": "Statistical range",
|
||||||
"sum": "Sum",
|
"stdev": "Standard deviation",
|
||||||
"product": "Product"
|
"sum": "Sum"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -48,6 +48,7 @@ MAX_VALUE = max(VALUES)
|
||||||
MEAN = statistics.mean(VALUES)
|
MEAN = statistics.mean(VALUES)
|
||||||
MEDIAN = statistics.median(VALUES)
|
MEDIAN = statistics.median(VALUES)
|
||||||
RANGE = max(VALUES) - min(VALUES)
|
RANGE = max(VALUES) - min(VALUES)
|
||||||
|
STDEV = statistics.stdev(VALUES)
|
||||||
SUM_VALUE = sum(VALUES)
|
SUM_VALUE = sum(VALUES)
|
||||||
PRODUCT_VALUE = prod(VALUES)
|
PRODUCT_VALUE = prod(VALUES)
|
||||||
|
|
||||||
|
@ -61,6 +62,7 @@ PRODUCT_VALUE = prod(VALUES)
|
||||||
("median", MEDIAN, {}),
|
("median", MEDIAN, {}),
|
||||||
("last", VALUES[2], {ATTR_LAST_ENTITY_ID: "sensor.test_3"}),
|
("last", VALUES[2], {ATTR_LAST_ENTITY_ID: "sensor.test_3"}),
|
||||||
("range", RANGE, {}),
|
("range", RANGE, {}),
|
||||||
|
("stdev", STDEV, {}),
|
||||||
("sum", SUM_VALUE, {}),
|
("sum", SUM_VALUE, {}),
|
||||||
("product", PRODUCT_VALUE, {}),
|
("product", PRODUCT_VALUE, {}),
|
||||||
],
|
],
|
||||||
|
|
Loading…
Add table
Reference in a new issue