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.5.tar.gz (74.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.5-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.5-cp38-abi3-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

sismatic-0.1.5-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.5.tar.gz.

File metadata

  • Download URL: sismatic-0.1.5.tar.gz
  • Upload date:
  • Size: 74.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.5.tar.gz
Algorithm Hash digest
SHA256 d3f3450452feb3b5a2c827ac1645f071826e343f06f352b36ea083a1ef9b2346
MD5 cadfdeac8b80f58f4d0d00d2f4ed2f90
BLAKE2b-256 2f3f7d86aed62bf672b4d447687911a27f46c9d9143fc357692629bd16b1197d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sismatic-0.1.5-cp38-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d810cf7537375b739c975187e9c2e1320d055db7aea4182a36ad60055d71cc5c
MD5 f52c3463bd084625866264deb5bc132a
BLAKE2b-256 2fc507350e80da037f7bb5b510cacc21fec92f7ed22c398d656bb874666c401b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sismatic-0.1.5-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c37684536ec9c2737f5fac2c8f1db953acf0905155c7b667b5682ace2a4d7e0b
MD5 4ca2db6e00a63ca2f718ce2020d2904b
BLAKE2b-256 210036d3306fd11684aaafa5f947daf09180447cf96f195ecf9171dc1ef43d04

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sismatic-0.1.5-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 57200f4036396ecd5483510c8d2d7609d862cf9775a9f6e76e92a4577ea3ea48
MD5 73cb77af032fc2408b5ea3e192eb4322
BLAKE2b-256 b3c1897c183f1164081436f61cd5591919615326c4c453c408d1ec17fdf25a2a

See more details on using hashes here.

Provenance

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