Update exposed vars to match game V2

This commit is contained in:
Dominik Moritz Roth 2025-02-18 21:22:43 +01:00
parent 9adee35a6f
commit d5a0212824

View File

@ -105,7 +105,7 @@ class NuconParameter:
return self.id
class Nucon:
def __init__(self, host: str = 'localhost', port: int = 8786):
def __init__(self, host: str = 'localhost', port: int = 8785):
self.base_url = f'http://{host}:{port}/'
self.dummy_mode = False
self._parameters = self._create_parameters()
@ -159,16 +159,16 @@ class Nucon:
'COOLANT_CORE_CIRCULATION_PUMP_1_SPEED': (float, False),
'COOLANT_CORE_CIRCULATION_PUMP_2_SPEED': (float, False),
'RODS_STATUS': (RodsState, False),
'RODS_MOVEMENT_SPEED': (float, False),
'RODS_MOVEMENT_SPEED_DECREASED_HIGH_TEMPERATURE': (bool, False),
'RODS_DEFORMED': (bool, False),
'RODS_TEMPERATURE': (float, False),
'RODS_MAX_TEMPERATURE': (float, False),
'RODS_POS_ORDERED': (float, True),
'RODS_POS_ACTUAL': (float, False),
'RODS_POS_REACHED': (bool, False),
'RODS_QUANTITY': (int, False),
'RODS_ALIGNED': (bool, False),
#'RODS_MOVEMENT_SPEED': (float, False),
#'RODS_MOVEMENT_SPEED_DECREASED_HIGH_TEMPERATURE': (bool, False),
#'RODS_DEFORMED': (bool, False),
#'RODS_TEMPERATURE': (float, False),
#'RODS_MAX_TEMPERATURE': (float, False),
#'RODS_POS_ORDERED': (float, True),
#'RODS_POS_ACTUAL': (float, False),
#'RODS_POS_REACHED': (bool, False),
#'RODS_QUANTITY': (int, False),
#'RODS_ALIGNED': (bool, False),
'GENERATOR_0_KW': (float, False),
'GENERATOR_1_KW': (float, False),
'GENERATOR_2_KW': (float, False),
@ -210,16 +210,22 @@ class Nucon:
value = self._query(parameter)
if parameter.enum_type:
try:
return parameter.enum_type(value)
except ValueError as e:
raise ValueError(f"Failed to convert {value} to {parameter.enum_type.__name__} for parameter {parameter.id}: {e}")
elif parameter.param_type == bool:
if isinstance(value, str):
if value.lower() not in ('true', 'false'):
raise ValueError(f"Invalid boolean value: {value}")
raise ValueError(f"Invalid boolean value for parameter {parameter.id}: {value}")
return value.lower() == 'true'
else:
raise ValueError(f"Expected string for boolean parameter, got {type(value)}")
raise ValueError(f"Expected string for boolean parameter {parameter.id}, got {type(value)}")
else:
try:
return parameter.param_type(value)
except ValueError as e:
raise ValueError(f"Failed to convert {value} to {parameter.param_type.__name__} for parameter {parameter.id}: {e}")
def set(self, parameter: Union[str, NuconParameter], value: Union[float, int, bool, str, Enum], force: bool = False) -> None:
if isinstance(parameter, str):
@ -240,12 +246,20 @@ class Nucon:
self._set_value(parameter, str(value))
def get_type(self, parameter: Union[str, NuconParameter]) -> Type:
if isinstance(parameter, str):
parameter = self._parameters[parameter]
return parameter.param_type
def _query(self, parameter: NuconParameter) -> str:
response = requests.get(self.base_url, params={"variable": parameter.id})
if response.status_code != 200:
raise Exception(f"Failed to query parameter {parameter.id}. Status code: {response.status_code}")
if response.text.strip() == 'NOT FOUND':
raise Exception(f"Failed to query parameter {parameter.id}. Returned 'NOT FOUND'")
return response.text.strip()
def _set_value(self, parameter: NuconParameter, value: str) -> None:
@ -301,6 +315,8 @@ class Nucon:
self.dummy_mode = dummy_mode
def __getattr__(self, name):
if isinstance(name, int):
return self.__getattr__(list(self._parameters.keys())[name])
if name in self._parameters:
return self._parameters[name]
raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")