Guide · Home Assistant & MQTT

Your call, as sensors.
Lights and scenes that follow it.

The Call State desktop app publishes your live call status to your MQTT broker. Home Assistant finds the sensors by itself; Node-RED and other tools read one JSON topic. The status goes from the app straight to your broker.

What it does.

Call State connects to the MQTT broker you name and keeps a few retained topics up to date: whether you are in a meeting, muted, on camera, sharing your screen, and more. Every change is published within a fraction of a second.

It shows the same status as the Call State app: your active call on any of your computers, or the status of this computer when no call runs. With Home Assistant switched on, the sensors appear as one device, and they come back on their own after a Home Assistant restart.

See what data leaves your computer.

Set it up.

  1. Have a broker. In Home Assistant, install the Mosquitto broker add-on and the MQTT integration, and create a user for Call State. Any other MQTT broker works too.
  2. Open the settings. In the Call State app, open Settings and choose Smart home.
  3. Enter the broker. Type its address (for example homeassistant.local), the port (1883, or 8883 with Use TLS), the user name and the password. The password is kept in the keychain of your computer.
  4. Check the name. CallState is the default. It becomes the topic and the device name in Home Assistant.
  5. Test, then switch on. Click Test connection. When it works, switch MQTT on. The status line then reads Connected to ….

In Home Assistant.

With Home Assistant ticked in the settings, a device named after your name setting appears under the MQTT integration. It brings these entities:

Entities of the device
EntityWhat it shows
sensor.callstate_statusOne word for the whole state: idle, ringing, inCall, inCallMuted, teamsOff, connecting or signedOut.
binary_sensor.callstate_in_meetingOn while you are in a meeting.
binary_sensor.callstate_ringingOn while a call rings.
binary_sensor.callstate_muted, …_camera, …_hand_raised, …_sharing, …_recordingThe meeting signals. Outside a meeting they are unknown, not off.
sensor.callstate_call_startedWhen the current call started.

An automation that turns a desk light red while you are in a call:

automation:
  - alias: "Desk light red during calls"
    triggers:
      - trigger: state
        entity_id: binary_sensor.callstate_in_meeting
        to: "on"
    actions:
      - action: light.turn_on
        target:
          entity_id: light.desk
        data:
          color_name: red

The entity names follow your name setting. With the name Office the status sensor is sensor.office_status.

Topics and payload.

For Node-RED, scripts or any other MQTT tool. All topics are retained, so a new subscriber gets the current state at once.

Topics under the name CallState
TopicPayload
CallState/stateThe full status as JSON (below).
CallState/statusThe one-word state, as in the status sensor.
CallState/availabilityonline while the app is connected, offline when it quits or loses the connection.
{
  "status": "inCallMuted",
  "inMeeting": true,
  "ringing": false,
  "muted": true,
  "cameraOn": true,
  "handRaised": false,
  "sharing": false,
  "recording": false,
  "chatOpen": null,
  "participantsOpen": false,
  "teamsRunning": true,
  "callStartedAt": "2026-11-03T09:00:12Z",
  "device": "Work laptop",
  "local": true,
  "updatedAt": "2026-11-03T09:14:55Z"
}

null means the value was not read, never false. device names the computer the call runs on, and local says whether that is this computer. While you are signed out, the state is signedOut and every other field is null, so an automation can tell a stale value from a live one.

Commands.

Commands are off by default. Tick Allow commands from MQTT to accept them on CallState/command. Home Assistant then also shows buttons for mute, camera, hand, leave and the five reactions (like, love, applause, laugh, surprised).

The payload is an action name, the same as in the command-line tool and the Local REST API: toggle-mute, mute, unmute, camera-on, camera-off, toggle-camera, hand-up, hand-down, toggle-hand, stop-sharing, leave, or a reaction such as reaction:like.

Several computers.

Give each computer that uses the same broker its own name, for example CallState-Laptop and CallState-Office. With the same name they would overwrite each other's topics.

When you replace a computer, enter the old name on the new one. Your Home Assistant entities and automations keep working. A new name creates a new device; the old topics are removed when you rename.

When it does not connect.

  • "The broker address could not be found." Check the spelling, or use the IP address of your broker.
  • "User name or password is wrong." / "The broker closed the connection." Check the MQTT user in your broker.
  • "The broker's certificate is not trusted by this computer." The broker uses a self-signed certificate. Use a certificate your computer trusts, or connect without TLS inside your own network.
  • Nothing appears in Home Assistant. Check that Home Assistant is ticked in the settings and that the discovery prefix matches your MQTT integration (default homeassistant).

The app records every connection change in Help → Activity log under mqtt. Your password is never written there.

Your next call

Ready when your next call starts.

Install Call State, sign in, and your setup follows the call.