Skip to main content

Async Python client for the MiSTer FPGA mrext Remote API (REST + WebSocket) and SSH telemetry

Project description

python-mister-fpga

python-mister-fpga

Tests PyPI version Python versions License: MIT

Async Python client for the mrext Remote API (REST + WebSocket) and optional SSH telemetry for the MiSTer FPGA. Zero Home Assistant dependency — use it in any Python project.

Install

pip install python-mister-fpga

Usage

REST client

import asyncio
from mister_fpga import MisterClient

async def main():
    client = MisterClient("192.168.1.50")
    status = await client.async_get_status()
    print(status.core, status.game)
    await client.async_launch_game("/media/fat/games/SNES/Chrono.sfc")
    await client.async_close()

asyncio.run(main())

WebSocket (real-time updates)

import asyncio
from mister_fpga import MisterWebSocketClient, MisterStatus, apply_ws_message

state = MisterStatus(online=True)
menu_path = None
index_state = (False, False)

def on_message(text: str) -> None:
    global state, menu_path, index_state
    state, menu_path, index_state = apply_ws_message(text, state, menu_path, index_state)
    print(state.core, state.game)

async def main():
    ws = MisterWebSocketClient("192.168.1.50")
    await ws.listen(on_message)

asyncio.run(main())

SSH telemetry

import asyncio
from mister_fpga import MisterSSH

async def main():
    ssh = MisterSSH("192.168.1.50", 22, "root", "1")
    data = await ssh.async_probe()
    print(data)
    await ssh.async_close()

asyncio.run(main())

API

  • MisterClient(host, port=8182, *, session=None, timeout=10) — async REST client; call await client.async_close() when done, or inject your own aiohttp.ClientSession.
  • MisterStatus — dataclass snapshot: online, core, system, game, hostname, version, ip, ips, dns, disk_total/used/free. Property is_running_game.
  • MisterConnectionError — raised on network/HTTP errors.
  • MisterWebSocketClient(host, port=8182, *, session=None, reconnect_delay=5) — reconnecting WS loop; await ws.listen(callback), call ws.stop() to exit.
  • apply_ws_message(message, status, menu_path, index_state) — pure reducer; apply a single WS text frame and return updated (status, menu_path, index_state).
  • MisterSSH(host, port, username, password) — persistent asyncssh connection; await ssh.async_probe() returns telemetry dict.
  • parse_ssh_probe(raw) — parse the raw batched SSH output into a telemetry dict.
  • KEYBOARD_NAMES, INI_VIDEO_KEYS, WS_PATH, DEFAULT_PORT — protocol constants.

Credits

REST/WebSocket API by wizzomafizzo/mrext. MiSTer-kun logo by the MiSTer-devel project. Author @hudsonbrendon.

License

MIT — see LICENSE.

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

python_mister_fpga-0.1.0.tar.gz (91.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_mister_fpga-0.1.0-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file python_mister_fpga-0.1.0.tar.gz.

File metadata

  • Download URL: python_mister_fpga-0.1.0.tar.gz
  • Upload date:
  • Size: 91.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for python_mister_fpga-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f7b8c1adf315f027e3cd35ff7c90c9400d94133029a3d9250df6b9819b9e0ba5
MD5 ea22ec55e60c10d51ea39ce909d7108b
BLAKE2b-256 f36c3ef9108a972580e4518726d9969f41c10ce367e112640817ee538318900c

See more details on using hashes here.

File details

Details for the file python_mister_fpga-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for python_mister_fpga-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 806b8054033accd1d607405376a6780945e3aa378b40497b8922862102e7aae4
MD5 d694de3bbb9c88bcb42bf666b88d5d38
BLAKE2b-256 a29c1a460269dae8e5be8ab2b1d14c01c9b8a6f8762029406e3c7d30da1e011a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page