Heartbeat

Type: object

Sent with QoS 1, retained.

Will be sent every 10 seconds if we are online, and immediately whenever the reported
camera issue appears, changes kind or clears. The camera is checked on every frame. A
changed message of the same issue waits for the next regular heartbeat. Because it is
retained, subscribing at any time tells you the current state of the system without
waiting for the next round.

Also, on this topic we will publish the will message with status offline.

camera_status tells you whether the system can currently see the table, see
CameraStatus. Ignore it when status is offline: the will message is prepared when we
start up, so it does not carry a meaningful camera status.

Type: string

Type: enum (of string)

Must be one of:

  • "offline"
  • "online"

LicensingInfo

Type: object

Type: enum (of string)

Must be one of:

  • "Development"
  • "Internal"
  • "Paid"
  • "Trial"

Type: boolean

Type: integer

Type: string

Type: string

Type: array of string
No Additional Items

Each item of this array must be:

CameraStatus

Type: object

issue
null while the camera is fine. When several issues hold, only the most severe is reported,
in the order of CameraIssueKind.

seconds_since_last_frame
Seconds since the last frame arrived from the camera. Around 0 in normal operation.

table_coverage
Which fraction of the camera image the table takes up, between 0 and 1.

table_scale
Camera pixels per pixel of the image we run the detection on. Below 1 means the camera is
too far away from the table to resolve it fully and we have to upscale.

table_coverage and table_scale are 0 when there is no frame or no calibrated camera
position.


Type: null

CameraIssue

Type: object

kind
The machine readable issue, see CameraIssueKind.

message
The same issue as a sentence, meant to be shown to an operator. Unstable, don't parse it.

since
When this kind of issue appeared. It starts over when the issue clears and comes back, and
stays while only the message changes. Issues are reported as soon as they appear,
including short lived ones such as a camera that is gone for a second. Use since to alert
only on issues that persist.

CameraIssueKind

Type: enum (of string)

The camera issues we report, most severe first. The table position is where the system
believes the table is in the camera image: the last one it found, or the calibrated one.

NO_FRAMES
Reported within about two seconds of the camera delivering no frames: unplugged, not
detected, or on a USB port too slow for it. Cleared with the first frame.

NOT_YET_CALIBRATED
Reported while the table has no calibration or no configured player positions, so there is
nothing to judge the camera against, and while an operator runs the calibration. Cleared
once the table is calibrated.

CAMERA_MOVED
Reported in any of three cases, and cleared as soon as none holds:

  • On the first frame on which a configured position (a player's initial card or main bet
    spot, or a bet sensor spot) lies outside the camera image at the current table position.
  • When two searches in a row find the layout at the same new place, and configured
    positions lie outside the camera image there: the camera was turned so far that only part
    of the table is in view. About 5-10 s after the move, between rounds.
  • With the camera's allowed movement set to small corrections only, when two searches in a
    row find the layout somewhere such a camera cannot have moved to. This stays until the
    layout is found in its place again.

A camera allowed any movement that is moved is not an issue by itself: once the layout is
found three times in a row at its new place, the system uses and saves the new table
position.

LAYOUT_NOT_VISIBLE
Reported when the camera position is tracked automatically and the layout is not found:

  • With no cards on the table since it was last found, after two searches in a row that miss
    it: 5-10 s. The layout should be in plain view then, so whatever hides it is worth
    saying: the camera pointing away, the dealer spreading the decks, an arm across the felt,
    a covered or dark table.
  • With cards on the table, once it has been missing for 60 s, where time with cards counts
    for less: with 6 cards at half speed, with 12 at a third. Dealing hides the layout.

The searches run between rounds, about every 5 s. A layout found in its place but partly
covered counts as found. Cleared by the next search that finds the layout. Never reported
with the automatic tracking turned off: the calibrated position is then what the system
runs on.

Must be one of:

  • "CAMERA_MOVED"
  • "LAYOUT_NOT_VISIBLE"
  • "NOT_YET_CALIBRATED"
  • "NO_FRAMES"

Type: number

Type: number

Type: string

Type: string


Type: string
Type: enum (of string)

Must be one of:

  • "unknown"