Skip to content

Commit 673b77b

Browse files
committed
subscribe secondary data
1 parent b073500 commit 673b77b

8 files changed

Lines changed: 36 additions & 125 deletions

File tree

packages/helpermodules/update_config.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from control.chargepoint.chargepoint_template import get_chargepoint_template_default
1818
from helpermodules import timecheck
1919
from helpermodules import hardware_configuration
20+
from helpermodules import pub
2021
from helpermodules.broker import BrokerClient
2122
from helpermodules.abstract_plans import Limit
2223
from helpermodules.constants import NO_ERROR
@@ -56,7 +57,7 @@
5657

5758
class UpdateConfig:
5859

59-
DATASTORE_VERSION = 87
60+
DATASTORE_VERSION = 88
6061

6162
valid_topic = [
6263
"^openWB/bat/config/bat_control_permitted$",
@@ -2338,3 +2339,20 @@ def upgrade_datastore_86(self) -> None:
23382339
"für die Speichersteuerung. Die Speichersteuerung war bisher bereits verfügbar, ist"
23392340
" jedoch bis zum Akzeptieren standardmäßig deaktiviert.", MessageType.WARNING)
23402341
self.__update_topic("openWB/system/datastore_version", 87)
2342+
2343+
def upgrade_datastore_87(self) -> None:
2344+
def upgrade(topic: str, payload) -> None:
2345+
if re.search("openWB/chargepoint/[0-9]+/config", topic) is not None:
2346+
config = decode_payload(payload)
2347+
if config["type"] == "external_openwb":
2348+
log.info(f"Update an LP {config['name']} angestoßen.")
2349+
ip_address = config["configuration"]["ip_address"]
2350+
pub.pub_single("openWB/set/command/primary/todo",
2351+
json.dumps({"command": "systemUpdate",
2352+
"data": {"branch": decode_payload(self.all_received_topics[
2353+
"openWB/system/current_branch"]),
2354+
"tag": "*HEAD*"}}),
2355+
ip_address,
2356+
no_json=True)
2357+
self._loop_all_received_topics(upgrade)
2358+
self.__update_topic("openWB/system/datastore_version", 88)

packages/modules/chargepoints/openwb_pro/chargepoint_module.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,12 @@ def __init__(self, config: OpenWBPro) -> None:
3636
'http://' + self.config.configuration.ip_address + '/connect.php',
3737
data={'heartbeatenabled': '1'})
3838

39-
def set_internal_context_handlers(self, hierarchy_id: int, internal_cp: InternalChargepoint, parent_hostname: str):
39+
def set_internal_context_handlers(self, hierarchy_id: int, internal_cp: InternalChargepoint):
4040
self.fault_state = FaultState(ComponentInfo(
4141
self.config.id,
4242
"Ladepunkt "+str(self.config.id),
4343
"internal_chargepoint",
44-
hierarchy_id=hierarchy_id,
45-
parent_hostname=parent_hostname))
44+
hierarchy_id=hierarchy_id))
4645
self.client_error_context = ErrorTimerContext(
4746
f"openWB/set/internal_chargepoint/{self.config.id}/get/error_timestamp", CP_ERROR, hide_exception=True)
4847
self.client_error_context.error_timestamp = internal_cp.get.error_timestamp

packages/modules/common/fault_state.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,20 @@ def __init__(self,
1717
name: str,
1818
type: str,
1919
hostname: str = "localhost",
20-
hierarchy_id: Optional[int] = None,
21-
parent_hostname: Optional[str] = None) -> None:
20+
hierarchy_id: Optional[int] = None) -> None:
2221
self.id = id
2322
self.name = name
2423
self.type = type
2524
self.hostname = hostname
2625
self.hierarchy_id = hierarchy_id
27-
self.parent_hostname = parent_hostname
2826

2927
@staticmethod
3028
def from_component_config(component_config: ComponentSetup,
31-
hostname: str = "localhost",
32-
parent_hostname: Optional[str] = None):
29+
hostname: str = "localhost"):
3330
return ComponentInfo(component_config.id,
3431
component_config.name,
3532
component_config.type,
36-
hostname,
37-
parent_hostname)
33+
hostname)
3834

3935

4036
class FaultState(Exception):

packages/modules/internal_chargepoint_handler/chargepoint_module.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,14 @@ class ChargepointModule(AbstractChargepoint):
2626

