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.13.tar.gz (79.4 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.13-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.13-cp39-abi3-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

sismatic-0.1.13-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.13.tar.gz.

File metadata

  • Download URL: sismatic-0.1.13.tar.gz
  • Upload date:
  • Size: 79.4 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.13.tar.gz
Algorithm Hash digest
SHA256 9658edddf0b5c9796661f6ed187d1fa06f1f91c6721f23c0a6c601e29f2577b0
MD5 97b110ec03a81459922f4e16028e83fc
BLAKE2b-256 f7a09bdb5a4259b07197c786130dc77d0e1f476dbfe1a45fc99bc857644166d7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sismatic-0.1.13-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 37bbda6c89d5e2a93a701de3260975e269df2493d1a30bd69b34d1c4db3879ac
MD5 200713ee2482d9576ce6e9860838ff47
BLAKE2b-256 b7a73c4d0fff23dd2166d1dbcdd67d1c941c493c8e124217b3751d5e93c1b26e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sismatic-0.1.13-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7dac4fd83f75887fadfa85ef7728bf9a45919a91836f96e05800d5257ae0b9ca
MD5 3e7721c2cde2bb75b33610547070ac3e
BLAKE2b-256 5b08b1acbb9755b43e7f79641d086d42e7a54aaca7bcbddf9ec80acbecfe2bc9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sismatic-0.1.13-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 01859874a83f6b553584fe13e5ac84e4b1469e646853a36e3c007ce08662692b
MD5 47f5c0c9fc9b50bfa0b43f744327ed74
BLAKE2b-256 7f88597f09c07a014f7e5903cf5230bd0ae9a5db8e4641aa157c48ef85bc97f7

See more details on using hashes here.

Provenance

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