From 1f5720199caa44df0db8d6c3d5a474efd25f9a99 Mon Sep 17 00:00:00 2001 From: Mas2112 Date: Thu, 30 Sep 2021 11:41:55 +0200 Subject: [PATCH] Add DC voltage and current to Kostal inverter (#54878) --- .../components/kostal_plenticore/const.py | 70 +++++++++++++++++++ .../components/kostal_plenticore/helper.py | 8 +++ 2 files changed, 78 insertions(+) diff --git a/homeassistant/components/kostal_plenticore/const.py b/homeassistant/components/kostal_plenticore/const.py index 9f902da7d2f..68c2baffbdb 100644 --- a/homeassistant/components/kostal_plenticore/const.py +++ b/homeassistant/components/kostal_plenticore/const.py @@ -10,8 +10,12 @@ from homeassistant.const import ( ATTR_ICON, ATTR_UNIT_OF_MEASUREMENT, DEVICE_CLASS_BATTERY, + DEVICE_CLASS_CURRENT, DEVICE_CLASS_ENERGY, DEVICE_CLASS_POWER, + DEVICE_CLASS_VOLTAGE, + ELECTRIC_CURRENT_AMPERE, + ELECTRIC_POTENTIAL_VOLT, ENERGY_KILO_WATT_HOUR, PERCENTAGE, POWER_WATT, @@ -135,6 +139,28 @@ SENSOR_PROCESS_DATA = [ }, "format_round", ), + ( + "devices:local:pv1", + "U", + "DC1 Voltage", + { + ATTR_UNIT_OF_MEASUREMENT: ELECTRIC_POTENTIAL_VOLT, + ATTR_DEVICE_CLASS: DEVICE_CLASS_VOLTAGE, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + }, + "format_round", + ), + ( + "devices:local:pv1", + "I", + "DC1 Current", + { + ATTR_UNIT_OF_MEASUREMENT: ELECTRIC_CURRENT_AMPERE, + ATTR_DEVICE_CLASS: DEVICE_CLASS_CURRENT, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + }, + "format_float", + ), ( "devices:local:pv2", "P", @@ -146,6 +172,28 @@ SENSOR_PROCESS_DATA = [ }, "format_round", ), + ( + "devices:local:pv2", + "U", + "DC2 Voltage", + { + ATTR_UNIT_OF_MEASUREMENT: ELECTRIC_POTENTIAL_VOLT, + ATTR_DEVICE_CLASS: DEVICE_CLASS_VOLTAGE, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + }, + "format_round", + ), + ( + "devices:local:pv2", + "I", + "DC2 Current", + { + ATTR_UNIT_OF_MEASUREMENT: ELECTRIC_CURRENT_AMPERE, + ATTR_DEVICE_CLASS: DEVICE_CLASS_CURRENT, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + }, + "format_float", + ), ( "devices:local:pv3", "P", @@ -157,6 +205,28 @@ SENSOR_PROCESS_DATA = [ }, "format_round", ), + ( + "devices:local:pv3", + "U", + "DC3 Voltage", + { + ATTR_UNIT_OF_MEASUREMENT: ELECTRIC_POTENTIAL_VOLT, + ATTR_DEVICE_CLASS: DEVICE_CLASS_VOLTAGE, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + }, + "format_round", + ), + ( + "devices:local:pv3", + "I", + "DC3 Current", + { + ATTR_UNIT_OF_MEASUREMENT: ELECTRIC_CURRENT_AMPERE, + ATTR_DEVICE_CLASS: DEVICE_CLASS_CURRENT, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + }, + "format_float", + ), ( "devices:local", "PV2Bat_P", diff --git a/homeassistant/components/kostal_plenticore/helper.py b/homeassistant/components/kostal_plenticore/helper.py index eb4f6ce44a6..2a21cb4ee55 100644 --- a/homeassistant/components/kostal_plenticore/helper.py +++ b/homeassistant/components/kostal_plenticore/helper.py @@ -231,6 +231,14 @@ class PlenticoreDataFormatter: except (TypeError, ValueError): return state + @staticmethod + def format_float(state: str) -> int | str: + """Return the given state value as float rounded to three decimal places.""" + try: + return round(float(state), 3) + except (TypeError, ValueError): + return state + @staticmethod def format_energy(state: str) -> float | str: """Return the given state value as energy value, scaled to kWh."""