Skip to content

Releases: tschoenfelder/OnStepAdapter

OnStepAdapter 0.3.4

Choose a tag to compare

@tschoenfelder tschoenfelder released this 21 Jul 14:27
bf7c6c9

OnStepAdapter 0.3.4

Version 0.3.4 closes GitHub issue #7 / REQ-ST-010.

Rate-Selectable Timed Moves

move_ra_timed() and move_dec_timed() now accept an optional per-call
rate_preset:

client.mount.move_ra_timed("east", 500, mode="manual", rate_preset=4)
client.mount.move_dec_timed("south", 500, mode="manual", rate_preset=6)

When supplied, rate_preset must be an integer from 0 through 9. The
adapter sends :R0# through :R9# instead of the mode default rate command.
Without a preset, existing behavior remains unchanged:

  • mode="guide" selects :RG#;
  • mode="center" and mode="manual" select :RC#.

The preset is scoped to one bounded move. The adapter still sends the matching
directional stop and restores guide rate afterward.

Safety

Manual jog gating from 0.3.3 is unchanged: manual timed moves require
tracking off, may run at confirmed mechanical HOME, skip projected RA/DEC target
validation, and still honor mechanical safety blockers, OnStep fault/limit
state, duration bounds, and the motion lock.

OnStepAdapter 0.3.3

Choose a tag to compare

@tschoenfelder tschoenfelder released this 19 Jul 08:22
7386346

OnStepAdapter 0.3.3

Version 0.3.3 closes GitHub issue #5 / REQ-ST-009.

Manual Timed Jog Mode

move_ra_timed() and move_dec_timed() now accept:

client.mount.move_ra_timed("east", 250, mode="manual")
client.mount.move_dec_timed("north", 250, mode="manual")

Manual mode is for deliberate non-astronomical terrestrial jog controls with
tracking off. It may run at confirmed mechanical HOME and skips projected
RA/DEC target validation because HOME RA/DEC readback is not a trustworthy sky
target context.

The mode remains bounded and safety-gated:

  • normal motion preflight still runs;
  • motion_refused still blocks the jog;
  • OnStep fault/limit, park-failed, untrusted mechanical authority, hard
    counterweight limit, duration limits, and the motion lock are still enforced;
  • tracking must already be off;
  • a matching directional stop is always sent and guide rate is restored.

mode="manual" is intentionally rejected by angular move_ra() and
move_dec() because those APIs describe sky offsets and require astronomical
context.

OnStepAdapter 0.3.2

Choose a tag to compare

@tschoenfelder tschoenfelder released this 11 Jul 17:22
5f23c80

OnStepAdapter 0.3.2

Version 0.3.2 closes GitHub issue #3.

Safety

Some OnStep firmware resumes sidereal tracking immediately after :hR#
unpark. The adapter now tracks whether the caller explicitly requested
tracking. If live :GU# status reports tracking while no such request is
active, the adapter sends the verified disable sequence and only then reports
the resulting state.

unpark() now guarantees that a successful return leaves the mount unparked
and not tracking. enable_tracking() marks tracking as caller-authorized;
stop(), park(), unpark(), and verified disable clear that authorization.

Location Helpers

The public API now exports:

from onstep_adapter import haversine_distance_m, round_lx200_site_degrees

Use these when comparing full-precision configured observer coordinates with
OnStep/LX200 site register readback. OnStep stores site coordinates at
arcminute precision, so exact float comparison is the wrong test after a sync.

Packaging

This release keeps the 0.3.1 namespace fix: the wheel ships only the
onstep_adapter package and no top-level smart_telescope package.

OnStepAdapter 0.3.1

Choose a tag to compare

@tschoenfelder tschoenfelder released this 09 Jul 22:17
5a36aca

OnStepAdapter 0.3.1

Packaging Fix

Version 0.3.0 shipped a regular top-level smart_telescope package inside
the wheel. That collided with existing SmartTScope deployments because Python
does not merge regular packages across sys.path; whichever
smart_telescope package resolved first owned the entire namespace.

Version 0.3.1 fixes this by making the standalone SDK importable entirely
through onstep_adapter:

from onstep_adapter import OnStepClient, OnStepSafetyConfig
from onstep_adapter.ports.mount import MountPosition, MountState

