Zigbee-сеть на ферме: ESP32-C6, датчики Aqara и Sonoff за 6800 ₽

Фермозавр·9 апреля 2026 г.·11 мин чтения

Zigbee строит mesh-сеть сам: покупаете датчик, вставляете батарейку — он находит координатор. ESP32-C6 или USB-стик за 1200 ₽, десятки готовых датчиков от 200 ₽, автоматизация реле через MQTT — без пайки и Arduino.

Zigbee-сеть на ферме: ESP32-C6, датчики Aqara и Sonoff за 6800 ₽

В предыдущих статьях мы собирали датчики сами: паяли DHT22, подключали SX1278, ловили BLE-пакеты с Xiaomi. Сегодня — другой подход: берём готовые Zigbee-датчики Aqara, Sonoff и IKEA за 200–500 ₽, объединяем их в mesh-сеть и управляем через ESP32-C6 — новый чип от Espressif с нативной поддержкой Zigbee. Покупаете датчик, вставляете батарейку, он сам находит сеть. Без пайки, без прошивок, без Arduino IDE.

Что такое Zigbee и почему он интересен фермеру

Zigbee — беспроводной протокол на частоте 2.4 ГГц (та же, что WiFi), но заточенный под IoT: низкое энергопотребление, mesh-сеть и сотни устройств на одном координаторе.

Главные отличия от BLE и LoRa:

  • Mesh-сеть. Каждое сетевое устройство (роутер) ретранслирует пакеты соседям. Если один узел вышел из строя — сеть найдёт обходной путь. BLE так не умеет, LoRa — тоже (в P2P-режиме)
  • Огромная экосистема. Тысячи готовых устройств: датчики температуры, влажности, движения, протечки, дыма, кнопки, реле, розетки, диммеры. Всё работает из коробки
  • Батарея на 2 года. Zigbee-датчик end device спит 99.9% времени, просыпаясь на миллисекунды для отправки данных
  • Дальность: 30–100 метров. Прямая видимость — до 100 м. В помещении через стены — 10–30 м. Но mesh компенсирует: через 3 роутера сигнал пройдёт 200+ метров

Минус: на открытом поле Zigbee проигрывает LoRa (10 км). Zigbee — это протокол для зданий: теплицы, склады, хранилища, коровники, птичники. Там, где много стен и нужно много датчиков на малой площади.

ESP32-C6: координатор Zigbee-сети

Zigbee-сеть требует координатор — устройство, которое создаёт сеть, управляет адресами и маршрутами. Раньше для этого нужен был специальный стик (CC2531 или SONOFF ZBDongle-P за 1500 ₽). Теперь — ESP32-C6.

ESP32-C6 (не путать с обычным ESP32!) — новый чип с поддержкой IEEE 802.15.4 — физического уровня Zigbee. Плата ESP32-C6-DevKitC-1 стоит 500–700 ₽ и поддерживает одновременно:

  • WiFi 6 (2.4 ГГц)
  • Bluetooth LE 5.0
  • Zigbee 3.0 / Thread 1.3

Три радиопротокола на одном чипе за 600 ₽. ESP32-C6 может работать как Zigbee-координатор, при этом отправлять данные в InfluxDB по WiFi — без дополнительного железа.

Что понадобится

  • ESP32-C6-DevKitC-1 — координатор Zigbee-сети, 500–700 ₽
  • Zigbee-датчики — любые из совместимых (список ниже), от 200 ₽
  • USB-C кабель + блок питания — ESP32 работает постоянно, 200 ₽
  • Raspberry Pi (опционально) — если хотите Zigbee2MQTT + InfluxDB на одной плате

