private@homelab: ~/latest
Home Assistant · Zigbee2MQTT · local control
private@homelab:~$ cat guides/article.md
·
· ·
7–10 minutes
read

Aqara FP1E Presence Sensor in Home Assistant (No Hub)

Set up the Aqara FP1E (RTCZCGQ13LM) with Zigbee2MQTT and Home Assistant without an Aqara hub — pairing, entities, AI spatial learning, and automations.

Aqara FP1E Presence Sensor in Home Assistant (No Hub)

The FP1E uses mmWave radar to detect presence, including a person sitting still. It can join Zigbee2MQTT directly, giving Home Assistant presence, movement, and target-distance reports without an Aqara hub.

Placement and detection range are the useful starting points. Pair the sensor first, watch its reports in the actual room, and only then add lighting automations.

What the FP1E measures

The FP1E reports presence for its monitored area. It does not provide the FP2’s room map and multiple detection zones. Its USB cable supplies power; it is not a data connection to Home Assistant. Use the power supply specified in the FP1E manual.

Being powered by USB is not sufficient evidence that a Zigbee device is a mesh router. Check the device type shown by your coordinator before counting it as a repeater.

Aqara’s mainland specification lists model RTCZCGQ13LM; the global version is labelled PS-S03D. The manual specifies a 120° field of view with up to 6 m of wall-mounted detection and 5 V/1 A power. Those figures are useful for planning the USB supply and mounting position; the usable area still depends on the room. Aim it at the occupied area and test a seated person before fastening the mount permanently.

A PIR sensor reports changes in infrared energy as a person moves. Radar presence is useful for a different problem: keeping a room occupied while someone sits at a desk or reads. Neither sensor tells Home Assistant what that person is doing, and a no_movement reading does not prove sleep.

Prerequisites

  • A working Zigbee2MQTT coordinator, MQTT broker, and Home Assistant MQTT integration.
  • An FP1E with suitable USB power and a position that covers the intended area.
  • A current Zigbee2MQTT release containing the FP1E device definition.

Keep fans, moving curtains, adjoining spaces, and reflective surfaces in mind when choosing the position. A room test is more useful than treating the advertised maximum range as the correct setting for every room.

Pairing the FP1E to Zigbee2MQTT

Start near the coordinator and leave the sensor powered throughout the interview.

1. Enable joining

Open the Zigbee2MQTT frontend and allow new devices to join. Keep the log visible so you can distinguish “not discovered” from “interview failed”.

2. Put the FP1E into pairing mode

Hold the reset button for about five seconds until the blue light blinks. The Zigbee2MQTT page also suggests a single short press if the normal sequence does not work. Wait for discovery before repeating the reset.

3. Confirm the device appears

Wait for the interview to complete, then give the device a friendly name such as fp1e_office. Open Exposes and confirm that presence changes when you enter and leave the monitored area. Check the discovered Home Assistant entities as a separate step.

Presence, movement, and distance reports

Presence is a binary report. Movement is an enum, with values including movement, no_movement, and no_presence; it should not be assumed to be an on/off binary sensor. Target distance is a separate measurement.

For an automation, inspect the actual entity ID and state in Home Assistant’s Developer Tools. The examples below use binary_sensor.fp1e_presence and sensor.fp1e_movement as placeholders. Diagnostic device temperature describes the sensor itself, not the room temperature.

presence is the main occupied/clear report used for lighting. movement distinguishes active movement, no movement, and no presence; unexpected enum values should not be silently treated as stillness. Watch both while walking in, sitting down, and leaving.

target_distance is a distance estimate in metres. It is useful for checking whether the sensor sees a person at the far end of the intended area. Treat it as a placement aid rather than a substitute for the FP2’s named zones.

power_outage_count counts interruptions since the last pairing. An unexpected rise is a reason to check the USB supply and connections. device_temperature is a diagnostic device reading; do not use it as a room thermostat.

Set the monitored area

Reduce detection range to the part of the room you want to monitor, then test an entry, a seated person, and an empty room. Change one setting at a time and leave enough time to observe its effect.

The converter’s settings are:

  • detection_range: 0–6 m. Limit it to the area you intend to monitor; then test the farthest seat and nearby doorway.
  • motion_sensitivity: low, medium, or high. Compare seated detection and empty-room false positives, rather than assuming the lowest or highest value is best.
  • ai_sensitivity_adaptive: ON or OFF. Check this first when comparing fixed sensitivity settings, because adaptive adjustments can affect the result.
  • ai_interference_source_selfidentification: ON or OFF. This is the interference-identification control for sources such as fans and air conditioners; still check placement and run the empty-room test.

These exact property names and values apply to the linked Zigbee2MQTT definition. A boolean such as true is not interchangeable with every ON setting.

Run spatial learning in an empty room

Spatial learning establishes a baseline for the installed position. Follow the manual’s empty-room procedure, leave the area, and allow learning to finish. Run it again if you substantially move the sensor or change the room layout.

The Zigbee2MQTT command is an enum value, not a boolean. Send this payload to zigbee2mqtt/YOUR_SENSOR_NAME/set, using your device’s friendly name:

