Датчик присутствия: mmWave или PIR, настройка и грабли

Датчик присутствия человека отличается от обычного датчика движения тем, что «видит» и неподвижного человека: вы сидите за столом или читаете на диване — свет не гаснет. У нас дома пять таких датчиков в Home Assistant: два mmWave-радара, два комбинированных PIR + радар и ещё один mmWave. Ниже — чем отличаются типы, какие настройки мы выставили, две готовые автоматизации для включения света и монитора и четыре грабли с цифрами, которые в описаниях датчиков не пишут.

Датчик присутствия человека для умного дома
Датчик присутствия: радар замечает даже неподвижного человека

Датчик присутствия или датчик движения

  • PIR (инфракрасный датчик движения) реагирует на движение тёплого тела. Экономный, живёт на батарейках месяцами, но если человек замер — через какое-то время считает, что в комнате пусто.
  • mmWave-радар (обычно 24 ГГц) замечает даже дыхание и мелкие движения, поэтому видит сидящего человека. Почти всегда питается от сети: радар работает непрерывно.
  • PIR + радар — комбинированный: часть времени работает как PIR, часть — как радар. Выглядит компромиссом, но у него своя грабля (ниже).

Наши датчики присутствия

Датчик (как его видит Home Assistant)ТипПодключениеПитаниеГде
Wenzhi «Human presence sensor»mmWave 24 ГГцZigbee2MQTTсетькухня
Wenzhi «Human presence sensor»mmWave 24 ГГцZigbee2MQTTсетьоткрытая терраса
HOBEIAN «PIR 24Ghz human presence sensor»PIR + радар 24 ГГцZigbee2MQTT2×AAприхожая (проход)
Tuya TS0601mmWaveZHAсетькабинет
Tuya TS0601PIR + радарZHAбатарейкисанузел — сейчас выпал из сети

Все — на Zigbee, в двух сетях: Zigbee2MQTT на канале 11 и ZHA на канале 25, а Wi-Fi жёстко на 6-м канале, чтобы не мешал. Почему две сети и как развести Zigbee и Wi-Fi — в статье Zigbee2MQTT или ZHA.

Настройка датчика присутствия

В Zigbee2MQTT настройки радара видны на странице устройства в веб-интерфейсе и меняются прямо там. Наши текущие значения:

ПараметрmmWave, кухняmmWave, террасаЧто делает
radar_sensitivity56чувствительность радара
minimum_range0,3 м0ближняя граница зоны
maximum_range3,6 м5 мдальняя граница зоны
detection_delay0,1 с0,1 сзадержка перед «есть человек»
fading_time30,5 с60 ссколько ждать перед «никого нет»

Кроме присутствия, эти датчики отдают расстояние до человека в метрах и освещённость в люксах — последнее удобно, чтобы не включать свет днём.

Комбинированный датчик в прихожей настроен иначе: режим motion_detection_mode = only_pir (есть ещё pir_and_radar и only_radar), чувствительность к движению 6, к неподвижному человеку 2, дистанция 1,8 м, fading_time 15 с, индикатор выключен.

Zigbee2MQTT удобнее ZHA для Tuya-радаров. Тот же тип датчика в ZHA (кабинет) показывает пять числовых параметров без подписей — у нас это 8, 10, 405, 100 и 45500, — и догадаться, что из них дальность, а что задержка, можно только по документации. В Zigbee2MQTT параметры подписаны и в нормальных единицах.

Грабля 1: зону обнаружения программно не сузить

В проходе нам нужно было, чтобы комбинированный датчик реагировал на 2 м, а не на все 5 м. Проверяли проходами:

Зона срабатывания PIR и радара в разных режимах
Схема по нашим замерам проходами: какой режим слушается настройки дистанции
  • pir_and_radar и дистанция 2 м — срабатывает за 4–5 м: PIR срабатывает сам по себе, прошивка объединяет PIR и радар по «ИЛИ»;
  • only_pir и чувствительность от 3 до 1 — всё равно 4–5 м: в PIR-режиме настройка дистанции не применяется;
  • only_radar — дистанция работает, но непрерывный радар на батарейках долго не живёт.

Итог — вернули only_pir и смирились. Рабочие способы сузить зону только физические: заклеить часть линзы, наклонить датчик или запитать его от USB и включить only_radar. Если вам важна точная зона — сразу берите mmWave с питанием от сети: у него minimum_range и maximum_range действительно работают.

Грабля 2: проценты батареи врут на аккумуляторах

Шкала заряда в датчике рассчитана на две щелочные батарейки — 2 × 1,5 = 3,0 В. На никель-металлгидридных аккумуляторах (2 × 1,2 = 2,4 В) вместо плавного разряда получается такое:

  • со 2 апреля по 26 июля 2026 года — почти четыре месяца ровно 100 %;
  • с 27 июля — «качели» 100 → 50 → 100: напряжение проседает в момент передачи данных.

На щелочных батарейках в режиме only_pir две недели подряд было ровно 100 % — расход вообще не виден. Наше правило: на щелочных батарейках смотреть на наклон графика (сколько процентов в сутки), на аккумуляторах — только на дату, когда начались ежедневные просадки. Это и есть сигнал менять.

Грабля 3: датчик «замерзает» без unavailable

