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
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
loxoneradioservice ongetservicefolder(user is alwaysnoUser, root folderstart) andserviceplayaudio/{zoneId}/loudnessget/set (firmware ≥ 18.1.0.0)queueadd/{itemId},queueinsert/{itemId},queue/play/{id},queue/remove/{id},queue/move/{id}/before/{id}roomfavs/{playerId}/add|delete|reorder|setname|setid|setplus, paginatedgetroomfavs/{playerId}/{offset}/{limit}geteq/{playerId},seteq/{playerId}/{bands},input/{inputId}/rename|typeCorrections / 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 (start→additem:/addbrowsable:/moveById/removeById→finish/finishnochanges)volume/{value}: relative steps+n/-nparentid/parentpathcontext 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/updateandglobalsearch: full parameter formscfg/input/{playerId}/{inputId}: the App selects line-ins viaaudio/{zoneId}/linein/{inputId};cfg/input/…is used for configurationplaylistchanged_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/plusREADME.md
{ip-with-dashes}.{mac}.dyndns.loxonecloud.com:7091, plainws://host:7091, Miniserver proxy/proxy/{uuidAction}/), subprotocolremotecontrol, and thegetkey→secure/authenticatehandshake re-using the Miniserver JWTRecentlyPlayed…LoudnessSwitch) plus known service IDshttp://updatefiles.loxone.com/windows/Beta/171217482.exeVerification
yaml.safe_load); openapi path count 117 → 135comps.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/airplaystate GET); the one exception (roomfav/pluson the Miniserver path) is marked as "defined in the App's command catalogue"🤖 Generated with Claude Code