Summary
The Planar LUX70 ERO B is a 70" ruggedized large-format LCD display (UltraLux family, ERO — Extended Ruggedness & Optics). This spec covers external control via an RS-232 serial link and a UDP mirror on port 57 that carries the identical binary command set (8-byte "Set" commands, 4-byte "Get" commands, each with a checksum byte). The device also exposes read-only SNMP monitoring (not modeled here as control actions).
Transport
protocols:
- serial
- udp
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # "no flow control" stated in source
addressing:
port: 57 # UDP port accepts the same command set as RS232
auth:
type: none # inferred: no auth procedure in source for RS232 or UDP
# UNRESOLVED: SNMP monitoring (read-only, community "public", MIB PLANAR-DISPLAY-MIB)
# is also available but is not modeled as a control protocol here - all SNMP
# objects are read-only and no traps are used.
Traits
# All inferred from command evidence in source (Tier 2).
traits:
- powerable # inferred: Set Power on/off commands present (rows 1-2)
- queryable # inferred: Get/query commands return current values (rows 3,5,7,9,...)
- levelable # inferred: backlight, contrast, sharpness, RGB gain, volume set commands
- routable # inferred: input-source select commands present (rows 22-24)
Actions
# Source documents 44 numbered RS232 command rows; UDP port 57 carries the
# identical payloads. All 44 are enumerated below verbatim.
#
# Checksum convention (from source): "the last byte value is chosen to force the
# check sum to 100 hex." In practice the sum of all command bytes ≡ 0x00 (mod
# 0x100); i.e. total byte sum is a multiple of 256. Set commands are 8 bytes,
# Get commands are 4 bytes. For parameterized Set commands the final byte is the
# filler that satisfies this rule for the chosen value byte.
#
# Legend: Set = 8-byte action command; Get = 4-byte query command.
# --- Power (rows 1-3) ---
- id: set_power_off
label: Set Power Off
kind: action
command: "08 22 FE 00 00 00 00 D8"
params: []
notes: "Soft power off; backlight off."
- id: set_power_on
label: Set Power On
kind: action
command: "08 22 FD 00 00 00 00 D9"
params: []
notes: "Soft power on; backlight on if video source present or while searching."
- id: get_power_status
label: Get Power Status
kind: query
command: "04 21 16 C5"
params: []
# --- Backlight brightness (rows 4-5) ---
- id: set_backlight_brightness
label: Set Backlight Brightness
kind: action
command: "08 22 00 00 00 00 {value} {checksum}"
params:
- name: value
type: integer
description: "Backlight brightness, 1-100. Sent as single byte (e.g. 80 = 0x50)."
- name: checksum
type: byte
description: "Filler byte so the 8-byte sum ≡ 0 (mod 256). For value=80: 0x86."
notes: "Source example, value 80: 08 22 00 00 00 00 50 86."
- id: get_backlight_brightness
label: Get Backlight Brightness
kind: query
command: "04 21 08 D3"
params: []
# --- Contrast (rows 6-7) ---
- id: set_contrast
label: Set Contrast
kind: action
command: "08 22 01 00 00 00 {value} {checksum}"
params:
- name: value
type: integer
description: "Contrast, 0-100 (e.g. 40 = 0x28)."
- name: checksum
type: byte
description: "Filler byte so 8-byte sum ≡ 0 (mod 256). For value=40: 0xAD."
notes: "Source: contrast changes are NOT saved on hard power-off (known bug). Example 40: 08 22 01 00 00 00 28 AD."
- id: get_contrast
label: Get Contrast
kind: query
command: "04 21 09 D2"
params: []
# --- Sharpness (rows 8-9) ---
- id: set_sharpness
label: Set Sharpness
kind: action
command: "08 22 03 00 00 00 {value} {checksum}"
params:
- name: value
type: integer
description: "Encoded byte = desired sharpness + 4. Range -4..4 maps to byte 0..8 (e.g. -4 -> 0x00, 4 -> 0x08)."
- name: checksum
type: byte
description: "Filler byte so 8-byte sum ≡ 0 (mod 256). For value byte 0x00: 0xD3."
notes: "Source example, sharpness -4 (byte 0x00): 08 22 03 00 00 00 00 D3."
- id: get_sharpness
label: Get Sharpness
kind: query
command: "04 21 0A D1"
params: []
notes: "Returned value = sharpness setting + 4."
# --- Color temperature (rows 10-15) ---
- id: set_color_temp_4200k
label: Set Color Temp 4200K
kind: action
command: "08 22 04 00 00 00 02 D0"
params: []
- id: set_color_temp_5000k
label: Set Color Temp 5000K
kind: action
command: "08 22 04 00 00 00 03 CF"
params: []
- id: set_color_temp_6500k
label: Set Color Temp 6500K
kind: action
command: "08 22 04 00 00 00 04 CE"
params: []
- id: set_color_temp_7500k
label: Set Color Temp 7500K
kind: action
command: "08 22 04 00 00 00 05 CD"
params: []
- id: set_color_temp_9300k
label: Set Color Temp 9300K
kind: action
command: "08 22 04 00 00 00 06 CC"
params: []
- id: get_color_temp
label: Get Color Temp
kind: query
command: "04 21 0B D0"
params: []
notes: "Returns 2=4200K, 3=5000K, 4=6500K, 5=7500K, 6=9300K."
# --- RGB gain (rows 16-21) ---
- id: set_red_gain
label: Set Red Gain
kind: action
command: "08 22 0E 00 00 00 {value} {checksum}"
params:
- name: value
type: integer
description: "Red gain, 0-100 (e.g. 50 = 0x32)."
- name: checksum
type: byte
description: "Filler byte so 8-byte sum ≡ 0 (mod 256). For value=50: 0x96."
notes: "Use RGB set commands to obtain custom color temperatures. Example 50: 08 22 0E 00 00 00 32 96."
- id: get_red_gain
label: Get Red Gain
kind: query
command: "04 21 0C CF"
params: []
- id: set_green_gain
label: Set Green Gain
kind: action
command: "08 22 0F 00 00 00 {value} {checksum}"
params:
- name: value
type: integer
description: "Green gain, 0-100 (e.g. 20 = 0x14)."
- name: checksum
type: byte
description: "Filler byte so 8-byte sum ≡ 0 (mod 256). For value=20: 0xB3."
notes: "Example 20: 08 22 0F 00 00 00 14 B3."
- id: get_green_gain
label: Get Green Gain
kind: query
command: "04 21 0D CE"
params: []
- id: set_blue_gain
label: Set Blue Gain
kind: action
command: "08 22 10 00 00 00 {value} {checksum}"
params:
- name: value
type: integer
description: "Blue gain, 0-100 (e.g. 80 = 0x50)."
- name: checksum
type: byte
description: "Filler byte so 8-byte sum ≡ 0 (mod 256). For value=80: 0x76."
notes: "Example 80: 08 22 10 00 00 00 50 76."
- id: get_blue_gain
label: Get Blue Gain
kind: query
command: "04 21 0E CD"
params: []
# --- Input select (rows 22-24) ---
- id: set_input_displayport
label: Set Input DisplayPort
kind: action
command: "08 22 02 00 00 00 00 D4"
params: []
notes: "Sets DP as default source."
- id: set_input_hdmi
label: Set Input HDMI
kind: action
command: "08 22 05 00 00 00 00 D1"
params: []
notes: "Sets HDMI as default source."
- id: set_input_vga
label: Set Input VGA
kind: action
command: "08 22 06 00 00 00 00 D0"
params: []
notes: "Sets VGA as default source."
# --- Audio (rows 25-29) ---
- id: set_volume
label: Set Volume
kind: action
command: "08 22 09 00 00 00 {value} {checksum}"
params:
- name: value
type: integer
description: "Speaker volume, 0-100 (e.g. 100 = 0x64)."
- name: checksum
type: byte
description: "Filler byte so 8-byte sum ≡ 0 (mod 256). For value=100: 0x69."
notes: "Example 100: 08 22 09 00 00 00 64 69."
- id: get_volume
label: Get Volume
kind: query
command: "04 21 0F CC"
params: []
- id: set_mute_on
label: Set Mute On
kind: action
command: "08 22 0A 00 00 00 01 CB"
params: []
notes: "Setting not saved on hard power-off (per source)."
- id: set_mute_off
label: Set Mute Off
kind: action
command: "08 22 0A 00 00 00 00 CC"
params: []
- id: get_mute
label: Get Mute
kind: query
command: "04 21 14 C7"
params: []
notes: "Known bug: may not reflect mute state if mute was changed via serial commands; reflects OSD changes only (0=off,1=on)."
# --- Input / color space status (rows 30-33) ---
- id: get_input_status
label: Get Input Status
kind: query
command: "04 21 07 D4"
params: []
notes: "Returns HDMI, VGA, or DPRx. If no source present, returns last searched source - pair with Get Power Status to confirm active source."
- id: set_color_space_full
label: Set Color Space Full
kind: action
command: "08 22 12 00 00 00 00 C4"
params: []
- id: set_color_space_srgb
label: Set Color Space sRGB
kind: action
command: "08 22 13 00 00 00 02 C1"
params: []
- id: get_color_space
label: Get Color Space
kind: query
command: "04 21 15 C6"
params: []
notes: "Returns 0=full color, 2=sRGB."
# --- Adjust / reset (rows 34-36) ---
- id: auto_adjust
label: Auto Adjust
kind: action
command: "08 22 07 00 00 00 00 CF"
params: []
notes: "Sync/timing auto adjust; only effective when VGA (analog) source present."
- id: auto_color_adjust
label: Auto Color Adjust
kind: action
command: "08 22 08 00 00 00 00 CE"
params: []
notes: "Gray-level auto adjust; only effective when VGA source present."
- id: factory_reset
label: Factory Reset
kind: action
command: "08 22 11 00 00 00 00 C5"
params: []
notes: "Restores all settings to factory defaults."
# --- Blacklevel brightness (rows 37-38) ---
- id: get_blacklevel_brightness
label: Get Blacklevel Brightness
kind: query
command: "04 21 17 C4"
params: []
notes: "Returned value ranges -350 to 350; scale differs from the 0-255 OSD scale."
- id: set_blacklevel_brightness
label: Set Blacklevel Brightness
kind: action
command: "08 22 16 00 00 00 {value} {checksum}"
params:
- name: value
type: integer
description: "Blacklevel offset. Source shows positive example only (50 = 0x32)."
- name: checksum
type: byte
description: "Filler byte so 8-byte sum ≡ 0 (mod 256). For value=50: 0x8E."
notes: "Example 50: 08 22 16 00 00 00 32 8E. <!-- UNRESOLVED: encoding for negative values (-350..0) not shown in source; single value byte cannot natively represent the full -350..350 Get range - encoding for negatives is undocumented. -->"
# --- Auto scan (rows 39-41) ---
- id: get_auto_scan_status
label: Get Auto Scan Status
kind: query
command: "04 21 18 C3"
params: []
notes: "Returns 1=on, 0=off."
- id: set_auto_scan_on
label: Set Auto Scan On
kind: action
command: "08 22 17 00 00 00 01 BE"
params: []
notes: "Continually checks inputs for activity, starting from default/selected source."
- id: set_auto_scan_off
label: Set Auto Scan Off
kind: action
command: "08 22 17 00 00 00 00 BF"
params: []
notes: "Only default/selected source can be active; suppresses LCD search pop-ups."
# --- HDMI full range (rows 42-44) ---
- id: get_hdmi_full_range
label: Get HDMI Full Range
kind: query
command: "04 21 1A C1"
params: []
notes: "Returns 1=full range on, 0=limited range on, 2=user contrast/brightness in effect or source is VGA."
- id: set_hdmi_full_range_on
label: Set HDMI Full Range On
kind: action
command: "08 22 19 00 00 00 01 BC"
params: []
notes: "Per-color range 0 (black) to 255 (white). Affects both HDMI and DisplayPort sources."
- id: set_hdmi_full_range_off
label: Set HDMI Full Range Off
kind: action
command: "08 22 19 00 00 00 00 BD"
params: []
notes: "Limited range: 15 (black) to 235 (white) per color. Affects both HDMI and DisplayPort sources."
Feedbacks
# Observable states returned by Get commands (UDP/serial ASCII replies).
- id: power_state
type: enum
values: ["ON", "OFF", "OFF_NO_SOURCE"]
description: 'Get Power Status replies: "Power: ON" when on; "Power:" when off; "Power: OFF" when on but no video source present.'
- id: backlight_brightness
type: integer
range: [1, 100]
description: 'Reply format: "Backlight = value".'
- id: contrast
type: integer
range: [0, 100]
description: 'Reply format: "Contrast = value".'
- id: sharpness
type: integer
range: [0, 8]
description: 'Reply format: "Sharpness = value"; value = setting + 4.'
- id: color_temp
type: enum
values: [4200K, 5000K, 6500K, 7500K, 9300K]
description: 'Reply format: "Color Temp = value" (2..6).'
- id: red_gain
type: integer
range: [0, 100]
description: 'Reply format: "Red Color = value".'
- id: green_gain
type: integer
range: [0, 100]
description: 'Reply format: "Green Color = value".'
- id: blue_gain
type: integer
range: [0, 100]
description: 'Reply format: "Blue Color = value".'
- id: input_source
type: enum
values: [HDMI, VGA, DPRx]
description: 'Reply from Get Input Status; may echo last-searched source when absent.'
- id: volume
type: integer
range: [0, 100]
description: 'Reply format: "Volume = value".'
- id: mute_state
type: enum
values: [off, on]
description: 'Reply format: "Mute = value" (0/1). Known bug: unreliable if mute changed via serial.'
- id: color_space
type: enum
values: [full, sRGB]
description: 'Reply format: "Color Space = value" (0=full, 2=sRGB).'
- id: blacklevel_brightness
type: integer
range: [-350, 350]
description: 'Reply format: "Brightness = value"; scale differs from OSD 0-255.'
- id: auto_scan_state
type: enum
values: [off, on]
description: 'Reply format: "Auto Scan = value" (0/1).'
- id: hdmi_full_range_state
type: enum
values: [limited, full, user_or_vga]
description: 'Reply format: "HDMI Full Range = value" (0=limited, 1=full, 2=user settings / VGA).'
Variables
# All settable parameters are represented as discrete Set Actions above
# (backlight brightness, contrast, sharpness, RGB gain, volume, blacklevel
# brightness, plus enumerated color-temp / color-space / mute / auto-scan /
# HDMI-range selections). No additional continuous variables to declare.
Events
# Source states SNMP uses "no traps". No unsolicited push notifications are
# documented for the RS-232 or UDP interfaces. Section not applicable.
events: []
Macros
# No multi-step command sequences described in source.
macros: []
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or
# power-on sequencing requirements. Never inferred.
Notes
- Source scope: the protocol content comes from Planar's shared UltraLux "External Control and Monitoring" manual. The LUX70 ERO B is a discontinued 70" UltraLux-family display; no LUX70-model-specific protocol addendum was located (prior discovery attempts timed out — see recovery memo). Treat this as the platform-level command set; verify against a live unit before publishing.
- Checksum: source phrases the rule as "check sum = 100h". Operationally the sum of every command's bytes is a multiple of 256 (≡ 0 mod 0x100); the final byte is the filler that enforces this. Verify on-device before relying on it.
- Command framing: Set = 8 bytes (64 bits); Get = 4 bytes. RS-232 uses straight-through cables, 19200 baud, 8N1, no flow control.
- UDP mirror: UDP port 57 accepts the identical hex command frames as RS-232. The "Enable ASCII command service (UDP port 57)" checkbox on the Access Control page must be checked.
- Known device bugs (per source): contrast and mute settings are not retained across hard power-off; Get Mute may not reflect serial-driven mute changes.
- SNMP (not modeled as control): read-only monitoring via community string "public", MIB file
PLANAR-DISPLAY-MIB.txt, root OID1.3.6.1.4.1.19125. Integer objects return -1 on internal/communication errors.
Provenance
source_domains:
- planar.com
- manualslib.com
source_urls:
- https://www.planar.com/media/434375/020-1207-00e_ultralux-installation-guide.pdf
- "https://www.manualslib.com/manual/3294572/Planar-Lux70-Ero-B.html?page=41"
- https://www.manualslib.com/manual/3294572/Planar-Lux70-Ero-B.html
retrieved_at: 2026-07-25T09:31:12.882Z
last_checked_at: 2026-08-05T08:37:16.632Z
Verification Summary
verdict: verified
checked_at: 2026-08-05T08:37:16.632Z
matched_actions: 44
action_count: 44
confidence: medium
summary: "All 44 spec actions match the source command table, transport values are supported, and the full 44-command catalogue is represented. (8 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "source document is the shared Planar UltraLux \"External Control and Monitoring\" manual; it does not state a firmware version, hardware revision, or model-specific deviations. Recovery notes indicate the LUX70 ERO B is discontinued and this UltraLux-platform doc is the closest available protocol reference."
- "SNMP monitoring (read-only, community \"public\", MIB PLANAR-DISPLAY-MIB)"
- "encoding for negative values (-350..0) not shown in source; single value byte cannot natively represent the full -350..350 Get range - encoding for negatives is undocumented. -->\""
- "source contains no safety warnings, interlock procedures, or"
- "firmware version compatibility not stated in source."
- "model-specific LUX70 ERO B deviations from the UltraLux platform doc not confirmed."
- "negative-value byte encoding for Set Blacklevel Brightness (-350..0) not documented."
- "exact response terminator / line framing for serial/UDP replies not specified in source."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0