Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
194 changes: 97 additions & 97 deletions homeassistant/components/indevolt/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

from typing import Final

from indevolt_api import (
IndevoltBattery,
IndevoltConfig,
IndevoltGrid,
IndevoltSolar,
IndevoltSystem,
)

DOMAIN: Final = "indevolt"

# Default configurations
Expand All @@ -11,107 +19,99 @@
CONF_SERIAL_NUMBER: Final = "serial_number"
CONF_GENERATION: Final = "generation"

# API write/read keys for energy and value for outdoor/portable mode
ENERGY_MODE_READ_KEY: Final = "7101"
ENERGY_MODE_WRITE_KEY: Final = "47005"
PORTABLE_MODE: Final = 0

# Value for real-time control mode
REALTIME_ACTION_MODE: Final = 4

# API key fields
SENSOR_KEYS: Final[dict[int, list[str]]] = {
1: [
"606",
"7101",
"2101",
"2108",
"2107",
"6000",
"6001",
"6002",
"1501",
"1502",
"1664",
"1665",
"1666",
"1667",
"6105",
"21028",
"1505",
IndevoltSystem.OPERATING_MODE,
IndevoltConfig.READ_ENERGY_MODE,
IndevoltSystem.INPUT_POWER,
IndevoltSystem.OUTPUT_POWER,
IndevoltSystem.TOTAL_INPUT_ENERGY,
IndevoltBattery.POWER,
IndevoltBattery.CHARGE_DISCHARGE_STATE,
IndevoltBattery.SOC,
IndevoltSolar.DC_OUTPUT_POWER,
IndevoltSolar.DAILY_PRODUCTION,
IndevoltSolar.DC_INPUT_POWER_1,
IndevoltSolar.DC_INPUT_POWER_2,
IndevoltSolar.DC_INPUT_POWER_3,
IndevoltSolar.DC_INPUT_POWER_4,
IndevoltConfig.READ_DISCHARGE_LIMIT,
IndevoltGrid.METER_POWER_GEN1,
IndevoltSolar.CUMULATIVE_PRODUCTION,
],
2: [
"606",
"7101",
"2101",
"2108",
"2107",
"6000",
"6001",
"6002",
"1501",
"1502",
"1664",
"1665",
"1666",
"1667",
"142",
"667",
"2104",
"2105",
"11034",
"6004",
"6005",
"6006",
"6007",
"11016",
"2600",
"2612",
"1632",
"1600",
"1633",
"1601",
"1634",
"1602",
"1635",
"1603",
"9008",
"9032",
"9051",
"9070",
"9165",
"9218",
"9000",
"9016",
"9035",
"9054",
"9149",
"9202",
"9012",
"9030",
"9049",
"9068",
"9163",
"9216",
"9004",
"9020",
"9039",
"9058",
"9153",
"9206",
"9013",
"19173",
"19174",
"19175",
"19176",
"19177",
"680",
"2618",
"7171",
"11011",
"11009",
"11010",
"6105",
"1505",
IndevoltSystem.OPERATING_MODE,
IndevoltConfig.READ_ENERGY_MODE,
IndevoltSystem.INPUT_POWER,
IndevoltSystem.OUTPUT_POWER,
IndevoltSystem.TOTAL_INPUT_ENERGY,
IndevoltBattery.POWER,
IndevoltBattery.CHARGE_DISCHARGE_STATE,
IndevoltBattery.SOC,
IndevoltSolar.DC_OUTPUT_POWER,
IndevoltSolar.DAILY_PRODUCTION,
IndevoltSolar.DC_INPUT_POWER_1,
IndevoltSolar.DC_INPUT_POWER_2,
IndevoltSolar.DC_INPUT_POWER_3,
IndevoltSolar.DC_INPUT_POWER_4,
IndevoltBattery.RATED_CAPACITY_GEN2,
IndevoltSystem.BYPASS_POWER,
IndevoltSystem.TOTAL_OUTPUT_ENERGY,
IndevoltSystem.OFF_GRID_OUTPUT_ENERGY,
IndevoltSystem.BYPASS_INPUT_ENERGY,
IndevoltBattery.DAILY_CHARGING_ENERGY,
IndevoltBattery.DAILY_DISCHARGING_ENERGY,
IndevoltBattery.TOTAL_CHARGING_ENERGY,
IndevoltBattery.TOTAL_DISCHARGING_ENERGY,
IndevoltGrid.METER_POWER_GEN2,
IndevoltGrid.VOLTAGE,
IndevoltGrid.FREQUENCY,
IndevoltSolar.DC_INPUT_CURRENT_1,
IndevoltSolar.DC_INPUT_VOLTAGE_1,
IndevoltSolar.DC_INPUT_CURRENT_2,
IndevoltSolar.DC_INPUT_VOLTAGE_2,
IndevoltSolar.DC_INPUT_CURRENT_3,
IndevoltSolar.DC_INPUT_VOLTAGE_3,
IndevoltSolar.DC_INPUT_CURRENT_4,
IndevoltSolar.DC_INPUT_VOLTAGE_4,
IndevoltBattery.MAIN_SERIAL_NUMBER,
IndevoltBattery.PACK_1_SERIAL_NUMBER,
IndevoltBattery.PACK_2_SERIAL_NUMBER,
IndevoltBattery.PACK_3_SERIAL_NUMBER,
IndevoltBattery.PACK_4_SERIAL_NUMBER,
IndevoltBattery.PACK_5_SERIAL_NUMBER,
IndevoltBattery.MAIN_SOC,
IndevoltBattery.PACK_1_SOC,
IndevoltBattery.PACK_2_SOC,
IndevoltBattery.PACK_3_SOC,
IndevoltBattery.PACK_4_SOC,
IndevoltBattery.PACK_5_SOC,
IndevoltBattery.MAIN_TEMPERATURE,
IndevoltBattery.PACK_1_TEMPERATURE,
IndevoltBattery.PACK_2_TEMPERATURE,
IndevoltBattery.PACK_3_TEMPERATURE,
IndevoltBattery.PACK_4_TEMPERATURE,
IndevoltBattery.PACK_5_TEMPERATURE,
IndevoltBattery.MAIN_VOLTAGE,
IndevoltBattery.PACK_1_VOLTAGE,
IndevoltBattery.PACK_2_VOLTAGE,
IndevoltBattery.PACK_3_VOLTAGE,
IndevoltBattery.PACK_4_VOLTAGE,
IndevoltBattery.PACK_5_VOLTAGE,
IndevoltBattery.MAIN_CURRENT,
IndevoltBattery.PACK_1_CURRENT,
IndevoltBattery.PACK_2_CURRENT,
IndevoltBattery.PACK_3_CURRENT,
IndevoltBattery.PACK_4_CURRENT,
IndevoltBattery.PACK_5_CURRENT,
IndevoltConfig.READ_BYPASS,
IndevoltConfig.READ_GRID_CHARGING,
IndevoltConfig.READ_LIGHT,
IndevoltConfig.READ_MAX_AC_OUTPUT_POWER,
IndevoltConfig.READ_INVERTER_INPUT_LIMIT,
IndevoltConfig.READ_FEEDIN_POWER_LIMIT,
IndevoltConfig.READ_DISCHARGE_LIMIT,
IndevoltSolar.CUMULATIVE_PRODUCTION,
],
}
21 changes: 11 additions & 10 deletions homeassistant/components/indevolt/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from indevolt_api import (
IndevoltAPI,
IndevoltConfig,
IndevoltEnergyMode,
IndevoltRealtimeAction,
TimeOutException,
)
Expand All @@ -26,10 +27,6 @@
CONF_SERIAL_NUMBER,
DEFAULT_PORT,
DOMAIN,
ENERGY_MODE_READ_KEY,
ENERGY_MODE_WRITE_KEY,
PORTABLE_MODE,
REALTIME_ACTION_MODE,
SENSOR_KEYS,
)

