Skip to main content

MSFS SimConnect wrapper for Python

Project description

py-simcon

This is a Python wrapper for SimConnect library which is used to talk to Microsoft Flight Simulator. This wrapper provides natural pythonic interface. It can be used in both synchronous and asynchronous (asyncio) applications. In both cases it is thread safe.

Features

  • Listen to system events (aircraft loaded, game paused, etc)
  • Receive data updates
  • Async and sync interfaces, which can work together simultaneously

Examples

Conventional (synchronous)

import pprint

from simcon import Sim, DataField, PERIOD
from simcon.data import types


with Sim("MyApp") as sim:
    data = sim.sync_request_data_once([
        DataField("ATC ID", None, types.STRING32),
        DataField("Title", None, types.STRING256),
    ])
    pprint.pprint(data)
    data_request = sim.request_data_on_sim_object(
        [
            DataField("HSI station ident", None, types.STRING8),
            DataField("Plane latitude", "degrees"),
            DataField("Plane longitude", "degrees"),
            DataField("Plane altitude", "feet"),
            DataField("GPS ground true track", "degrees"),
            DataField("GPS ground speed", "knots"),
            DataField("Zulu time", "seconds"),
        ],
        PERIOD.SECOND,
    )
    count = 0
    for data in data_request:
        pprint.pprint(data)
        count += 1
        if count >= 3:
            break

Result:

{'GPS ground speed': 97.83114326014487,
 'GPS ground true track': 307.4598039853386,
 'Plane altitude': 8501.684970335986,
 'Plane latitude': 39.3924225392898,
 'Plane longitude': -125.57142850592173,
 'Zulu time': 3287.369384765625}
{'GPS ground speed': 97.83704928992589,
 'GPS ground true track': 307.45556123353225,
 'Plane altitude': 8501.840396854732,
 'Plane latitude': 39.39269706474836,
 'Plane longitude': -125.57189141562071,
 'Zulu time': 3288.369384765625}
...

Asynchronous (asyncio):

import asyncio
import pprint

from simcon import Sim, DataField, PERIOD
from simcon.data import types


async def show_data():
    async with Sim("MyApp") as sim:
        data = await sim.request_data_once([
            DataField("ATC ID", None, types.STRING32),
            DataField("Title", None, types.STRING256),
        ])
        pprint.pprint(data)
        data_request = sim.request_data_on_sim_object(
            [
                DataField("HSI station ident", None, types.STRING8),
                DataField("Plane latitude", "degrees"),
                DataField("Plane longitude", "degrees"),
                DataField("Plane altitude", "feet"),
                DataField("GPS ground true track", "degrees"),
                DataField("GPS ground speed", "knots"),
                DataField("Zulu time", "seconds"),
            ],
            PERIOD.SECOND,
        )
        count = 0
        async for data in data_request:
            pprint.pprint(data)
            count += 1
            if count >= 3:
                break

asyncio.run(show_data())

Results will be the same as in the example above

Release History

Yet to release

  • Nothing so far

0.6.1

  • Always release GIL before calling SimConnect (fixes freezes)

0.6.0

  • Fixed event/data cleanup exceptions when stopping
  • Fixed iterating over changing dicts when stopping
  • Fixed non-asyncio-friendly threading.Lock causing deadlocks (API changed!)

0.5.0

  • Added more parameters to data requests:
    • when - either always, or only when the data changes (default: always)
    • origin - periods to wait before first data transmission (default: 0)
    • interval - periods between data transmissions (default: 1, i.e. every period)
    • limit - limit the number of data transmissions (default: 0, i.e. never stop)
  • Fixed 32-bit fields alignment

0.4.0

  • Wrapped SimConnect failures into OSError instead of a generic RuntimeError
  • Sim now stops when the simulator quits.
  • Added wait_stop() to wait until Sim stops
  • Stop Sim if it failed to start as a context manager

0.3.0

  • Added support for strings, integer, and float32 data types
  • Added a helper to request data once

0.2.0

  • Added start() and stop() methods. All event and data listeners will throw Closed() exception if they are still being awaited when Sim stops, or if it is already stopped when wait() is called.

0.1.0

  • Initial release

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

simcon-0.6.1.tar.gz (17.2 kB view details)

Uploaded Source

Built Distributions

simcon-0.6.1-cp39-cp39-win_amd64.whl (524.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

simcon-0.6.1-cp38-cp38-win_amd64.whl (524.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

simcon-0.6.1-cp37-cp37m-win_amd64.whl (511.7 kB view details)

Uploaded CPython 3.7m Windows x86-64

File details

Details for the file simcon-0.6.1.tar.gz.

File metadata

  • Download URL: simcon-0.6.1.tar.gz
  • Upload date:
  • Size: 17.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.7.9

File hashes

Hashes for simcon-0.6.1.tar.gz
Algorithm Hash digest
SHA256 9730376ef352c214cd4cceec0974f610981082390da5941a79a91c17fa859740
MD5 fb32c0953bd035cb375929eba64ff6d6
BLAKE2b-256 ecc51f3607482d1505abf0cf20c6cf9caeafebd15d759cb11d978e5cb3dfff3f

See more details on using hashes here.

File details

Details for the file simcon-0.6.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: simcon-0.6.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 524.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.7.9

File hashes

Hashes for simcon-0.6.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1220426bab5e17721d7038585b6752f1ba9bc5cb569fe40297ae9e352ffb5087
MD5 383fa416b0917274cfa5660e393ddf7a
BLAKE2b-256 993c86544379fe9105ea4f72815a66b55e2399d6a89f512e3641aa9c19ef1f90

See more details on using hashes here.

File details

Details for the file simcon-0.6.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: simcon-0.6.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 524.9 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.7.9

File hashes

Hashes for simcon-0.6.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 1d577f51ea1c38010231cbe890ad57befa9a31a8d0e8c4b7d9b2ceed075e9c58
MD5 e1cb01035fed4637f68146972cf80e97
BLAKE2b-256 5fa90203f15a4b9dd0b78599842d5adffd29edc9c92b0d490ec53121c280e892

See more details on using hashes here.

File details

Details for the file simcon-0.6.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: simcon-0.6.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 511.7 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.7.9

File hashes

Hashes for simcon-0.6.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c66f5f6a9eae0465d74b9898894f3d72b62d0a6ce772e7ce64d6f31d9a29231e
MD5 43b4aaba812bc59d0c57b359e2b8838a
BLAKE2b-256 3ee80158b0115dda2f37c6ea1e0c972582ecfb4ab6756ea730e4f620f595747d

See more details on using hashes here.

Supported by

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