Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion packages/helpermodules/utils/error_handling.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ def __exit__(self, exception_type, exception, exception_traceback) -> bool:
self.error_timestamp = timecheck.create_timestamp()
Pub().pub(self.topic, self.error_timestamp)
log.error(exception)
if self.hide_exception is False or timecheck.check_timestamp(self.error_timestamp, self.timeout) is False:
if (self.hide_exception is False or
timecheck.check_timestamp(self.error_timestamp, self.timeout + 10) is False):
# Fehlermeldung als abgelaufen markieren, bevor die Exception gesetzt wird, mit der Exception werden
# keine Werte mehr gepublished.
return False
return True

Expand Down
16 changes: 9 additions & 7 deletions packages/modules/chargepoints/openwb_pro/chargepoint_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ def __init__(self, config: OpenWBPro) -> None:
self.__session = req.get_http_session()
self.client_error_context = ErrorTimerContext(
f"openWB/set/chargepoint/{self.config.id}/get/error_timestamp", CP_ERROR, hide_exception=True)
self.old_chargepoint_state = ChargepointState()

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

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

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

self.validate_values(chargepoint_state)
self.old_chargepoint_state = chargepoint_state
self.client_error_context.reset_error_counter()
return chargepoint_state
if self.client_error_context.error_counter_exceeded():
chargepoint_state = ChargepointState()
chargepoint_state.plug_state = False
chargepoint_state.charge_state = False
chargepoint_state.imported = self.old_chargepoint_state.imported
chargepoint_state.exported = self.old_chargepoint_state.exported
return chargepoint_state
chargepoint_state.imported = None # bei None werden keine Werte gepublished
chargepoint_state.exported = None
return chargepoint_state
else:
return None

def validate_values(self, chargepoint_state: ChargepointState) -> None:
if chargepoint_state.charge_state is False and max(chargepoint_state.currents) > 1:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,10 @@ def sample_chargepoint_state_is_reset():
pytest.param(sample(), 1652683242, None, None, sample_chargepoint_state(),
id="Timestamp gesetzt, kein Fehler aufgetreten"),
pytest.param(sample_wrong_charge_state(), None, None, 1652683252,
sample_wrong_charge_state_chargepoint_state(), id="kein Timestamp gesetzt, Fehler aufgetreten"),
pytest.param(sample_wrong_charge_state(), 1652683242, None, 1652683242,
sample_wrong_charge_state_chargepoint_state(),
None, id="kein Timestamp gesetzt, Fehler aufgetreten"),
pytest.param(sample_wrong_charge_state(), 1652683242, None, 1652683242, None,
id="Timestamp gesetzt, Fehler aufgetreten, Timestamp nicht abgelaufen"),
pytest.param(sample_wrong_charge_state(), 1652683182, ValueError, 1652683182,
pytest.param(sample_wrong_charge_state(), 1652683112, ValueError, 1652683112,
sample_chargepoint_state_is_reset(),
id="Timestamp gesetzt, Fehler aufgetreten, Timestamp abgelaufen"),
])
Expand All @@ -185,7 +184,6 @@ def test_error_timestamp(sample_state,

cp = chargepoint_module.ChargepointModule(OpenWBPro(configuration=OpenWBProConfiguration(ip_address=SAMPLE_IP)))
cp.client_error_context.error_timestamp = error_timestamp
cp.old_chargepoint_state = sample_chargepoint_state

# evaluation
if expected_exception is not None:
Expand Down
6 changes: 4 additions & 2 deletions packages/modules/common/store/_chargepoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@ def update(self):
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/voltages", self.state.voltages, 2)
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/currents", self.state.currents, 2)
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/power_factors", self.state.power_factors, 2)
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/imported", self.state.imported, 2)
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/exported", self.state.exported, 2)
if self.state.imported is not None:
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/imported", self.state.imported, 2)
if self.state.exported is not None:
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/exported", self.state.exported, 2)
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/power", self.state.power, 2)
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/powers", self.state.powers, 2)
pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/frequency", self.state.frequency, 2)
Expand Down