AV zone — av_zone v1
One room's audio and video, routed by a system that is not Juno.
The awkward case this exists for: a house already commissioned on Control4 or Savant, where every HDMI run, every matrix output and every warmup delay was entered once, years ago, by whoever installed it. Juno can drive that house — but re-drawing its signal graph to do so is days of work to arrive back where it started, and it would force Juno to learn the one thing worth not knowing: which input the TV is on.
So a room may hand its AV to a binding of this proxy instead. watch and listen on such a
room do not run the pathfinder; they are forwarded here, and the far system does what it
already knows how to do. Everything else about the room stays Juno's — its lights are ordinary
light bindings, its sensors ordinary sensor bindings, and its automations do not care.
This is not a receiver. A receiver is a box with inputs, and modelling a room as one
means inventing signal connections that do not exist, so that a pathfinder that must not run
has something to chew on. This says what is true instead: the room's AV belongs to somebody
else, and here is the handle.
Infrastructure rather than a device, which is why it sits under system beside room and
bridge: nobody buys an AV zone, and nobody points a remote at one. It exists because another
system does, and what a resident sees is the room in front of it.
A zone names its sources the way the far system names them, not the way Juno does. Core translates — a Juno binding in, that system's own id out — so nothing above this contract has to learn a foreign vocabulary, and a source the far system has never heard of is refused rather than sent into the dark.
Capabilities
Declared in the driver manifest under [[proxy]] capabilities. Anything not declared takes the default below.
| Capability | Type | Default | Meaning |
|---|---|---|---|
has_audio | bool | true | |
has_discrete_mute | bool | false | |
has_discrete_volume | bool | false | Can be set to an absolute volume |
has_video | bool | true | |
volume_max | u32 | 100 |
Commands
mute_toggle
No parameters.
off
Stop whatever is playing and release the room, as that system understands it.
No parameters.
select_source
Play something in this zone. source is the far system's own id, which core fills in from the
binding somebody actually asked for.
| Parameter | Type | Notes |
|---|---|---|
signal | one of video · audio | |
source | string |
set_mute
Only present when
has_discrete_muteis declared true.
| Parameter | Type | Notes |
|---|---|---|
mute | bool |
set_volume
Only present when
has_discrete_volumeis declared true.
| Parameter | Type | Notes |
|---|---|---|
level | u32 0–100 |
volume_down
No parameters.
volume_up
No parameters.
Notifications
mute_changed
| Parameter | Type | Notes |
|---|---|---|
mute | bool |
online_changed
| Parameter | Type | Notes |
|---|---|---|
online | bool |
power_changed
| Parameter | Type | Notes |
|---|---|---|
on | bool |
source_changed
Somebody picked a source over there — on a handheld remote, on a keypad, in an app.
| Parameter | Type | Notes |
|---|---|---|
signal | one of video · audio | |
source | string |
volume_changed
| Parameter | Type | Notes |
|---|---|---|
level | u32 |
State
Last-known values core keeps for a binding of this proxy.
| Key | Type | Meaning |
|---|---|---|
audio_source | string | |
mute | bool | |
on | bool | |
online | bool | |
video_source | string | |
volume | u32 |