Control and monitor Sony BRAVIA Professional Displays (the FW-xxBZ commercial signage range) from ioBroker.
This adapter targets the professional displays rather than domestic Android TVs — see Sony's BRAVIA Professional Displays product range and the Professional Displays Knowledge Center for the control protocols it implements. It speaks all four of Sony's control interfaces and, crucially, discovers what your particular display supports at runtime instead of shipping a fixed per-model table — the professional range varies by model, firmware and EU RED-DA compliance variant.
| Interface | Used for | Notes |
|---|---|---|
| REST API | The full command surface — power, inputs, picture, audio, apps, system settings | JSON-RPC over HTTP, authenticated with a pre-shared key |
| Simple IP Control | Instant push updates, plus picture mute | The only interface that pushes; without it, changes made at the display appear only at the next poll |
| IRCC-IP | Remote-control key emulation for menu and OSD navigation | Key table is read from the display itself |
| Wake-on-LAN | Recovering a suspended display | A suspended panel shuts down its HTTP server, so this is the only route back |
Simple IP Control and IRCC-IP can each be switched off in the instance settings if you would rather run REST-only.
Install from the ioBroker admin Adapters tab, then create an instance.
Requires Node.js 22 or later, js-controller 6.0.11 or later and admin 7.6.20 or later.
On the display:
- Settings → Network & Internet → Remote device settings → Control remotely — enable.
- Settings → Network & Internet → Home network → IP control → Authentication — choose Pre-Shared Key and set a key.
- Settings → Network & Internet → Home network → IP control → Simple IP control — enable (only needed if you want push updates).
- Enable Wake-on-LAN under Remote device settings if you want to wake a suspended display.
In ioBroker, create an instance, enter the display's IP address and the pre-shared key, and press Test connection.
Most of the state tree is discovered, so it matches your display rather than a generic template.
| Channel | Contents |
|---|---|
info |
Model, serial, MAC, IP, API generation, connection indicators, last error |
power |
state, status, toggle, reboot, wake |
system |
Power saving mode, Wake-on-LAN mode, LED indicator mode/status, display clock |
audio |
volume, mute, volumeUp/volumeDown, per-output channels, discovered speaker and sound settings |
video |
Discovered picture-quality targets, pictureMute, screenRotation |
input |
select, current, currentTitle, list, and one channel per physical input with its user label and connection status |
scene |
Scene setting (models that support it) |
apps |
Installed application list, launch by URI, per-app launch buttons, terminate |
remote |
One button per discovered remote key, plus raw IRCC code send |
getPictureQualitySettings reports each target with its candidate values, and those map straight
onto ioBroker object metadata:
| The display reports | You get |
|---|---|
{ "min": 0, "max": 100, "step": 1 } |
a number state with min/max/step set |
[{"value":"vivid"},{"value":"standard"}] |
a string state with common.states populated |
[{"value":"on"},{"value":"off"}] |
a boolean switch |
| no candidates | a free-text state |
A target the display reports as isAvailable: false (not applicable to the current input) still gets
a state, so it does not disappear and reappear as you switch inputs.
setScreenRotationis documented by Sony as callable from localhost only, and only on recent FW-BZxxx firmware. The state is created when the display advertises the method, but writes may be refused over the network.- Scene setting is not implemented by the BZ40P / BZ35P / BZ30P models; the state is not created on those displays.
getSoundSettingsis not documented for professional displays. If the display does not answer it, the adapter falls back to the documentedoutputTerminaltarget.- Powering on over REST only works from Sleep. From full suspend the HTTP server is down, and the adapter automatically falls back to Wake-on-LAN.
- EU models ship in three RED-DA compliance variants with different available commands. Capability discovery handles this, but some states will be absent on restricted variants.
npm install
npm test # unit and integration tests against a mock display
npm run check # type check
npm run lint
npm run buildTests run against test/mock-bravia-server.ts, a mock display that serves both the HTTP JSON-RPC
face and the Simple IP Control TCP face from one shared state object — so a REST write raises the
matching SSIP notification, exactly as real hardware does. No display is needed to develop or test.
Protocol notes gathered from Sony's documentation live in docs/PROTOCOL.md.
- Wake-on-LAN now works when the display was already suspended when the adapter started
- A configured Wake-on-LAN MAC or broadcast address now takes precedence over the one the display reports
- The adapter now reconnects within 5 minutes of a display coming back, including right after Wake-on-LAN and with long poll intervals
- Object IDs built from app titles now use only characters ioBroker accepts
- Dependency updates; tested on Node.js 22, 24 and 26
- Initial release
"Sony" and "BRAVIA" are trademarks of Sony Group Corporation. This adapter is an independent, community-built integration and is not affiliated with, endorsed by, or supported by Sony. The trademarks are used only to identify the displays the adapter controls.
MIT License — see LICENSE.
Copyright (c) 2026 Alan Paris alan.paris@scottish.rugby
