Activity information. Each node sends out to all other nodes OSC messages of the form ["/active", <name>, <state>] where <name> is a string of "ji", "poz", "dp", "hhr", and <state> is an integer of either 0 (node has become inactive) or 1 (node has become active. The frequency of sending these updates should not be higher than one per second.
Here is a possible way to measure whether a node currently produces sound or not:
val in = InFeedback.ar(0, 8)
val sig = Mix.mono(in)
val period = 2.0
val tr = Impulse.kr(period.reciprocal)
val peak = Peak.kr(sig, tr)
val thresh = "thresh".kr(-48.0.dbAmp)
val active = peak > thresh
val actL = Latch.kr(active, tr)
val actTr = HPZ1.kr(actL)
Reaction(actTr, active, "report")
This reads the output of first eight channels, sums it together and measures the peak amplitude across every two seconds. It then compares it to a threshold, and when it first crosses above or falls below the threshold, invokes some reaction (this would be SendReply in SC-lang, followed by some generation of the /active OSC message).
Each node should implement a strategy to be active no more than half of the time, within a reasonable window of observation. For example, it could use information of the other nodes or its monitor its own activity amount to decide when quietness is needed.