Observing sessions are often lonely nights spent monitoring remote desktops or looking at status logs. Chatstronomy changes this workflow by piping N.I.N.A. telescope rigs directly into chat channels as the night unfolds.

The project name is bilingual: chat is the destination in English and the cat in French. The logo expresses this as a Unix pipeline: space cat | chat.

Multi-Telescope Monitoring

A single Chatstronomy instance can drive multiple N.I.N.A. rigs concurrently. A single process, running under one Discord bot identity or Matrix login, polls each rig and fans out updates to per-telescope channels, webhooks, or rooms.

Webhooks vs. Full Bot Mode

You can configure Chatstronomy in two main operational modes:

  • Discord Webhooks: The simplest setup. It posts stateless notifications of events and images directly to a channel URL.
  • Full Bot Mode: Connects to the Discord gateway to support a interactive bot. It enables pinned live-status embeds that update in place (saving their state across restarts in chatstronomy-state.json) and registers a suite of /chatstronomy slash commands.

Rich Event Enrichment

Instead of posting raw event logs, Chatstronomy polls N.I.N.A. Advanced API endpoints to enrich events on the fly:

  • AUTOFOCUS-FINISHED fetches the last focusing run to attach HFR measurements, R² fit, and focuser position.
  • GUIDER-START and GUIDER-DITHER query guider status to display real-time RMS tracking error.
  • FILTERWHEEL-CHANGED, ROTATOR-MOVED, and MOUNT-* events automatically pull completed status payloads to report exact optical filters, rotator angles, and celestial coordinates.
  • IMAGE-HISTORY triggers automated thumbnail downloads with configurable per-telescope cooldowns to prevent flooding the channel during fast capture sequences.

Two Topologies: Local and the Hub

Depending on network architecture and security preferences, you can choose between two topologies:

  • Local Direct Mode: Keep everything on the local observatory computer. The plugin starts a signed, release-pinned background runtime and pushes data directly to a Discord webhook, Matrix account, or personal Discord application. This requires no external server, but requires the plugin computer to directly contact the destination service.
  • Chatstronomy Hub: Pair local plugins outbound over authenticated WebSockets (WSS) to a centrally managed, hosted service at hub.chatstronomy.com. A single hosted Discord bot can then manage and route updates from multiple independent observatories. This keeps the observatory-side connection outbound-only, requiring no open firewall ports or local chat credential duplication.

Strict Local Consent for Remote Control

For setups that opt into remote control, Chatstronomy registers 21 slash commands to query and operate the rig. Read-only commands (like /status or /last-image) are public, while write commands (such as /park, /unpark, /cool, /change-filter, or /start-sequence) are gated by a user ID allowlist. Destructive commands also require explicit button confirmations in chat.

The underlying trust boundary is strictly local:

  1. Hardware Control Master Switch: Must be explicitly turned on in the local N.I.N.A. profile on the observatory computer.
  2. Per-Command Permissions: Every command is disabled by default and requires separate local enablement.
  3. No Remote Overrides: A Hub setting, Discord role, or server administrator cannot override or grant these local permissions remotely.

If a permitted chat account is compromised, the attacker’s reach is still bounded by the specific hardware commands you explicitly enabled locally. Independent equipment-side safety limits—such as physical interlocks, meridian limits, and horizon limits—remain the primary line of defense.

Getting the Software

The Chatstronomy backend is written in Rust and is available on GitHub. The repository provides prebuilt RPM packages for Fedora/RHEL and supports Windows service integration out of the box. The native N.I.N.A. plugin can be installed through the N.I.N.A. plugin manager.