Expand Down Expand Up @@ -112,10 +109,10 @@ async def async_push_data(self, sensor_key: str, value: Any) -> bool:
raise DeviceConnectionError(f"Device push failed: {err}") from err

async def async_switch_energy_mode(
self, target_mode: int, refresh: bool = True
self, target_mode: IndevoltEnergyMode, refresh: bool = True
) -> None:
"""Attempt to switch device to given energy mode."""
current_mode = self.data.get(ENERGY_MODE_READ_KEY)
current_mode = self.data.get(IndevoltConfig.READ_ENERGY_MODE)

# Ensure current energy mode is known
if current_mode is None:
Expand All @@ -125,7 +122,7 @@ async def async_switch_energy_mode(
)

# Ensure device is not in "Outdoor/Portable mode"
if current_mode == PORTABLE_MODE:
if current_mode == IndevoltEnergyMode.OUTDOOR_PORTABLE:
raise HomeAssistantError(
translation_domain=DOMAIN,
translation_key="energy_mode_change_unavailable_outdoor_portable",
Expand All @@ -134,7 +131,9 @@ async def async_switch_energy_mode(
# Switch energy mode if required
if current_mode != target_mode:
try:
success = await self.async_push_data(ENERGY_MODE_WRITE_KEY, target_mode)
success = await self.async_push_data(
IndevoltConfig.WRITE_ENERGY_MODE, target_mode
)
except (DeviceTimeoutError, DeviceConnectionError) as err:
raise HomeAssistantError(
translation_domain=DOMAIN,
Expand All @@ -158,7 +157,9 @@ async def async_realtime_action(
) -> None:
"""Switch mode, execute action, and refresh for real-time control."""

await self.async_switch_energy_mode(REALTIME_ACTION_MODE, refresh=False)
await self.async_switch_energy_mode(
IndevoltEnergyMode.REAL_TIME_CONTROL, refresh=False
)

success = False

Expand All @@ -180,4 +181,4 @@ async def async_realtime_action(

def get_emergency_soc(self) -> int:
"""Get the emergency SOC value."""
return int(self.data[str(IndevoltConfig.READ_DISCHARGE_LIMIT)])
return int(self.data[IndevoltConfig.READ_DISCHARGE_LIMIT])
16 changes: 9 additions & 7 deletions homeassistant/components/indevolt/diagnostics.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

from typing import Any

from indevolt_api import IndevoltBattery, IndevoltSystem

from homeassistant.components.diagnostics import async_redact_data
from homeassistant.const import CONF_HOST
from homeassistant.core import HomeAssistant
Expand All @@ -15,13 +17,13 @@
TO_REDACT = {
CONF_HOST,
CONF_SERIAL_NUMBER,
"0",
"9008",
"9032",
"9051",
"9070",
"9218",
"9165",
IndevoltSystem.SERIAL_NUMBER,
IndevoltBattery.MAIN_SERIAL_NUMBER,
IndevoltBattery.PACK_1_SERIAL_NUMBER,
IndevoltBattery.PACK_2_SERIAL_NUMBER,
IndevoltBattery.PACK_3_SERIAL_NUMBER,
IndevoltBattery.PACK_4_SERIAL_NUMBER,
IndevoltBattery.PACK_5_SERIAL_NUMBER,
}


Expand Down
18 changes: 10 additions & 8 deletions homeassistant/components/indevolt/number.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from dataclasses import dataclass, field
from typing import Final

from indevolt_api import IndevoltConfig

from homeassistant.components.number import (
NumberDeviceClass,
NumberEntity,
Expand Down Expand Up @@ -37,8 +39,8 @@ class IndevoltNumberEntityDescription(NumberEntityDescription):
key="discharge_limit",
generation=[2],
translation_key="discharge_limit",
read_key="6105",
write_key="1142",
read_key=IndevoltConfig.READ_DISCHARGE_LIMIT,
write_key=IndevoltConfig.WRITE_DISCHARGE_LIMIT,
native_min_value=0,
native_max_value=100,
native_step=1,
Expand All @@ -48,8 +50,8 @@ class IndevoltNumberEntityDescription(NumberEntityDescription):
key="max_ac_output_power",
generation=[2],
translation_key="max_ac_output_power",
read_key="11011",
write_key="1147",
read_key=IndevoltConfig.READ_MAX_AC_OUTPUT_POWER,
write_key=IndevoltConfig.WRITE_MAX_AC_OUTPUT_POWER,
native_min_value=0,
native_max_value=2400,
native_step=100,
Expand All @@ -60,8 +62,8 @@ class IndevoltNumberEntityDescription(NumberEntityDescription):
key="inverter_input_limit",
generation=[2],
translation_key="inverter_input_limit",
read_key="11009",
write_key="1138",
read_key=IndevoltConfig.READ_INVERTER_INPUT_LIMIT,
write_key=IndevoltConfig.WRITE_INVERTER_INPUT_LIMIT,
native_min_value=100,
native_max_value=2400,
native_step=100,
Expand All @@ -72,8 +74,8 @@ class IndevoltNumberEntityDescription(NumberEntityDescription):
key="feedin_power_limit",
generation=[2],
translation_key="feedin_power_limit",
read_key="11010",
write_key="1146",
read_key=IndevoltConfig.READ_FEEDIN_POWER_LIMIT,
write_key=IndevoltConfig.WRITE_FEEDIN_POWER_LIMIT,
native_min_value=0,
native_max_value=2400,
native_step=100,
Expand Down
Loading
Loading