Summary
Marantz NA-7004 Network Audio Player. Supports both RS-232C and Ethernet (TCP/IP telnet) control using an ASCII command protocol of the form COMMAND + PARAMETER + CR (0x0D) where COMMAND is 2 ASCII characters and PARAMETER up to 25 ASCII characters. Covers power, input source select, master volume, M-DAX, tuner (analog AM/FM and DAB), favorites, menu cursor, and network/USB/iPod direct playback control.
Transport
protocols:
- tcp
- serial
addressing:
port: 23 # TCP port 23 (telnet), stated verbatim in source
serial:
baud_rate: 9600
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # UNRESOLVED: flow control not stated in source (procedural = "Non procedural")
auth:
type: none # inferred: no auth procedure in source
Notes: Ethernet connector RJ-45 (10BASE-T/100BASE-TX), half duplex, 10/100 Mbps, max data length 135 bytes. RS-232C connector DB-9pin female (DCE, straight), pins 1=GND, 2=TxD, 3=RxD, 5=Common(GND), 4/6/7/8/9=NC. Tone step synchronization, half duplex, non-procedural, max 135 bytes. ASCII range 0x20–0x7F plus CR (0x0D) as terminator. RESPONSE to a request command must be sent within 200ms. After PWON, wait 1 second before sending next command.
Traits
traits:
- powerable # inferred from PWON/PWSTANDBY power commands
- queryable # inferred from PW?/SI?/TF?/TP?/TM?/PSMDA ?/FV ? query commands
- levelable # inferred from MV master volume commands
- routable # inferred from SI input source routing commands
Actions
# All commands terminate with CR (0x0D), shown here as <CR> per source convention.
# Each command verbatim from source COMMAND and PARAMETER list.
# --- PW: Power ---
- id: power_on
label: Power On / Standby Toggle
kind: action
command: "PWON<CR>"
params: []
- id: power_standby
label: Power Standby
kind: action
command: "PWSTANDBY<CR>"
params: []
- id: power_status_query
label: Power Status Query
kind: query
command: "PW?<CR>"
params: []
# --- SI: Select Input source ---
- id: select_input_tuner
label: Select Input TUNER
kind: action
command: "SITUNER<CR>"
params: []
- id: select_input_auxa
label: Select Input AUX-A
kind: action
command: "SIAUXA<CR>"
params: []
- id: select_input_auxb
label: Select Input AUX-B
kind: action
command: "SIAUXB<CR>"
params: []
- id: select_input_auxc
label: Select Input AUX-C
kind: action
command: "SIAUXC<CR>"
params: []
- id: select_input_m_xport
label: Select Input M-XPORT
kind: action
command: "SIM-XPORT<CR>"
params: []
- id: select_input_rhapsody
label: Select Input RHAPSODY
kind: action
command: "SIRHAPSODY<CR>"
params: []
- id: select_input_napster
label: Select Input NAPSTER
kind: action
command: "SINAPSTER<CR>"
params: []
- id: select_input_pandora
label: Select Input PANDORA
kind: action
command: "SIPANDORA<CR>"
params: []
- id: select_input_lastfm
label: Select Input LASTFM
kind: action
command: "SILASTFM<CR>"
params: []
- id: select_input_iradio
label: Select Input IRADIO
kind: action
command: "SIIRADIO<CR>"
params: []
- id: select_input_server
label: Select Input SERVER
kind: action
command: "SISERVER<CR>"
params: []
- id: select_input_usb
label: Select Input USB
kind: action
command: "SIUSB<CR>"
params: []
- id: input_source_query
label: Input Source Query
kind: query
command: "SI?<CR>"
params: []
# --- MV: Master Volume ---
- id: master_volume_up
label: Master Volume Up
kind: action
command: "MVUP<CR>"
params: []
- id: master_volume_set
label: Master Volume Set
kind: action
command: "MV{level}<CR>"
params:
- name: level
type: string
description: >-
2 or 3 ASCII chars. .0dB step uses 2 chars (MV80 = 0dB, MV99 = +19dB,
MV79 = -1dB, MV00 = -80dB). .5dB step uses 3 chars (MV805 = +0.5dB,
MV795 = -0.5dB, MV005 = -79.5dB, MV995 = -80.5dB). See source page 7 D.
# UNRESOLVED: MVDOWN not documented verbatim in source. Full MV table referenced
# as "see page 7 J section" but omitted from extracted text.
# --- PS: Parameter Set (M-DAX) ---
- id: mdax_hi
label: M-DAX Hi
kind: action
command: "PSMDA HI<CR>"
params: []
- id: mdax_mid
label: M-DAX Mid
kind: action
command: "PSMDA MID<CR>"
params: []
- id: mdax_low
label: M-DAX Low
kind: action
command: "PSMDA LOW<CR>"
params: []
- id: mdax_off
label: M-DAX Off
kind: action
command: "PSMDAOFF<CR>"
params: []
- id: mdax_status_query
label: M-DAX Status Query
kind: query
command: "PSMDA ?<CR>"
params: []
# --- FV: Favorite direct change ---
- id: favorite_direct_change
label: Favorite Direct Change
kind: action
command: "FV {no}<CR>"
params:
- name: "no"
type: integer
description: Favorite number (e.g. FV 25)
- id: favorite_list_query
label: Favorite List Query
kind: query
command: "FV ?<CR>"
params: []
# --- TF: Tuner Frequency (Analog) ---
- id: tuner_freq_analog_up
label: Tuner Frequency Up (Analog)
kind: action
command: "TFANUP<CR>"
params: []
- id: tuner_freq_analog_down
label: Tuner Frequency Down (Analog)
kind: action
command: "TFANDOWN<CR>"
params: []
- id: tuner_freq_analog_direct
label: Tuner Frequency Direct (Analog)
kind: action
command: "TFAN{freq}<CR>"
params:
- name: freq
type: string
description: >-
6 digits. >050000 = AM kHz (e.g. TFAN105000 = 1050.00 kHz AM).
<050000 = FM MHz (e.g. TFAN08750 = 87.50 MHz FM).
- id: tuner_freq_analog_query
label: Tuner Frequency Query (Analog)
kind: query
command: "TFAN?<CR>"
params: []
# --- TP: Tuner Preset (Analog) ---
- id: tuner_preset_analog_up
label: Tuner Preset Up (Analog)
kind: action
command: "TPANUP<CR>"
params: []
- id: tuner_preset_analog_down
label: Tuner Preset Down (Analog)
kind: action
command: "TPANDOWN<CR>"
params: []
- id: tuner_preset_analog_direct
label: Tuner Preset Direct (Analog)
kind: action
command: "TPAN{preset}<CR>"
params:
- name: preset
type: integer
description: Preset number (e.g. TPAN50 = preset "50")
- id: tuner_preset_analog_query
label: Tuner Preset Query (Analog)
kind: query
command: "TPAN?<CR>"
params: []
- id: tuner_preset_memory
label: Tuner Preset Memory
kind: action
command: "TPANMEM{no}<CR>"
params:
- name: "no"
type: integer
description: Memory slot number (e.g. TPANMEM05)
# --- TM: Tuner Mode/Band (Analog) ---
- id: tuner_band_am
label: Tuner Band AM
kind: action
command: "TMANAM<CR>"
params: []
- id: tuner_band_fm
label: Tuner Band FM
kind: action
command: "TMANFM<CR>"
params: []
- id: tuner_mode_query
label: Tuner Mode Query
kind: query
command: "TM?<CR>"
params: []
- id: tuner_tuning_mode_auto
label: Tuner Tuning Mode Auto
kind: action
command: "TMANAUTO<CR>"
params: []
- id: tuner_tuning_mode_manual
label: Tuner Tuning Mode Manual
kind: action
command: "TMANMANUAL<CR>"
params: []
# --- DAB Tuner Control ---
- id: dab_station_up
label: DAB Station Up
kind: action
command: "TFDAUP<CR>"
params: []
- id: dab_station_down
label: DAB Station Down
kind: action
command: "TFDADOWN<CR>"
params: []
- id: dab_station_query
label: DAB Station Query
kind: query
command: "TFDA?<CR>"
params: []
- id: tuner_band_dab
label: Tuner Band DAB
kind: action
command: "TMDA<CR>"
params: []
# --- MN: Menu / Favorite Control ---
- id: menu_cursor_up
label: Menu Cursor Up
kind: action
command: "MNCUP<CR>"
params: []
- id: menu_cursor_down
label: Menu Cursor Down
kind: action
command: "MNCDN<CR>"
params: []
- id: menu_cursor_left
label: Menu Cursor Left
kind: action
command: "MNCLT<CR>"
params: []
- id: menu_cursor_right
label: Menu Cursor Right
kind: action
command: "MNCRT<CR>"
params: []
- id: menu_enter
label: Menu Enter
kind: action
command: "MNENT<CR>"
params: []
- id: favorite_on
label: Favorite ON
kind: action
command: "MNFAV ON<CR>"
params: []
- id: favorite_off
label: Favorite OFF
kind: action
command: "MNFAV OFF<CR>"
params: []
# --- NS: Network / Rhapsody / Napster / USB / iPod Direct Extended Control ---
- id: ns_cursor_up
label: Network Cursor Up
kind: action
command: "NS90<CR>"
params: []
- id: ns_cursor_down
label: Network Cursor Down
kind: action
command: "NS91<CR>"
params: []
- id: ns_cursor_left
label: Network Cursor Left
kind: action
command: "NS92<CR>"
params: []
- id: ns_cursor_right
label: Network Cursor Right
kind: action
command: "NS93<CR>"
params: []
- id: ns_enter
label: Network Enter (Play/Pause)
kind: action
command: "NS94<CR>"
params: []
- id: ns_play
label: Network Play (iRadio/mServer/USB) / Play-Pause (iPod Direct)
kind: action
command: "NS9A<CR>"
params: []
- id: ns_pause
label: Network Pause / Play-Pause (iPod Direct)
kind: action
command: "NS9B<CR>"
params: []
- id: ns_stop
label: Network Stop
kind: action
command: "NS9C<CR>"
params: []
- id: ns_skip_plus
label: Network Skip Plus
kind: action
command: "NS9D<CR>"
params: []
- id: ns_skip_minus
label: Network Skip Minus
kind: action
command: "NS9E<CR>"
params: []
- id: ns_repeat_one
label: Network Repeat One (USB/iPod Direct/mServer/Rhapsody/Napster)
kind: action
command: "NS9H<CR>"
params: []
- id: ns_repeat_all
label: Network Repeat All (USB/iPod Direct/mServer/Rhapsody/Napster)
kind: action
command: "NS9I<CR>"
params: []
- id: ns_repeat_off
label: Network Repeat Off (USB/iPod Direct/mServer/Rhapsody/Napster)
kind: action
command: "NS9J<CR>"
params: []
- id: ns_random_on
label: >-
Network Random On / Repeat All (USB/mServer/Rhapsody/Napster);
Shuffle Songs (iPod Direct only)
kind: action
command: "NS9K<CR>"
params: []
- id: ns_random_off
label: >-
Network Random Off (USB/mServer/Rhapsody/Napster);
Shuffle Off (iPod Direct only)
kind: action
command: "NS9M<CR>"
params: []
- id: ns_toggle_browse_remote
label: Toggle Browse Mode / Remote Mode (iPod Direct only)
kind: action
command: "NS9W<CR>"
params: []
- id: ns_onscreen_info_request
label: Request Onscreen Display Information List (UTF-8)
kind: query
command: "NSE<CR>"
params: []
notes: Returns NSE0 through NSE8 (see Feedbacks).
- id: ns_direct_char_search
label: Direct Character Search (except iPod Direct)
kind: action
command: "NSD{char}<CR>"
params:
- name: char
type: string
description: Single character from 0-9 or A-Z (e.g. NSD0)
Feedbacks
# EVENT/RESPONSE forms mirror COMMANDs. Source: "The form of EVENT presupposes
# that it is the same as that of COMMAND." Sent unsolicited on direct state change.
- id: power_state
type: enum
values: [ON, STANDBY]
command: "PWON<CR> / PWSTANDBY<CR>"
notes: Sent on power change.
- id: input_source_state
type: enum
values: [TUNER, AUXA, AUXB, AUXC, M-XPORT, RHAPSODY, NAPSTER, PANDORA, LASTFM, IRADIO, SERVER, USB]
command: "SI{source}<CR>"
notes: Sent on input source change (e.g. SITUNER<CR>).
- id: mdax_state
type: enum
values: [HIGH, MID, LOW, OFF]
command: "PSMDA {state}<CR>"
notes: Sent on M-DAX change (e.g. PSMDA HIGH<CR>).
- id: favorite_name_response
type: string
command: "FV{no}_{name}<CR>"
notes: >-
"FAVORITE NAME" response. Format FV{no:Favorite No.}{len:char length MAX32}_{name}.
* = Favorite No., a = Character Length (MAX 32 byte), _ = Null,
? = Don't Care (chars after Null disregarded). 35-byte fixed.
Example: FV25FM-87.50MHz<CR>.
- id: tuner_frequency_state
type: string
command: "TFAN{freq}<CR>"
notes: >-
6 digits. >050000 = AM kHz, <050000 = FM MHz.
Example: TFAN105000<CR> (1050.00 kHz AM).
- id: tuner_preset_state
type: string
command: "TPAN{preset}<CR>"
notes: Example TPANA1<CR> (Preset "A1").
- id: tuner_mode_state
type: enum
values: [ANAM, ANFM, ANAUTO, ANMANUAL]
command: "TM{state}<CR>"
notes: Band/mode change. ANAM=AM, ANFM=FM, ANAUTO=Auto, ANMANUAL=Manual.
- id: dab_station_state
type: string
command: "TFDA{block}<CR>"
notes: 3 digits Frequency Block at DAB band. Example: TFDA13F<CR> ("13F" block).
- id: dab_band_state
type: enum
values: [DA]
command: "TMDA<CR>"
notes: Band set to DAB.
- id: onscreen_display_line
type: string
command: "NSE{0-8}{data}_?????<CR>"
notes: >-
9 lines (NSE0-NSE8) UTF-8 display info. NSE1-NSE6 carry a 1-byte
Cursor/Playable flag: Bit1=Playable Music, Bit4=Cursor Select.
* = UTF-8 char (MAX 95 byte), _ = Null, ? = Don't Care. 96-byte fixed.
NSE0 example: "NSE0Now Playing USB_????<CR>".
Variables
# Discrete settable parameters are represented as Actions above (PSMDA, TM,
# MV level, etc.). No additional continuous variables beyond MV documented.
# UNRESOLVED: source does not document a separate variable namespace.
Events
# Unsolicited EVENTs are identical in form to the Feedbacks listed above and are
# sent by the device when operated directly (state change from front panel etc.).
# See Feedbacks section. COMMAND is receivable also during EVENT transmission.
Macros
# UNRESOLVED: source documents no multi-step command sequences.
Safety
confirmation_required_for: []
interlocks:
- "After PWON, wait 1 second before transmitting next COMMAND (source item K)."
- "TF/TP commands cannot operate when INPUT source isn't TUNER."
- "NS commands apply to Network/Rhapsody/Napster/USB/iPod Direct sources."
# UNRESOLVED: no further safety warnings, fault behavior, or error recovery
# sequences documented in source.
Notes
- Model name appears as both "NA-7004" and "NA7004" in source; spec uses NA-7004.
- Application terminal: RS-232C / Ethernet. Application model: NA-7004.
- ASCII CODE usable range 0x20–0x7F plus CR (0x0D) as pause/terminator sign.
- COMMAND is exactly 2 ASCII characters; PARAMETER up to 25 ASCII characters.
- Special parameter
?= request command. - RESPONSE must be sent within 200ms of receiving the request COMMAND.
- RESPONSE is sent for commands that have an EVENT counterpart; not needed for commands without EVENT (e.g. SV — though SV is not used on this device).
- Master Volume minimum level parameter defines "99"; supports 0.5dB step using 3-char parameter (see master_volume_set description).
- North America model adds the D.IN(USB)/D.IN(COAXIAL)/D.IN(OPTICAL) inputs in the SI row note; these are not separately enumerated as commands in the table and are marked as North-America-only.
Spec done. 68 actions enumerated (every distinct row from source tables). Both transports (TCP:23 + RS-232C 9600/8/N/1) populated verbatim. Auth inferred none. MVDOWN + full MV table marked UNRESOLVED — page 7 ref cut from extract.
## Provenance
```yaml
source_domains:
- heimkinoraum.de
- marantz.com
- raw.githubusercontent.com
- github.com
source_urls:
- https://www.heimkinoraum.de/upload/files/product/IP_Protocol_AVR-Xx100.pdf
- https://www.marantz.com/en-us/product/archive-network-audio-players/na7004/NA7004.html
- https://raw.githubusercontent.com/Ericvf/RS232c-Tcp-Marantz/master/NA7004_PROTOCOL_V01.pdf
- https://www.marantz.com/en-us/product/archive-network-audio-players/na-11s1/NA11S1.html
- https://github.com/ChrisBrandhorst/node-marantz-ip-control
retrieved_at: 2026-06-23T08:04:22.127Z
last_checked_at: 2026-06-23T08:13:17.822Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-06-23T08:13:17.822Z
matched_actions: 68
action_count: 68
confidence: medium
summary: "All 68 spec actions matched verbatim in NA7004 source command table; transport (port 23, 9600 8N1) verified; bidirectional coverage complete. (11 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "full MV (Master Volume) command table not present in source (referenced as \"see page 7 section J\" but table omitted). MVDOWN not documented verbatim. Channel volume, surround mode, and many AVR-style commands absent — this is a network audio player, not an AVR."
- "flow control not stated in source (procedural = \"Non procedural\")"
- "MVDOWN not documented verbatim in source. Full MV table referenced"
- "source does not document a separate variable namespace."
- "source documents no multi-step command sequences."
- "no further safety warnings, fault behavior, or error recovery"
- "firmware version compatibility not stated in source."
- "MVDOWN command and full MV command table missing from extracted source (page 7 J reference)."
- "voltage, current, power specs not in protocol document."
- "protocol version number not stated."
- "Network Standby mode is a front-panel setting, not a documented remote command."
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0