Summary

HiSense Prosumer TV controllable via RS-232 serial (DB9) and discrete IR (Pronto CCF codes). This spec covers the RS-232 serial command protocol with fixed-length ASCII frames. The source also documents ~40 discrete IR hex codes for IR blaster use. Serial must be enabled in the Custom Install menu before control is possible.

Transport

protocols:
  - serial
serial:
  baud_rate: 9600
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
  code: ascii
  connector: DB9 D-sub female chassis mount
  pinout:
    1: N/C
    2: RXD
    3: TXD
    4: DTR
    5: GND
    6: DSR
    7: RTS
    8: CTS
    9: Power Input
auth:
  type: none  # inferred: no auth procedure in source

Traits

traits:
  - powerable   # POWR on/off/standby
  - queryable   # extensive query commands
  - levelable   # VOLM, BRIT, CONT, BKLV, SHRP, TINT, COLR with 0-100 ranges
  - routable    # INPT selects TV, AV, HDMI1-4, Component, VGA

Actions

# Frame format (all actions):
#   Set:     S{client_id}{COMMAND}{DATA}{CHECKSUM}\r
#   Query:   Q{client_id}{COMMAND}????{CHECKSUM}\r
#   Response: {client_id}:{ACK}{DATA}{CHECKSUM}\r
#
# client_id: 3-char hex = last 3 bytes of Ethernet MAC (Smart TV),
#            or menu-selected ID (Feature TV), or "ALL" for broadcast.
# COMMAND:   4-char ASCII mnemonic (case-sensitive).
# DATA:      4-char ASCII parameter.
# CHECKSUM:  1 byte - 8-bit checksum; sum of all bytes including checksum = 0 (mod 256).
# \r = 0x0D.
# Common ACK values: OKAY, EROR, WAIT.

# ── Power Control ──

- id: set_power_on_command_enable
  label: Set RS-232 Power On Command Enable
  kind: action
  command: "PWRE{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Disable RS-232 Remote Power On
        "0001": Enable RS-232 Remote Power On
  notes: Must enable before remote power-on via RS-232 works.

- id: query_power_on_command_setting
  label: Query RS-232 Power On Command Setting
  kind: query
  command: "PWRE????"
  params: []
  response:
    type: enum
    values:
      "0": Disabled
      "1": Enabled
  notes: Not available in STANDBY mode.

- id: set_power
  label: Set Power On/Off
  kind: action
  command: "POWR{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Standby
        "0001": Power On

- id: set_power_off_control_mode
  label: Set Power Off Control Mode
  kind: action
  command: "PBTN{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": AC Only
        "0001": All

- id: query_power_off_control_mode
  label: Query Power Off Control Mode
  kind: query
  command: "PBTN????"
  params: []
  response:
    type: enum
    values:
      "0": AC Only
      "1": All

- id: set_power_on_input_selection
  label: Set Power On Input Selection
  kind: action
  command: "POIS{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Last
        "0001": Air
        "0002": AV
        "0003": Component
  # UNRESOLVED: source truncated - additional POIS values (HDMI, VGA, etc.) likely exist

- id: query_power_on_input_selection
  label: Query Power On Input Selection
  kind: query
  command: "POIS????"
  params: []
  # UNRESOLVED: return values partially documented due to truncation

# ── Input Source ──

- id: set_input_source
  label: Set Input Source
  kind: action
  command: "INPT{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Cycle (change one at a time)
        "0001": TV
        "0004": AV
        "0003": Component
        "0009": HDMI1
        "0010": HDMI2
        "0011": HDMI3
        "0012": HDMI4
        "0006": VGA

- id: query_input_source
  label: Query Current Input Source
  kind: query
  command: "INPT????"
  params: []
  response:
    type: enum
    values:
      "1": TV
      "4": AV
      "3": Component
      "9": HDMI1
      "10": HDMI2
      "11": HDMI3
      "12": HDMI4
      "6": VGA

- id: set_input_mode
  label: Set Input Mode
  kind: action
  command: "INPM{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Locked
        "0001": Selectable
        "0002": AC Reset
        "0003": Standby Reset

- id: query_input_mode
  label: Query Input Mode
  kind: query
  command: "INPM????"
  params: []
  response:
    type: enum
    values:
      "0": Locked
      "1": Selectable
      "2": AC Reset
      "3": Standby Reset

# ── Picture Settings ──

- id: set_picture_mode
  label: Set Picture Mode
  kind: action
  command: "PMOD{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Standard
        "0002": Vivid
        "0003": EnergySaving
        "0004": Theater
        "0005": Game
        "0006": Sport

