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.
Set it up.
- 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.
- Open the settings. In the Call State app, open Settings and choose Smart home.
- Enter the broker. Type its address (for example
homeassistant.local), the port (1883, or8883with Use TLS), the user name and the password. The password is kept in the keychain of your computer. - Check the name.
CallStateis the default. It becomes the topic and the device name in Home Assistant. - 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:
| Entity | What it shows |
|---|---|
sensor.callstate_status | One word for the whole state: idle, ringing, inCall, inCallMuted, teamsOff, connecting or signedOut. |
binary_sensor.callstate_in_meeting | On while you are in a meeting. |
binary_sensor.callstate_ringing | On while a call rings. |
binary_sensor.callstate_muted, …_camera, …_hand_raised, …_sharing, …_recording | The meeting signals. Outside a meeting they are unknown, not off. |
sensor.callstate_call_started | When 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.
| Topic | Payload |
|---|---|
CallState/state | The full status as JSON (below). |
CallState/status | The one-word state, as in the status sensor. |
CallState/availability | online 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.