Complete API reference for LFS-Ayats.
connection ModuleInSimClientClient to connect to the LFS server using InSim.
InSimClient(
host: str = "127.0.0.1",
port: int = 29999,
admin_password: str = "",
app_name: str = "LFS-Ayats",
udp: bool = False
)
Parameters:
host: LFS server IPport: InSim port (default 29999)admin_password: Admin password if neededapp_name: Application name (max 16 characters)udp: Use UDP instead of TCPconnect() -> boolEstablish connection with the server.
Returns: True if successful, False otherwise
Raises: ConnectionError if connection fails
initialize(flags: int = 0, interval: int = 0) -> NoneInitialize the InSim connection.
Parameters:
flags: InSim flags (ISF_MCI, ISF_NLP, etc.)interval: MCI/NLP interval in hundredths of a secondsend_packet(packet: bytes) -> NoneSend a packet to the server.
Parameters:
packet: Packet in bytes formatreceive_packet(timeout: Optional[float] = None) -> Optional[bytes]Receive a packet from the server.
Parameters:
timeout: Maximum wait time (None = blocking)Returns: Received packet or None
disconnect() -> NoneClose the connection with the server.
register_callback(packet_type: int, callback: Callable) -> NoneRegister a callback for a packet type.
Parameters:
packet_type: Packet type (PacketType)callback: Function to callfrom src.connection import InSimClient
with InSimClient(host="127.0.0.1", port=29999) as client:
client.initialize(flags=48, interval=100)
while True:
packet = client.receive_packet(timeout=1.0)
if packet:
# Process packet
pass
PacketHandlerHandles InSim packet processing.
parse_packet(data: bytes) -> Optional[PacketInfo]Parse a packet and extract basic information.
Returns: PacketInfo or None if invalid
process_packet(data: bytes) -> boolProcess a packet and call the corresponding handler.
Returns: True if processed correctly
register_handler(packet_type: int, handler: Callable) -> NoneRegister a handler for a packet type.
parse_version_packet(data: bytes) -> Optional[Dict[str, Any]]Parse an IS_VER packet.
parse_state_packet(data: bytes) -> Optional[Dict[str, Any]]Parse an IS_STA packet.
parse_mci_packet(data: bytes) -> Optional[Dict[str, Any]]Parse an IS_MCI packet (telemetry).
telemetry ModuleTelemetryCollectorCollects telemetry data from the LFS server.
TelemetryCollector(client: InSimClient)
Parameters:
client: Connected InSim clientstart(interval: int = 100) -> NoneStart telemetry collection.
Parameters:
interval: Interval in ms (default 100ms = 10Hz)stop() -> NoneStop telemetry collection.
get_latest_telemetry(plid: Optional[int] = None) -> Dict[int, CarTelemetry]Get latest telemetry.
Parameters:
plid: Specific Player ID (None = all)Returns: Dict with telemetry per player ID
get_telemetry_history(plid: int, limit: Optional[int] = None) -> List[CarTelemetry]Get telemetry history.
Parameters:
plid: Player IDlimit: Maximum number of samples (None = all)clear_history(plid: Optional[int] = None) -> NoneClear telemetry history.
register_callback(event_type: str, callback: Callable) -> NoneRegister a callback for events.
Event types:
'car_update': Vehicle update'lap_complete': Lap completed'split_time': Sector time'player_join': Player joins'player_leave': Player leavesfrom src.connection import InSimClient
from src.telemetry import TelemetryCollector
client = InSimClient()
client.connect()
collector = TelemetryCollector(client)
def on_car_update(telemetry):
print(f"Speed: {telemetry.speed:.2f} m/s")
collector.register_callback('car_update', on_car_update)
collector.start(interval=100)
# ... later ...
collector.stop()
TelemetryProcessorProcesses and validates telemetry data.
TelemetryProcessor(max_speed: float = 150.0)
validate_telemetry(telemetry: CarTelemetry) -> boolValidate telemetry data.
Returns: True if valid
process_telemetry(telemetry_list: List[CarTelemetry]) -> ProcessedTelemetryProcess telemetry and calculate statistics.
calculate_statistics(telemetry_list: List[CarTelemetry]) -> Dict[str, Any]Calculate detailed statistics.
filter_by_speed_range(telemetry_list, min_speed, max_speed) -> ListFilter by speed range.
detect_anomalies(telemetry_list, threshold_stdev: float = 3.0) -> List[int]Detect anomalies using standard deviation.
export ModuleCSVExporterExport data to CSV format.
CSVExporter(filename: str, delimiter: str = ',')
export(telemetry_data: List[CarTelemetry], overwrite: bool = True) -> boolExport telemetry to CSV.
export_processed(processed_data: ProcessedTelemetry) -> boolExport processed data to CSV.
from src.export import CSVExporter
exporter = CSVExporter('telemetry.csv')
exporter.export(telemetry_data)
JSONExporterExport data to JSON format.
JSONExporter(filename: str, indent: int = 2)
export(telemetry_data, metadata: Dict = None) -> boolExport telemetry to JSON.
export_processed(processed_data, metadata: Dict = None) -> boolExport processed data to JSON.
append(telemetry_data) -> boolAppend data to existing file.
config ModuleSettingsApplication configuration.
connection: ConnectionSettingstelemetry: TelemetrySettingsexport: ExportSettingsvisualization: VisualizationSettingslogging: LoggingSettingsload_config(filename: str = "config.yaml") -> SettingsLoad configuration from YAML file.
save_config(settings: Settings, filename: str = "config.yaml") -> boolSave configuration to YAML file.
create_default_config(filename: str = "config.yaml") -> SettingsCreate default configuration.
from src.config import Settings, load_config, save_config
# Load configuration
settings = load_config('config.yaml')
# Modify
settings.connection.host = "192.168.1.100"
settings.telemetry.interval = 50
# Save
save_config(settings, 'config.yaml')
utils Modulesetup_logger()Configure the logging system.
setup_logger(
name: str = "lfs_ayats",
level: str = "INFO",
log_file: Optional[str] = None,
console: bool = True,
log_format: Optional[str] = None
) -> logging.Logger
from src.utils import setup_logger
logger = setup_logger("my_app", "DEBUG", "app.log")
logger.info("Application started")
CarTelemetryVehicle telemetry data.
Attributes:
timestamp: Timestampplid: Player IDnode: Current nodelap: Current lapposition: Dict with x, y, zspeed: Speed in m/sdirection: Directionheading: Headingangular_velocity: Angular velocityProcessedTelemetryProcessed data with statistics.
Attributes:
avg_speed: Average speedmax_speed: Maximum speedmin_speed: Minimum speedtotal_distance: Total distancesample_count: Number of samplesPacketTypeInSim packet types.
class PacketType(IntEnum):
ISP_ISI = 1 # InSim Init
ISP_VER = 2 # Version
ISP_TINY = 3 # Tiny
ISP_STA = 5 # State
ISP_MCI = 38 # Multi Car Info
# ... more types