- id: query_picture_mode
  label: Query Picture Mode
  kind: query
  command: "PMOD????"
  params: []
  response:
    type: enum
    values:
      "0": Standard
      "2": Vivid
      "3": EnergySaving
      "4": Theater
      "5": Game
      "6": Sport

- id: set_brightness
  label: Set Brightness
  kind: action
  command: "BRIT{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 100
      format: "4-digit zero-padded (0000-0100)"

- id: query_brightness
  label: Query Brightness
  kind: query
  command: "BRIT????"
  params: []
  response:
    type: integer
    min: 0
    max: 100

- id: set_contrast
  label: Set Contrast
  kind: action
  command: "CONT{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 100
      format: "4-digit zero-padded (0000-0100)"

- id: query_contrast
  label: Query Contrast
  kind: query
  command: "CONT????"
  params: []
  response:
    type: integer
    min: 0
    max: 100

- id: set_color_saturation
  label: Set Color Saturation
  kind: action
  command: "COLR{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 100
      format: "4-digit zero-padded (0000-0100)"

- id: query_color_saturation
  label: Query Color Saturation
  kind: query
  command: "COLR????"
  params: []
  response:
    type: integer
    min: 0
    max: 100

- id: set_tint
  label: Set Tint
  kind: action
  command: "TINT{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 100
      format: "4-digit zero-padded (0000-0100)"

- id: query_tint
  label: Query Tint
  kind: query
  command: "TINT????"
  params: []
  response:
    type: integer
    min: 0
    max: 100

- id: set_sharpness
  label: Set Sharpness
  kind: action
  command: "SHRP{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 20
      format: "4-digit zero-padded (0000-0020)"

- id: query_sharpness
  label: Query Sharpness
  kind: query
  command: "SHRP????"
  params: []
  response:
    type: integer
    min: 0
    max: 20

- id: set_backlight
  label: Set Backlight
  kind: action
  command: "BKLV{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 100
      format: "4-digit zero-padded (0000-0100)"

- id: query_backlight
  label: Query Backlight
  kind: query
  command: "BKLV????"
  params: []
  response:
    type: integer
    min: 0
    max: 100

- id: set_color_temperature
  label: Set Color Temperature
  kind: action
  command: "CTEM{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": High
        "0002": Middle
        "0003": Mid-Low
        "0004": Low

- id: query_color_temperature
  label: Query Color Temperature
  kind: query
  command: "CTEM????"
  params: []
  response:
    type: enum
    values:
      "0": High
      "2": Middle
      "3": Mid-Low
      "4": Low

- id: set_aspect_ratio
  label: Set Aspect Ratio
  kind: action
  command: "ASPT{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Auto
        "0002": Normal
        "0003": Zoom
        "0004": Wide
        "0005": Direct
        "0006": 1-to-1 Pixel Map
        "0007": Panoramic
        "0008": Cinema

- id: query_aspect_ratio
  label: Query Aspect Ratio
  kind: query
  command: "ASPT????"
  params: []
  response:
    type: enum
    values:
      "0": Auto
      "2": Normal
      "3": Zoom
      "4": Wide
      "5": Direct
      "6": 1-to-1 Pixel Map
      "7": Panoramic
      "8": Cinema

- id: set_overscan
  label: Set Overscan
  kind: action
  command: "OVSN{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": On
        "0002": Off

- id: query_overscan
  label: Query Overscan
  kind: query
  command: "OVSN????"
  params: []
  response:
    type: enum
    values:
      "0": On
      "2": Off

- id: reset_picture_settings
  label: Reset Picture Settings
  kind: action
  command: "RSTP1000"
  params: []

# ── Audio Settings ──

- id: set_sound_mode
  label: Set Sound Mode
  kind: action
  command: "AMOD{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Standard
        "0002": Theater
        "0003": Music
        "0004": Speech
        "0005": Late Night

- id: query_sound_mode
  label: Query Sound Mode
  kind: query
  command: "AMOD????"
  params: []
  response:
    type: enum
    values:
      "0": Standard
      "2": Theater
      "3": Music
      "4": Speech
      "5": Late Night

- id: set_volume
  label: Set Volume
  kind: action
  command: "VOLM{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 100
      format: "4-digit zero-padded (0000-0100)"

- id: query_volume
  label: Query Volume
  kind: query
  command: "VOLM????"
  params: []
  response:
    type: integer
    min: 0
    max: 100

- id: set_mute
  label: Set Mute
  kind: action
  command: "MUTE{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Mute Off
        "0001": Mute On

- id: query_mute
  label: Query Mute Status
  kind: query
  command: "MUTE????"
  params: []
  response:
    type: enum
    values:
      "0": Not Muted
      "1": Muted

- id: set_tv_speaker
  label: Set TV Speaker
  kind: action
  command: "ASPK{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Off
        "0002": On

- id: query_tv_speaker
  label: Query TV Speaker
  kind: query
  command: "ASPK????"
  params: []
  response:
    type: enum
    values:
      "0": Off
      "2": On

- id: set_volume_range
  label: Set Maximum Volume Level
  kind: action
  command: "MAVL{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 100
      format: "4-digit zero-padded (0000-0100)"

- id: query_volume_range
  label: Query Maximum Volume Level
  kind: query
  command: "MAVL????"
  params: []
  response:
    type: integer
    min: 0
    max: 100

- id: set_volume_control
  label: Set Volume Control Mode
  kind: action
  command: "SVOL{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Locked
        "0001": Last Volume
        "0002": AC Reset
        "0003": Standby Reset

- id: query_volume_control
  label: Query Volume Control Mode
  kind: query
  command: "SVOL????"
  params: []
  response:
    type: enum
    values:
      "0": Locked
      "1": Last Volume
      "2": AC Reset
      "3": Standby Reset

- id: set_volume_locked_level
  label: Set Volume Locked Level
  kind: action
  command: "VLFL{value}"
  params:
    - name: value
      type: integer
      min: 0
      max: 100
      format: "4-digit zero-padded (0000-0100)"

- id: query_volume_locked_level
  label: Query Volume Locked Level
  kind: query
  command: "VLFL????"
  params: []
  response:
    type: integer
    min: 0
    max: 100

- id: reset_audio_settings
  label: Reset Audio Settings
  kind: action
  command: "RSTA2000"
  params: []

# ── Tuner / Channel ──

- id: set_tuner_mode
  label: Set Tuner Mode
  kind: action
  command: "TUNR{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Antenna
        "0002": Cable

- id: query_tuner_mode
  label: Query Tuner Mode
  kind: query
  command: "TUNR????"
  params: []
  response:
    type: enum
    values:
      "0": Antenna
      "2": Cable

- id: automatic_channel_search
  label: Automatic Channel Search
  kind: action
  command: "TSCN0001"
  params: []

- id: channel_change
  label: Channel Up/Down
  kind: action
  command: "CHAN{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Channel Down
        "0001": Channel Up

# ── Captions ──

- id: set_caption
  label: Set Caption Control
  kind: action
  command: "CC##{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Off
        "0002": On
        "0003": CC On When Mute

- id: query_caption
  label: Query Caption Control
  kind: query
  command: "CC##????"
  params: []
  response:
    type: enum
    values:
      "0": Off
      "2": On
      "3": CC On When Mute

# ── OSD / Language ──

- id: set_osd_language
  label: Set OSD Language
  kind: action
  command: "LANG{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": English
        "0002": Español
        "0003": Français

- id: query_osd_language
  label: Query OSD Language
  kind: query
  command: "LANG????"
  params: []
  response:
    type: enum
    values:
      "0": English
      "2": Español
      "3": Français

- id: set_osd_mode
  label: Set OSD Display Mode
  kind: action
  command: "OSD#{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Enable
        "0001": Disable

- id: query_osd_mode
  label: Query OSD Display Mode
  kind: query
  command: "OSD#????"
  params: []
  response:
    type: enum
    values:
      "0": Enable
      "1": Disable

# ── Standby LED ──

- id: set_standby_led
  label: Set Standby LED
  kind: action
  command: "PLED{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Off
        "0002": On

- id: query_standby_led
  label: Query Standby LED
  kind: query
  command: "PLED????"
  params: []
  response:
    type: enum
    values:
      "0": Off
      "2": On

# ── System / Lock ──

- id: set_remote_key_lock
  label: Set Remote Key Lock
  kind: action
  command: "RMOT{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Enable
        "0001": Disable
        "0002": Partial

- id: query_remote_key_lock
  label: Query Remote Key Lock
  kind: query
  command: "RMOT????"
  params: []
  response:
    type: enum
    values:
      "0": Enable
      "1": Disable
      "2": Partial

- id: set_panel_key_lock
  label: Set Panel Key Lock
  kind: action
  command: "PANL{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Enable
        "0001": Disable

- id: query_panel_key_lock
  label: Query Panel Key Lock
  kind: query
  command: "PANL????"
  params: []
  response:
    type: enum
    values:
      "0": Enable
      "1": Disable

- id: set_menu_access
  label: Set Menu Access
  kind: action
  command: "MENU{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Enable
        "0001": Disable

- id: query_menu_access
  label: Query Menu Access
  kind: query
  command: "MENU????"
  params: []
  response:
    type: enum
    values:
      "0": Enable
      "1": Disable

- id: set_av_setting_menu
  label: Set AV Setting Menu
  kind: action
  command: "AVMN{value}"
  params:
    - name: value
      type: enum
      values:
        "0000": Disable
        "0001": Enable

