Releases: tschoenfelder/OnStepAdapter
Release list
OnStepAdapter 0.3.4
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"andmode="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
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_refusedstill 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
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_degreesUse 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
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, MountStateThe 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
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:
StoredParkPositionSetParkPositionResultOnStepMotionCalibrationAxisMotionResult
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 304The 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-syncIts 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
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.whlimport onstep_adapter
print(onstep_adapter.__version__)Requires Python 3.13 or newer and pyserial>=3.5.