screen.quality

Screen colour & brightness quality

Reports how far a screen's brightness and colour have drifted from its calibrated baseline. Sent from Harvester readings, at most once per screen per windowSeconds, and averaged over that window. Each channel is scored as value / reference * 100, so 100 is exactly on the baseline. On an uncalibrated screen, references are null and status is UNKNOWN.

No event means no data, not a healthy screen. Vojo sends the value, the reference and the score; you decide what counts as bad.

Payload

  • eventTypestringRequired

    Always screen.quality

  • eventIdstringRequired

    Stable per-event id, constant across retries (injected at delivery). Dedupe on this.

  • screenIdstringRequired
  • screenNamestringRequired
  • basisstringRequired

    Always drift-from-calibration

  • windowSecondsintegerRequired

    The throttle/averaging window this payload covers.

  • windowEndAtstringRequired

    Epoch (seconds) of the latest reading in this window. Use for staleness — absence of events means no data, not "healthy".

  • thresholdPctnumber or nullRequired

    GOOD/BAD band half-width around 100 (your organisation's quality threshold, default 10 = +/-10%). Symmetric, so both over-bright and too-dim are BAD. Same value for brightness and every colour channel. null when no alerting config.

  • brightnessobjectRequired

    The white / clear channel.

    Show 4 fields
    • valuenumber or nullRequired

      The measured reading (averaged over the window).

    • referencenumber or nullRequired

      The calibration baseline this channel was scored against. Null when uncalibrated.

    • scorenumber or nullRequired

      round(value / reference * 100). Null when not computable.

    • statusstringRequired

      GOOD within +/- the org quality threshold of 100; UNKNOWN when not assessable.

      One of GOOD, BAD, UNKNOWN

  • colourobjectRequired
    Show 4 fields
    • redobjectRequired

      One scored channel. score = round(value / reference * 100); 100 = on the calibrated baseline.

      Show 4 fields
      • valuenumber or nullRequired

        The measured reading (averaged over the window).

      • referencenumber or nullRequired

        The calibration baseline this channel was scored against. Null when uncalibrated.

      • scorenumber or nullRequired

        round(value / reference * 100). Null when not computable.

      • statusstringRequired

        GOOD within +/- the org quality threshold of 100; UNKNOWN when not assessable.

        One of GOOD, BAD, UNKNOWN

    • greenobjectRequired

      One scored channel. score = round(value / reference * 100); 100 = on the calibrated baseline.

      Show 4 fields
      • valuenumber or nullRequired

        The measured reading (averaged over the window).

      • referencenumber or nullRequired

        The calibration baseline this channel was scored against. Null when uncalibrated.

      • scorenumber or nullRequired

        round(value / reference * 100). Null when not computable.

      • statusstringRequired

        GOOD within +/- the org quality threshold of 100; UNKNOWN when not assessable.

        One of GOOD, BAD, UNKNOWN

    • blueobjectRequired

      One scored channel. score = round(value / reference * 100); 100 = on the calibrated baseline.

      Show 4 fields
      • valuenumber or nullRequired

        The measured reading (averaged over the window).

      • referencenumber or nullRequired

        The calibration baseline this channel was scored against. Null when uncalibrated.

      • scorenumber or nullRequired

        round(value / reference * 100). Null when not computable.

      • statusstringRequired

        GOOD within +/- the org quality threshold of 100; UNKNOWN when not assessable.

        One of GOOD, BAD, UNKNOWN

    • statusstringRequired

      Worst of the three channels.

      One of GOOD, BAD, UNKNOWN

  • attemptIdstring

    Per-attempt id; CHANGES on each retry. Do not dedupe on this.

  • calibratedAtstring or null

    Epoch (seconds) the active calibration baseline was taken; null when uncalibrated.

Handling this event

Verify the signature, reply with a 2xx within 20 seconds, then process the event in the background. Retries reuse the same event id, so deduplicate on it.