Summary
LPEC is Linn's raw TCP socket control protocol for DS/DSI/DSM players and preamps. Connection on port 23. Clients send ACTION/SUBSCRIBE/UNSUBSCRIBE messages; device responds with RESPONSE/EVENT/ERROR. No authentication required.
Transport
protocols:
- tcp
addressing:
port: 23
auth:
type: none
Traits
- routable
- queryable
- levelable
Actions
- id: play
label: Play
kind: action
params:
- name: instance_id
type: string
description: UPnP instance ID (usually "0")
- name: speed
type: string
description: Speed (usually "1")
- id: pause
label: Pause
kind: action
params:
- name: instance_id
type: string
description: UPnP instance ID (usually "0")
- id: next
label: Next Track
kind: action
params:
- name: instance_id
type: string
description: UPnP instance ID (usually "0")
- id: previous
label: Previous Track
kind: action
params:
- name: instance_id
type: string
description: UPnP instance ID (usually "0")
- id: get_volume
label: Get Volume
kind: action
params:
- name: instance_id
type: string
description: UPnP instance ID (usually "0")
- name: channel
type: string
description: Channel (e.g., "Master")
- id: set_volume
label: Set Volume
kind: action
params:
- name: instance_id
type: string
- name: channel
type: string
- name: level
type: integer
description: Volume level (0-100)
- id: set_mute
label: Set Mute
kind: action
params:
- name: mute
type: boolean
description: "true" to mute, "false" to unmute
- id: set_source_index
label: Set Source by Index
kind: action
params:
- name: index
type: integer
description: Source index number
- id: set_source_by_system_name
label: Set Source by System Name
kind: action
params:
- name: name
type: string
description: Source system name (e.g., "Balanced", "Radio")
- id: set_source_index_by_name
label: Set Source by Name
kind: action
params:
- name: name
type: string
description: Source name (e.g., "CD12")
- id: get_source
label: Get Source Info
kind: action
params:
- name: index
type: integer
description: Source index
- id: invoke_pin
label: Invoke PIN
kind: action
params:
- name: id
type: integer
description: PIN ID number
- id: read_pin_list
label: Read PIN List
kind: action
params:
- name: index
type: string
description: PIN index
- id: get_pin_array
label: Get PIN Array
kind: action
params: []
Feedbacks
- id: response
type: object
description: RESPONSE "[outarg1]" "[outarg2]" ... - replies to ACTION, contains all output args
- id: subscribe_ack
type: integer
description: SUBSCRIBE [subscription-id] - confirms subscription, id used for unsubscribe
- id: event
type: object
description: EVENT messages contain variable name/value pairs for subscribed services
- id: alive
type: object
description: ALIVE [sub-device] [udn] - sent on connect for each enabled sub-device
- id: byebye
type: object
description: BYEBYE [sub-device] [udn] - sent when sub-device disabled
- id: error
type: object
description: ERROR [code] "[description]" - error response
Variables
- id: volume
type: integer
description: Current volume level (0-100)
- id: mute
type: boolean
description: Current mute state
- id: source_index
type: integer
description: Current source selection index
- id: source_name
type: string
description: Current source system name
- id: product_name
type: string
description: Device product name
- id: product_room
type: string
description: Device room name
- id: product_standby
type: boolean
description: Device standby state
Events
- id: state_change
type: object
description: Unsolicited EVENT messages sent when subscribed variables change
- id: device_event
type: object
description: BYEBYE/ALIVE messages when sub-devices enabled/disabled
Macros
- id: subscribe_service
description: Send SUBSCRIBE [sub-device]/[service] to receive ongoing state updates
- id: unsubscribe_service
description: Send UNSUBSCRIBE [subscription-id] or UNSUBSCRIBE [sub-device]/[service]
- id: unsubscribe_all
description: Send UNSUBSCRIBE (no args) to unsubscribe all services
Safety
confirmation_required_for: []
interlocks: []
Notes
Max 4 simultaneous LPEC sessions. Crestron processors may reopen Telnet ports without closing existing ones — close connection when touchpanel asleep. First command after ALIVE may error — send blank command to clear.
Source names: Playlist(0), Radio(1), Songcast(2), NetAux(3), UpnpAv(4), plus fixed inputs Analog1/Phono/Balanced/Front Aux/HDMI1/SPDIF1/TOSLINK1 with configurable names.
PIN numbers may change after reboot if recently altered.
Provenance
source_domains:
- docs.linn.co.uk
source_urls:
- https://docs.linn.co.uk/wiki/index.php/Developer:LPEC
retrieved_at: 2026-04-30T04:32:34.983Z
last_checked_at: 2026-06-02T22:09:25.067Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:09:25.067Z
matched_actions: 14
action_count: 14
confidence: medium
summary: "All 14 spec actions traced to source (dip-safe re-verify). (3 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "power on/off commands not present in source"
- "firmware version compatibility not stated"
- "LPEC protocol version not stated"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0