@@ -61,6 +61,23 @@ def get_function_codes():
6161MODE_TOGGLE = modes .get ("MODE_TOGGLE" , 0x02 )
6262MODE_EDGE_TRIGGER = modes .get ("MODE_EDGE_TRIGGER" , 0x03 )
6363
64+ # Analog input types
65+ def get_analog_input_types ():
66+ constants = _load_constants ()
67+ analog_types = constants .get ('analog_input_types' , {
68+ "TYPE_0_5V" : 0 ,
69+ "TYPE_0_10V" : 1 ,
70+ "TYPE_0_20MA" : 2 ,
71+ "TYPE_4_20MA" : 3
72+ })
73+ return analog_types
74+
75+ analog_types = get_analog_input_types ()
76+ TYPE_0_5V = analog_types .get ("TYPE_0_5V" , 0x00 )
77+ TYPE_0_10V = analog_types .get ("TYPE_0_10V" , 0x01 )
78+ TYPE_0_20MA = analog_types .get ("TYPE_0_20MA" , 0x02 )
79+ TYPE_4_20MA = analog_types .get ("TYPE_4_20MA" , 0x03 )
80+
6481function_codes = get_function_codes ()
6582FUNC_READ_COILS = function_codes .get ("READ_COILS" , 0x01 )
6683FUNC_READ_DISCRETE_INPUTS = function_codes .get ("READ_DISCRETE_INPUTS" , 0x02 )
@@ -138,21 +155,49 @@ def get_config_value(key: str, default: Any = None) -> Any:
138155 if env_value is not None :
139156 return env_value
140157
141- # Try JSON config
142- # TODO: Implement JSON config lookup if needed
158+ # Try JSON config from constants.json
159+ constants = _load_constants ()
160+ sections = key .split ('.' )
161+
162+ # Navigate through nested sections
163+ current = constants
164+ for section in sections [:- 1 ]:
165+ if section in current :
166+ current = current [section ]
167+ else :
168+ return default
169+
170+ # Get the final value
171+ if sections [- 1 ] in current :
172+ return current [sections [- 1 ]]
143173
144174 # Return default
145175 return default
146176
147177# Auto-detection settings
148- AUTO_DETECT_PORTS = get_config_value ('AUTO_DETECT_PORTS' ,
149- ['/dev/ttyACM0' , '/dev/ttyUSB0' ])
150- AUTO_DETECT_BAUDRATES = get_config_value ('AUTO_DETECT_BAUDRATES' ,
151- [9600 , 115200 , 19200 , 4800 , 38400 , 57600 ])
152- AUTO_DETECT_UNIT_IDS = get_config_value ('AUTO_DETECT_UNIT_IDS' ,
153- [1 , 2 , 3 , 4 ])
178+ def get_auto_detect_settings ():
179+ constants = _load_constants ()
180+ return constants .get ('auto_detect' , {
181+ "ports" : ["/dev/ttyACM0" , "/dev/ttyUSB0" ],
182+ "baudrates" : [9600 , 115200 , 19200 , 4800 , 38400 , 57600 ],
183+ "unit_ids" : [1 , 2 , 3 , 4 ]
184+ })
185+
186+ AUTO_DETECT = get_auto_detect_settings ()
187+ AUTO_DETECT_PORTS = get_env_value ('RTU_AUTO_DETECT_PORTS' , AUTO_DETECT .get ("ports" ))
188+ AUTO_DETECT_BAUDRATES = get_env_value ('RTU_AUTO_DETECT_BAUDRATES' , AUTO_DETECT .get ("baudrates" ))
189+ AUTO_DETECT_UNIT_IDS = get_env_value ('RTU_AUTO_DETECT_UNIT_IDS' , AUTO_DETECT .get ("unit_ids" ))
154190
155191# Mock mode settings
156- MOCK_PORT = 'MOCK'
157- MOCK_BAUDRATE = 9600
158- MOCK_UNIT_ID = 1
192+ def get_mock_settings ():
193+ constants = _load_constants ()
194+ return constants .get ('mock' , {
195+ "port" : "MOCK" ,
196+ "baudrate" : 9600 ,
197+ "unit_id" : 1
198+ })
199+
200+ MOCK_SETTINGS = get_mock_settings ()
201+ MOCK_PORT = get_env_value ('RTU_MOCK_PORT' , MOCK_SETTINGS .get ("port" ))
202+ MOCK_BAUDRATE = get_env_value ('RTU_MOCK_BAUDRATE' , MOCK_SETTINGS .get ("baudrate" ))
203+ MOCK_UNIT_ID = get_env_value ('RTU_MOCK_UNIT_ID' , MOCK_SETTINGS .get ("unit_id" ))
0 commit comments