Рекомендуемые датчики для фермы

  • Aqara WSDCGQ11LM (400 ₽) — температура + влажность + давление. Батарея CR2032 на 2 года. Лучший по соотношению цена/точность
  • Sonoff SNZB-02D (350 ₽) — температура + влажность, экранчик, магнит. Аналог Xiaomi, но Zigbee вместо BLE
  • Aqara SJCGQ11LM (500 ₽) — датчик протечки. Кладёте на пол хранилища, при затоплении — алерт
  • Sonoff SNZB-03 (400 ₽) — датчик движения (PIR). Для охраны склада или подсчёта людей
  • Sonoff ZBMINI-L2 (600 ₽) — реле Zigbee, встраивается в подрозетник. Управление вентиляцией, освещением, насосами
  • IKEA VINDSTYRKA (1500 ₽) — датчик качества воздуха (PM2.5 + температура + влажность). Для зернохранилищ

Весь зоопарк подключается к одному координатору. Можно смешивать бренды — Zigbee 3.0 обратно совместим.

Вариант 1: ESP32-C6 как автономный координатор

Самый простой путь — прошить ESP32-C6 прошивкой от Espressif (ESP-Zigbee SDK) и написать обработчик на C. Но это сложно. Проще — использовать проект Tasmota с поддержкой Zigbee на ESP32-C6:

# Прошивка Tasmota32c6 через esptool.py:
pip install esptool
esptool.py --chip esp32c6 --port /dev/ttyUSB0 \
  write_flash 0x0 tasmota32c6-zigbee.factory.bin

После прошивки ESP32-C6 поднимает WiFi, веб-интерфейс и Zigbee-координатор. Датчики добавляются через веб — нажимаете «Permit Join», вставляете батарейку в Aqara, он появляется в списке за 10 секунд.

Tasmota отправляет данные по MQTT — подключаете к любому брокеру (Mosquitto на Raspberry Pi) и дальше в InfluxDB.

Вариант 2: Zigbee2MQTT + USB-координатор (рекомендуемый)

Более гибкий и надёжный путь — USB-стик координатор + Zigbee2MQTT на Raspberry Pi. Это де-факто стандарт для DIY Zigbee-сетей:

  • Координатор: SONOFF ZBDongle-E (ESP32-C6 внутри, 1200 ₽) или ITead ZBDongle-P (CC2652P, 1500 ₽). Втыкается в USB Raspberry Pi
  • Zigbee2MQTT: открытый софт, который превращает Zigbee-пакеты в MQTT-сообщения. Поддерживает 3000+ устройств
  • Mosquitto: MQTT-брокер
  • Telegraf: перекладывает MQTT-сообщения в InfluxDB

Установка на Raspberry Pi

# Mosquitto
sudo apt install -y mosquitto mosquitto-clients

# Zigbee2MQTT
sudo mkdir /opt/zigbee2mqtt
sudo chown pi:pi /opt/zigbee2mqtt
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
npm ci

# Конфигурация
cat > /opt/zigbee2mqtt/data/configuration.yaml << 'EOF'
homeassistant: false
permit_join: false
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://localhost
serial:
  port: /dev/ttyUSB0   # или /dev/ttyACM0 для ZBDongle-E
  adapter: ezsp        # для ESP32-C6 (ZBDongle-E)
  # adapter: zstack    # для CC2652 (ZBDongle-P)
frontend:
  port: 8080
advanced:
  network_key: GENERATE
  log_level: info
EOF

# Запуск
cd /opt/zigbee2mqtt && npm start

Веб-интерфейс Zigbee2MQTT доступен на http://PI_IP:8080. Нажимаете «Permit join (All)», подносите датчик — он появляется в списке. Присваиваете понятное имя: «Теплица 1», «Хранилище Север».

Telegraf: MQTT → InfluxDB

Zigbee2MQTT публикует данные в MQTT-топики вида zigbee2mqtt/Теплица_1. Telegraf подписывается и пишет в InfluxDB:

