Skip to content

Add commands verified from the official Loxone App V17 (Loxone Radio, loudness, queue ops, room favorites, events) - #1

Open
mschlenstedt wants to merge 1 commit into
mr-manuel:mainfrom
mschlenstedt:app-v17-command-audit
Open

Add commands verified from the official Loxone App V17 (Loxone Radio, loudness, queue ops, room favorites, events)#1
mschlenstedt wants to merge 1 commit into
mr-manuel:mainfrom
mschlenstedt:app-v17-command-audit

Conversation

@mschlenstedt

Copy link
Copy Markdown

Summary

I decompiled the official Loxone App for Windows, version 17.1.2 (17482) (Electron bundle, resources/app.asar) and audited every AudioServer-related command it can send — both the new typed WebSocket API (app/scripts/AudioServer/datasource/parsing/v1_6/command/**, Zod schemas) and the Miniserver control command catalogue. This PR adds everything the App actually sends that was missing here, and documents how the App connects and which features are firmware-gated. Legacy Music-Server-(V1)-only commands were deliberately left out.

openapi.yaml

New endpoints

  • Loxone Radio (firmware ≥ 17.0.0.0): documented the loxoneradio service on getservicefolder (user is always noUser, root folder start) and serviceplay
  • audio/{zoneId}/loudness get/set (firmware ≥ 18.1.0.0)
  • Queue operations: queueadd/{itemId}, queueinsert/{itemId}, queue/play/{id}, queue/remove/{id}, queue/move/{id}/before/{id}
  • Room favorites management: roomfavs/{playerId}/add|delete|reorder|setname|setid|setplus, paginated getroomfavs/{playerId}/{offset}/{limit}
  • geteq/{playerId}, seteq/{playerId}/{bands}, input/{inputId}/rename|type

Corrections / enrichments

  • roomfavs/.../copy/...: the App sends the source zone first and supports comma-separated target zones (was documented the other way round)
  • playlist/update: documented the edit-session protocol (startadditem:/addbrowsable:/moveById/removeByIdfinish/finishnochanges)
  • volume/{value}: relative steps +n / -n
  • Play commands: optional parentid/parentpath context segments (Spotify) and the ?q&{base64url("enforceUser=true")} suffix (PlayWithEnforcedUser, fw ≥ 15.5.01.13)
  • radios/modify: optional basic-auth suffix (AuthenticatedCustomUrls, fw ≥ 17.0.0.0)
  • dgroup/update and globalsearch: full parameter forms
  • Note on cfg/input/{playerId}/{inputId}: the App selects line-ins via audio/{zoneId}/linein/{inputId}; cfg/input/… is used for configuration
  • 10 additional WebSocket events (playlistchanged_event, reloadmusicapp_event, service_changed_event, customurl_changed_event, mastervolumechanged_event, usbchanged_event, restart_event, reboot_event, dialog_event, hw_event)

miniserver-api.yaml

  • progress/{seconds} (seek), volstep (default step size), playzonefav/{favId} (lower-case variant used by the App's shortcut/NFC screens, addresses by item ID), roomfav/plus

README.md

  • New chapter "How the official App connects to the AudioServer": connection order (P2P TLS via {ip-with-dashes}.{mac}.dyndns.loxonecloud.com:7091, plain ws://host:7091, Miniserver proxy /proxy/{uuidAction}/), subprotocol remotecontrol, and the getkeysecure/authenticate handshake re-using the Miniserver JWT
  • New chapter "AudioServer feature gates": firmware version table (RecentlyPlayedLoudnessSwitch) plus known service IDs
  • Extended WebSocket event table
  • Added the analysed App build to Sources: http://updatefiles.loxone.com/windows/Beta/171217482.exe

Verification

  • Both YAML files parse cleanly (yaml.safe_load); openapi path count 117 → 135
  • Every added command is backed by an actual call site in the App code (schema definitions in comps.js / AppHub.js, command assembly [command, ...params].join('/')), not just by constants — commands that are only defined but never sent were excluded (e.g. audio/cfg/airplay state GET); the one exception (roomfav/plus on the Miniserver path) is marked as "defined in the App's command catalogue"

🤖 Generated with Claude Code

…dness, queue ops, roomfavs, events)

Extracted from the official Loxone App for Windows 17.1.2 (17482) by
decompiling the Electron bundle and auditing both its typed AudioServer
WebSocket API (parsing/v1_6/command/**) and its Miniserver control
command catalogue.

openapi.yaml:
- Loxone Radio service (loxoneradio/noUser/start) on getservicefolder
  and serviceplay, firmware >= 17.0.0.0
- audio/{zoneId}/loudness get/set (firmware >= 18.1.0.0)
- queue operations: queueadd, queueinsert, queue/play, queue/remove,
  queue/move/{id}/before/{id}
- room favorites management sub-routes: add, delete, reorder, setname,
  setid, setplus; paginated getroomfavs
- fixed roomfavs copy direction (source first, comma-separated targets)
- playlist/update edit-session protocol (start/additem/addbrowsable/
  moveById/removeById/finish)
- relative volume steps (volume/+n, volume/-n)
- parentid/parentpath and enforceUser suffixes on play commands
- basic-auth suffix on radios/modify (AuthenticatedCustomUrls)
- geteq/seteq and dgroup/update parameterised variants
- input rename/type config routes + clarifying note on cfg/input
- 10 additional WebSocket events

miniserver-api.yaml:
- progress/{seconds}, volstep (default step), playzonefav/{favId},
  roomfav/plus

README.md:
- new chapter: App connection flow (P2P TLS via loxonecloud DNS,
  Miniserver proxy fallback) and auth handshake
- feature gate / firmware table and known service IDs
- extended WebSocket event table
- source entry for the analysed App build

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant