Skip to content

Commit ca54f76

Browse files
committed
Bump version to 1.0.5 in manifest.json; update AC charger system state descriptions and improve switch logic for charger power control
1 parent c7faea7 commit ca54f76

File tree

4 files changed

+10
-137
lines changed

4 files changed

+10
-137
lines changed

custom_components/sigen/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@
2121
"loggers": ["custom_components.sigen"],
2222
"quality_scale": "custom",
2323
"requirements": ["pymodbus>=3.0.0"],
24-
"version": "1.0.4"
24+
"version": "1.0.5"
2525
}

custom_components/sigen/modbus.py

Lines changed: 0 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -569,23 +569,6 @@ async def async_write_registers(
569569
if register_type in [RegisterType.HOLDING, RegisterType.WRITE_ONLY]:
570570
tried_offset = False
571571
last_error = None
572-
# Try offset addressing first if address >= 40001
573-
# if address >= 40001:
574-
# offset_address = address - 40001
575-
# _LOGGER.debug(
576-
# "Trying write_registers at offset address %s (orig %s) with values %s for slave %s",
577-
# offset_address, address, values, slave_id
578-
# )
579-
# result = await client.write_registers(
580-
# address=offset_address, values=values, slave=slave_id
581-
# )
582-
# if not result.isError():
583-
# _LOGGER.debug("Successfully wrote to registers at offset address %s", offset_address)
584-
# return
585-
# _LOGGER.debug("Offset write failed, will try original address. Error: %s", result)
586-
# last_error = result
587-
# tried_offset = True
588-
# Try original address if not tried yet or offset failed
589572
_LOGGER.debug(
590573
"Trying write_registers at original address %s with values %s for slave %s",
591574
address, values, slave_id
@@ -1001,116 +984,6 @@ async def async_write_parameter(
1001984
slave_id, value, register_def.address,
1002985
register_def.register_type, register_def.data_type, register_def.gain
1003986
)
1004-
1005-
# === Plant-Specific Handling ===
1006-
# Certain plant registers require special handling due to Modbus quirks
1007-
if device_type == "plant":
1008-
key = self._get_connection_key(device_info) # Get connection key for client/lock
1009-
# plant_info is guaranteed to be a dict here
1010-
1011-
# Special handling for plant_remote_ems_enable register
1012-
# if register_name == "plant_remote_ems_enable":
1013-
# _LOGGER.debug("Special handling for plant_remote_ems_enable register")
1014-
# approaches = [
1015-
# {"function": "write_registers", "address": register_def.address,
1016-
# "values": [int(value)]},
1017-
# {"function": "write_register", "address": register_def.address,
1018-
# "value": int(value)},
1019-
# {"function": "write_registers", "address": register_def.address - 40001,
1020-
# "values": [int(value)]},
1021-
# {"function": "write_register", "address": register_def.address - 40001,
1022-
# "value": int(value)},
1023-
# ]
1024-
# last_error = None
1025-
# success = False
1026-
# try:
1027-
# async with self._locks[key]:
1028-
# client = await self._get_client(device_info)
1029-
# for approach in approaches:
1030-
# try:
1031-
# _LOGGER.debug(
1032-
# "Plant write attempt: %s", approach['description'] \
1033-
# if 'description' in approach \
1034-
# else f"{approach['function']} @ {approach['address']}")
1035-
# if approach["function"] == "write_registers":
1036-
# result = await client.write_registers(
1037-
# address=approach["address"],
1038-
# values=approach["values"],
1039-
# slave=slave_id
1040-
# )
1041-
# else:
1042-
# result = await client.write_register(
1043-
# address=approach["address"],
1044-
# value=approach["value"],
1045-
# slave=slave_id
1046-
# )
1047-
# if not result.isError():
1048-
# success = True
1049-
# break
1050-
# last_error = result
1051-
# except Exception as ex_inner:
1052-
# last_error = ex_inner
1053-
# if not success:
1054-
# raise SigenergyModbusError("Failed plant_remote_ems_enable write after "
1055-
# f"all attempts. Last error: {last_error}")
1056-
# return # Success
1057-
# except (ConnectionException, ModbusException, SigenergyModbusError) as ex_outer:
1058-
# self._connected[key] = False
1059-
# raise SigenergyModbusError(f"Error during special plant write: {ex_outer}") \
1060-
# from ex_outer
1061-
# except Exception as ex_outer:
1062-
# raise SigenergyModbusError("Unexpected error during special plant write:"
1063-
# f" {ex_outer}") from ex_outer
1064-
1065-
# Special handling for U32/S32 registers
1066-
# if register_def.data_type in [DataType.U32, DataType.S32]:
1067-
# _LOGGER.debug("Special handling for U32/S32 register %s", register_name)
1068-
# encoded_values = self._encode_value(value=value, data_type=register_def.data_type,
1069-
# gain=register_def.gain)
1070-
# _LOGGER.debug("Encoded values for %s: %s", register_name, encoded_values)
1071-
# approaches = [
1072-
# {"address": register_def.address},
1073-
# {"address": register_def.address - 40001},
1074-
# {"address": register_def.address - 40000},
1075-
# {"address": register_def.address % 10000},
1076-
# ]
1077-
# last_error = None
1078-
# success = False
1079-
# try:
1080-
# async with self._locks[key]:
1081-
# client = await self._get_client(device_info)
1082-
# for approach in approaches:
1083-
# try:
1084-
# _LOGGER.debug("Plant U32/S32 write attempt: write_registers @ %s",
1085-
# approach['address'])
1086-
# result = await client.write_registers(
1087-
# address=approach["address"],
1088-
# values=encoded_values,
1089-
# slave=slave_id
1090-
# )
1091-
# if not result.isError():
1092-
# success = True
1093-
# break
1094-
# last_error = result
1095-
# except Exception as ex_inner:
1096-
# last_error = ex_inner
1097-
# if not success:
1098-
# raise SigenergyModbusError(
1099-
# f"Failed U32/S32 write for {register_name} after all attempts. "
1100-
# f"Last error: {last_error}"
1101-
# )
1102-
# return # Success
1103-
# except (ConnectionException, ModbusException, SigenergyModbusError) as ex_outer:
1104-
# self._connected[key] = False
1105-
# raise SigenergyModbusError("Error during special plant U32/S32 write:"\
1106-
# f" {ex_outer}") from ex_outer
1107-
# except Exception as ex_outer:
1108-
# raise SigenergyModbusError("Unexpected error during special plant " \
1109-
# f"U32/S32 write: {ex_outer}") from ex_outer
1110-
1111-
# === General Write Logic ===
1112-
# (Executes if device_type is not 'plant' or if it's a plant register
1113-
# without special handling)
1114987
encoded_values = self._encode_value(
1115988
value=value,
1116989
data_type=register_def.data_type,

custom_components/sigen/sensor.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -565,14 +565,14 @@ def native_value(self) -> Any:
565565
}.get(value, f"Unknown: {value}")
566566
if self.entity_description.key == "ac_charger_system_state":
567567
return {
568-
0: "System Init",
569-
1: "A1/A2",
570-
2: "B1",
571-
3: "B2",
572-
4: "C1",
573-
5: "C2",
574-
6: "F",
575-
7: "E",
568+
0: "Initializing",
569+
1: "Not Connected",
570+
2: "Reserving - Charger & EV Not Ready",
571+
3: "Preparing - Charger Ready, EV Not Ready",
572+
4: "EV Ready, Charger Not Ready",
573+
5: "Charging",
574+
6: "Fault",
575+
7: "Error",
576576
}.get(value, f"Unknown: {value}")
577577
if self.entity_description.key == "inverter_output_type":
578578
return {0: "Three Phase", 1: "Single Phase"}.get(value, f"Unknown: {value}")

custom_components/sigen/switch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class SigenergySwitchEntityDescription(SwitchEntityDescription):
103103
name="AC Charger Power",
104104
icon="mdi:ev-station",
105105
# identifier here will be ac_charger_name
106-
is_on_fn=lambda data, identifier: data["ac_chargers"].get(identifier, {}).get("ac_charger_system_state") > 0,
106+
is_on_fn=lambda data, identifier: data["ac_chargers"].get(identifier, {}).get("ac_charger_system_state") not in ("Initializing", "Fault", "Error", "Not Connected"),
107107
turn_on_fn=lambda coordinator, identifier: coordinator.async_write_parameter("ac_charger", identifier, "ac_charger_start_stop", 0),
108108
turn_off_fn=lambda coordinator, identifier: coordinator.async_write_parameter("ac_charger", identifier, "ac_charger_start_stop", 1),
109109
),

0 commit comments

Comments
 (0)