# /etc/telegraf/telegraf.d/zigbee.conf
[[inputs.mqtt_consumer]]
  servers = ["tcp://localhost:1883"]
  topics = ["zigbee2mqtt/+"]
  data_format = "json"
  tag_keys = ["device"]
  json_string_fields = ["action", "occupancy"]

  [inputs.mqtt_consumer.tags]
    source = "zigbee"

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "your-influx-token"
  organization = "farm"
  bucket = "sensors"
# Установка Telegraf
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.31.0-1_arm64.deb
sudo dpkg -i telegraf_1.31.0-1_arm64.deb
sudo systemctl enable --now telegraf

Теперь каждое обновление температуры от Aqara автоматически попадает в InfluxDB → Grafana. Без единой строчки кастомного кода.

Mesh-сеть: как Zigbee покрывает большие здания

В отличие от BLE (точка-точка) и LoRa (звезда), Zigbee строит mesh — каждое устройство с постоянным питанием (роутер) ретранслирует пакеты дальше:

                  30 м          30 м          30 м
[Координатор] ←→ [Реле-1] ←→ [Реле-2] ←→ [Датчик]
   (ESP32-C6)     (роутер)     (роутер)    (end device)
                                            Aqara в 90 м
                                            от координатора!

Zigbee-роутерами становятся устройства с постоянным питанием: реле, розетки, повторители. End device (датчики на батарейках) — только конечные точки, они не ретранслируют.

Стратегия для большого коровника (60 × 20 м): координатор у входа, по длине — 2 Sonoff-реле (они же управляют освещением), а датчики температуры/влажности развешаны через каждые 10 метров. Mesh гарантирует доставку даже через металлические перегородки.

Системd-сервисы: всё работает после перезагрузки

На Raspberry Pi должны автоматически стартовать три сервиса: Mosquitto, Zigbee2MQTT и Telegraf. Mosquitto и Telegraf уже настроены через systemctl enable. Для Zigbee2MQTT создаём сервис вручную:

# /etc/systemd/system/zigbee2mqtt.service
[Unit]
Description=Zigbee2MQTT
After=network-online.target mosquitto.service
Wants=network-online.target

[Service]
Type=simple
User=pi
WorkingDirectory=/opt/zigbee2mqtt
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now zigbee2mqtt

# Проверка:
journalctl -u zigbee2mqtt -f

Теперь после отключения электричества (а на ферме это бывает) Raspberry Pi перезагрузится и через 30 секунд вся цепочка заработает: Mosquitto → Zigbee2MQTT → Telegraf → InfluxDB → Grafana.

Практический пример: теплица с автовентиляцией

Разберём конкретный сценарий от начала до конца. Теплица 6 × 30 м, поликарбонат. Задачи:

  • Мониторинг температуры и влажности в 3 точках (начало, середина, конец)
  • Автоматическое включение вентилятора при >30°C
  • Алерт в Telegram при <3°C (заморозки)

Оборудование:

  • 3 × Sonoff SNZB-02D (температура+влажность) — 1050 ₽
  • 1 × Sonoff ZBMINI-L2 (реле для вентилятора) — 600 ₽
  • USB-координатор — уже есть на Pi

Настройка в Zigbee2MQTT: добавляем все 4 устройства, даём имена: greenhouse_begin, greenhouse_mid, greenhouse_end, fan_relay.

Автоматизация через MQTT: простой Python-скрипт на Raspberry Pi подписывается на температуру и управляет реле:

#!/usr/bin/env python3
"""Автовентиляция теплицы по Zigbee."""
import json
import paho.mqtt.client as mqtt

TEMP_THRESHOLD_ON = 30.0   # Включить вентилятор
TEMP_THRESHOLD_OFF = 26.0  # Выключить (гистерезис)
SENSORS = ["greenhouse_begin", "greenhouse_mid", "greenhouse_end"]
FAN_TOPIC = "zigbee2mqtt/fan_relay/set"

temps = {}

