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.9.tar.gz (78.6 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.9-cp39-abi3-manylinux_2_28_x86_64.whl (1.7 MB view details)

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

sismatic-0.1.9-cp39-abi3-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

sismatic-0.1.9-cp39-abi3-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: sismatic-0.1.9.tar.gz
  • Upload date:
  • Size: 78.6 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.9.tar.gz
Algorithm Hash digest
SHA256 fd53c80516ed3380f267463c415625f24a313c3e718837555c2a76d28eb533f4
MD5 24c445c26671668f1bef983432509f77
BLAKE2b-256 d8474419e30ca39b1f19e171843fecf482919701f1126ad699f23f652fc356ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.9.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.9-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.9-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 14ba4bb803e7e76fc69f152d05bebc0df21933c4cc46872c82c6abf4e9bb037f
MD5 6555fc085ecd49f291793348267f7f63
BLAKE2b-256 9c8f1ee8891f3db5cacf5008ea96707bfd26219692ae568e4e6b2211e9d6b676

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.9-cp39-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.9-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.9-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9e410cfbec9fb88c6cbc77dc1f962a820a8d0482bad8a0916a46b774e6633a14
MD5 95eda2865da190e6fdd9f03b6b465940
BLAKE2b-256 ad9cdaf5aa449c1087ef6dd812091a4e38585cb090443ca8cc5afc9c9fbf259d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sismatic-0.1.9-cp39-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.9-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sismatic-0.1.9-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0506669c94c6bd7189e8764de542f3cf70f98e6e53816c5cbac7ce6c3c344048
MD5 e78a43fe7bb6f7ff63008e8ab5140e55
BLAKE2b-256 f7747ef69125c12f14771adcd01d6dfa49085ddbc629f57aa831b52b7b66b03f

See more details on using hashes here.

Provenance

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