Skip to content

Commit

Permalink
Merge pull request openWB#1643 from LKuemmel/client_fault_state
Browse files Browse the repository at this point in the history
fix client handler fault state
  • Loading branch information
LKuemmel authored Jun 24, 2024
2 parents f3dbf2d + 3e3a328 commit 64ac11e
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand All @@ -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()
Expand All @@ -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()
Expand Down
4 changes: 2 additions & 2 deletions packages/modules/common/hardware_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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)

Expand Down
13 changes: 0 additions & 13 deletions packages/modules/common/hardware_check_context.py

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 1 addition & 2 deletions packages/modules/internal_chargepoint_handler/clients.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down

0 comments on commit 64ac11e

Please sign in to comment.