Skip to main content

python-alpaca-server

This is an easy to use Python server for ASCOM Alpaca. It can be run on any system that running Python 3.12 or higher, including a Raspberry Pi. This allows you to easily create new ASCOM Alpaca devices.

Nothing complicated here, just create a new class that implements your logic and inherits from one of the base device classes.

Then start up a new AlpacaServer. The server automatically enables discovery as well.

Example

pip install python-alpaca-server

Edit app.py

from typing import List

from python_alpaca_server.app import AlpacaServer, Description
from python_alpaca_server.devices.safetymonitor import SafetyMonitor
from python_alpaca_server.errors import NotImplementedError
from python_alpaca_server.request import ActionRequest, CommandRequest, CommonRequest, PutConnectedRequest

# Inherit from the base SafetyMonitor class, and implement the methods.
class MySafetyMonitor(SafetyMonitor):
    def __init__(self, unique_id: str):
        super().__init__(unique_id)
        self._connected = False

    def put_action(self, req: ActionRequest) -> str:
        raise NotImplementedError(req)

    def put_command_blind(self, req: CommandRequest) -> None:
        raise NotImplementedError(req)

    def put_command_bool(self, req: CommandRequest) -> bool:
        raise NotImplementedError(req)

    def put_command_string(self, req: CommandRequest) -> str:
        raise NotImplementedError(req)

    def get_connected(self, req: CommonRequest) -> bool:
        return self._connected

    def put_connected(self, req: PutConnectedRequest) -> None:
        self._connected = req.Connected

    def get_description(self, req: CommonRequest) -> str:
        return "My Description"

    def get_driverinfo(self, req: CommonRequest) -> str:
        return "My Driver Info"

    def get_driverversion(self, req: CommonRequest) -> str:
        return "0.1.0"

    def get_interfaceversion(self, req: CommonRequest) -> int:
        return 1

    def get_name(self, req: CommonRequest) -> str:
        return "MySafetyMonitor"

    def get_supportedactions(self, req: CommonRequest) -> List[str]:
        return []

    def get_issafe(self, req: CommonRequest) -> bool:
        if not self._connected:
            return False

        # TODO: Check something to see if we are safe to observe. Return True if safe.
        return False


def get_server_description() -> Description:
    return Description(
        ServerName="MyServer",
        Manufacturer="MyManufacturer",
        ManufacturerVersion="0.1.0",
        Location="MyLocation",
    )


if __name__ == "__main__":
    import uvicorn

    port = 8000

    # Choose a unique ID to pass into MySafetyMonitor. This ID should stay the same
    # across server restarts.
    svr = AlpacaServer(get_server_description, [MySafetyMonitor("other")])

    # Create a FastAPI application we can attach to uvicorn or any other WSGI server.
    app = svr.create_app(port)

    try:
        uvicorn.run(app, host="0.0.0.0", port=port)
    except KeyboardInterrupt:
        pass

Run

python app.py

ASCOM Alpaca Reference

  • ASCOM Master Interface Documentation - Official API specifications for all device types
  • Local OpenAPI specs in docs/:
    • AlpacaDeviceAPI_v1.yaml - Device API (camera, telescope, focuser, etc.)
    • AlpacaManagementAPI_v1.yaml - Management API (discovery, configuration)

Release files for python-alpaca-server 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-alpaca-server 2.0.0
File Size Uploaded
python_alpaca_server-2.0.0.tar.gz 36.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-alpaca-server 2.0.0
File Interpreter ABI Platform
python_alpaca_server-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 85.0 kB

Release files / python_alpaca_server-2.0.0.tar.gz

Download URL python_alpaca_server-2.0.0.tar.gz
Size 36.1 kB
Tags Source
SHA-256 checksum
How to use checksums
edfce3a69703f049a2fea845a8f2d7b81a827b80907a469399600cda5fcff62c
BLAKE2b-256 checksum
How to use checksums
92ce7102ef9164b3d0c467e44fe4d2bdddb3da5d460293f9653be41ee96813da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.4.1 CPython/3.11.1 Darwin/24.6.0

Release files / python_alpaca_server-2.0.0-py3-none-any.whl

Download URL python_alpaca_server-2.0.0-py3-none-any.whl
Size 48.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0855f47a8e7f5c15da2d69145046a4ee1222c55d9bde6ddc66c2a5a6c467a53b
BLAKE2b-256 checksum
How to use checksums
b1b9b96819076bd5ccf513f186e6a23227ec572fc6ac5e359bd8c60f40fd4e9c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.4.1 CPython/3.11.1 Darwin/24.6.0

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page