Skip to main content

Biamp Tesira

Drives Biamp Tesira DSPs — Tesira FORTE, SERVER, SERVER-IO, and TesiraLUX endpoints — over the published Tesira Text Protocol (TTP) on Telnet port 23. Each named Level or Mute control block compiled into the system file is addressable as a GEM zone, so one DSP can host many zones (one per fader, mic channel, or mute group).

Prerequisites

  • Tesira firmware with TTP enabled. TTP is on by default on every Tesira shipped since the FORTE.
  • A compiled Tesira system file pushed to the DSP. The driver targets named Instance Tags of Level and Mute control blocks — if the system file has none, there is nothing to control.
  • TCP/23 reachable from the GEM controller to the DSP. The SSH alternative on port 22 is not used by this driver.
  • Network isolation. TTP on port 23 is unauthenticated; the DSP should live on an audio-network VLAN or behind an ACL.

Setup

  1. Identify your control blocks. In Tesira Software, open the system file and note the Instance Tag (the named identifier shown in block properties) of every Level and Mute block GEM should drive. Examples: ConfLevel, BgmMute, MicMutes.
  2. Verify TTP is responding. From any machine on the network, telnet <dsp-ip> 23 and send:
    DEVICE get serialNumber
    A +OK "value":"..." line confirms TTP is up and the system file is loaded.
  3. Add the device. In GEM, create a Device with driver biamp_tesira. Set ip to the DSP IP. Leave port on 23 unless the install has remapped it.
  4. Create zones. Each fader / mute group is a zone. zone.address is the Instance Tag, optionally suffixed :<channelIndex> for multi-channel blocks:
    • Single-channel level block named ConfLeveladdress = ConfLevel
    • Multi-channel mute block named MicMutes, channel 3 → address = MicMutes:3
  5. Tune the level mapping (optional). GEM exchanges levels as 0–100. The driver maps that range across min_db .. max_db (defaults −60 dB .. 0 dB). Override per-zone with the zone-level min_db / max_db attributes when a fader's useful range differs from the device-wide window.

Device attributes

AttributeRequiredDefaultDescription
ipyesLAN IP or hostname of the Tesira unit.
portno23TTP port.
status_intervalno60000Poll interval (ms). TTP does not push unsolicited changes unless a subscription is in place, so this is the primary state channel.
min_dbno−60Device-wide lower bound for the dB → 0 mapping.
max_dbno0Device-wide upper bound for the dB → 100 mapping.
command_throttleno75Minimum gap (ms) between outbound TTP lines.

Zone attributes

AttributeRequiredDescription
addressyesTesira Instance Tag, optionally :<channelIndex> for multi-channel blocks.
min_dbnoOverride the device-wide minimum for this fader.
max_dbnoOverride the device-wide maximum for this fader.

The driver writes the following onto each zone as state arrives from the DSP:

  • zone.volume — 0–100 level mapped from dB.
  • zone.level_db — raw dB reading for diagnostics.
  • zone.mute_stateon / off.

Commands

  • on / off — unmute / mute the addressed block.
  • mute_on / mute_off / mute_toggle — explicit mute control.
  • set_level — accepts a 0–100 level; mapped through min_db / max_db to a dB target.
  • set_db — set the raw dB value, bypassing the 0–100 mapping. Useful for calibrated automation.
  • level_up / level_down — ±3 dB step.
  • preset — recall a Tesira preset by numeric ID (uses DEVICE recallPreset).
  • get_serial — read the DSP serial number. Use this as a smoke test that the link is alive.
  • get_zone_status — force a re-read for one zone.
  • get_zones — re-poll every configured zone. Tesira does not expose a block enumeration over TTP, so this only refreshes what GEM already knows about; it does not discover new blocks.

Zone address format

<InstanceTag>[:<channelIndex>]
  • ConfLevel — single-channel level block named "ConfLevel".
  • MicMutes:1 — channel 1 of a multi-channel mute block named "MicMutes".
  • Tags are case-sensitive and must match the Tesira system file exactly.

Known limitations

  • Polling, not subscriptions. TTP supports subscribe level <tag> for push updates, but tracking the resulting publish tokens across reconnects adds complexity that this driver intentionally avoids. As a result, level changes made from a touch panel or third-party controller surface in GEM only at the next poll interval. A future revision can add subscriptions for high-traffic zones.
  • No block discovery. Tesira system files are arbitrary — there is no protocol-level enumeration. The integrator must define one GEM zone per block they care about.
  • Single Telnet session per DSP is recommended. Tesira will accept multiple TTP sessions, but mixing GEM with a parallel Tesira CLI tool can interleave responses unpredictably; this driver assumes it owns the session.
  • No auth. TTP on port 23 is unauthenticated; network-layer isolation is mandatory.

Troubleshooting

SymptomCheck
every command returns -ERRTelnet to the DSP and send DEVICE get serialNumber. If that fails the system file is not loaded — compile and push from Tesira Software, then retry.
zone shows level 0 but the fader is mid-scaleVerify min_db / max_db matches the DSP block's configured range. A 0–100 scale across a −100 .. 0 dB block collapses everything below −60 to 0.
level changes from another controller don't appear in GEMExpected — the driver polls. Wait one status_interval (default 60 s) or shorten it.
-ERR address not found after renaming a blockInstance Tags are case-sensitive. Double-check the GEM zone address matches the compiled tag exactly.
connection drops every few minutesConfirm there's no NAT in the path or shorten ping_interval. The driver sends SESSION get verbose on the ping interval to keep the socket alive.