An http ASCOM Alpaca server written in python.
Project description
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)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_alpaca_server-1.3.0.tar.gz.
File metadata
- Download URL: python_alpaca_server-1.3.0.tar.gz
- Upload date:
- Size: 35.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.1 CPython/3.11.1 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb3aaaf7f83e4497e3977201777076c47961c9484a8fbda081b687d6500881d9
|
|
| MD5 |
5e816ede3def7c289b71bb1a939dc9c0
|
|
| BLAKE2b-256 |
0e56dbcba6771b56dd23c953b5ac97f548befff7b83d2666d0a44144446dc0a9
|
File details
Details for the file python_alpaca_server-1.3.0-py3-none-any.whl.
File metadata
- Download URL: python_alpaca_server-1.3.0-py3-none-any.whl
- Upload date:
- Size: 48.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.1 CPython/3.11.1 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e20c859dc38e9ba0a4fd0454742396a138f950fae6c16b65edc9586c2c55aa5
|
|
| MD5 |
7d9fc98f1082691734d3d59a079ea8ba
|
|
| BLAKE2b-256 |
dbd461fc30c3af107ee0bd1bf05b65cdfb7cc7c6a4d59ae1c992868245d9c42c
|