---
title: Manual MQTT Alarm control panel
description: Instructions on how to integrate manual alarms into Home Assistant with MQTT support.
ha_category:
  - Alarm
ha_release: '0.50'
ha_domain: manual_mqtt
ha_iot_class: Local Push
ha_platforms:
  - alarm_control_panel
ha_integration_type: integration
related:
  - docs: /docs/configuration/
    title: Configuration file
ha_quality_scale: legacy
---

The `mqtt` {% term integration %} extends the [manual alarm](/integrations/manual) by adding support for MQTT control of the alarm by a remote device. It can be used to create external keypads which simply change the state of the manual alarm in Home Assistant.

It's essentially the opposite of the [MQTT Alarm Panel](/integrations/alarm_control_panel.mqtt/) which allows Home Assistant to observe an existing, fully-featured alarm where all of the alarm logic is embedded in that physical device.

The {% term integration %} will accept the following commands from your Alarm Panel via the `command_topic`:

- `DISARM`
- `ARM_HOME`
- `ARM_AWAY`
- `ARM_NIGHT`
- `ARM_VACATION`
- `ARM_CUSTOM_BYPASS`

When the state of the manual alarm changes, Home Assistant will publish one of the following states to the `state_topic`:

- 'disarmed'
- 'armed_home'
- 'armed_away'
- 'armed_night'
- 'armed_vacation'
- 'armed_custom_bypass'
- 'pending'
- 'triggered'

## Configuration

To use your panel in your installation, add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}

```yaml
# Example configuration.yaml entry
alarm_control_panel:
  - platform: manual_mqtt
    state_topic: home/alarm
    command_topic: home/alarm/set
```

The following configuration variables from the base manual alarm platform are available:

{% configuration %}
name:
  description: The name of the alarm.
  required: false
  type: string
  default: HA Alarm
code:
  description: >
    If defined, specifies a code to enable or disable the alarm in the frontend.
    This code is not required for MQTT interactions.
    Only one of **code** and **code_template** can be specified.
  required: exclusive
  type: string
code_template:
  description: >
    If defined, returns a code to enable or disable the alarm in the frontend; an empty string disables checking the code.
    Inside the template, the variables **from_state** and **to_state** identify the current and desired state.
    Only one of **code** and **code_template** can be specified.
  required: exclusive
  type: string
code_arm_required:
  description: >
   If true, the code is required to arm the alarm. If false, the code is not validated.
  required: false
  type: boolean
  default: true
delay_time:
  description: The time in seconds of delay added to the triggered state's **pending_time** before triggering the alarm.
  required: false
  type: integer
  default: 0
pending_time:
  description: The time in seconds of the pending time before effecting a state change.
  required: false
  type: integer
  default: 60
trigger_time:
  description: The time in seconds of the trigger time in which the alarm is firing.
  required: false
  type: integer
  default: 120
disarm_after_trigger:
  description: If true, the alarm will automatically disarm after it has been triggered instead of returning to the previous state.
  required: false
  type: boolean
  default: false
armed_home/armed_away/armed_night/armed_vacation/armed_custom_bypass/disarmed/triggered:
  description: State specific settings
  required: false
  type: list
  keys:
    delay_time:
      description: State specific setting for **delay_time** (all states except **triggered**).
      required: false
      type: integer
    pending_time:
      description: State specific setting for **pending_time** (all states except **disarmed**).
      required: false
      type: integer
    trigger_time:
      description: State specific setting for **trigger_time** (all states except **triggered**).
      required: false
      type: integer
{% endconfiguration %}

See the documentation for the [manual alarm platform](/integrations/manual) for a description.

Additionally, the following MQTT configuration variables are also available.

{% configuration %}
state_topic:
  description: The MQTT topic Home Assistant will publish state updates to.
  required: true
  type: string
command_topic:
  description: The MQTT topic Home Assistant will subscribe to, to receive commands from a remote device to change the alarm state.
  required: true
  type: string
qos:
  description: The maximum QoS level to be used when receiving and publishing messages.
  required: false
  type: integer
  default: 0
payload_disarm:
  description: The payload to disarm this Alarm Panel.
  required: false
  type: string
  default: DISARM
payload_arm_home:
  description: The payload to set armed-home mode on this Alarm Panel.
  required: false
  type: string
  default: ARM_HOME
payload_arm_away:
  description: The payload to set armed-away mode on this Alarm Panel.
  required: false
  type: string
  default: ARM_AWAY
payload_arm_night:
  description: The payload to set armed-night mode on this Alarm Panel.
  required: false
  type: string
  default: ARM_NIGHT
payload_arm_vacation:
  description: The payload to set armed-vacation mode on this Alarm Panel.
  required: false
  type: string
  default: ARM_VACATION
payload_arm_custom_bypass:
  description: The payload to set armed-custom bypass mode on this Alarm Panel.
  required: false
  type: string
  default: ARM_CUSTOM_BYPASS
{% endconfiguration %}

## Examples

In the configuration example below:

- The disarmed state never triggers the alarm
- The armed_home state will leave no time to leave the building or disarm the alarm
- While other states state will give 30 seconds to leave the building before triggering the alarm, and 20 seconds to disarm the alarm when coming back
- Setting pending_time to 0 for triggered state allows the alarm to trigger after previous state's delay time only. If not set, the alarm will be pending for previous state's delay_time plus the default pending_time before triggering.

```yaml
# Example configuration.yaml entry
alarm_control_panel:
  - platform: manual_mqtt
    state_topic: home/alarm
    command_topic: home/alarm/set
    pending_time: 30
    delay_time: 20
    trigger_time: 4
    disarmed:
      trigger_time: 0
    armed_home:
      pending_time: 0
      delay_time: 0
    triggered:
      pending_time: 0
```

Refer to the [Manual Alarm Control page](/integrations/manual#examples) for more real-life examples on how to use this panel.

## MQTT control

The state of this alarm can be controlled using [MQTT](/integrations/mqtt/). Ensure you've configured that before adding this component.

To change the state of the alarm, publish one of the following messages to the `command_topic`:

 - `DISARM`
 - `ARM_HOME`
 - `ARM_AWAY`
 - `ARM_NIGHT`
 - `ARM_VACATION`
 - `ARM_CUSTOM_BYPASS`

To receive state updates from HA, subscribe to the `state_topic`. Home Assistant will publish a new message whenever the state changes:

 - `disarmed`
 - `armed_home`
 - `armed_away`
 - `armed_night`
 - `armed_vacation`
 - `armed_custom_bypass`
 - `pending`
 - `triggered`