def on_message(client, userdata, msg):
    topic = msg.topic
    device = topic.split("/")[1]
    if device not in SENSORS:
        return
    
    data = json.loads(msg.payload)
    temp = data.get("temperature")
    if temp is None:
        return
    
    temps[device] = temp
    avg_temp = sum(temps.values()) / len(temps)
    
    if avg_temp > TEMP_THRESHOLD_ON:
        client.publish(FAN_TOPIC, json.dumps({"state": "ON"}))
        print(f"FAN ON (avg={avg_temp:.1f}°C)")
    elif avg_temp < TEMP_THRESHOLD_OFF:
        client.publish(FAN_TOPIC, json.dumps({"state": "OFF"}))
        print(f"FAN OFF (avg={avg_temp:.1f}°C)")

client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("zigbee2mqtt/+")
client.loop_forever()

Гистерезис 4°C (включение на 30°C, выключение на 26°C) — чтобы реле не щёлкало каждую минуту. Средняя температура по трём датчикам сглаживает локальные перепады.

Zigbee vs BLE vs LoRa: когда что выбирать

Мы покрыли все три протокола в серии статей. Вот шпаргалка:

  • LoRa (статьи #14, #15) — открытое поле, 1–10 км, мало данных (температура раз в 15 мин), батарея на год. Идеально для полевых датчиков
  • BLE (статья #16) — помещения до 30 м, готовые Xiaomi-датчики без пайки, батарея 1.5 года. Для небольших теплиц и рассадников
  • Zigbee (эта статья) — помещения и территории до 200 м (через mesh), огромный выбор устройств (датчики + реле + кнопки), батарея 2 года. Для крупных теплиц, складов, коровников, птичников

Правило простое: чем дальше от здания — тем больше нужен LoRa. Чем больше устройств в здании — тем лучше Zigbee. BLE — золотая середина для 5–10 датчиков без mesh.

Автоматизация: не только мониторинг

Zigbee — не просто сбор данных. Через Zigbee-реле можно управлять оборудованием напрямую из Zigbee2MQTT или через правила в Grafana:

  • Вентиляция теплицы: температура > 32°C → включить Sonoff ZBMINI-L2 (вентилятор)
  • Антифризная защита: температура < 3°C → включить обогреватель. Спасает рассаду весной
  • Освещение по движению: датчик PIR → включить свет на складе на 5 минут
  • Алерт о протечке: датчик протечки → Telegram + отключить насос (через реле)

Правила прописываются в Zigbee2MQTT через файл configuration.yaml или через MQTT-команды из Node-RED, если хотите визуальный редактор.

Безопасность Zigbee-сети

Zigbee 3.0 шифрует весь трафик AES-128 по умолчанию (в отличие от LoRa, где мы добавляли шифрование вручную). Но есть нюансы:

  • Не оставляйте permit_join открытым. Включайте только на время добавления нового устройства, затем выключайте. Иначе любой с Zigbee-устройством подключится к вашей сети
  • Сетевой ключ. Zigbee2MQTT генерирует случайный ключ при первом запуске (директива GENERATE). Не меняйте его — все устройства потребуют повторного сопряжения
  • Веб-интерфейс. Zigbee2MQTT frontend не имеет аутентификации по умолчанию. Либо добавьте nginx с паролем, либо не открывайте порт 8080 наружу

Стоимость: Zigbee-сеть для коровника

Пример: коровник 60 м, 8 точек мониторинга + управление вентиляцией:

  • SONOFF ZBDongle-E (координатор) — 1200 ₽
  • 6 × Aqara WSDCGQ11LM (температура + влажность) — 6 × 400 ₽ = 2400 ₽
  • 2 × Aqara SJCGQ11LM (протечка) — 2 × 500 ₽ = 1000 ₽
  • 3 × Sonoff ZBMINI-L2 (реле — вентиляция + свет) — 3 × 600 ₽ = 1800 ₽
  • 1 × Sonoff SNZB-03 (движение) — 400 ₽

Итого: 6800 ₽ за 12 устройств с mesh, автоматизацией и мониторингом. Промышленная система KNX/Modbus на те же задачи — от 200 000 ₽.

Добавьте Raspberry Pi (3000 ₽) с InfluxDB + Grafana + Zigbee2MQTT из наших предыдущих статей, и за 10 000 ₽ получается полноценная система мониторинга + управления. Платформы вроде ТерраКвант дополнят картину спутниковыми данными о полях — наземный Zigbee и космические снимки вместе дают фермеру полную видимость.

Что дальше

Zigbee закрывает мониторинг зданий. Вместе с LoRa (поля) и BLE (теплицы) — три протокола покрывают все сценарии. Дальше можно двигаться в сторону автоматизации: Node-RED для визуальных правил «если-то», Telegram-бот для удалённого управления, или ESP-NOW для сверхбыстрого mesh внутри одной теплицы. Но база уже есть — датчики стоят, данные текут, графики рисуются, алерты приходят. Всё за копейки и без подрядчиков.

Отладка: датчик не подключается

Типичные проблемы при развёртывании Zigbee-сети и их решения:

Датчик не появляется при сопряжении. Убедитесь, что «Permit Join» включён в Zigbee2MQTT. У Aqara-датчиков — зажмите кнопку сброса на 5 секунд (мигнёт 3 раза). У Sonoff — зажмите кнопку до быстрого мигания. Не все датчики сопрягаются с первого раза — поднесите датчик ближе к координатору (в пределах 2 метров).

Датчик подключился, но не шлёт данные. Подождите 5–10 минут — Zigbee end device отправляет данные не каждую секунду, а по событиям (изменение температуры на 0.1°C). Проверьте в Zigbee2MQTT вкладку устройства — поле «Last seen».

Координатор не найден (/dev/ttyUSB0 отсутствует). Проверьте: ls /dev/ttyUSB* /dev/ttyACM*. Для ZBDongle-E (ESP32-C6) — обычно /dev/ttyACM0. Добавьте пользователя pi в группу dialout: sudo usermod -aG dialout pi.

Zigbee2MQTT падает с ошибкой «adapter disconnected». USB-стик потерял контакт. Причины: плохой USB-кабель, нехватка питания (особенно если Pi питается от слабого БП и к USB подключено несколько устройств). Решение: качественный короткий USB-кабель + блок питания 5V 3A.

Реле Sonoff ZBMINI-L2 не срабатывает. Проверьте, что реле подключено к сети 220V (ему нужно питание для работы Zigbee-радио). Без 220V реле не работает даже как роутер. Также проверьте формат команды: {"state": "ON"}, а не {"state": "on"} (регистр важен для некоторых устройств).

Mesh не строится — далёкие датчики отваливаются. Zigbee-mesh работает только через роутеры — устройства с постоянным питанием. Датчики на батарейках (end device) не ретранслируют. Расставьте Sonoff-реле или IKEA-повторители вдоль маршрута. В Zigbee2MQTT на вкладке «Map» видна топология сети — убедитесь, что между координатором и дальним датчиком есть хотя бы один роутер.

Обновление прошивок датчиков через OTA

Zigbee2MQTT поддерживает обновление прошивок Zigbee-устройств по воздуху (OTA). Это важно для безопасности и исправления багов. В configuration.yaml:

ota:
  update_available_on_start: true
  disable_automatic_update_check: false

Когда доступно обновление — Zigbee2MQTT покажет иконку в интерфейсе. Нажимаете «Update» — прошивка передаётся по Zigbee, датчик перезагружается. Aqara и Sonoff регулярно выпускают обновления. Для end device (батарейные) обновление может занять 30–60 минут — данные передаются маленькими порциями во время пробуждений устройства.

Источник: Фермозавр

💬 Комментарии

Чтобы оставить комментарий, войдите или зарегистрируйтесь

Загрузка комментариев...

Похожие статьи