Самая коварная: датчик может зависнуть в последнем состоянии — например, «есть человек», — и Home Assistant не пометит его недоступным. Свет или монитор так и останутся включёнными. Поэтому в нашей автоматизации для кабинета «живость» датчика проверяется отдельно: обновлялся ли у него уровень сигнала (LQI) за последние 10 минут. Если нет — автоматизация ничего не трогает и пишет в Telegram.

Грабля 4: радар на улице ловит ветки

mmWave на открытой террасе реагирует на качающиеся ветки и листья. Поэтому там fading_time 60 секунд и страховка в автоматизации: свет выключается через 10 минут, даже если датчик продолжает считать, что кто-то есть.

Датчик присутствия для включения света

Наша автоматизация для террасы. Включает свет, если кто-то появился и освещённость ниже 90 лк, выключает через минуту после ухода, а на случай ложных срабатываний — через 10 минут в любом случае:

alias: "Терраса: свет по присутствию"
triggers:
  - trigger: state
    entity_id: binary_sensor.terrace_presence
    to: "on"
    id: turn_on
  - trigger: state
    entity_id: binary_sensor.terrace_presence
    to: "off"
    for: "00:01:00"
    id: turn_off
  - trigger: state
    entity_id: light.terrace
    to: "on"
    for: "00:10:00"
    id: safety_off
actions:
  - choose:
      - conditions:
          - condition: trigger
            id: turn_on
          - condition: numeric_state
            entity_id: sensor.terrace_illuminance
            below: 90
        sequence:
          - action: light.turn_on
            target: {entity_id: light.terrace}
      - conditions:
          - condition: trigger
            id: [turn_off, safety_off]
          - condition: state
            entity_id: light.terrace
            state: "on"
        sequence:
          - action: light.turn_off
            target: {entity_id: light.terrace}
mode: restart

Обратите внимание на mode: restart и на for у триггера выключения: без них свет будет гаснуть, пока человек ещё на месте. Почему — разобрали на тесте в статье автоматизация в Home Assistant.

Монитор по присутствию — с защитой от зависшего датчика

Вторая автоматизация сложнее. Монитор в кабинете включён, пока человек в комнате, и выключается через минуту после ухода. Если датчик пропал или «замёрз», автоматизация не трогает розетку и присылает уведомление. Розетке даётся три попытки, а каждые 5 минут и при запуске Home Assistant состояние сверяется заново:

alias: "Монитор по присутствию"
triggers:
  - trigger: state
    entity_id: binary_sensor.office_presence
    to: "on"
    id: presence
  - trigger: state
    entity_id: binary_sensor.office_presence
    from: "on"
    to: "off"
    for: {minutes: 1}
    id: presence
  - trigger: state
    entity_id: binary_sensor.office_presence
    to: [unavailable, unknown]
    for: {minutes: 2}
    id: sensor_lost
  - trigger: template
    value_template: >-
      {% set l = states.sensor.office_presence_lqi %}
      {{ l is none or (now() - l.last_reported) > timedelta(minutes=10) }}
    id: sensor_lost
  - trigger: time_pattern
    minutes: /5
    id: reconcile
  - trigger: homeassistant
    event: start
    id: reconcile
actions:
  - variables:
      tid: "{{ trigger.id | default('manual') }}"
      pres: "{{ states('binary_sensor.office_presence') }}"
      sensor_ok: >-
        {% set l = states.sensor.office_presence_lqi %}
        {{ pres in ['on','off'] and l is not none
           and (now() - l.last_reported) < timedelta(minutes=10) }}
      want: >-
        {% if not sensor_ok %}keep
        {% elif pres == 'on' %}on
        {% elif now() - states.binary_sensor.office_presence.last_changed >= timedelta(minutes=1) %}off
        {% else %}keep{% endif %}
  - if:
      - condition: template
        value_template: "{{ tid == 'sensor_lost' and not sensor_ok }}"
    then:
      - action: notify.example_telegram
        data:
          message: "Датчик присутствия не отвечает — монитор управляется вручную."
  - condition: template
    value_template: >-
      {{ want in ['on','off'] and states('switch.monitor_plug') in ['on','off']
         and states('switch.monitor_plug') != want }}
  - repeat:
      sequence:
        - action: "switch.turn_{{ want }}"
          continue_on_error: true
          target: {entity_id: switch.monitor_plug}
        - wait_template: "{{ is_state('switch.monitor_plug', want) }}"
          timeout: "00:00:15"
      until:
        - condition: template
          value_template: "{{ is_state('switch.monitor_plug', want) or repeat.index >= 3 }}"
mode: single

Названия объектов и способ уведомления в примерах условные — подставьте свои. Как настроить отправку в Telegram и почему не стоит полагаться на общее notify.notify — в статье про уведомления Home Assistant.

Что выбрать

  • Комната, где сидят подолгу (кабинет, кухня, гостиная) — mmWave от сети. Видит неподвижного человека, зона настраивается.
  • Проход, коридор — PIR или PIR + радар на батарейках. Сидеть там никто не будет, а точную зону придётся настраивать наклоном и шторкой.
  • Улица — радар с большим fading_time и обязательной страховкой по времени.
  • Аккумуляторы вместо батареек — можно, но не верьте процентам.

Если Home Assistant ещё не стоит — начните с установки Home Assistant.

Данные — наш Home Assistant 2026.10 с Zigbee2MQTT и ZHA, замеры с апреля по октябрь 2026 года. Проверено 21 октября 2026 года.

1 / 1
Оцените статью
Да будет Интернет!