Skip to main content

Blocking Python facade for driving Extron SIS devices over SSH

Project description

sismatic

An open-sourced library for working with the Simple Instruction Set used by many Extron devices. The name comes from SIS + automatic, because it handles the SIS machinery behind the scenes without human control.

Why?

There are several reasons why this library is worthwhile:

  1. Relies on a stable, unchanging protocol.
  2. Hides complexities of managing connections.
  3. Hides complexities of byte-level communication.

Python Consumer Example

The following is an example of how this library can be consumed in Python.

Examples

Configuration

[defaults]
port = 22023
connect_secs = 5
command_secs = 3

[[device]]
id = "atrium-101"
host = "10.0.0.7"
username = "admin"
password = "extron"

[[device]]
id = "annex-far"
host = "10.0.0.8"
username = "admin"
password = "extron"
connect_secs = 10   # override default connect timeout
command_secs = 8    # override default command timeout

Iterate over package public properties

>>> from sismatic import Sis
>>> [m for m in dir(Sis) if not m.startswith('_')]
['command', 'from_toml', 'ids', 'query', 'register']

List Recorders (no network)

from sismatic import Sis

sis = Sis.from_toml("devices.toml")
for device_id in sorted(sis.ids()):
  print(device_id)

Start a Recording

# control_recording.py
# Starts recording and stamps a title across a batch of devices.

from dataclasses import dataclass
from sismatic import Sis

@dataclass(frozen=True)
class RecordingJob:
    """(device_id × title) as a product type. A job is exactly a pairing of
    the two — never one without the other — so the type says that, instead
    of the two strings being threaded separately through every call site as
    two positional arguments that happen to always travel together."""
    device_id: str
    title: str


def run_job(sis: sismatic, job: RecordingJob) -> None:
    sis.register(job.device_id, "title", job.title)   # "title" — see Register::Title
    sis.command(job.device_id, "start")                # "start" — see Command::Start


def main() -> None:
    sis = Sis.from_toml("devices.toml")
    jobs = [
        RecordingJob(device_id="atrium-101", title="Week 4 — Lecture"),
        RecordingJob(device_id="annex-far", title="Week 4 — Overflow Room"),
    ]
    for job in jobs:
        run_job(sis, job)


if __name__ == "__main__":
    main()

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

sismatic-0.1.6.tar.gz (75.0 kB view details)

Uploaded Source

Built Distributions

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

sismatic-0.1.6-cp38-abi3-manylinux_2_28_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ x86-64

sismatic-0.1.6-cp38-abi3-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

sismatic-0.1.6-cp38-abi3-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file sismatic-0.1.6.tar.gz.

File metadata

  • Download URL: sismatic-0.1.6.tar.gz
  • Upload date:
  • Size: 75.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sismatic-0.1.6.tar.gz
Algorithm Hash digest
SHA256 5dcefda24def98222d42bb9fd532ebeb6689084dbc8c51de770f331055d0030e
MD5 dc4ccd3e9ffb441e4960947d1c7fbf24
BLAKE2b-256 1381d3786ab66e2b89bd772d3554cc3ee217741fa8f100a3e49235941351ff9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.6.tar.gz:

Publisher: pipeline.yml on metzenseifner/sismatic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sismatic-0.1.6-cp38-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.6-cp38-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 19d9d3810ce7621a7354ffc9a84366b5ebdec176bc94238904ad378f54460826
MD5 b900bdd8628635a86f88cf40fbbc3e57
BLAKE2b-256 0d077ac73c742bbb62f14fe391e3f46f3fcdbd6b7842389b17886be2ccaf66d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.6-cp38-abi3-manylinux_2_28_x86_64.whl:

Publisher: pipeline.yml on metzenseifner/sismatic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sismatic-0.1.6-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.6-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5fbd3a68a8d5fdb905d3831054416a817fe7d183868a6bfe971ed18e0a11bfba
MD5 159b640465237491a86fd0031e466b74
BLAKE2b-256 9b3df3ca223af38d269a7147736c46d910e12508d902f15ad0cfa70010030da7

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.6-cp38-abi3-macosx_11_0_arm64.whl:

Publisher: pipeline.yml on metzenseifner/sismatic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sismatic-0.1.6-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.6-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 09016b64a9da6f7f6b8a33a3e116a2b74d7936ef57393701c6ec2e6777d8a8d9
MD5 6fd630fc9284b0b3bd50f746ef1cf903
BLAKE2b-256 35d497690e0d248e549ef658adfc35a5801cf7b70945d9155275a7eb2833cd1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.6-cp38-abi3-macosx_10_12_x86_64.whl:

Publisher: pipeline.yml on metzenseifner/sismatic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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