3rd Party Control Protocol for LINUS6.4#
1. General#
The specifics of the 3rd Party Control Protocol for LINUS6.4, are as follows:
The devices shall be controlled with UDP Datagrams.
UDP Communication should be kept to the minimum amount possible to configure the Amplifiers.
Redundant information should not be sent.
A UDP message should always contain one command.
UDP commands should be sent in the JSON format.
UDP messages should be sent to UDP Port 6791 on the devices.
SET commands are acknowledged by the amplifiers.
GET commands will be responded to by the amplifier, always to the IP of the Host where the message originated, and to the originating UDP port on that Host.
The amplifiers should only be controlled either by the LINUS Control software, -or- the 3rd Party Control Protocol, not both.
Commands can be applied from device Firmware v1.5.
Note
For example in a typical bar installation, the system would be commissioned with LINUS Control, allowing for easy real-time control of all aspects of the design. When the commissioning engineer wants to commit the design, they would save the system in one or more ‘Snapshots’ inside the Amplifier. LINUS Control can then be removed, and the system can be remotely controlled by the 3rd Party Control protocol, for instance with a wall remote capable of sending UDP Datagrams. The snapshots can be loaded using this protocol, and changes (such as gains and mutes etc) pushed as and when required. Loading the snapshot once again would take the installation back to the state where the commissioning engineer had left it. Snapshots can be made for different configurations, times of day, areas of operation etc.
2. Commands#
2.1. get_device_info#
{
"command": "get_device_info"
}
{
"command": "get_device_info",
"hw_addr": "04:89:5B:6D:E2:DA",
"ip_addr": "192.168.1.30",
"ip_mask": "255.255.255.0",
"model": "LINUS6.4",
"serial": "LI24110021",
"sw_version": "V1.3",
"hw_version": "V1.1",
"desc": "LINUS"
}
2.2. set_ip_static#
{
"command": "set_ip_static",
"ip_address": /* IP (String) */,
"netmask": /* Netmask (String) */
}
{
"command": "set_ip_static",
"ip_address": "192.168.0.5",
"netmask": "255.255.255.0"
}
{
"status": "OK",
"ip_address": "192.168.1.30",
"netmask": "255.255.255.0",
"command": "set_ip_static"
}
2.3. set_snapshot#
{
"command": "set_snapshot",
"path": /* folder/file (String) */
}
{
"command": "set_snapshot",
"path": "20/20 Test "
}
{
"response": "unknown snapshot",
"status": "Error",
"command": "set_snapshot"
}
Snapshots in LINUS 6.4 are organised as files in folders. There are 20 folders for the 20 Snapshot slots. The 21st folder contains the live state of the amplifier, set from LINUS Control.
Attention
Space characters in the “path” argument must not be trimmed or removed. The “path” argument always starts with the number of the slot for the folder, then the number of the slot again for the file, then one space. This is followed by the snapshot name, which must be padded to 20 characters by appending blanks to the string.
2.4. get_snapshot_folders#
{
"command": "get_snapshot_folders"
}
{
"command": "get_snapshot_folders"
}
{
"folders": ["PresetLib 1.2", "3", "4", "7", "11", "13", "14", "18", "DefaultName #1 ", "1", "2", "5", "20", "15", "10", "12", "8", "17", "6", "19", "9", "16", "21"],
"command": "get_snapshot_folders"
}
2.5. get_snapshot_files#
{
"command": "get_snapshot_files",
"folder": /* folder (String) */
}
{
"command": "get_snapshot_files",
"folder": "1"
}
{
"files": ["1 test1 "],
"command": "get_snapshot_files"
}
2.6. get_snapshot_last_loaded#
{
"command": "get_snapshot_last_loaded"
}
{
"command": "get_snapshot_last_loaded"
}
{
"snapshot_last_loaded": "20/20 test ",
"conform running state": false,
"command": "get_snapshot_last_loaded"
}
2.7. set_mute_all#
{
"command": "set_mute_all",
"enable": /* true/false (Boolean) */
}
{
"command": "set_mute_all",
"enable": true
}
{
"mute": true,
"status": "OK",
"command": "set_mute_all"
}
2.8. set_channel_mute#
{
"command": "set_channel_mute",
"channel": /* Channel number (Number) */,
"enable": /* true/false (Boolean) */
}
{
"command": "set_channel_mute",
"channel": 3,
"enable": true
}
{
"channel": 3,
"mute": true,
"status": "OK",
"command": "set_channel_mute"
}
2.9. get_channel_mute#
{
"command": "get_channel_mute",
"channel": /* Channel number (Number) */
}
{
"command": "get_channel_mute",
"channel": 3
}
{
"channel": 1,
"mute": true,
"status": "OK",
"command": "get_channel_mute"
}
2.10. set_channel_gain#
{
"command": "set_channel_gain",
"channel": /* Channel number (Number) */,
"gain": /* Gain dB (Number) */
}
{
"command": "set_channel_gain",
"channel": 1,
"gain": 0.0
}
{
"channel": 1,
"gain": 0.0,
"status": "OK",
"command": "set_channel_gain"
}
2.11. get_channel_gain#
{
"command": "get_channel_gain",
"channel": /* Channel number (Number) */
}
{
"command": "get_channel_gain",
"channel": 1
}
{
"channel": 1,
"gain": 0.0,
"status": "OK",
"command": "get_channel_gain"
}
2.12. set_channel_gain_down#
{
"command": "set_channel_gain_down",
"channel": /* Channel number (Number) */,
"step": /*Gain decrement dB (Number) */
}
{
"command": "set_channel_gain_down",
"channel": 1,
"step": 10
}
{
"channel": 1,
"step": 10.0,
"gain": -10.0,
"status": "OK",
"command": "set_channel_gain_down"
}
2.13. set_channel_gain_up#
{
"command": "set_channel_gain_up",
"channel": /* Channel number (Number) */,
"step": /* Gain increment dB (Number) */
}
{
"command": "set_channel_gain_up",
"channel": 1,
"step": 10
}
{
"channel": 1,
"step": 10.0,
"gain": 0.0,
"status": "OK",
"command": "set_channel_gain_up"
}
2.14. set_channel_delay#
{
"command": "set_channel_delay",
"channel": /* Channel number (Number) */,
"delay": /* Delay ms (Number) */
}
{
"command": "set_channel_delay",
"channel": 3,
"delay": 200
}
{
"channel": 3,
"delay": 200.0,
"status": "OK",
"command": "set_channel_delay"
}
2.15. get_channel_delay#
{
"command": "get_channel_delay",
"channel": /* Channel number (Number) */
}
{
"command": "get_channel_delay",
"channel": 1
}
{
"channel": 1,
"delay": 0.0,
"status": "OK",
"command": "get_channel_delay"
}
2.16. set_fall_back_enabled#
{
"command": "set_fall_back_enabled",
"enable": /* true/false (Boolean) */
}
{
"command": "set_fall_back_enabled",
"enable": true
}
{
"enabled": true,
"status": "OK",
"command": "set_fall_back_enabled"
}
2.17. get_fall_back_enabled#
{
"command": "get_fall_back_enabled"
}
{
"command": "get_fall_back_enabled"
}
{
"fall_back_enabled": true,
"status": "OK",
"command": "get_fall_back_enabled"
}
2.18. get_fall_back_active#
{
"command": "get_fall_back_active"
}
{
"command": "get_fall_back_active"
}
{
"fall_back_active": false,
"status": "OK",
"command": "get_fall_back_active"
}
2.19. get_fall_back_time#
{
"command": "get_fall_back_time"
}
{
"command": "get_fall_back_time"
}
{
"fall_back_time": 2,
"status": "OK",
"command": "get_fall_back_time"
}
2.20. set_fall_back_revert_to_primary_source#
{
"command": "set_fall_back_revert_to_primary_source"
}
{
"command": "set_fall_back_revert_to_primary_source"
}
{
"status": "OK",
"command": "set_fall_back_revert_to_primary_source"
}
2.21. set_standby#
{
"command": "set_standby",
"enable": /* true/false (Boolean) */
}
{
"command": "set_standby",
"enable": true
}
{
"standby": true,
"status": "OK",
"command": "set_standby"
}
2.22. get_standby#
{
"command": "get_standby"
}
{
"command": "get_standby"
}
{
"standby": true,
"status": "OK",
"command": "get_standby"
}
2.23. set_group_clear#
{
"command": "set_group_clear"
}
{
"command": "set_group_clear"
}
{
"status": "OK",
"command": "set_group_clear"
}
2.24. set_identify#
{
"command": "set_identify",
"enable": /* true/false (Boolean) */,
"time": /* Duration [seconds] (Number) */
}
{
"command": "set_identify",
"enable": true,
"time": 3
}
{
"identify": true,
"status": "OK",
"command": "set_identify"
}
2.25. get_bridge_mode_12#
{
"command": "get_bridge_mode_12"
}
{
"command": "get_bridge_mode_12"
}
{
"bridge_mode_12": false,
"status": "OK",
"command": "get_bridge_mode_12"
}
2.26. get_bridge_mode_34#
{
"command": "get_bridge_mode_34"
}
{
"command": "get_bridge_mode_34"
}
{
"bridge_mode_34": false,
"status": "OK",
"command": "get_bridge_mode_34"
}
2.27. get_readback#
{
"command": "get_readback"
}
{
"command": "get_readback"
}
{
"V1": -80.0,
"I1": 0.3,
"GRRMS1": 0.0,
"GRPK1": 0.0,
"GRAMP1": 0.0,
"S1": -80.0,
"Z1": 0.0,
"V2": -80.0,
"I2": 0.3,
"GRRMS2": 0.0,
"GRPK2": 0.0,
"GRAMP2": 0.0,
"S2": -80.0,
"Z2": 0.0,
"V3": -80.0,
"I3": 0.3,
"GRRMS3": 0.0,
"GRPK3": 0.0,
"GRAMP3": 0.0,
"S3": -80.0,
"Z3": 0.0,
"V4": -80.0,
"I4": 0.3,
"GRRMS4": 0.0,
"GRPK4": 0.0,
"GRAMP4": 0.0,
"S4": -80.0,
"Z4": 0.0,
"AMPON": false,
"OVERTEMP": false,
"AVGLIM": false,
"TEMP": 33,
"SMPS": 235,
"AES1LOCK": false,
"AES2LOCK": false,
"DANTELOCK": false,
"AES1FS": "Unknown",
"AES2FS": "Unknown",
"DANTEFS": "Unknown",
"status": "OK",
"command": "get_readback"
}