|
Hermes
Simulation Orchestration Platform for Aerospace
|
Public Member Functions | |
| None | __init__ (self, SharedMemoryManager shm, Scheduler|None scheduler=None, ServerConfig|None config=None, HermesConfig|None hermes_config=None, ProcessManager|None process_mgr=None) |
| int | client_count (self) |
| bool | is_running (self) |
| None | start (self) |
| None | start_background (self) |
| None | stop (self) |
| None | broadcast_telemetry (self) |
| None | telemetry_loop (self, float|None rate_hz=None) |
| asyncio.Task[None] | start_telemetry_loop (self, float|None rate_hz=None) |
Protected Member Functions | |
| None | _register_default_handlers (self) |
| None | _handle_client (self, ServerConnection ws) |
| None | _send_schema (self, ClientState client) |
| dict[str, Any] | _build_rich_schema (self) |
| dict[str, Any] | _build_basic_schema (self) |
| None | _handle_message (self, ClientState client, str message) |
| ServerMessage|None | _handle_subscribe (self, ClientState client, Command cmd) |
| ServerMessage|None | _handle_introspect (self, ClientState _client, Command cmd) |
| ServerMessage|None | _handle_pause (self, ClientState _client, Command _cmd) |
| ServerMessage|None | _handle_resume (self, ClientState _client, Command _cmd) |
| ServerMessage|None | _handle_reset (self, ClientState _client, Command _cmd) |
| ServerMessage|None | _handle_step (self, ClientState _client, Command cmd) |
| ServerMessage|None | _handle_set (self, ClientState _client, Command cmd) |
| list[str] | _expand_signal_patterns (self, list[str] patterns) |
| None | _broadcast_event (self, EventType event) |
| bool | _module_exists (self, str module_name) |
| tuple[str, str] | _split_signal_for_basic_schema (self, str signal_name) |
| str|None | _get_module_type (self, str module_name) |
| dict[str, Any]|None | _get_module_introspection (self, str module_name) |
| None | _broadcast_json (self, str json_str) |
Protected Attributes | |
| _shm = shm | |
| _scheduler = scheduler | |
| _config = config or ServerConfig() | |
| _hermes_config = hermes_config | |
| _pm = process_mgr | |
| dict | _clients = {} |
| Server|None | _server = None |
| bool | _running = False |
| asyncio.Task[None]|None | _telemetry_task = None |
| dict | _handlers = {} |
| _handle_client | |
WebSocket server for Hermes telemetry and control.
Handles client connections, schema distribution, command processing,
and telemetry streaming.
Example:
server = HermesServer(shm, scheduler)
await server.start() # Runs forever
| None hermes.server.websocket.HermesServer.__init__ | ( | self, | |
| SharedMemoryManager | shm, | ||
| Scheduler | None | scheduler = None, | ||
| ServerConfig | None | config = None, | ||
| HermesConfig | None | hermes_config = None, | ||
| ProcessManager | None | process_mgr = None ) |
Initialize the Hermes server.
Args:
shm: Shared memory manager to read telemetry from
scheduler: Optional scheduler for control commands
config: Server configuration
hermes_config: Full Hermes config for schema metadata (wiring, signal info)
process_mgr: Optional process manager for module introspection
|
protected |
Broadcast state change event to all clients.
|
protected |
Broadcast JSON message to all clients.
|
protected |
Build basic schema from shared memory signal names.
|
protected |
Build schema with full metadata from HermesConfig. For icarus modules (no config-declared signals), signal metadata is derived from the shared memory signal names at runtime.
|
protected |
Expand signal patterns to full signal names.
Patterns:
- "*" matches all signals
- "module.*" matches all signals from module
- "module.signal" matches exact signal
|
protected |
Get module introspection payload for supported in-process modules.
|
protected |
Get module type string for a module if available.
|
protected |
Handle a new client connection.
|
protected |
Handle introspect command.
|
protected |
Handle a text message from a client.
|
protected |
Handle pause command.
|
protected |
Handle reset command.
|
protected |
Handle resume command.
|
protected |
Handle set command.
|
protected |
Handle step command.
|
protected |
Handle subscribe command.
|
protected |
Check if module name is known from config, process manager, or shm signals.
|
protected |
Register default command handlers.
|
protected |
Send signal schema to a client. If hermes_config is available, includes full signal metadata (unit, writable) and wiring configuration. Otherwise falls back to basic schema from shared memory signal names.
|
protected |
Split a signal name into (module, local_signal) using basic-schema grouping rules.
| None hermes.server.websocket.HermesServer.broadcast_telemetry | ( | self | ) |
Broadcast binary telemetry to subscribed clients.
| int hermes.server.websocket.HermesServer.client_count | ( | self | ) |
Number of connected clients.
| bool hermes.server.websocket.HermesServer.is_running | ( | self | ) |
Whether the server is currently running.
| None hermes.server.websocket.HermesServer.start | ( | self | ) |
Start the WebSocket server. Runs until stop() is called or the server is shut down.
| None hermes.server.websocket.HermesServer.start_background | ( | self | ) |
Start server and telemetry loop as background tasks. Returns immediately; use stop() to shut down.
| asyncio.Task[None] hermes.server.websocket.HermesServer.start_telemetry_loop | ( | self, | |
| float | None | rate_hz = None ) |
Start telemetry loop as a background task.
Args:
rate_hz: Telemetry rate in Hz (default from config)
Returns:
The created task
| None hermes.server.websocket.HermesServer.stop | ( | self | ) |
Stop the server gracefully.
| None hermes.server.websocket.HermesServer.telemetry_loop | ( | self, | |
| float | None | rate_hz = None ) |
Background task that broadcasts telemetry at fixed rate.
Args:
rate_hz: Telemetry rate in Hz (default from config)
Raises:
ValueError: If the effective rate is <= 0
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |