Re-add missing Growatt TLX values (#84040)
* Growatt - Re-adding missing TLX values (#81470) * Growatt - Added missing files to .coveragerc * Growatt - Correcting TLX Voltage types * Growatt - Addressing review comments
This commit is contained in:
parent
2b3123b925
commit
c97b48cf3b
4 changed files with 268 additions and 4 deletions
|
@ -471,7 +471,9 @@ omit =
|
||||||
homeassistant/components/greenwave/light.py
|
homeassistant/components/greenwave/light.py
|
||||||
homeassistant/components/group/notify.py
|
homeassistant/components/group/notify.py
|
||||||
homeassistant/components/growatt_server/__init__.py
|
homeassistant/components/growatt_server/__init__.py
|
||||||
|
homeassistant/components/growatt_server/const.py
|
||||||
homeassistant/components/growatt_server/sensor.py
|
homeassistant/components/growatt_server/sensor.py
|
||||||
|
homeassistant/components/growatt_server/sensor_types/*
|
||||||
homeassistant/components/gstreamer/media_player.py
|
homeassistant/components/gstreamer/media_player.py
|
||||||
homeassistant/components/gtfs/sensor.py
|
homeassistant/components/gtfs/sensor.py
|
||||||
homeassistant/components/guardian/__init__.py
|
homeassistant/components/guardian/__init__.py
|
||||||
|
|
|
@ -315,6 +315,25 @@ class GrowattData:
|
||||||
"%s - No drop detected, using API value", entity_description.name
|
"%s - No drop detected, using API value", entity_description.name
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Lifetime total values should always be increasing, they will never reset, however
|
||||||
|
# the API sometimes returns 0 values when the clock turns to 00:00 local time
|
||||||
|
# in that scenario we should just return the previous value
|
||||||
|
# Scenarios:
|
||||||
|
# 1 - System has a genuine 0 value when it it first commissioned:
|
||||||
|
# - will return 0 until a non-zero value is registered
|
||||||
|
# 2 - System has been running fine but temporarily resets to 0 briefly at midnight:
|
||||||
|
# - will return the previous value
|
||||||
|
# 3 - HA is restarted during the midnight 'outage' - Not handled:
|
||||||
|
# - Previous value will not exist meaning 0 will be returned
|
||||||
|
# - This is an edge case that would be better handled by looking up the previous
|
||||||
|
# value of the entity from the recorder
|
||||||
|
if entity_description.never_resets and api_value == 0 and previous_value:
|
||||||
|
_LOGGER.debug(
|
||||||
|
"API value is 0, but this value should never reset, returning previous value (%s) instead",
|
||||||
|
previous_value,
|
||||||
|
)
|
||||||
|
return_value = previous_value
|
||||||
|
|
||||||
self.previous_values[variable] = return_value
|
self.previous_values[variable] = return_value
|
||||||
|
|
||||||
return return_value
|
return return_value
|
||||||
|
|
|
@ -20,3 +20,4 @@ class GrowattSensorEntityDescription(SensorEntityDescription, GrowattRequiredKey
|
||||||
precision: int | None = None
|
precision: int | None = None
|
||||||
currency: bool = False
|
currency: bool = False
|
||||||
previous_value_drop_threshold: float | None = None
|
previous_value_drop_threshold: float | None = None
|
||||||
|
never_resets: bool = False
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
"""Growatt Sensor definitions for the TLX type."""
|
"""
|
||||||
|
Growatt Sensor definitions for the TLX type.
|
||||||
|
|
||||||
|
TLX Type is also shown on the UI as: "MIN/MIC/MOD/NEO"
|
||||||
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass
|
from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass
|
||||||
|
@ -7,6 +11,7 @@ from homeassistant.const import (
|
||||||
ELECTRIC_POTENTIAL_VOLT,
|
ELECTRIC_POTENTIAL_VOLT,
|
||||||
ENERGY_KILO_WATT_HOUR,
|
ENERGY_KILO_WATT_HOUR,
|
||||||
FREQUENCY_HERTZ,
|
FREQUENCY_HERTZ,
|
||||||
|
PERCENTAGE,
|
||||||
POWER_WATT,
|
POWER_WATT,
|
||||||
TEMP_CELSIUS,
|
TEMP_CELSIUS,
|
||||||
)
|
)
|
||||||
|
@ -29,8 +34,9 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
|
||||||
api_key="eacTotal",
|
api_key="eacTotal",
|
||||||
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
device_class=SensorDeviceClass.ENERGY,
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
state_class=SensorStateClass.TOTAL,
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
precision=1,
|
precision=1,
|
||||||
|
never_resets=True,
|
||||||
),
|
),
|
||||||
GrowattSensorEntityDescription(
|
GrowattSensorEntityDescription(
|
||||||
key="tlx_energy_total_input_1",
|
key="tlx_energy_total_input_1",
|
||||||
|
@ -38,8 +44,9 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
|
||||||
api_key="epv1Total",
|
api_key="epv1Total",
|
||||||
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
device_class=SensorDeviceClass.ENERGY,
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
state_class=SensorStateClass.TOTAL,
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
precision=1,
|
precision=1,
|
||||||
|
never_resets=True,
|
||||||
),
|
),
|
||||||
GrowattSensorEntityDescription(
|
GrowattSensorEntityDescription(
|
||||||
key="tlx_energy_today_input_1",
|
key="tlx_energy_today_input_1",
|
||||||
|
@ -80,8 +87,9 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
|
||||||
api_key="epv2Total",
|
api_key="epv2Total",
|
||||||
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
device_class=SensorDeviceClass.ENERGY,
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
state_class=SensorStateClass.TOTAL,
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
precision=1,
|
precision=1,
|
||||||
|
never_resets=True,
|
||||||
),
|
),
|
||||||
GrowattSensorEntityDescription(
|
GrowattSensorEntityDescription(
|
||||||
key="tlx_energy_today_input_2",
|
key="tlx_energy_today_input_2",
|
||||||
|
@ -116,6 +124,101 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
|
||||||
device_class=SensorDeviceClass.POWER,
|
device_class=SensorDeviceClass.POWER,
|
||||||
precision=1,
|
precision=1,
|
||||||
),
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_energy_total_input_3",
|
||||||
|
name="Lifetime total energy input 3",
|
||||||
|
api_key="epv3Total",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
precision=1,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_energy_today_input_3",
|
||||||
|
name="Energy Today Input 3",
|
||||||
|
api_key="epv3Today",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_voltage_input_3",
|
||||||
|
name="Input 3 voltage",
|
||||||
|
api_key="vpv3",
|
||||||
|
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
|
||||||
|
device_class=SensorDeviceClass.VOLTAGE,
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_amperage_input_3",
|
||||||
|
name="Input 3 Amperage",
|
||||||
|
api_key="ipv3",
|
||||||
|
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
|
||||||
|
device_class=SensorDeviceClass.CURRENT,
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_wattage_input_3",
|
||||||
|
name="Input 3 Wattage",
|
||||||
|
api_key="ppv3",
|
||||||
|
native_unit_of_measurement=POWER_WATT,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_energy_total_input_4",
|
||||||
|
name="Lifetime total energy input 4",
|
||||||
|
api_key="epv4Total",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
precision=1,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_energy_today_input_4",
|
||||||
|
name="Energy Today Input 4",
|
||||||
|
api_key="epv4Today",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_voltage_input_4",
|
||||||
|
name="Input 4 voltage",
|
||||||
|
api_key="vpv4",
|
||||||
|
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
|
||||||
|
device_class=SensorDeviceClass.VOLTAGE,
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_amperage_input_4",
|
||||||
|
name="Input 4 Amperage",
|
||||||
|
api_key="ipv4",
|
||||||
|
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
|
||||||
|
device_class=SensorDeviceClass.CURRENT,
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_wattage_input_4",
|
||||||
|
name="Input 4 Wattage",
|
||||||
|
api_key="ppv4",
|
||||||
|
native_unit_of_measurement=POWER_WATT,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_solar_generation_total",
|
||||||
|
name="Lifetime total solar energy",
|
||||||
|
api_key="epvTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
GrowattSensorEntityDescription(
|
GrowattSensorEntityDescription(
|
||||||
key="tlx_internal_wattage",
|
key="tlx_internal_wattage",
|
||||||
name="Internal wattage",
|
name="Internal wattage",
|
||||||
|
@ -187,4 +290,143 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
|
||||||
device_class=SensorDeviceClass.TEMPERATURE,
|
device_class=SensorDeviceClass.TEMPERATURE,
|
||||||
precision=1,
|
precision=1,
|
||||||
),
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_all_batteries_discharge_today",
|
||||||
|
name="All batteries discharged today",
|
||||||
|
api_key="edischargeToday",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_all_batteries_discharge_total",
|
||||||
|
name="Lifetime total all batteries discharged",
|
||||||
|
api_key="edischargeTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_battery_1_discharge_w",
|
||||||
|
name="Battery 1 discharging W",
|
||||||
|
api_key="bdc1DischargePower",
|
||||||
|
native_unit_of_measurement=POWER_WATT,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_battery_1_discharge_total",
|
||||||
|
name="Lifetime total battery 1 discharged",
|
||||||
|
api_key="bdc1DischargeTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_battery_2_discharge_w",
|
||||||
|
name="Battery 2 discharging W",
|
||||||
|
api_key="bdc1DischargePower",
|
||||||
|
native_unit_of_measurement=POWER_WATT,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_battery_2_discharge_total",
|
||||||
|
name="Lifetime total battery 2 discharged",
|
||||||
|
api_key="bdc1DischargeTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_all_batteries_charge_today",
|
||||||
|
name="All batteries charged today",
|
||||||
|
api_key="echargeToday",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_all_batteries_charge_total",
|
||||||
|
name="Lifetime total all batteries charged",
|
||||||
|
api_key="echargeTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_battery_1_charge_w",
|
||||||
|
name="Battery 1 charging W",
|
||||||
|
api_key="bdc1ChargePower",
|
||||||
|
native_unit_of_measurement=POWER_WATT,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_battery_1_charge_total",
|
||||||
|
name="Lifetime total battery 1 charged",
|
||||||
|
api_key="bdc1ChargeTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_battery_2_charge_w",
|
||||||
|
name="Battery 2 charging W",
|
||||||
|
api_key="bdc1ChargePower",
|
||||||
|
native_unit_of_measurement=POWER_WATT,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_battery_2_charge_total",
|
||||||
|
name="Lifetime total battery 2 charged",
|
||||||
|
api_key="bdc1ChargeTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_export_to_grid_today",
|
||||||
|
name="Export to grid today",
|
||||||
|
api_key="etoGridToday",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_export_to_grid_total",
|
||||||
|
name="Lifetime total export to grid",
|
||||||
|
api_key="etoGridTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_load_consumption_today",
|
||||||
|
name="Load consumption today",
|
||||||
|
api_key="elocalLoadToday",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="mix_load_consumption_total",
|
||||||
|
name="Lifetime total load consumption",
|
||||||
|
api_key="elocalLoadTotal",
|
||||||
|
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
never_resets=True,
|
||||||
|
),
|
||||||
|
GrowattSensorEntityDescription(
|
||||||
|
key="tlx_statement_of_charge",
|
||||||
|
name="Statement of charge (SoC)",
|
||||||
|
api_key="bmsSoc",
|
||||||
|
native_unit_of_measurement=PERCENTAGE,
|
||||||
|
device_class=SensorDeviceClass.BATTERY,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Reference in a new issue