LabJackDataClient¶
- class lsst.ts.ess.labjack.LabJackDataClient(config: SimpleNamespace, topics: Controller | SimpleNamespace, log: Logger, simulation_mode: int = 0)¶
Bases:
BaseLabJackDataClient
Get environmental data from a LabJack T7 or similar.
- Parameters:
- namestr
- configtypes.SimpleNamespace
The configuration, after validation by the schema returned by
get_config_schema
and conversion to a types.SimpleNamespace.- topics
salobj.Controller
The telemetry topics this model can write, as a struct with attributes such as
tel_temperature
.- log
logging.Logger
Logger.
- simulation_mode
int
, optional Simulation mode; 0 for normal operation.
Attributes Summary
Methods Summary
Store device configurations.
connect
()Connect to the LabJack.
descr
()Return a brief description, without the class name.
Disconnect from the LabJack.
Get the config schema as jsonschema dict.
Read and process data from the LabJack.
Call the read_data method in a loop.
run
()Read data from the server and publish it as ESS telemetry.
run_in_thread
(func, timeout)Run a blocking function in a thread pool executor.
Perform any tasks before starting the read loop.
start
()Override start method to handle auto reconnecting if necessary.
Call disconnect, connect, and start the run task.
stop
()Delegate handling of stop tasks to the stop_tasks method.
Stop reading and publishing data.
Attributes Documentation
- connected¶
Methods Documentation
- configure() None ¶
Store device configurations.
Also initialize all output arrays to NaNs.
This provides easy access when processing telemetry.
- async connect() None ¶
Connect to the LabJack.
Disconnect first, if connected.
- Raises:
- RuntimeError
If we cannot read the data.
- descr() str ¶
Return a brief description, without the class name.
This should be just enough information to distinguish one instance of this client from another. For example RPiDataClient should return something like:
f"host={self.config.host}, port={self.config.port}"
- async read_loop() None ¶
Call the read_data method in a loop.
Allow for max_timeouts timeouts before raising a TimeoutError.
- async run() None ¶
Read data from the server and publish it as ESS telemetry.
This is called once after
connect
and it should keep running until cancelled. See the Raises section for exceptions subclasses should raise.- Raises:
- ConnectionError
If the connection to the data server is lost.
- asyncio.TimeoutError
If data is not received in reasonable time.
- Exception
(or any subclass) if any other serious problem occurs.
- async run_in_thread(func: Callable[[], Any], timeout: float) Any ¶
Run a blocking function in a thread pool executor.
Only one function will run at a time, because all calls use the same thread pool executor, which only has a single thread.
- Parameters:
- func
Callable
The blocking function to run; The function must take no arguments. For example:
self._blocking_connect
.- timeout
float
Time limit (seconds).
- func
- async start_tasks() None ¶
Call disconnect, connect, and start the run task.
Raises the same exceptions as
connect
. Ifdisconnect
raises, this logs the exception and continues.
- async stop() None ¶
Delegate handling of stop tasks to the stop_tasks method.
This allows implementing classes to customize stop behavior.
- async stop_tasks() None ¶
Stop reading and publishing data.
This is alway safe to call, whether connected or not. This should raise no exceptions except asyncio.CancelledError. If
disconnect
raises, this logs the exception and continues.