The wheel no longer contains any smart_telescope/* files.

Compatibility Note

Applications should import this SDK from onstep_adapter. SmartTScope should
keep using its own internal smart_telescope modules. Installing
onstep-adapter beside SmartTScope no longer shadows SmartTScope's package.

Validation

  • Full unit suite passes after the namespace move.
  • Wheel inspection verifies that no smart_telescope/ paths are present.
  • Public imports continue to expose OnStepClient, OnStepMount,
    OnStepFocuser, OnStepSafetyConfig, and the structured result types from
    onstep_adapter.

OnStepAdapter 0.3.0

Choose a tag to compare

@tschoenfelder tschoenfelder released this 14 Jun 20:00
4cbd91f

OnStepAdapter 0.3.0

New APIs

  • Provenance-bearing local PARK records:
    • get_stored_park_position()
    • set_park_position_from_current()
  • Bounded independent axis corrections:
    • move_ra_timed() / move_dec_timed()
    • move_ra() / move_dec()
  • Public records:
    • StoredParkPosition
    • SetParkPositionResult
    • OnStepMotionCalibration
    • AxisMotionResult

PARK Limitation

OnStep documents :hQ#, :hP#, and :hR#, but no command that reads the
stored PARK pose. Version 0.3.0 therefore removes the undocumented
:GpA#/:GpD# probe and returns the SDK record captured when :hQ# was sent.
The result explicitly says that controller matching is unverifiable.

The SDK never presents a local persistence failure as an ordinary rejected
command after OnStep has accepted :hQ#.

Axis-Correction Validation

Mock validation covers command direction, duration, guide/center rate
selection, tracking overlay, guaranteed stop, cancellation, concurrency,
calibration conversion, projected endpoint safety, and inclusive hard-limit
interruption.

The supervised bounded-correction hardware gate passed on June 14, 2026:

python -m onstep_adapter.tools.axis_motion_smoke \
  --port /dev/ttyUSB_ONSTEP0 \
  --observer-lat 50.336 \
  --observer-lon 8.533 \
  --observer-alt-m 304

The command starts PARKED, routes through HOME, acquires a safe target, runs
short RA/DEC corrections in both directions, and returns through HOME to PARK.
Before any movement, it checks Raspberry/OnStep civil time, observer location,
and sidereal time while the mount remains PARKED. A mismatch blocks motion.
After verifying the Raspberry clock and supplied coordinates, add
--confirm-time-location-sync to explicitly synchronize them to OnStep before
the test proceeds.

An additional supervised coordinate-path test makes larger, visually
observable independent axis changes and returns to its initial target:

python -m onstep_adapter.tools.coordinate_axis_smoke \
  --port /dev/ttyUSB_ONSTEP0 \
  --observer-lat 50.336 \
  --observer-lon 8.533 \
  --observer-alt-m 304 \
  --confirm-time-location-sync

Its default path is RA +1 h, DEC +10 deg, RA -1 h, DEC -10 deg.
Each leg requires confirmation, and a final confirmation authorizes the
HOME-to-PARK route.
It never writes the PARK position. ESC sends an immediate stop and suppresses
all later automatic movement.

This coordinate-path gate also passed on June 14, 2026. Every leg reached the
requested logical RA/DEC within the test tolerance, the final leg recovered
the original target, and the mount returned through HOME to a live PARKED
state.

The final local release suite contains 84 passing tests.

Hardware Baseline

The adapter remains targeted at the physically validated Terrans OnStep V4
running OnStep 10.19d. No Config.h modification is required.

OnStepAdapter 0.2.0

Choose a tag to compare

@tschoenfelder tschoenfelder released this 13 Jun 17:29

OnStepAdapter 0.2.0

OnStepAdapter 0.2.0 is the first public standalone SDK release of the tested
SmartTScope OnStep mount and focuser adapter.

Highlights

  • One locked serial connection shared by mount and focuser.
  • Importable public API through onstep_adapter.
  • Mechanical HOME/PARK authority separated from astronomical target safety.
  • Application-controlled meridian workflow:
    • notification at the configured warning boundary;
    • explicit flip request by the calling application;
    • inclusive tracking stop and unsafe-motion refusal at the hard boundary.
  • OnStep status, pier side, hour angle, tracking, slew, HOME/PARK, and firmware
    limit state included in motion decisions.
  • Stock Axis-1 firmware fallback proof persisted against the tested rig.

Tested Hardware

The release was physically tested with a Terrans OnStep V4 device running
OnStep firmware 10.19d dated February 29, 2024.

The device retained its existing firmware configuration. No change to
Config.h was required.

Physical validation included:

  • PARK to HOME and HOME to PARK routing;
  • application-controlled meridian handoff;
  • inclusive operational hard-stop behavior;
  • stock Axis-1 firmware stopping at approximately 180.00013 deg;
  • shared-bus focuser move, exact return, immediate stop, and mount coexistence;
  • final live parked-state confirmation.

The firmware fallback proof is rig-specific. Revalidate it after firmware,
mount geometry, observer location, Axis-1 limit, clutch reference, or relevant
configuration changes.

Installation

python -m pip install \
  https://github.com/tschoenfelder/OnStepAdapter/releases/download/v0.2.0/onstep_adapter-0.2.0-py3-none-any.whl
import onstep_adapter

print(onstep_adapter.__version__)

Requires Python 3.13 or newer and pyserial>=3.5.