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/chatstronomyslash 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-FINISHEDfetches the last focusing run to attach HFR measurements, R² fit, and focuser position.GUIDER-STARTandGUIDER-DITHERquery guider status to display real-time RMS tracking error.FILTERWHEEL-CHANGED,ROTATOR-MOVED, andMOUNT-*events automatically pull completed status payloads to report exact optical filters, rotator angles, and celestial coordinates.IMAGE-HISTORYtriggers 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:
- Hardware Control Master Switch: Must be explicitly turned on in the local N.I.N.A. profile on the observatory computer.
- Per-Command Permissions: Every command is disabled by default and requires separate local enablement.
- 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.