One piece of A/V equipment on the far end of a machine’s cable: the protocol that reaches it, the inputs liken machines feed, and the session a Player holds on it.
spec
How to reach the receiver and how it is wired. The cluster owner writes every field but session, which the media operator applies.
| Field | Type | Required | Description |
|---|---|---|---|
denon |
object | no | The receiver speaks the Denon and Marantz control protocol on TCP port 23: plain commands such as MV50, and events in the same form. |
volume |
object | no | How loud this receiver may be driven and how far one press moves it, both in the receiver’s own scale. Required for a Denon. |
inputs |
[]object | no | The receiver’s inputs that liken machines feed. Nothing can discover this wiring, so the cluster owner declares it. A receiver forwards one EDID on every input, so the monitor id alone cannot tell two machines apart, and every entry names the machine. |
session |
object | no | The Player that holds the receiver now. The media operator applies this block under its own field manager for as long as the Player has a screen on this receiver, and lifts it after. The session owns the level from the volume topic the whole time. Power and input go out once, each time active or awake turns on. Nothing here is re-asserted: a person at the receiver’s own remote outranks the cluster. |
spec.denon
The receiver speaks the Denon and Marantz control protocol on TCP port 23: plain commands such as MV50, and events in the same form.
| Field | Type | Required | Description |
|---|---|---|---|
address |
string | yes | The host name or IP address the receiver answers on, with an optional port. The port is 23 when absent. |
spec.volume
How loud this receiver may be driven and how far one press moves it, both in the receiver’s own scale. Required for a Denon.
| Field | Type | Required | Description |
|---|---|---|---|
max |
number | no | The loudest a press may drive this receiver, in its own scale. A Denon counts 0 to 98 and this is capped there. 100 on the bus means this value. A hand on the receiver’s own remote can still go past it. |
step |
number | no | How far one press moves the receiver, in its own scale. Half steps are allowed. Absent means one whole unit. |
spec.inputs[]
The receiver’s inputs that liken machines feed. Nothing can discover this wiring, so the cluster owner declares it. A receiver forwards one EDID on every input, so the monitor id alone cannot tell two machines apart, and every entry names the machine.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | The input’s name on the receiver, as its protocol spells it: MPLAY, GAME, TV, CBL/SAT. |
machine |
string | yes | The liken machine whose HDMI output lands on this input, by node name. |
monitor |
string | yes | The monitor id the display and audio operators publish for this cable, such as don-0070-denon-avr. It is the check that the wire is really there. |
spec.session
The Player that holds the receiver now. The media operator applies this block under its own field manager for as long as the Player has a screen on this receiver, and lifts it after. The session owns the level from the volume topic the whole time. Power and input go out once, each time active or awake turns on. Nothing here is re-asserted: a person at the receiver’s own remote outranks the cluster.
| Field | Type | Required | Description |
|---|---|---|---|
player |
string | yes | The Player, as namespace/name. Pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?/[a-z0-9]([-a-z0-9]*[a-z0-9])?$. |
input |
string | yes | The input the Player plays through, by its name in spec.inputs. |
volumeTopic |
string | yes | The Player’s volume topic on the media bus. The operator follows it, owns the level while the session stands, and writes the receiver’s own knob back to it. |
active |
boolean | no | Whether a Play stands on the Player. When it turns on, the receiver is powered on and its input selected, once. While it is off, the session owns the level and sends the receiver nothing, so an idle screen never wakes the room. Absent means off. |
awake |
boolean | no | Whether the room’s screen is awake. It is the second trigger for the same one-shots as active: each time it turns on, the receiver is powered on and its input selected, once, whatever active says. Turning off sends the receiver nothing. Absent means asleep. |
status
What the receiver last said, in its own units. Only the operator writes it.
| Field | Type | Required | Description |
|---|---|---|---|
power |
string | no | The power state the receiver last reported: on or standby. |
input |
string | no | The input the receiver last reported as selected, whether liken selected it or a person did. |
volume |
string | no | The master volume the receiver last reported, in its own scale. A Denon counts 0 to 98 in half steps. |
volumeMax |
string | no | The last MVMAX line the receiver sent, in the same scale. It is what the receiver said and nothing the operator acts on: on a Denon the number moves with the volume. |
mute |
boolean | no | Whether the receiver last reported itself muted. |
soundMode |
string | no | The sound mode the receiver last reported, such as MULTI CH IN or STEREO. |
service |
string | no | The Service that stands in for the receiver on the cluster network, once the operator makes one. Empty until then. |
conditions |
[]object | no | Reachable is True only after a recent answered exchange with the receiver, never on an open socket alone. |
status.conditions[]
Reachable is True only after a recent answered exchange with the receiver, never on an open socket alone.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | yes | The check this entry reports, in CamelCase. It is the key of this list. Pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$. |
status |
string | yes | The verdict. True is the good verdict, and Unknown means the operator cannot tell yet. One of: True, False, Unknown. |
observedGeneration |
integer | no | The metadata.generation this condition judged. |
reason |
string | no | One CamelCase word for why the condition holds this verdict, meant for a program to match on. Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$. |
message |
string | no | The same answer in a sentence a person reads. |
lastTransitionTime |
string | yes | When the verdict last changed. It moves only when the status flips. |