Skip to content

Commit

Permalink
fix number entities conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
Pho3niX90 committed Feb 20, 2025
1 parent 97b64aa commit 56b8c4d
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 14 deletions.
2 changes: 1 addition & 1 deletion custom_components/solis_modbus/modbus_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ async def _execute_write_holding_register(self, register, value):
_LOGGER.error(f"Failed to write holding register {register} with value {value}, int_value = {int_value}: {result}")
return None

cache_save(self.hass, int_register, int_value)
cache_save(self.hass, int_register, result.registers[0])
self.hass.bus.async_fire(DOMAIN, {REGISTER: int_register, VALUE: result.registers[0], CONTROLLER: self.host})

return result
Expand Down
7 changes: 4 additions & 3 deletions custom_components/solis_modbus/sensors/solis_base_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,12 @@ def get_raw_values(self):

@property
def get_value(self):
return self._convert_raw_value()
return self._convert_raw_value(self.get_raw_values)

def _convert_raw_value(self):
values = self.get_raw_values
def convert_value(self, value: List[int]):
return self._convert_raw_value(value)

def _convert_raw_value(self, values: List[int]):
if None in values:
return None

Expand Down
15 changes: 5 additions & 10 deletions custom_components/solis_modbus/sensors/solis_number_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@ def handle_modbus_update(self, event):
_LOGGER.debug(f"not all values received yet = {self._received_values}")
return

new_value = self.base_sensor.get_value
new_value = self.base_sensor.convert_value([updated_value])

# Clear received values after update
self._received_values.clear()

# Update state if valid value exists
if new_value is not None:
self._attr_native_value = round(new_value / self._multiplier)
self._attr_native_value = new_value
self.schedule_update_ha_state()

def set_native_value(self, value):
Expand All @@ -88,16 +88,11 @@ def set_native_value(self, value):
return

# 🔹 Handle multi-register writing
if len(self._register) == 1:
register_value = round(value * self._multiplier)
elif len(self._register) == 2:
# Convert the value into two 16-bit registers
int_value = round(value * self._multiplier)
register_value = [(int_value >> 16) & 0xFFFF, int_value & 0xFFFF]
else:
_LOGGER.warning("More than 2 registers not yet supported for writing.")
if len(self._register) != 1:
return

register_value = round(value / self._multiplier)

# Write to Modbus controller
self.hass.create_task(
self.base_sensor.controller.async_write_holding_register(self._register[0], int(register_value))
Expand Down

0 comments on commit 56b8c4d

Please sign in to comment.