2727
def __init__(self, local_charge_point_num: int,
2828
client_handler: ClientHandler,
29-
parent_hostname: str,
3029
internal_cp: InternalChargepoint,
3130
hierarchy_id: int) -> None:
3231
self.local_charge_point_num = local_charge_point_num
3332
self.fault_state = FaultState(ComponentInfo(
3433
local_charge_point_num,
3534
"Ladepunkt "+str(local_charge_point_num),
3635
"internal_chargepoint",
37-
hierarchy_id=hierarchy_id,
38-
parent_hostname=parent_hostname))
36+
hierarchy_id=hierarchy_id))
3937
self.store_internal = get_internal_chargepoint_value_store(local_charge_point_num)
4038
self.store = get_chargepoint_value_store(hierarchy_id)
4139
self.client_error_context = ErrorTimerContext(

packages/modules/internal_chargepoint_handler/internal_chargepoint_handler.py

Lines changed: 9 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
from modules.chargepoints.internal_openwb.config import InternalChargepointMode
1313
from modules.common.component_context import SingleComponentUpdateContext
1414
from modules.common.fault_state import ComponentInfo, FaultState
15-
from modules.common.store._util import get_rounding_function_by_digits
16-
from modules.common.component_state import ChargepointState
1715
from modules.internal_chargepoint_handler import chargepoint_module
1816
from modules.internal_chargepoint_handler.clients import ClientHandler, client_factory
1917
from modules.internal_chargepoint_handler.pro_plus import ProPlus
@@ -28,54 +26,6 @@
2826
log.info("failed to import RPi.GPIO! maybe we are not running on a pi")
2927

3028

31-
class UpdateValues:
32-
def __init__(self,
33-
local_charge_point_num: int,
34-
parent_ip: Optional[str],
35-
parent_cp: str,
36-
hierarchy_id: int) -> None:
37-
self.local_charge_point_num_str = str(local_charge_point_num)
38-
self.old_chargepoint_state = None
39-
self.parent_ip = parent_ip
40-
self.parent_cp = parent_cp
41-
self.hierarchy_id = hierarchy_id
42-
43-
def update_values(self, chargepoint_state: ChargepointState, heartbeat_expired: bool) -> None:
44-
if self.parent_ip is not None:
45-
if self.old_chargepoint_state:
46-
# iterate over counter state
47-
vars_old_counter_state = vars(self.old_chargepoint_state)
48-
for key, value in vars(chargepoint_state).items():
49-
# Zählerstatus immer veröffentlichen für Ladelog-Einträge
50-
if value != vars_old_counter_state[key] or key == "imported":
51-
self._pub_values_to_2(key, value)
52-
else:
53-
# Bei Neustart alles veröffentlichen
54-
for key, value in vars(chargepoint_state).items():
55-
self._pub_values_to_2(key, value)
56-
if heartbeat_expired is False:
57-
# Nur wenn eine Verbindung zum Master besteht, die veröffentlichten Werte speichern.
58-
self.old_chargepoint_state = chargepoint_state
59-
60-
def _pub_values_to_2(self, topic: str, value) -> None:
61-
rounding = get_rounding_function_by_digits(2)
62-
# fix rfid default value
63-
if topic == "rfid" and value == "0":
64-
value = None
65-
if isinstance(value, (str, bool, type(None))):
66-
payload = value
67-
else:
68-
# qos 2 reicht nicht, da die Daten zwar auf dem Broker ankommen, aber nicht verarbeitet werden.
69-
if isinstance(value, list):
70-
payload = [rounding(v) for v in value]
71-
else:
72-
payload = rounding(value)
73-
pub_single(f"openWB/set/chargepoint/{self.parent_cp}/get/{topic}", payload=payload, hostname=self.parent_ip)
74-
if self.parent_ip != "localhost":
75-
pub_single(f"openWB/set/chargepoint/{self.hierarchy_id}/get/state_str",
76-
payload="Statusmeldungen bitte auf der Primary-openWB einsehen.")
77-
78-
7929
class UpdateState:
8030
def __init__(self, cp_module: chargepoint_module.ChargepointModule, hierarchy_id: int) -> None:
8131
self.old_phases_to_use = 0
@@ -147,11 +97,9 @@ def __init__(self,
14797
self.event_stop = event_stop
14898
self.heartbeat = False
14999
self.fault_state_info_cp0 = FaultState(
150-
ComponentInfo(0, "Interner Ladepunkt 0", "internal_chargepoint", hierarchy_id=hierarchy_id_cp0,
151-
parent_hostname=global_data.parent_ip))
100+
ComponentInfo(0, "Interner Ladepunkt 0", "internal_chargepoint", hierarchy_id=hierarchy_id_cp0))
152101
fault_state_info_cp1 = FaultState(
153-
ComponentInfo(1, "Interner Ladepunkt 1", "internal_chargepoint", hierarchy_id=hierarchy_id_cp1,
154-
parent_hostname=global_data.parent_ip))
102+
ComponentInfo(1, "Interner Ladepunkt 1", "internal_chargepoint", hierarchy_id=hierarchy_id_cp1))
155103
with SingleComponentUpdateContext(self.fault_state_info_cp0, reraise=True):
156104
self.init_gpio()
157105
try:
@@ -245,23 +193,21 @@ def __init__(self,
245193
self.mode = mode
246194
if local_charge_point_num == 0:
247195
if mode == InternalChargepointMode.SOCKET.value:
248-
self.module = Socket(local_charge_point_num, client_handler,
249-
global_data.parent_ip, internal_cp, hierarchy_id)
196+
self.module = Socket(local_charge_point_num, client_handler, internal_cp, hierarchy_id)
250197
elif mode == InternalChargepointMode.PRO_PLUS.value:
251-
self.module = ProPlus(local_charge_point_num, global_data.parent_ip, internal_cp, hierarchy_id)
198+
self.module = ProPlus(local_charge_point_num, internal_cp, hierarchy_id)
252199
else:
253200
self.module = chargepoint_module.ChargepointModule(
254-
local_charge_point_num, client_handler, global_data.parent_ip, internal_cp, hierarchy_id)
201+
local_charge_point_num, client_handler, internal_cp, hierarchy_id)
255202
else:
256203
self.module = chargepoint_module.ChargepointModule(
257-
local_charge_point_num, client_handler, global_data.parent_ip, internal_cp, hierarchy_id)
204+
local_charge_point_num, client_handler, internal_cp, hierarchy_id)
258205
with SingleComponentUpdateContext(self.module.fault_state):
259-
self.update_values = UpdateValues(local_charge_point_num,
260-
global_data.parent_ip,
261-
internal_cp.data.parent_cp,
262-
hierarchy_id)
263206
self.update_state = UpdateState(self.module, hierarchy_id)
264207
self.old_plug_state = False
208+
if global_data.parent_ip != "localhost":
209+
pub_single(f"openWB/set/chargepoint/{hierarchy_id}/get/state_str",
210+
payload="Statusmeldungen bitte auf der Primary-openWB einsehen.")
265211

