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
- 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. - Verify TTP is responding. From any machine on the network,
telnet <dsp-ip> 23and send:ADEVICE get serialNumber+OK "value":"..."line confirms TTP is up and the system file is loaded. - Add the device. In GEM, create a Device with driver
biamp_tesira. Setipto the DSP IP. Leaveporton 23 unless the install has remapped it. - Create zones. Each fader / mute group is a zone.
zone.addressis the Instance Tag, optionally suffixed:<channelIndex>for multi-channel blocks:- Single-channel level block named
ConfLevel→address = ConfLevel - Multi-channel mute block named
MicMutes, channel 3 →address = MicMutes:3
- Single-channel level block named
- 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-levelmin_db/max_dbattributes when a fader's useful range differs from the device-wide window.
Device attributes
| Attribute | Required | Default | Description |
|---|---|---|---|
ip | yes | — | LAN IP or hostname of the Tesira unit. |
port | no | 23 | TTP port. |
status_interval | no | 60000 | Poll interval (ms). TTP does not push unsolicited changes unless a subscription is in place, so this is the primary state channel. |
min_db | no | −60 | Device-wide lower bound for the dB → 0 mapping. |
max_db | no | 0 | Device-wide upper bound for the dB → 100 mapping. |
command_throttle | no | 75 | Minimum gap (ms) between outbound TTP lines. |
Zone attributes
| Attribute | Required | Description |
|---|---|---|
address | yes | Tesira Instance Tag, optionally :<channelIndex> for multi-channel blocks. |
min_db | no | Override the device-wide minimum for this fader. |
max_db | no | Override 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_state—on/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 throughmin_db/max_dbto 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 (usesDEVICE 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
| Symptom | Check |
|---|---|
every command returns -ERR | Telnet 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-scale | Verify 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 GEM | Expected — the driver polls. Wait one status_interval (default 60 s) or shorten it. |
-ERR address not found after renaming a block | Instance Tags are case-sensitive. Double-check the GEM zone address matches the compiled tag exactly. |
| connection drops every few minutes | Confirm 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. |