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.2.tar.gz (55.5 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.2-cp38-abi3-manylinux_2_28_x86_64.whl (1.6 MB view details)

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

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

Uploaded CPython 3.8+macOS 11.0+ ARM64

sismatic-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: sismatic-0.1.2.tar.gz
  • Upload date:
  • Size: 55.5 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.2.tar.gz
Algorithm Hash digest
SHA256 857a7d9a77535796f2b65047cdea4dbc01621424895028714ef47a8a03ace524
MD5 b4e42a8d06130ed29a827a231ca45e8b
BLAKE2b-256 57cdd7c6f0c70c319cdc8aa8df7b4a676ae4b22074b945329813792aa5c76bb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.2.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.2-cp38-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.2-cp38-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bcaf6e822a02adc3bea9b4eb7defc770d6d35224530f9bed922ff2a4254a4656
MD5 f5223739a690c91fa9fc9f3e66ac09b6
BLAKE2b-256 e7f484bb5ea3a8458f31e59c3244728866354483f085566d0a4ebf4744c2e7f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.2-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.2-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.2-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72dd0717655f38660fa66a4511b824fefb139576a72b5444fcc3d49877e79439
MD5 3bf55e0f594fc71c7d40d55130e60001
BLAKE2b-256 8f1d9f8e23840502ddcdabfc4d0e3746bebbefd0d8636386a7f9b09fbc0ed7a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.2-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.2-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 90809e46c03cc22dc58dc141e2c03cd611eb0078045dc820478adb7f8efcb3fb
MD5 45616b514d4d6ccdbc42f630307912a2
BLAKE2b-256 f9a5ad8b1252f00d547ede278940e1eab4eeb7f65c8347261942ec4790df671f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.2-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