From 866d1c90407451d85ee46e9299811f3d41bcf8c6 Mon Sep 17 00:00:00 2001 From: farmio Date: Wed, 7 Jun 2023 09:30:11 +0200 Subject: [PATCH] Add optional `value_fn` to EntityDescriptions eg. to be able to map a API response value to a different value (status_code -> message) --- homeassistant/components/fronius/sensor.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/homeassistant/components/fronius/sensor.py b/homeassistant/components/fronius/sensor.py index 3f69c86e9a..6f682f1cce 100644 --- a/homeassistant/components/fronius/sensor.py +++ b/homeassistant/components/fronius/sensor.py @@ -1,6 +1,7 @@ """Support for Fronius devices.""" from __future__ import annotations +from collections.abc import Callable from dataclasses import dataclass from typing import TYPE_CHECKING, Any, Final @@ -85,6 +86,7 @@ class FroniusSensorEntityDescription(SensorEntityDescription): default_value: StateType | None = None response_key: str | None = None + value_fn: Callable[[StateType], StateType] | None = None INVERTER_ENTITY_DESCRIPTIONS: list[FroniusSensorEntityDescription] = [ @@ -630,6 +632,8 @@ class _FroniusSensorEntity(CoordinatorEntity["FroniusCoordinatorBase"], SensorEn new_value = self.coordinator.data[self.solar_net_id][self.response_key]["value"] if new_value is None: return self.entity_description.default_value + if self.entity_description.value_fn is not None: + return self.entity_description.value_fn(new_value) if isinstance(new_value, float): return round(new_value, 4) return new_value