Operations
Day-to-day operation of a SkyNode-paired telescope falls into a few modes:
- Automated observing —
controlAuthority: remote, no active lease. SkyNode pulls tasks from the hub and executes them. - Manual takeover via lease — short, ad-hoc operator intervention during otherwise automated nights.
- Sustained manual mode —
controlAuthority: manualfor maintenance, engineering, or manual observing nights. - Safe shutdown — invoked deliberately or triggered by a shutdown interlock.
This page walks through each, with notes on what an owner is authorizing and what subsystems are involved.
Automated observing
When the telescope is in remote mode and no manual control lease is held, SkyNode runs in its "normal" state. A simplified view of the processes involved:
| Subsystem | Role |
|---|---|
| Telescope controller | Top-level orchestration: open/close the session, spin up the task manager, handle lifecycle events |
| Task manager | Polls the hub for eligible tasks, claims them, and runs each through the appropriate task executor |
| Task executors | Per-observation-type — optical_imaging, optical_imaging_calibration, radio_mapping, radio_tracking. Drive the per-device drivers through one observation type's logic |
| Target acquisition manager | Converts hub targets into ephemeris providers; keeps mount and enclosure aligned |
| Enclosure controller | Manages enclosure state (open/close, rotate to align with target) |
| Operational constraint evaluator | Continuously evaluates constraints; blocks task start when any required constraint fails |
| Resource manager | Device health, thermal, battery, storage — feeds into constraints and shutdown logic |
| State sources + router + stores | Aggregate snapshots from all subsystems into unified streams |
| Hub publisher | Publishes snapshots and events back to the hub |
| MQTT publisher | (Optional) Mirrors snapshots to the local broker |
For a given task, the executor walks a deterministic phase machine
(see task_executor/_base.py for the base class and _context.py for
how phase state is threaded through). The exact phase set differs by
observation type but covers acquisition, configuration, capture, and
post-processing.
After a task finishes, SkyNode currently also handles file upload of generated assets. This responsibility may move to a dedicated service in the future (drivers — future work).
Manual control leases
A ManualControlLease is a time-bound override. While it's active,
the task executor pauses; once it expires or is released, the task
executor resumes immediately.
Use a lease when you need a short manual takeover but want the telescope to return to automated observing without operator intervention.
Requesting a lease
You can request a lease in two places:
- From the SkyNode local GUI — the dashboard header bar has a quick-toggle for requesting a lease on the bound telescope.
- From the website — the per-telescope detail page surfaces lease controls.
Lease policy today. Manual control leases can only be requested
by the telescope owner (and by users holding sufficient
TelescopeAccessGrant authority). Delegating lease-request rights
to ordinary observers is on the roadmap but not available in
production today — if you need a non-owner to drive a telescope
manually right now, the right path is either to add them as a
telescope owner / authorized operator or to operate the lease on
their behalf.
Holding a lease
While the lease is active:
- The task manager will not pick up new tasks.
- An already-running task is interrupted at the next safe boundary (typically end of the current exposure or scan element).
- Manual commands through the dashboard or manual command executor are accepted.
The lease emits EventManualControlLease events on the snapshot
stream so anyone watching (hub-side dashboards, local MQTT
subscribers) sees the takeover in real time.
Releasing a lease
The lease automatically expires at its expires_at. You can also
explicitly release it from the GUI or the website. Automated task
execution resumes within seconds of release.
Force-revoking a lease (owner override)
A telescope owner (or a user with sufficient grants) can force-revoke
an active lease — useful when the operator forgot to release it and
isn't reachable. This raises a SystemAbortManualControlCommand on
the WS protocol, which SkyNode handles by releasing the lease
immediately.
Sustained manual mode
For longer manual operation — engineering nights, maintenance windows,
extended weather closures — flip the telescope's controlAuthority to
manual instead of relying on repeated leases.
When controlAuthority: manual:
- The task manager does not pull tasks at all.
- The hub still receives snapshots, log entries, and state, but no scheduled work runs.
- All manual command surfaces (dashboard controls, manual command executor) remain available without needing a lease.
Flip the flag back to remote when you want automated observing to
resume. The next scheduler run on the hub will start considering
this telescope again.
Manual command executor
Beyond the dashboard's bundled controls, the manual command executor exposes a generic surface for running ad-hoc commands against any device — useful when you need something the dashboard's purpose-built panels don't cover (e.g., a specific ASCOM property write, a calibration sequence that isn't part of the standard task executors).
This is what the GUI's per-device control panels actually call into, so anything you can do in the dashboard you can do through the manual command executor at the IPC layer.
Shutdown actions
When SkyNode shuts down (either deliberately, on an interlock fire, or
when the telescope flips to manual mode), the
lifecycle supervisor
runs the configured shutdown actions
(Configuration → controller_lifecycle).
The default sequence:
- Park the mount (
parkMount: true). - Close the enclosure (
closeEnclosure: true). - Warm the cameras to ambient (
warmCameras: false— off by default; enable for installations where rapid cool/warm cycling is hard on the sensors).
Override these per-site based on what your hardware needs to be left in.
A shutdown interlock dialog is surfaced in the GUI when an interlock fires, explaining what tripped and what actions are running.
Bringing the telescope back up after a shutdown
When SkyNode restarts after a clean shutdown, the lifecycle supervisor runs the configured startup actions:
- Unpark the mount (
unparkMount: trueby default). - Restore cameras to their cooling setpoints (
restoreCameras: falseby default).
After startup actions complete and constraints clear, the task manager begins polling again automatically — no operator intervention needed for a healthy startup.
For unclean shutdowns — power loss, OS crash — the next start enters the recovery flow instead.