Summary
WiiM CI MOD A80 streaming audio device, controlled over HTTPS via httpapi.asp endpoint. Spec covers playback control, EQ, presets, source input switching, alarm clock, audio output routing, and device status queries.
Transport
protocols:
- http
addressing:
base_url: "https://{device_ip}/httpapi.asp" # request format from source §1.2
port: null # UNRESOLVED: port number not explicitly stated in source
auth:
type: none # inferred: no auth procedure in source
Traits
- powerable # inferred from reboot and setShutdown commands
- queryable # inferred from getStatusEx, getPlayerStatus, getMetaInfo, etc.
- levelable # inferred from setPlayerCmd:vol volume control
- routable # inferred from setPlayerCmd:switchmode input source routing
Actions
- id: get_device_info
label: Get Device Information
kind: query
command: "getStatusEx"
params: []
- id: get_wlan_connect_state
label: Get WLAN Connection State
kind: query
command: "wlanGetConnectState"
params: []
- id: get_player_status
label: Get Playback Status
kind: query
command: "getPlayerStatus"
params: []
- id: play_url
label: Play Audio URL
kind: action
command: "setPlayerCmd:play:{url}"
params:
- name: url
type: string
description: Audio stream URL
- id: play_playlist
label: Play Audio Playlist
kind: action
command: "setPlayerCmd:playlist:{url}:{index}"
params:
- name: url
type: string
description: m3u or ASX playlist URL
- name: index
type: integer
description: Start track index
- id: play_hex_playlist
label: Play Audio Playlist (Hex-Encoded URL)
kind: action
command: "setPlayerCmd:hex_playlist:{url}:{index}"
params:
- name: url
type: string
description: Hex-encoded m3u or ASX playlist URL
- name: index
type: integer
description: Start track index
- id: pause
label: Pause Playback
kind: action
command: "setPlayerCmd:pause"
params: []
- id: resume
label: Resume Playback
kind: action
command: "setPlayerCmd:resume"
params: []
- id: toggle_pause_play
label: Toggle Pause/Play
kind: action
command: "setPlayerCmd:onepause"
params: []
- id: previous_track
label: Previous Track
kind: action
command: "setPlayerCmd:prev"
params: []
- id: next_track
label: Next Track
kind: action
command: "setPlayerCmd:next"
params: []
- id: seek
label: Seek to Position
kind: action
command: "setPlayerCmd:seek:{position}"
params:
- name: position
type: integer
description: Seek position in seconds (0 to duration)
- id: stop
label: Stop Playback
kind: action
command: "setPlayerCmd:stop"
params: []
- id: set_volume
label: Set Volume
kind: action
command: "setPlayerCmd:vol:{value}"
params:
- name: value
type: integer
description: Volume level (0-100)
- id: set_mute
label: Set Mute
kind: action
command: "setPlayerCmd:mute:{n}"
params:
- name: n
type: integer
description: 1 = mute, 0 = unmute
- id: set_loop_mode
label: Set Loop Mode
kind: action
command: "setPlayerCmd:loopmode:{n}"
params:
- name: n
type: integer
description: "0=Sequence no loop, 1=Single loop, 2=Shuffle loop, -1=Sequence loop"
- id: eq_on
label: Turn EQ On
kind: action
command: "EQOn"
params: []
- id: eq_off
label: Turn EQ Off
kind: action
command: "EQOff"
params: []
- id: eq_get_state
label: Get EQ Enable State
kind: query
command: "EQGetStat"
params: []
- id: eq_get_list
label: Get Available EQ Presets
kind: query
command: "EQGetList"
params: []
- id: eq_load
label: Load EQ Preset
kind: action
command: "EQLoad:{name}"
params:
- name: name
type: string
description: EQ preset name from EQGetList (e.g. Flat, Acoustic, Rock)
- id: reboot
label: Reboot Device
kind: action
command: "reboot"
params: []
- id: set_shutdown
label: Schedule Shutdown
kind: action
command: "setShutdown:{sec}"
params:
- name: sec
type: integer
description: "Seconds until shutdown (0=immediate, -1=cancel)"
- id: get_shutdown
label: Get Shutdown Timer
kind: query
command: "getShutdown"
params: []
- id: time_sync
label: Sync Network Time
kind: action
command: "timeSync:{datetime}"
params:
- name: datetime
type: string
description: UTC datetime as YYYYMMDDHHMMSS
- id: set_alarm_clock
label: Set Alarm Clock
kind: action
command: "setAlarmClock:{n}:{trig}:{op}:{time}:{day}:{url}"
params:
- name: n
type: integer
description: Alarm slot (0-2, max 3 alarms)
- name: trig
type: integer
description: "Trigger: 0=cancel, 1=once, 2=daily, 3=weekly day-of-week, 4=weekly bitmask, 5=monthly"
- name: op
type: integer
description: "Operation: 0=shell exec, 1=playback/ring, 2=stop playback"
- name: time
type: string
description: UTC time HHMMSS
- name: day
type: string
description: Day field, format depends on trig (omitted when trig=0 or 2)
- name: url
type: string
description: Shell path or playback URL (<256 bytes)
- id: get_alarm_clock
label: Get Alarm Clock
kind: query
command: "getAlarmClock:{n}"
params:
- name: n
type: integer
description: Alarm slot (0-2)
- id: alarm_stop
label: Stop Current Alarm
kind: action
command: "alarmStop"
params: []
- id: switch_source_input
label: Switch Source Input
kind: action
command: "setPlayerCmd:switchmode:{mode}"
params:
- name: mode
type: string
description: "Source mode: line-in, bluetooth, optical, udisk, wifi"
- id: play_preset
label: Play Preset
kind: action
command: "MCUKeyShortClick:{n}"
params:
- name: n
type: integer
description: Preset number (1-12)
- id: get_preset_info
label: Get Preset List
kind: query
command: "getPresetInfo"
params: []
- id: get_meta_info
label: Get Current Track Metadata
kind: query
command: "getMetaInfo"
params: []
- id: get_audio_output_mode
label: Get Audio Output Hardware Mode
kind: query
command: "getNewAudioOutputHardwareMode"
params: []
- id: set_audio_output_mode
label: Set Audio Output Hardware Mode
kind: action
command: "setAudioOutputHardwareMode:{mode}"
params:
- name: mode
type: integer
description: "1=SPDIF, 2=AUX, 3=COAX"
Feedbacks
- id: wlan_connect_state
type: enum
values: [PROCESS, PAIRFAIL, FAIL, OK]
description: Return from wlanGetConnectState (plain text, not JSON)
- id: play_status
type: enum
values: [stop, play, loading, pause]
description: status field of getPlayerStatus JSON
- id: channel_mode
type: enum
values: [stereo, left, right]
description: ch field of getPlayerStatus (0=stereo, 1=left, 2=right)
- id: source_mode
type: integer
description: "mode field of getPlayerStatus (0=none, 1=AirPlay, 2=DLNA, 10-19=Wiimu playlist, 31=Spotify Connect, 32=TIDAL Connect, 40=AUX-In, 41=BT, 42=external storage, 43=Optical-In, 50=Mirror, 60=Voice mail, 99=Slave)"
- id: loop_mode
type: integer
description: "loop field of getPlayerStatus (0=loop all, 1=single, 2=shuffle loop, 3=shuffle no loop, 4=no shuffle no loop)"
- id: current_position
type: integer
description: curpos in ms from getPlayerStatus
- id: total_length
type: integer
description: totlen duration in ms from getPlayerStatus
- id: current_volume
type: integer
description: vol field of getPlayerStatus (0-100)
- id: mute_state
type: enum
values: [0, 1]
description: mute field of getPlayerStatus
- id: playlist_count
type: integer
description: plicount total tracks in playlist
- id: playlist_current_index
type: integer
description: plicurr current track index
- id: eq_enabled
type: enum
values: [On, Off]
description: EQStat field returned by EQGetStat
- id: eq_preset_list
type: array
description: JSON array of EQ preset names from EQGetList
- id: shutdown_timer_remaining
type: integer
description: Seconds returned by getShutdown
- id: command_status
type: enum
values: [OK, Failed]
description: Generic status response for EQOn/EQOff/EQLoad/setShutdown
- id: track_metadata
type: object
description: "JSON object from getMetaInfo with fields: album, title, artist, albumArtURI, sampleRate, bitDepth"
- id: audio_output_hardware
type: integer
description: "hardware field from getNewAudioOutputHardwareMode (1=SPDIF, 2=AUX, 3=COAX)"
- id: audio_output_bt_source
type: enum
values: [0, 1]
description: "source field (0=disable, 1=active BT source)"
- id: audio_output_audiocast
type: enum
values: [0, 1]
description: "audiocast field (0=disable, 1=active)"
- id: preset_list
type: object
description: "JSON from getPresetInfo with preset_num and preset_list[] (number, name, url, source, picurl)"
- id: device_info
type: object
description: "JSON from getStatusEx including firmware, uuid, MAC, BT_MAC, DeviceName, GroupName, RSSI, ssid, hardware, internet, group, etc."
- id: alarm_clock_info
type: object
description: "JSON from getAlarmClock with enable, trigger, operation, date, week_day, day, time, path fields"
Variables
# UNRESOLVED: settable parameters expressed as commands above; no separate variable model documented
Events
# UNRESOLVED: source documents request/response API only; no unsolicited push events described
Macros
# UNRESOLVED: no multi-step macro sequences described in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures stated in source
Notes
- Request format per source §1.2:
https://<device-ip>/httpapi.asp?command=<command-string>. Most responses are JSON;wlanGetConnectStatereturns plain text. %ddenotes integer parameter,%sdenotes string parameter in source command templates.- Group play semantics: when device is master, mute command propagates to slaves (per §2.3.12).
- WiiM Home App supports up to 12 user-configurable presets; preset slots may be sparse (preset_list only contains configured entries).
- Max 3 alarm slots (n: 0-2).
getStatusExexposesgroupfield (0=master/standalone, 1=slave); useful for multi-room topology discovery.
Provenance
source_domains:
- wiimhome.com
- cvdlinden.github.io
source_urls:
- "https://www.wiimhome.com/pdf/HTTP%20API%20for%20WiiM%20Products.pdf"
- https://cvdlinden.github.io/wiim-httpapi/
- https://www.wiimhome.com/support
retrieved_at: 2026-06-01T21:26:15.622Z
last_checked_at: 2026-06-02T08:27:16.178Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T08:27:16.178Z
matched_actions: 34
action_count: 34
confidence: medium
summary: "All 34 spec actions match source commands verbatim; source has exactly 34 commands; transport base_url confirmed; coverage ratio 1.00. (12 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "TCP port number not stated in source (HTTPS default 443 implied but not explicit)"
- "firmware version compatibility not stated"
- "port number not explicitly stated in source"
- "settable parameters expressed as commands above; no separate variable model documented"
- "source documents request/response API only; no unsolicited push events described"
- "no multi-step macro sequences described in source"
- "no safety warnings or interlock procedures stated in source"
- "TCP port for HTTPS not explicitly stated in source (URLs use no explicit port)"
- "firmware version compatibility range not documented"
- "TLS certificate handling / cert pinning behavior not documented"
- "response codes / error format for failed requests beyond {\"status\":\"Failed\"} not enumerated"
- "rate limits, command queueing, concurrent request behavior not stated"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0