diff --git a/packages/modules/chargepoints/openwb_series2_satellit/chargepoint_module.py b/packages/modules/chargepoints/openwb_series2_satellit/chargepoint_module.py index ccfc1712ff..056712f714 100644 --- a/packages/modules/chargepoints/openwb_series2_satellit/chargepoint_module.py +++ b/packages/modules/chargepoints/openwb_series2_satellit/chargepoint_module.py @@ -10,7 +10,6 @@ from modules.common.abstract_device import DeviceDescriptor from modules.common.component_context import SingleComponentUpdateContext from modules.common.fault_state import ComponentInfo, FaultState -from modules.common.hardware_check_context import SeriesHardwareCheckContext from modules.common.store import get_chargepoint_value_store from modules.common.component_state import ChargepointState from modules.common.version_by_telnet import get_version_by_telnet @@ -75,29 +74,30 @@ def get_values(self) -> None: if self.version is not None: with self.__client_error_context: try: - with SeriesHardwareCheckContext(self._client): - if self.version is False: - raise ValueError( - "Firmware des openWB Satellit ist nicht mit openWB 2 kompatibel. " - "Bitte den Support kontaktieren.") - self.delay_second_cp(self.CP0_DELAY) - with self._client.client: - currents = self._client.meter_client.get_currents() - phases_in_use = sum(1 for current in currents if current > 3) - plug_state, charge_state, _ = self._client.evse_client.get_plug_charge_state() + self._client.check_hardware(self.fault_state) + if self.version is False: + raise ValueError( + "Firmware des openWB Satellit ist nicht mit openWB 2 kompatibel. " + "Bitte den Support kontaktieren.") + self.delay_second_cp(self.CP0_DELAY) + with self._client.client: + currents = self._client.meter_client.get_currents() + phases_in_use = sum(1 for current in currents if current > 3) + plug_state, charge_state, _ = self._client.evse_client.get_plug_charge_state() - chargepoint_state = ChargepointState( - power=self._client.meter_client.get_power()[1], - currents=currents, - imported=self._client.meter_client.get_imported(), - exported=0, - voltages=self._client.meter_client.get_voltages(), - plug_state=plug_state, - charge_state=charge_state, - phases_in_use=phases_in_use, - serial_number=self._client.meter_client.get_serial_number() - ) - self.store.set(chargepoint_state) + chargepoint_state = ChargepointState( + power=self._client.meter_client.get_power()[1], + currents=currents, + imported=self._client.meter_client.get_imported(), + exported=0, + voltages=self._client.meter_client.get_voltages(), + plug_state=plug_state, + charge_state=charge_state, + phases_in_use=phases_in_use, + serial_number=self._client.meter_client.get_serial_number() + ) + self.store.set(chargepoint_state) + self.__client_error_context.reset_error_counter() except AttributeError: self._create_client() self._validate_version() @@ -107,16 +107,18 @@ def get_values(self) -> None: def set_current(self, current: float) -> None: if self.version is not None: + if self.__client_error_context.error_counter_exceeded(): + current = 0 with SingleComponentUpdateContext(self.fault_state, update_always=False): with self.__client_error_context: try: - with SeriesHardwareCheckContext(self._client): - self.delay_second_cp(self.CP0_DELAY) - with self._client.client: - if self.version: - self._client.evse_client.set_current(int(current)) - else: - self._client.evse_client.set_current(0) + self._client.check_hardware(self.fault_state) + self.delay_second_cp(self.CP0_DELAY) + with self._client.client: + if self.version: + self._client.evse_client.set_current(int(current)) + else: + self._client.evse_client.set_current(0) except AttributeError: self._create_client() self._validate_version() @@ -126,20 +128,20 @@ def switch_phases(self, phases_to_use: int, duration: int) -> None: with SingleComponentUpdateContext(self.fault_state, update_always=False): with self.__client_error_context: try: - with SeriesHardwareCheckContext(self._client): - with self._client.client: - if phases_to_use == 1: - self._client.client.delegate.write_register( - 0x0001, 256, unit=self.ID_PHASE_SWITCH_UNIT) - time.sleep(1) - self._client.client.delegate.write_register( - 0x0001, 512, unit=self.ID_PHASE_SWITCH_UNIT) - else: - self._client.client.delegate.write_register( - 0x0002, 512, unit=self.ID_PHASE_SWITCH_UNIT) - time.sleep(1) - self._client.client.delegate.write_register( - 0x0002, 256, unit=self.ID_PHASE_SWITCH_UNIT) + self._client.check_hardware(self.fault_state) + with self._client.client: + if phases_to_use == 1: + self._client.client.delegate.write_register( + 0x0001, 256, unit=self.ID_PHASE_SWITCH_UNIT) + time.sleep(1) + self._client.client.delegate.write_register( + 0x0001, 512, unit=self.ID_PHASE_SWITCH_UNIT) + else: + self._client.client.delegate.write_register( + 0x0002, 512, unit=self.ID_PHASE_SWITCH_UNIT) + time.sleep(1) + self._client.client.delegate.write_register( + 0x0002, 256, unit=self.ID_PHASE_SWITCH_UNIT) except AttributeError: self._create_client() self._validate_version() diff --git a/packages/modules/common/hardware_check.py b/packages/modules/common/hardware_check.py index 8d620c75f4..884f78940d 100644 --- a/packages/modules/common/hardware_check.py +++ b/packages/modules/common/hardware_check.py @@ -63,7 +63,7 @@ def handle_exception(self: ClientHandlerProtocol, exception: Exception): else: return False - def check_hardware(self: ClientHandlerProtocol): + def check_hardware(self: ClientHandlerProtocol, fault_state: FaultState): try: if self.evse_client.get_firmware_version() > EVSE_MIN_FIRMWARE: @@ -81,7 +81,7 @@ def check_hardware(self: ClientHandlerProtocol): if meter_check_passed is False: raise Exception(meter_error_msg) elif meter_check_passed and meter_error_msg is not None: - self.fault_state.warning(meter_error_msg) + fault_state.warning(meter_error_msg) if evse_check_passed is False: raise Exception(EVSE_BROKEN) diff --git a/packages/modules/common/hardware_check_context.py b/packages/modules/common/hardware_check_context.py deleted file mode 100644 index 112f5ee939..0000000000 --- a/packages/modules/common/hardware_check_context.py +++ /dev/null @@ -1,13 +0,0 @@ -from modules.internal_chargepoint_handler.clients import ClientHandler - - -class SeriesHardwareCheckContext: - def __init__(self, client: ClientHandler): - self.client = client - - def __enter__(self): - self.client.check_hardware() - return None - - def __exit__(self, exception_type, exception, exception_traceback) -> bool: - return True diff --git a/packages/modules/internal_chargepoint_handler/chargepoint_module.py b/packages/modules/internal_chargepoint_handler/chargepoint_module.py index d834775ee0..a7cacca31c 100644 --- a/packages/modules/internal_chargepoint_handler/chargepoint_module.py +++ b/packages/modules/internal_chargepoint_handler/chargepoint_module.py @@ -63,7 +63,7 @@ def store_state(chargepoint_state: ChargepointState) -> None: self.store_internal.set(chargepoint_state) self.store_internal.update() try: - self._client.check_hardware() + self._client.check_hardware(self.fault_state) powers, power = self._client.meter_client.get_power() if power < self.PLUG_STANDBY_POWER_THRESHOLD: power = 0 diff --git a/packages/modules/internal_chargepoint_handler/clients.py b/packages/modules/internal_chargepoint_handler/clients.py index 3bcfe2930c..f1f8978c0a 100644 --- a/packages/modules/internal_chargepoint_handler/clients.py +++ b/packages/modules/internal_chargepoint_handler/clients.py @@ -36,11 +36,10 @@ def __init__(self, fault_state: FaultState) -> None: self.client = client self.local_charge_point_num = local_charge_point_num - self.fault_state = fault_state self.evse_client = self._evse_factory(client, evse_ids) self.meter_client = self.find_meter_client(CP0_METERS if self.local_charge_point_num == 0 else CP1_METERS, client) - self.check_hardware() + self.check_hardware(fault_state) self.read_error = 0 def _evse_factory(self, client: Union[ModbusSerialClient_, ModbusTcpClient_], evse_ids: List[int]) -> evse.Evse: