1212from modules .chargepoints .internal_openwb .config import InternalChargepointMode
1313from modules .common .component_context import SingleComponentUpdateContext
1414from 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
1715from modules .internal_chargepoint_handler import chargepoint_module
1816from modules .internal_chargepoint_handler .clients import ClientHandler , client_factory
1917from modules .internal_chargepoint_handler .pro_plus import ProPlus
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-
7929class 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
0 commit comments