{"spatial_learning":"Start Learning"}

Learning is followed by a room test. Confirm that a still occupant remains detected and that an empty room eventually clears; a completed learning command alone does not establish that the installation is working well.

Practical HA automations

These examples are complete automations for the Home Assistant automation YAML editor. Replace the entity IDs, and use one lighting strategy at a time so that two automations do not compete. The delays are examples to tune in your room, not measured FP1E response times.

Basic presence lighting

This turns the light on when presence is reported and off after the entity has remained clear for 35 seconds. That delay starts after the sensor reports clear, so it adds to any delay inside the sensor.

alias: Office lights - FP1E presence
description: On when present, off after 35 seconds of reported clear
trigger:
  - platform: state
    entity_id: binary_sensor.fp1e_presence
    to: "on"
  - platform: state
    entity_id: binary_sensor.fp1e_presence
    to: "off"
    for:
      seconds: 35
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: binary_sensor.fp1e_presence
            state: "on"
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.office
      - conditions:
          - condition: state
            entity_id: binary_sensor.fp1e_presence
            state: "off"
        sequence:
          - service: light.turn_off
            target:
              entity_id: light.office
mode: restart

Still-presence dim, not off

For a room where dimming during a long period of stillness is useful, combine movement with presence. This example dims after five minutes of no_movement while someone is present, restores brightness on movement or a fresh presence report, and turns off only after presence clears.

alias: Office lights - FP1E stillness dim
trigger:
  - platform: state
    entity_id: sensor.fp1e_movement
    to: no_movement
    for:
      minutes: 5
  - platform: state
    entity_id: sensor.fp1e_movement
    to: movement
  - platform: state
    entity_id: binary_sensor.fp1e_presence
    to: "on"
  - platform: state
    entity_id: binary_sensor.fp1e_presence
    to: "off"
    for:
      seconds: 35
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: binary_sensor.fp1e_presence
            state: "off"
        sequence:
          - service: light.turn_off
            target:
              entity_id: light.office
      - conditions:
          - condition: template
            value_template: "{{ trigger.entity_id == 'sensor.fp1e_movement' and trigger.to_state.state == 'no_movement' }}"
          - condition: state
            entity_id: binary_sensor.fp1e_presence
            state: "on"
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.office
            data:
              brightness_pct: 30
      - conditions:
          - condition: state
            entity_id: binary_sensor.fp1e_presence
            state: "on"
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.office
            data:
              brightness_pct: 100
mode: restart

A state trigger’s for timer does not survive an automation reload or Home Assistant restart. Check that behaviour before relying on a long timer, and inspect the trace if an unexpected state takes a branch you did not intend.

FP1E or FP2?

Requirement FP1E FP2
Home Assistant route covered here Direct Zigbee2MQTT Local HomeKit Device over Wi-Fi
Separate areas within a room One monitored presence area Multiple configured zones
Setup focus Placement, range, sensitivity Room mapping, zones, placement
Ambient light for an automation No illuminance report in the current Zigbee2MQTT definition Illuminance measurement alongside occupancy
Fall detection Not listed in the direct Zigbee2MQTT controls Aqara app feature using ceiling-mounted fall-detection mode; separate from ordinary Home Assistant zone-presence entities
Power USB USB

Choose according to the area you need to distinguish. A single desk or small room may need only one presence report; a room with separate sofa and dining areas may benefit from zones. The FP2 local setup guide covers that route, and the FP2/FP300 comparison discusses other sensor choices. Check which vendor features your chosen integration actually exposes.

Local operation

Direct Zigbee pairing places the sensor on your own coordinator. Its reports reach Home Assistant through Zigbee2MQTT and MQTT. An Aqara cloud connection is not part of that path. Camera footage is not involved: this is a radar presence sensor.

An Aqara hub offers a different setup and feature mapping. If you want that route, see the Hub M2 guide. Do not assume an app feature and a Zigbee2MQTT entity are interchangeable.

OTA firmware updates

Zigbee2MQTT lists OTA support for the FP1E. Open its OTA interface, check for an available image, and review any release information before starting an update. Keep the sensor powered and the coordinator running until the update finishes. An OTA-capable device may still have no newer image available.

After updating, retest presence, movement states, and your lighting traces; firmware changes can affect the behaviour an automation was tuned around. Keep your working range and sensitivity settings in the device notes so you can compare them.

Frequently asked questions

Does it need an Aqara hub? Not for the direct Zigbee2MQTT route described here. It still needs a working Zigbee coordinator and MQTT setup.

Why does the light switch off late? Measure when the presence entity actually clears. The Home Assistant delay begins then, rather than when you physically leave.

Why does it detect an empty room? Check range, placement, moving objects, and the learning procedure before raising or lowering every setting. Retest with the room empty and occupied.

Can it replace a motion sensor everywhere? That depends on the room and the response you need. A motion sensor and radar presence sensor provide different information; test the behaviour for the particular lighting task.

local-firstHome Assistantno-cloud