В предыдущих статьях мы собирали датчики сами: паяли 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 минут — данные передаются маленькими порциями во время пробуждений устройства.