- id: query_av_setting_menu
  label: Query AV Setting Menu
  kind: query
  command: "AVMN????"
  params: []
  response:
    type: enum
    values:
      "0": Disable
      "1": Enable

- id: restore_factory_settings
  label: Restore Factory Settings
  kind: action
  command: "RSET9999"
  params: []

# ── Remote Button Simulator ──

- id: simulate_remote_button
  label: Simulate Remote Button
  kind: action
  command: "BTTN{code}"
  params:
    - name: code
      type: enum
      values:
        "1000": Digit 0
        "1001": Digit 1
        "1002": Digit 2
        "1003": Digit 3
        "1004": Digit 4
        "1005": Digit 5
        "1006": Digit 6
        "1007": Digit 7
        "1008": Digit 8
        "1009": Digit 9
        "1010": Dash
        "1012": Power
        "1015": Fast Rewind
        "1016": Play
        "1017": Fast Forward
        "1018": Pause
        "1019": Previous
        "1020": Stop
        "1021": Next
        "1023": HiMedia
        "1024": Sleep
        "1027": CC
        "1031": Mute
        "1032": Volume Down
        "1033": Volume Up
        "1034": Channel Up
        "1035": Channel Down
        "1036": Input
        "1038": Menu
        "1039": HiSmart (Connected Home)
        "1040": OK/Enter
        "1041": Up
        "1042": Down
        "1043": Left
        "1044": Right
        "1045": Back
        "1046": Exit
        "1050": Red Button
        "1051": Green Button
        "1052": Blue Button
        "1053": Yellow Button
        "1054": MTS/SAP
        "1055": Live TV

Feedbacks

# All query actions above return their response via the ACK frame:
#   {client_id}:{ACK}{DATA}{CHECKSUM}\r
# ACK values: OKAY (success), EROR (error), WAIT (busy).
# See each query action's "response" field for return value semantics.

Variables

# Continuous settable parameters are captured as parameterized Actions above:
# VOLM (0-100), BRIT (0-100), CONT (0-100), COLR (0-100), TINT (0-100),
# BKLV (0-100), SHRP (0-20), MAVL (0-100), VLFL (0-100).

Events

# UNRESOLVED: no unsolicited notifications documented in source

Macros

# UNRESOLVED: no multi-step sequences documented in source

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures in source

Notes

  • Protocol is case-sensitive.
  • Checksum: 8-bit sum of all bytes including the checksum byte itself equals 0 (mod 256). Implementers must compute per-frame.
  • Client ID: last 3 hex chars of the TV's Ethernet MAC address (Smart TV), menu-selected value (Feature TV), or ALL for broadcast to all TVs on the serial bus.
  • RS-232 serial port must be enabled in the Custom Install menu: power on TV, press Quick Settings, then enter 7310 on the numeric keys, select Custom Installation → Enable.
  • For RS-232 power-on from standby, set Power On Command to Enable (PWRE0001) before exiting Custom Install menu.
  • Source also documents ~40 discrete IR codes in Pronto CCF format (custom code 04 FB) covering power, input selection, aspect ratio, digits, navigation, volume, channel, PIP, and transport controls. These require an IR blaster and are not serial commands.
  • DB9 pin 9 provides power input (for serial adapter power).
  • No power state query (POWR????) documented — only PWRE query (enable/disable setting) exists.

Provenance

source_domains:
  - assets.hisense-usa.com
source_urls:
  - https://assets.hisense-usa.com/assets/ProductDownloads/18/5342defe83/Hisense-RS-232-and-IR-Protocol-English_2.pdf
retrieved_at: 2026-06-01T20:43:32.341Z
last_checked_at: 2026-06-02T21:41:52.342Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T21:41:52.342Z
matched_actions: 69
action_count: 69
confidence: medium
summary: "All 69 spec actions match source verbatim with correct shapes and transport; 4 source-only commands (SPKM, B2BM, USBM, PSHF) fall within the 5-command tolerance and ratio is 38/42=0.905 above the 0.9 floor. (11 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- SPKM
- B2BM
- USBM
- PSHF
- "exact model list within 55U67KUA Series not stated in source"
- "source document truncated at end — additional POIS parameter values and possibly more commands may exist beyond what was captured"
- "source truncated - additional POIS values (HDMI, VGA, etc.) likely exist"
- "return values partially documented due to truncation"
- "no unsolicited notifications documented in source"
- "no multi-step sequences documented in source"
- "no safety warnings or interlock procedures in source"
- "firmware version compatibility not stated in source"
- "POIS command truncated — additional input values beyond Component may exist"
- "possible additional commands exist in the truncated portion of the source document"
- "no power state query command found; only power-on-command enable/disable query (PWRE) documented"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0