Skip to main content

MQTT

Tally Arbiter can publish device tally states to an MQTT broker, enabling integration with home automation systems like Home Assistant, openHAB, Node-RED, and other IoT platforms. This allows you to monitor and react to tally states in real-time through your smart home or automation setup.

Configuration

MQTT can be configured through the Tally Arbiter settings interface or by editing the configuration file directly. The MQTT configuration section includes the following options:

Required Settings

  • Enabled: Enable or disable the MQTT integration (default: false)
  • Broker: MQTT broker hostname or IP address (default: localhost)
  • Port: MQTT broker port (default: 1883)
  • Topic Prefix: Prefix for all MQTT topics (default: tallyarbiter)
  • Retain: Whether to retain MQTT messages (default: true)
  • QoS: Quality of Service level - 0, 1, or 2 (default: 0)

Optional Settings

  • Username: MQTT broker username (if authentication is required)
  • Password: MQTT broker password (if authentication is required)
  • Reconnect Period: Time in milliseconds between reconnection attempts (default: 5000)
  • Connect Timeout: Connection timeout in milliseconds (default: 10000)
  • Keepalive: Keepalive interval in seconds (default: 60)
  • Client ID: Custom MQTT client ID (auto-generated if not provided)

Example Configuration

{
"mqtt": {
"enabled": true,
"broker": "192.168.1.100",
"port": 1883,
"username": "tallyarbiter",
"password": "your_password",
"topicPrefix": "tallyarbiter",
"retain": true,
"qos": 1,
"reconnectPeriod": 5000,
"connectTimeout": 10000,
"keepalive": 60
}
}

MQTT Topics

Tally Arbiter publishes device states to several MQTT topics following a structured hierarchy:

Service Status

  • {topicPrefix}/status: Overall service status (online or offline)

Device State Topics

For each device, Tally Arbiter publishes:

  1. {topicPrefix}/device/{deviceId}/state: Complete device state as JSON

    {
    "deviceId": "device-123",
    "deviceName": "Camera 1",
    "states": [
    {
    "busId": "bus-1",
    "busLabel": "Program",
    "sources": ["source-1", "source-2"]
    }
    ],
    "timestamp": "2024-01-15T10:30:00.000Z"
    }
  2. {topicPrefix}/device/{deviceId}/bus/{busId}: Individual bus state as JSON

    {
    "state": "ON",
    "busId": "bus-1",
    "busLabel": "Program",
    "busType": "program",
    "busColor": "#ff0000",
    "sources": ["source-1"],
    "timestamp": "2024-01-15T10:30:00.000Z"
    }
  3. {topicPrefix}/device/{deviceId}/bus/{busId}/state: Simple bus state (ON or OFF)

    • This topic contains just the state string, making it ideal for Home Assistant binary sensors
  4. {topicPrefix}/device/{deviceId}/status: Device availability status (online)

Topic Examples

With the default topic prefix tallyarbiter and a device ID camera-1 with bus ID program-bus:

  • tallyarbiter/status - Service status
  • tallyarbiter/device/camera-1/state - Complete device state
  • tallyarbiter/device/camera-1/bus/program-bus - Program bus state (JSON)
  • tallyarbiter/device/camera-1/bus/program-bus/state - Program bus state (ON/OFF)
  • tallyarbiter/device/camera-1/status - Device availability

Home Assistant Integration

The MQTT integration is designed to work seamlessly with Home Assistant. You can create binary sensors, sensors, and automations based on tally states.

Example Home Assistant Configuration

# binary_sensor.yaml
- platform: mqtt
name: "Camera 1 Program Tally"
state_topic: "tallyarbiter/device/camera-1/bus/program-bus/state"
payload_on: "ON"
payload_off: "OFF"
device_class: running

# sensor.yaml
- platform: mqtt
name: "Camera 1 Tally State"
state_topic: "tallyarbiter/device/camera-1/state"
value_template: "{{ value_json.states[0].busLabel if value_json.states else 'Clear' }}"
json_attributes_topic: "tallyarbiter/device/camera-1/state"
json_attributes_template: "{{ value_json | tojson }}"

Home Assistant Automation Example

# automation.yaml
- alias: "Turn on studio lights when camera 1 is on program"
trigger:
- platform: mqtt
topic: "tallyarbiter/device/camera-1/bus/program-bus/state"
payload: "ON"
action:
- service: light.turn_on
target:
entity_id: light.studio_lights

Node-RED Integration

You can use Node-RED to subscribe to MQTT topics and create custom automations:

  1. Add an MQTT In node
  2. Configure it to subscribe to tallyarbiter/device/+/bus/+/state (using wildcards)
  3. Process the messages in your flow
  4. Trigger actions based on tally states

Connection Management

  • Tally Arbiter automatically reconnects to the MQTT broker if the connection is lost
  • The reconnection period is configurable (default: 5 seconds)
  • Connection status is logged in the Tally Arbiter console
  • When the service starts, it publishes an online status and all current device states

Best Practices

  1. Enable message retention if you want new subscribers to receive the last known state immediately
  2. Use a unique topic prefix if running multiple Tally Arbiter instances
  3. Secure your MQTT broker with authentication when exposing it to a network
  4. Monitor the connection - check the Tally Arbiter logs for connection status

Troubleshooting

  • No messages received: Check that MQTT is enabled in the configuration and the broker address/port are correct
  • Connection failures: Verify network connectivity and broker credentials
  • Missing device states: Ensure devices are configured and have sources assigned
  • Check logs: Tally Arbiter logs MQTT connection events and errors to help diagnose issues