Raw Commands Module

seestarpy.raw.get_albums()

Fetches a list of albums on the Seestar’s internal disk

Returns:

A dictionary containing the response data from the executed command.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_albums()
{'jsonrpc': '2.0',
 'Timestamp': '5076.313913578',
 'method': 'get_albums',
 'result': {'path': 'MyWorks',
            'list': [ {'group_name': 'SolarSystem',
                       'files': [ {'name': 'Lunar',
                                   'thn': 'Lunar/2025-06-11-223602-Lunar_thn.jpg',
                                   'count': 2,
                                   'type': 0
                                   }
                                 ]
                        },
                       {'group_name': 'DeepSky',
                        'files': [ {'name': 'M 81',
                                    'thn': 'M 81/Stacked_37_M 81_10.0s_IRCUT_20250607-221810_thn.jpg',
                                    'count': 1,
                                    'type': 0
                                    },
                                   {'name': 'M 81_sub',
                                    'thn': 'M 81_sub/Light_M 81_10.0s_IRCUT_20250607-221746_thn.jpg',
                                    'count': 37,
                                    'type': 0
                                    },
                                 ]
                         }
                     ]
            },
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_camera_info()

Returns info on the cameras

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_camera_info()
{'jsonrpc': '2.0',
 'Timestamp': '3210.498389760',
 'method': 'get_camera_info',
 'result': {'chip_size': [1080, 1920],
  'bins': [1, 2],
  'pixel_size_um': 2.9,
  'unity_gain': 0,
  'has_cooler': False,
  'is_color': True,
  'is_usb3_host': False,
  'has_hpc': False,
  'debayer_pattern': 'GR'},
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_camera_state()

Return the name and state of the camera.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_camera_state()
{'jsonrpc': '2.0',
 'Timestamp': '3340.447572824',
 'method': 'get_camera_state',
 'result': {'state': 'idle',
  'name': 'Seestar S50',
  'path': 'on-board-Seestar S50'},
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_device_state(keys=None)

Returns a massive dictionary of device parameters

Parameters:

keys (list of str | None) – If not None, then only top-level keys can be specificed. See examples.

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.get_device_state(["location_lon_lat", "mount"])
{'jsonrpc': '2.0',
 'Timestamp': '3523.643992366',
 'method': 'get_device_state',
 'result': {
     'location_lon_lat': [14.7908, 47.9539],
     'mount': {
         'move_type': 'none',
         'close': False,
         'tracking': False,
         'equ_mode': False
     }
 },
 'code': 0,
 'id': 1}
>>> raw.get_device_state()
{'jsonrpc': '2.0',
 'Timestamp': '5286.347784540',
 'method': 'get_device_state',
 'result': {
     'device': {
         'name': 'ASI AIR imager',
         'svr_ver_string': '1.0',
         'svr_ver_int': 29,
         'firmware_ver_int': 2427,
         'firmware_ver_string': '4.27',
         'is_verified': True,
         'sn': 'a3497936',
         'cpuId': '5eb799bafdfee08c',
         'product_model': 'Seestar S50',
         'user_product_model': 'Seestar S50',
         'focal_len': 250.0,
         'fnumber': 5.0
         },
     'setting': {
        'temp_unit': 'C',
        'beep_volume': 'close',
        'lang': 'en',
        'center_xy': [540, 960],
        'stack_lenhance': False,
        'heater_enable': False,
        'expt_heater_enable': False,
        'focal_pos': 1580,
        'factory_focal_pos': 1580,
        'exp_ms': {
            'stack_l': 10000,
            'continuous': 500
            },
        'auto_power_off': True,
        'stack_dither': {
            'pix': 50,
            'interval': 5,
            'enable': True
            },
        'auto_3ppa_calib': True,
        'auto_af': False,
        'frame_calib': True,
        'calib_location': 2,
        'wide_cam': False,
        'stack_after_goto': True,
        'guest_mode': False,
        'user_stack_sim': False,
        'mosaic': {
            'scale': 1.0,
            'angle': 0.0,
            'estimated_hours': 0.258333,
            'star_map_angle': 361.0,
            'star_map_ratio': 1.0
            },
        'stack': {
            'dbe': True,
            'star_correction': True,
            'cont_capt': False
            },
        'ae_bri_percent': 50.0,
        'manual_exp': False,
        'isp_exp_ms': -999000.0,
        'isp_gain': -9990.0,
        'isp_range_gain': [0, 400],
        'isp_range_exp_us': [30, 1000000],
        'isp_range_exp_us_scenery': [30, 1000000]
        },
     'location_lon_lat': [14.7908, 47.9539],
     'camera': {
         'chip_size': [1080, 1920],
         'pixel_size_um': 2.9,
         'debayer_pattern': 'GR',
         'hpc_num': 2890
         },
     'focuser': {
         'state': 'idle',
         'max_step': 2600, 'step': 1580},
     'ap': {
         'ssid': 'S50_a3497936',
         'passwd': '12345678',
         'is_5g': False
         },
     'station': {'server': True,
         'freq': 2412,
         'ip': '192.168.1.243',
         'ssid': 'FTTH_CV2535',
         'gateway': '192.168.1.1',
         'netmask': '255.255.255.0',
         'sig_lev': -88,
         'key_mgmt': 'WPA2-PSK'
         },
     'storage': {
         'is_typec_connected': False,
         'connected_storage': ['emmc'],
         'storage_volume': [{
             'name': 'emmc',
             'state': 'mounted',
             'total_mb': 51854,
             'totalMB': 51854,
             'free_mb': 36549,
             'freeMB': 36549,
             'disk_mb': 59699,
             'diskSizeMB': 59699,
             'used_percent': 38}],
        'cur_storage': 'emmc'},
     'balance_sensor': {
        'code': 0,
        'data': {
            'x': 0.007797,
            'y': -0.006858,
            'z': 1.001298,
            'angle': 0.594461
            }
        },
     'compass_sensor': {
        'code': 0,
        'data': {
            'x': 58.200001,
            'y': 1.05,
            'z': -18.150002,
            'direction': 91.43029,
            'cali': 0
            }
        },
     'mount': {
        'move_type': 'none',
        'close': True,
        'tracking': False,
        'equ_mode': False
        },
     'pi_status': {
        'is_overtemp': False,
        'temp': 49.599998,
        'charger_status': 'Discharging',
        'battery_capacity': 48,
        'charge_online': False,
        'is_typec_connected': False,
        'battery_overtemp': False,
        'battery_temp': 23,
        'battery_temp_type': 'normal'
        }
     },
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_disk_volume()

Returns the information on the internal emmc drive: totalMB and freeMB

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.get_disk_volume()
{'jsonrpc': '2.0',
 'Timestamp': '3792.755156509',
 'method': 'get_disk_volume',
 'result': {'totalMB': 51854, 'freeMB': 36549},
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_focuser_position()

Returns the position of the focuser in the range (1200, 2600)

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.get_focuser_position()
{'jsonrpc': '2.0',
 'Timestamp': '3929.576517861',
 'method': 'get_focuser_position',
 'result': 1605,
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_img_file_page_name(page=0)

Get the file listing for a specific page (up to 20 items per page).

Must be called after get_img_file_page_number(), which sets the directory context on the firmware.

Parameters:

page (int, optional) – Zero-indexed page number. Default is 0.

Returns:

Response with result as a list of file entries, each containing:

  • name (str) — filename

  • date (str) — modification date

  • size_k (int) — size in KB

  • is_dir (bool) — directory flag

  • file_cnt (int) — child count (for directories)

  • avi_duration_sec (Number or null) — video duration

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_img_file_page_number("MyWorks/M 81_sub")
>>> raw.get_img_file_page_name(0)
{'result': [{'name': 'Light_M 81_10.0s_...fit', 'size_k': 4050, ...}, ...]}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_img_file_page_number(directory, skip_avi=False)

Get the total number of pages for files in a directory on the Seestar.

This sets the directory context on the firmware. Subsequent calls to get_img_file_page_name() page through that context. Each page contains up to 20 items.

Parameters:
  • directory (str) – Path relative to the eMMC root (e.g. "MyWorks/M 81_sub").

  • skip_avi (bool, optional) – If True, exclude AVI video files from the listing. Default is False.

Returns:

Response with result as an integer page count.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_img_file_page_number("MyWorks/M 81_sub")
{'result': 3, 'code': 0, ...}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_last_solve_result()

Get the result of the last plate-solve attempt.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_last_solve_result()
{'jsonrpc': '2.0',
 'Timestamp': '3957.619006162',
 'method': 'get_last_solve_result',
 'error': 'no solve data',
 'code': 215,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_sensor_calibration()

Get compass sensor calibration data.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_sensor_calibration()
{'jsonrpc': '2.0',
 'Timestamp': '4183.724277609',
 'method': 'get_sensor_calibration',
 'result': {'balanceSensor': {'x': -0.016068,
   'y': 0.024697,
   'z': 0.007157,
   'exist': True},
  'compassSensor': {'x': 75.3092,
   'y': 1.72128,
   'z': 0.0,
   'x11': 1.44953,
   'x12': -0.068635,
   'y11': -0.068635,
   'y12': 1.48135,
   'exist': True}},
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_setting()

Gets the settings dict. No option to select individual keys.

This is basically the equivalent to get_device_state([“setting”])

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_setting()
{'jsonrpc': '2.0',
 'Timestamp': '4454.169432785',
 'method': 'get_setting',
 'result': {'temp_unit': 'C',
  'beep_volume': 'close',
  'lang': 'en',
  'center_xy': [540, 960],
  'stack_lenhance': False,
  'heater_enable': False,
  'expt_heater_enable': False,
  'focal_pos': 1580,
  'factory_focal_pos': 1580,
  'exp_ms': {'stack_l': 10000, 'continuous': 500},
  'auto_power_off': True,
  'stack_dither': {'pix': 50, 'interval': 5, 'enable': True},
  'auto_3ppa_calib': True,
  'auto_af': False,
  'frame_calib': True,
  'calib_location': 2,
  'wide_cam': False,
  'stack_after_goto': True,
  'guest_mode': False,
  'user_stack_sim': False,
  'mosaic': {'scale': 1.0,
   'angle': 0.0,
   'estimated_hours': 0.258333,
   'star_map_angle': 361.0,
   'star_map_ratio': 1.0},
  'stack': {'dbe': True, 'star_correction': True, 'cont_capt': False},
  'ae_bri_percent': 50.0,
  'manual_exp': False,
  'isp_exp_ms': -999000.0,
  'isp_gain': -9990.0,
  'isp_range_gain': [0, 400],
  'isp_range_exp_us': [30, 1000000],
  'isp_range_exp_us_scenery': [30, 1000000]},
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_solve_result()

Get the current plate-solve result.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_solve_result()
{'jsonrpc': '2.0',
 'Timestamp': '3957.619006162',
 'method': 'get_solve_result',
 'error': 'no solve data',
 'code': 215,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_stack_info()

Get the dimensions of the current stacked image.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_stack_info()
{'jsonrpc': '2.0',
 'Timestamp': '4034.734550212',
 'method': 'get_stack_info',
 'result': {'width': 0, 'height': 0},
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_stack_setting()

Find out whether the Seestar is saving all sub-frames, good and bad.

Deprecated since version Seestar: Firmware v6.7 uses set_setting() instead.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_stack_setting()
{'jsonrpc': '2.0',
 'Timestamp': '4074.257331529',
 'method': 'get_stack_setting',
 'result': {
    'save_discrete_frame': False,
    'save_discrete_ok_frame': True,
    'light_duration_min': -1
    },
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_stacked_img()

Get the current stacked image data.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_user_location()

Get the Lat, Long coords of the Seestar on Earth

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_user_location()
{'jsonrpc': '2.0',
 'Timestamp': '4508.028353247',
 'method': 'get_user_location',
 'result': [14.7908, 47.9539],
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_view_state()

Return the View dictionary from the iscope_get_app_state command

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.get_view_state()
{'jsonrpc': '2.0',
 'Timestamp': '7501.254000847',
 'method': 'get_view_state',
 'result': {'View': {'state': 'cancel',
   'lapse_ms': 282203,
   'mode': 'none',
   'cam_id': 0,
   'target_ra_dec': [9.0, 80.0],
   'target_name': 'Unknown',
   'lp_filter': False,
   'gain': 80,
   'ContinuousExposure': {'state': 'cancel',
    'lapse_ms': 116133,
    'fps': 2.024705},
   'stage': 'ContinuousExposure'}},
 'code': 0,
 'id': 1}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_wheel_position()

Get the current filter-wheel position.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.get_wheel_setting()

Get the filter-wheel configuration settings.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.iscope_get_app_state()

Get the full application state from the Seestar.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.iscope_start_stack(restart=False)

Start stacking sub-frames on the current target.

Parameters:

restart (bool, optional) – If True, restart the stacking sequence. Default is False.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.iscope_start_view(ra=None, dec=None, target_name='Unknown', lp_filter=False, mode='star', mosaic=None)

Start viewing a target, but not stacking the incoming frames.

If ra and dec are None, this turns on the camera in the ContinuousExposure state.

If ra and dec are defined, this triggers an AutoGoto state, which slews the telescope to these coordinates and then starts a plate-solve loop. The plate-solve loop, if successful will tell the Seestar how much it needs to compensate for your alignment.

Parameters:
  • ra (float) – Decimal hour angle, Decimal degrees

  • dec (float) – Decimal hour angle, Decimal degrees

  • target_name (str) – Default: “Unknown”, Name of the target, which also defines the directory name on the emmc drive

  • lp_filter (bool) – Default: False, use the light pollution filter

  • mode (str) – Default: “star”, [“star”, “sun”, ]

  • mosaic (dict, optional) – Default: None. If you want to set Seestar running on a mosaic, you need to provide a dict with the following keys: scale, angle, star_map_angle, star_map_ratio See below for an example

Return type:

dict

Examples

>>> from seestarpy import raw
# Put the camera into "ContinuousExposure" mode. No frames are saved.
>>> raw.iscope_start_view()
# Slew to a target, trigger a plate-solve, then turn the camera on.
>>> raw.iscope_start_view(ra=13.4, dec=54.9, target_name="Mizar")

An example for setting up mosaics, contributed by NurseJackass of the Seestar Collective:

# Set up a mosaicing run and start observing
>>> mosaic = {
...     'scale': 3.5,           # How many "screens" big the mosaic should be
...     'angle': -90,           # Rotation angle of the mosaic
...     'star_map_angle': 271,  # Try "361 + angle"
...     'star_map_ratio': 1.0,
... }
>>> raw.iscope_start_view(ra=13.4, dec=54.9, target_name="Mizar", mosaic=mosaic)

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.iscope_stop_view(stage=None)

This stops whatever is happening with the Seestar.

Parameters:

stage (str or None) –

  • None (default) — set the camera mode to "none".

  • "ContinuousExposure" — turn off the camera, but leave the camera mode in "star" (or whatever it was).

  • "Stack" — stop stacking sub-frames but leave the camera in the ContinuousExposure View stage.

Other valid stage names: "DarkLibrary", "AutoGoto", "AutoFocus", "PlateSolve", "ScopeGoto".

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.iscope_stop_view("ContinuousExposure")
{'Event': 'ContinuousExposure',
 'Timestamp': '4706.054896251',
 'state': 'cancel',
 'lapse_ms': 69217,
 'fps': 2.024333,
 'route': ['View']}
>>> raw.iscope_stop_view("Stack")
{'Event': 'Exposure',
 'Timestamp': '5761.848427853',
 'page': 'stack',
 'state': 'fail',
 'error': 'interrupt',
 'code': 514}
>>> raw.iscope_stop_view(None)
{'Event': 'View',
 'Timestamp': '721.589563996',
 'state': 'complete',
 'lapse_ms': 196484,
 'mode': 'none',
 'cam_id': 0,
 'target_ra_dec': [13.4, 54.900002],
 'target_name': 'Mizar',
 'lp_filter': False,
 'gain': 80,
 'route': []}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.move_focuser(pos, retry=True)

Move the focuser to the given position in the range (1200, 2600)

Parameters:
  • pos (int) – Factory default is 1580

  • retry (bool) – Retry finding position

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.move_focuser(1605)

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.pi_get_time()

Get the internal system time from the device.

Note

This is not always the current time, as sometimes the Seestar resets its internal clock on shutdown.

Returns:

The response dictionary containing the current system time.

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.pi_get_time()

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.pi_is_verified()

Check whether the device has been verified.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.pi_output_set2(is_dew_on=False, dew_heater_power=0)

Turn on dew heater

Parameters:
  • is_dew_on (bool) – Default: False

  • dew_heater_power (int) – Default: 0, TODO: Is this percent?

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.pi_reboot()

Reboot the Seestar

Examples

>>> from seestarpy import raw
>>> raw.pi_reboot()

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.pi_set_time(time_zone=None)

Set the internal system time on the device to the current local time.

This function captures the current system time from the host machine and sends it to the device, including timezone information.

Parameters:

time_zone (str, optional) – The timezone to use (e.g., “Australia/Melbourne”). If not provided, it uses the system’s local timezone.

Returns:

The response dictionary indicating the result of the time-setting operation.

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.pi_set_time()
>>> raw.pi_set_time("UTC")
>>> raw.pi_set_time("Australia/Melbourne")

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.pi_shutdown(force=False)

Shutdown the Seestar. It will NOT REBOOT after shutdown!

Parameters:

force (bool) – Default: False. To actually force a shutdown, you need to set this to True. This is to make sure you actually want to shut down the Seestar, not just reboot it.

Examples

>>> from seestarpy import raw
>>> raw.pi_shutdown()
# The previous command will do nothing. To actually shut it down:
>>> raw.pi_shutdown(force=True)

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.play_sound(sound_id)

Plays a sound from the internal soundboard.

Parameters:

sound_id (int) – [13, 80, 82, 83]

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.play_sound(80)

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.random_command(method, params=None)

Send an arbitrary command to the Seestar.

Parameters:
  • method (str) – The JSON-RPC method name.

  • params (dict, optional) – Parameters to pass with the command.

Return type:

dict or str

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scan_iscope()

Scan for connected Seestar devices.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_get_equ_coord()

Get the current equatorial coordinates (RA/Dec) from the mount.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_get_horiz_coord()

Get the current horizontal coordinates (Alt/Az) from the mount.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_get_ra_dec()

Get the current RA/Dec coordinates from the mount.

Note

Requires firmware v6.70 or later.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_get_track_state()

Get the current tracking state of the mount.

Note

Requires firmware v6.70 or later.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_goto(ra, dec)

Move the scope arm to the given ra, dec coordinates.

Parameters:
  • ra (float) – Decimal hour angle [0, 24] and declination [-90, 90]

  • dec (float) – Decimal hour angle [0, 24] and declination [-90, 90]

Examples

::
>>> from seestarpy import raw
>>> raw.scope_goto(13.4, 54.8)          # Mizar
>>> raw.scope_goto(18.082, -24.3)       # M8 Lagoon Nebula
>>> raw.scope_goto(5.63, -69.4)         # 30 Dor in LMC (Tarantula Nebula)
>>> raw.scope_goto(0.398, -72.2)        # 47 Tuc globular cluster (SMC)
{'Event': 'ScopeGoto',
 'Timestamp': '6880.953156944',
 'state': 'working',
 'lapse_ms': 0}

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_move_to_horizon()

Moves the scope arm to the horizontal position.

This is necessary to turn the Seestar on. You cannot move to an object directly from the park position

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.scope_move_to_horizon()

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_park(set_eq_mode=False)

Moves the scope arm to the park position.

This essentially turns the Seestar off. To put the Seestar into EQ mode, you first need to move_to_horizon and then scope_park(True).

Parameters:

set_eq_mode (bool) – Default: False. Set the equatorial mode.

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.scope_park()
>>> raw.scope_park(set_eq_mode=True)

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_set_track_state(flag)

Turns the Seestar tracking state on/off.

Parameters:

flag (bool)

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.scope_set_track_state(True)

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_speed_move(angle, speed, dur_sec)

Moves the scope as if using a joy-stick to control the movement.

This method moves both Base- and Arm-motors as if the user is controlling the seestar with a joystick.

Notes regarding the angle argument: - 0: Move right (Base motor) relative to where the Seestar is pointing. - 90: Move up (Arm motor) - 180: Move left (Base motor) - 270: Move down (Arm motor) Any other angle between the cardinal points engages both Base- and Arm-motors, with the speed of each individual motor throttled by the sin and cos of the angle.

Notes regarding the speed argument: Max 1500. Step-size: 15 arcseconds. Speed = 240 delivers 1 deg/sec NOTE: This is the absolute speed of both motors. The individual speed of each of the Base and Arm motors is speed * cos/sin(angle). This step-size translates to: - Base motor: RA (Hour Angle) RA=00h00m01s per step - Arm motor: Dec (Declination) Dec=00d00m15s per step

Parameters:
  • angle (int) – [deg] Angle on a circle of a joystick for controlling the two motors

  • speed (int) – [Steps per second] Combined speed of the two motors. Max = 1500. 1 step = 15 arcseconds.

  • dur_sec (int) – [sec] Time for moving the scope arm. Max = 10 sec

Return type:

dict

Examples

::
>>> from seestarpy import raw
# Move left at full speed for 10 seconds
>>> raw.scope_speed_move(speed=1500, angle=180, dur_sec=10)
# Move up at 1 deg/sec for 2 seconds = 2 deg up
>>> raw.scope_speed_move(speed=240, angle=270, dur_sec=2)   # Move down
# Move up and right at 2 deg/sec for 5 seconds.
# Az (Base-motor) speed is 1.72 deg/sec and Alt (Arm-motor) speed is 1 deg/sec
>>> raw.scope_speed_move(speed=480, angle=30, dur_sec=5)   # Move down

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.scope_sync(in_ra, in_dec)
Parameters:
  • in_ra (float) – Decimal hour angle, Decimal degrees

  • in_dec (float) – Decimal hour angle, Decimal degrees

Return type:

dict

Examples

::
>>> from seestarpy import raw
>>> raw.scope_sync(13.4, 54.8)          # Mizar

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.set_control_value(gain=80)

Used for setting gain parameter at the moment

Parameters:

gain (int) – Default: 80

Return type:

dict

Examples

>>> from seestarpy import raw
# Trigger the IMX462 chip to use Low-Conversion-Gain mode (<80)
>>> raw.set_control_value(60)

Notes

High vs Low Conversion Gain modes (HCG vs LCG)

According to the docs on the IMX462 chip, it has two internal capacitors which are used to read the pixel values. The larger capacitor used in the LCG mode can map the full pixel well depth of 32k electrons, albeit still only with the 12-bit ADC. The smaller, more sensitive capacitor used for the HCG mode, can only map to about a third of the full well depth. However this small capacitor produces less noise and is therefore much better suited for low-flux objects such as nebula and galaxies.

Use cases:

  • If you prefer to map the full dynamic range of as many stars in the field as possible, without the bright ones “burning out” (i.e. saturating) then it makes sense to use the LCG mode, with gains set to below 80.

  • If you are looking for the best possible contrast within extended sources like nebulae and galaxy disks, then the HCG mode is better suited. Set the gain value to 80+.

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.set_sensor_calibration(x, y, z, x11, x12, y11, y12)

Override device’s compass bearing to account for the magnetic declination at device’s position.

Parameters:
  • x (float) – Compass sensor offsets.

  • y (float) – Compass sensor offsets.

  • z (float) – Compass sensor offsets.

  • x11 (float) – Rotation matrix coefficients.

  • x12 (float) – Rotation matrix coefficients.

  • y11 (float) – Rotation matrix coefficients.

  • y12 (float) – Rotation matrix coefficients.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.set_sequence_setting(name)

Set the sequence (observation group) name.

Parameters:

name (str) – The group name for the observation sequence.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.set_setting(**kwargs)

Set values in the Seestar settings dictionary.

Should accept any of the keyword arguments returned by get_setting(). See the Other Parameters section for a full reference of known keys.

Parameters:
  • **kwargs – Keyword arguments corresponding to Seestar setting keys.

  • temp_unit (str) – Temperature unit. One of 'C', 'F'.

  • beep_volume (str or int) – Beep volume. 'close' to disable.

  • lang (str) – UI language code, e.g. 'en'.

  • center_xy (list of int) – Not settable. Defined by the chip size. Default [540, 960].

  • stack_lenhance (bool) – Enable dark subtraction. Default True. Needs its own call as it moves the filter.

  • heater_enable (bool) – Turn on the dew heater. Default False.

  • expt_heater_enable (bool) – Default False.

  • focal_pos (int) – Current focuser position. Acceptable range [1200, 2600].

  • factory_focal_pos (int) – Factory default focuser position (1580).

  • expert_mode (bool) – Allow exposure times of 2 s and 5 s via exp_ms. Default False.

  • exp_ms (dict) – Exposure times in milliseconds. Keys: 'stack_l' (stacking, accepts 10/20/30/60 s; also 2/5 s with expert_mode=True), 'continuous' (live view).

  • auto_power_off (bool) – Auto power-off after ~15 min of inactivity. Default True.

  • stack_dither (dict) – Dither settings: 'pix' (throw in pixels), 'interval' (frames between dithers), 'enable' (bool).

  • auto_3ppa_calib (bool) – Automatic 3-point polar-alignment calibration. Default True.

  • auto_af (bool) – Auto-focus after a goto. Default False.

  • frame_calib (bool) – Default True.

  • calib_location (int) – Default 2.

  • wide_cam (bool) – Use the wide-field camera (S30pro). Default False.

  • wide_4k (bool) – Stack using the 4k dither approach. Default True.

  • stack_after_goto (bool) – Start stacking automatically after goto (firmware 2.1+). Default True.

  • guest_mode (bool) – Default False.

  • user_stack_sim (bool) – Default False.

  • mosaic (dict) – Mosaic settings: 'scale', 'angle', 'estimated_hours', 'star_map_angle', 'star_map_ratio'.

  • stack (dict) – Stacking settings: 'dbe', 'star_correction', 'cont_capt' (True to save every frame without stacking), 'drizzle2x' (create 4k image by debayering and drizzling), 'airplane_line_removal', 'wide_denoise', 'capt_type', 'save_discrete_frame', 'save_discrete_ok_frame', 'capt_num', 'light_duration_min', 'brightness', 'contrast', 'saturation', 'dbe_enable'.

  • ae_bri_percent (float) – Default 50.0.

  • manual_exp (bool) – Default False.

  • isp_exp_ms (float) – Default -999000.0.

  • isp_gain (float) – Default -9990.0.

  • isp_range_gain (list) – Default [0, 400].

  • isp_range_exp_us (list) – Default [30, 1000000].

  • isp_range_exp_us_scenery (list) – Default [30, 1000000].

  • wifi_country (str or None) – Default None.

  • usb_en_eth (bool) – Default False.

  • dark_mode (bool) – Default False.

  • plan_target_af (bool) – Auto-focus between planned observations. Default False.

  • viewplan_gohome (bool) – Default True.

  • remote_joined (bool) – Whether the Seestar is connected via a remote connection. Default False.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.set_setting(exp_ms={"stack_l": 20000})
>>> raw.set_setting(stack_dither={"pix": 50, "interval": 5, "enable": True})

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.set_stack_setting(save_ok_frames=True, save_rejected_frames=False)

Save individual frames to emmc.

Deprecated since version Seestar: Firmware v6.7 uses set_setting() instead.

Parameters:
  • save_ok_frames (bool, optional) – Save accepted individual frames to emmc. Default is True.

  • save_rejected_frames (bool, optional) – Save rejected individual frames to emmc. Default is False.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.set_user_location(lat, lon)

Set the location on earth of the user

Parameters:
  • lat (float) – Decimal degrees, positive for North and East.

  • lon (float) – Decimal degrees, positive for North and East.

Return type:

dict

Examples

>>> from seestarpy import raw
>>> raw.set_user_location(48.2, 16.4)   # For Vienna, Austria

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.set_wheel_position(pos)

Set the filter-wheel position.

Parameters:

pos (int) –

  • 0: Dark (shutter closed)

  • 1: Open (400–700 nm, with Bayer RGB matrix)

  • 2: Narrow (30 nm OIII + 20 nm Ha, also LP filter)

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.start_auto_focuse()

Start the auto-focus routine.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.start_create_dark()

Start creating a dark-frame library.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.start_polar_align(restart=True, dec_pos_index=3)

Run the polar alignment sequence

Parameters:
  • restart (bool) – Default: True.

  • dec_pos_index (int) – Potentially: 1: 45 deg South, 2: 22 deg south, 3: zenith, 4: 22 deg North, 45 deg North

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.start_scan_planet()

Start scanning for planets.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.start_solve()

Start a plate-solve on the current field.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.stop_auto_focuse()

Stop the auto-focus routine.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.stop_create_dark()

Stop dark-frame library creation.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.stop_goto_target()

Stop the current goto-target slew.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.stop_polar_align()

Stop the polar-alignment sequence.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.stop_scheduler()

Stop the observation scheduler.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.stop_solve()

Stop the current plate-solve.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.

seestarpy.raw.test_connection()

Test the connection to the Seestar.

Return type:

dict

Notes

Accepts the ips keyword for multi-Seestar operation.