266212
def update(self, global_data: GlobalHandlerData, data: InternalChargepointData, rfid_data: RfidData) -> bool:
267213
def __thread_active(thread: Optional[Thread]) -> bool:
@@ -277,8 +223,6 @@ def __thread_active(thread: Optional[Thread]) -> bool:
277223
state = self.module.get_values(phase_switch_cp_active, rfid_data.last_tag)
278224
log.debug("Published plug state "+str(state.plug_state))
279225
heartbeat_expired = self._check_heartbeat_expired(global_data.heartbeat)
280-
if global_data.parent_ip is not None:
281-
self.update_values.update_values(state, heartbeat_expired)
282226
self.update_state.update_state(data, heartbeat_expired)
283227
return True
284228
return False

packages/modules/internal_chargepoint_handler/pro_plus.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
class ProPlus(ChargepointModule):
1111
def __init__(self, local_charge_point_num: int,
12-
parent_hostname: str,
1312
internal_cp: InternalChargepoint,
1413
hierarchy_id: int) -> None:
1514
self.local_charge_point_num = local_charge_point_num
@@ -18,7 +17,7 @@ def __init__(self, local_charge_point_num: int,
1817
self.old_chargepoint_state = None
1918

2019
super().__init__(OpenWBPro(configuration=OpenWBProConfiguration(ip_address="192.168.192.50")))
21-
super().set_internal_context_handlers(hierarchy_id, internal_cp, parent_hostname)
20+
super().set_internal_context_handlers(hierarchy_id, internal_cp)
2221

2322
def get_values(self, phase_switch_cp_active: bool, last_tag: str) -> ChargepointState:
2423
def store_state(chargepoint_state: ChargepointState) -> None:

packages/modules/internal_chargepoint_handler/socket.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,12 @@ class Socket(ChargepointModule):
5151
def __init__(self,
5252
local_charge_point_num: int,
5353
client_handler: ClientHandler,
54-
parent_hostname: str,
5554
internal_cp: InternalChargepoint,
5655
hierarchy_id: int) -> None:
5756
self.socket_max_current = get_hardware_configuration_setting("max_c_socket")
5857
with ModifyLoglevelContext(log, logging.DEBUG):
5958
log.info(f"Konfiguration als Buchse mit maximal {self.socket_max_current}A Ladestrom je Phase.")
60-
super().__init__(local_charge_point_num, client_handler, parent_hostname, internal_cp, hierarchy_id)
59+
super().__init__(local_charge_point_num, client_handler, internal_cp, hierarchy_id)
6160

6261
def set_current(self, current: float) -> None:
6362
with SingleComponentUpdateContext(self.fault_state, update_always=False):

packages/modules/internal_chargepoint_handler/update_values_test.py

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)