Skip to content

Commit 5e9f703

Browse files
authored
fix error handling pro causing negative chargelog entries (#2436)
1 parent 8ddb00d commit 5e9f703

4 files changed

Lines changed: 20 additions & 15 deletions

File tree

packages/helpermodules/utils/error_handling.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ def __exit__(self, exception_type, exception, exception_traceback) -> bool:
2929
self.error_timestamp = timecheck.create_timestamp()
3030
Pub().pub(self.topic, self.error_timestamp)
3131
log.error(exception)
32-
if self.hide_exception is False or timecheck.check_timestamp(self.error_timestamp, self.timeout) is False:
32+
if (self.hide_exception is False or
33+
timecheck.check_timestamp(self.error_timestamp, self.timeout + 10) is False):
34+
# Fehlermeldung als abgelaufen markieren, bevor die Exception gesetzt wird, mit der Exception werden
35+
# keine Werte mehr gepublished.
3336
return False
3437
return True
3538

packages/modules/chargepoints/openwb_pro/chargepoint_module.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ def __init__(self, config: OpenWBPro) -> None:
2929
self.__session = req.get_http_session()
3030
self.client_error_context = ErrorTimerContext(
3131
f"openWB/set/chargepoint/{self.config.id}/get/error_timestamp", CP_ERROR, hide_exception=True)
32-
self.old_chargepoint_state = ChargepointState()
3332

3433
with SingleComponentUpdateContext(self.fault_state, update_always=False):
3534
with self.client_error_context:
@@ -58,11 +57,12 @@ def set_current(self, current: float) -> None:
5857
def get_values(self) -> None:
5958
with SingleComponentUpdateContext(self.fault_state):
6059
chargepoint_state = self.request_values()
61-
self.store.set(chargepoint_state)
60+
if chargepoint_state is not None:
61+
# bei Fehler, aber Fehlezähler noch nicht abgelaufen, keine Werte mehr publishen.
62+
self.store.set(chargepoint_state)
6263

6364
def request_values(self) -> ChargepointState:
6465
with self.client_error_context:
65-
chargepoint_state = self.old_chargepoint_state
6666
ip_address = self.config.configuration.ip_address
6767
json_rsp = self.__session.get('http://'+ip_address+'/connect.php').json()
6868

@@ -97,15 +97,17 @@ def request_values(self) -> ChargepointState:
9797
chargepoint_state.rfid_timestamp = json_rsp["rfid_timestamp"]
9898

9999
self.validate_values(chargepoint_state)
100-
self.old_chargepoint_state = chargepoint_state
101100
self.client_error_context.reset_error_counter()
101+
return chargepoint_state
102102
if self.client_error_context.error_counter_exceeded():
103103
chargepoint_state = ChargepointState()
104104
chargepoint_state.plug_state = False
105105
chargepoint_state.charge_state = False
106-
chargepoint_state.imported = self.old_chargepoint_state.imported
107-
chargepoint_state.exported = self.old_chargepoint_state.exported
108-
return chargepoint_state
106+
chargepoint_state.imported = None # bei None werden keine Werte gepublished
107+
chargepoint_state.exported = None
108+
return chargepoint_state
109+
else:
110+
return None
109111

110112
def validate_values(self, chargepoint_state: ChargepointState) -> None:
111113
if chargepoint_state.charge_state is False and max(chargepoint_state.currents) > 1:

packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,10 @@ def sample_chargepoint_state_is_reset():
161161
pytest.param(sample(), 1652683242, None, None, sample_chargepoint_state(),
162162
id="Timestamp gesetzt, kein Fehler aufgetreten"),
163163
pytest.param(sample_wrong_charge_state(), None, None, 1652683252,
164-
sample_wrong_charge_state_chargepoint_state(), id="kein Timestamp gesetzt, Fehler aufgetreten"),
165-
pytest.param(sample_wrong_charge_state(), 1652683242, None, 1652683242,
166-
sample_wrong_charge_state_chargepoint_state(),
164+
None, id="kein Timestamp gesetzt, Fehler aufgetreten"),
165+
pytest.param(sample_wrong_charge_state(), 1652683242, None, 1652683242, None,
167166
id="Timestamp gesetzt, Fehler aufgetreten, Timestamp nicht abgelaufen"),
168-
pytest.param(sample_wrong_charge_state(), 1652683182, ValueError, 1652683182,
167+
pytest.param(sample_wrong_charge_state(), 1652683112, ValueError, 1652683112,
169168
sample_chargepoint_state_is_reset(),
170169
id="Timestamp gesetzt, Fehler aufgetreten, Timestamp abgelaufen"),
171170
])
@@ -185,7 +184,6 @@ def test_error_timestamp(sample_state,
185184

186185
cp = chargepoint_module.ChargepointModule(OpenWBPro(configuration=OpenWBProConfiguration(ip_address=SAMPLE_IP)))
187186
cp.client_error_context.error_timestamp = error_timestamp
188-
cp.old_chargepoint_state = sample_chargepoint_state
189187

190188
# evaluation
191189
if expected_exception is not None:

packages/modules/common/store/_chargepoint.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ def update(self):
3636
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/voltages", self.state.voltages, 2)
3737
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/currents", self.state.currents, 2)
3838
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/power_factors", self.state.power_factors, 2)
39-
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/imported", self.state.imported, 2)
40-
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/exported", self.state.exported, 2)
39+
if self.state.imported is not None:
40+
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/imported", self.state.imported, 2)
41+
if self.state.exported is not None:
42+
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/exported", self.state.exported, 2)
4143
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/power", self.state.power, 2)
4244
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/powers", self.state.powers, 2)
4345
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/frequency", self.state.frequency, 2)

0 commit comments

Comments
 (0)