Remote¶
-
class
lsst.ts.salobj.
Remote
(domain, name, index=None, *, readonly=False, include=None, exclude=None, evt_max_history=1, tel_max_history=None, start=True)¶ Bases:
object
A class that issues commands to a SAL component and receives telemetry and events from that component.
If a SAL component listens to or commands other SAL components then it will have one Remote for each such component.
Parameters: - domain :
Domain
DDS Domain. If you have a
Controller
then use itsdomain
attribute. Otherwise create your ownDomain
and close it when you are done, for example:async with Domain() as domain: dome = Remote(domain=domain, name="ATDome", index=0)
- name :
str
Name of SAL component.
- index :
int
orNone
, optional SAL component index, or 0 or None if the component is not indexed. A value is required if the component is indexed.
- readonly :
bool
If True then do not provide commands.
- include :
iterable
ofstr
, optional Names of topics (telemetry or events) to support, for example [“FilterChangeInPosition”, “TrackingTarget”] If
None
then all are included except those inexclude
.- exclude :
iterable
ofstr
, optional Names of topics (telemetry or events) to not support. If
None
or empty then no topics are excluded.- evt_max_history :
int
, optional Maximum number of historical items to read for events. Set to 0 if your remote is not interested in “late joiner” data.
- tel_max_history :
int
, optional Deprecated because historical telemetry data is no longer available. Must be 0 (or None, but please don’t do that) if specified.
- start :
bool
, optional Automatically start the read loop when constructed? Normally this should be
True
, but if you are adding topics piecemeal after constructing the remote then specifyFalse
and callstart
manually after you have added all topics. Warning: ifFalse
thenself.start_task
will not exist and the remote cannot be used as an async context manager.
Raises: - ValueError
If
include
andexclude
are both iterables (one or both must beNone
).
Notes
Here is an example that makes a Test remote and displays the topic-related attributes:
include salobj # the index is arbitrary, but a remote must use the same index # as the controller or CSC in order to communicate index = 5 test_remote = salobj.Remote("Test", index) print(dir(test_remote))
You should see the following topic-related attributes:
Commands, each an instance of
topics.RemoteCommand
:cmd_standby
cmd_start
- … and so on for all other standard CSC commands
cmd_setArrays
cmd_setScalars
Events, each an instance of
topics.RemoteEvent
:evt_appliedSettingsMatchStart
evt_errorCode
- … and so on for all other standard CSC log events
evt_arrays
evt_scalars
Telemetry, each an instance of
topics.RemoteTelemetry
:tel_arrays
tel_scalars
Attributes: - cmd_<command_name> :
topics.RemoteCommand
Remote command topic for each command supported by the component. Omitted if
readonly
true.- evt_<event_name> :
topics.RemoteEvent
Remote event for each event supported by the component, as specified by
include
and theexclude
arguments.- tel_<telemetry_name> :
topics.RemoteTelemetry
Remote telemetry topic for each telemetry topic supported by the component, as specified by the
include
andexclude
arguments.
Methods Summary
close
()Shut down and clean up resources. start
()Methods Documentation
-
close
()¶ Shut down and clean up resources.
Close the contained
SalInfo
, but not theDomain
, because that may be used by other objects.May be called multiple times. The first call closes the SalInfo; subsequent calls wait until the Remote is closed.
-
start
()¶
- domain :