↩️ Назад

Категории

Hermes-агент настроит Zigbee2MQTT на Raspberry Pi за тебя

12.06.2026 | Статья из категории: IOT умный дом

🤖 INFRA как разговор

Hermes-агент: настройка Zigbee2MQTT
и Sonoff на Raspberry Pi

🕒 15 минут на чтение • опыт реальной настройки 🔧 умный дом на PHP + БД + MQTT

Ты уже знаешь: Hermes — это не очередной чат-бот, а LLM-агент с долговременной памятью и доступом к shell. Именно он берёт на себя грязную работу: установку, конфигурацию, отладку Zigbee2MQTT и Mosquitto. А твоя задача — просто описать желаемое состояние умного дома. Дальше Hermes сам подключится по SSH к Raspberry Pi и сделает всё чисто, документируя каждый шаг.

В этой статье я покажу реальный промпт-диалог с агентом, который разворачивает Zigbee-шлюз с адаптером Sonoff (CC2652P или Zigbee 3.0), настраивает MQTT-брокер и готовит инфраструктуру под твой уникальный «клон» умного дома — PHP + аналитика через БД.

💡 Философия: автоматика и аналитика живут в базе данных, а команды уходят в Mosquitto. Hermes ничего не ломает, он только готовит «железную» обвязку Zigbee → MQTT. Всё остальное — твой код.

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

  • Raspberry Pi 3/4/5 (или Zero 2 W) — на борту Raspberry Pi OS Lite (64bit)
  • USB-адаптер Zigbee: Sonoff ZBDongle-E (рекомендую) или Sonoff ZBDongle-P
  • USB-удлинитель (обязательно, чтобы избежать помех USB 3.0)
  • Hermes-агент (запущен на твоём основном ПК или VPS с доступом к SSH Pi)
  • Цель: чтобы zigbee2mqtt.conf и mosquitto работали, и любые датчики (Aqara, Ikea, Tuya) светились в MQTT топиках.

🔐 Шаг 1. Готовим Raspberry Pi для удалённого управления

Hermes должен заходить без паролей и знать IP. Выполни один раз руками (или скажи агенту):

# на Raspberry Pi (или через imager)
sudo raspi-config → Interface Options → SSH → Включить

# создаём ключ на стороне Hermes и копируем
ssh-copy-id pi@192.168.1.XXX

# проверяем
ssh pi@192.168.1.XXX "uname -a"

Hermes запоминает окружение — после первого успешного входа он сам будет знать, куда подключаться.

🤖 Диалог с Hermes: установка Mosquitto + Zigbee2MQTT

Ниже — реальный пример промпта, который ты отправляешь агенту. Hermes сам разбивает на шаги, выполняет команды, проверяет результат и запоминает прогресс.

> Промпт для Hermes:
"У меня Raspberry Pi по адресу 192.168.1.100, пользователь pi.
Подключись по SSH, установи и настрой:
1. Mosquitto MQTT брокер (порт 1883, слушать локально и с моего ПК)
2. Node.js 20.x и npm
3. Zigbee2MQTT последней стабильной версии
4. Адаптер Sonoff (USB) — должен быть виден как /dev/ttyACM0 или /dev/ttyUSB0
5. Конфигурация zigbee2mqtt: MQTT сервер localhost:1883, base_topic: zigbee2mqtt
6. frontend порт 8080 для отладки
7. Автозапуск через systemctl для mosquitto и zigbee2mqtt

После каждого шага проверяй и выводи статус. Используй память, чтобы не повторять команды."

📋 Что Hermes делает внутри (по шагам)

Агент выполняет shell-команды и комментирует их в логе. Ты увидишь примерно такую сессию:

🤖 [Hermes] → Обновление системы и установка Mosquitto
$ ssh pi@192.168.1.100 "sudo apt update && sudo apt install -y mosquitto mosquitto-clients"

🤖 [Hermes] → Включаем MQTT на автозапуск и открываем порт (firewall не блокирует)
$ ssh pi@192.168.1.100 "sudo systemctl enable mosquitto && sudo systemctl restart mosquitto"

🤖 [Hermes] → Устанавливаю Node.js 20 (официальный репозиторий)
$ ssh pi@192.168.1.100 "curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash - && sudo apt install -y nodejs"

🤖 [Hermes] → Клонирую Zigbee2MQTT в /opt/zigbee2mqtt
$ ssh pi@192.168.1.100 "sudo git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt && sudo chown -R pi:pi /opt/zigbee2mqtt"

🤖 [Hermes] → Установка зависимостей npm
$ ssh pi@192.168.1.100 "cd /opt/zigbee2mqtt && npm ci"

🤖 [Hermes] → Проверка USB-адаптера Sonoff
$ ssh pi@192.168.1.100 "ls -l /dev/serial/by-id/ | grep -i sonoff"
Результат: usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_XXXX -> ../../ttyACM0

🤖 [Hermes] → Генерация конфига configuration.yaml
(пишет файл /opt/zigbee2mqtt/data/configuration.yaml)
Готовый конфиг Zigbee2MQTT (Sonoff + локальный MQTT), который создаст Hermes:
# /opt/zigbee2mqtt/data/configuration.yaml
homeassistant: false
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://localhost:1883
  user: ''
  password: ''
serial:
  port: /dev/ttyACM0
  adapter: ezsp  # для Sonoff ZBDongle-E (для -P используй 'deconz')
frontend:
  port: 8080
advanced:
  channel: 20
  pan_id: 6754
  network_key: GENERATE

🔌 Адаптер Sonoff: устранение проблем с доступом

Hermes сам может добавить правило udev, чтобы не приходилось каждый раз менять права:

🤖 [Hermes] → исправляю права доступа к последовательному порту
$ ssh pi@192.168.1.100 "echo 'SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE=\"0666\", SYMLINK+=\"zigbee\"' | sudo tee /etc/udev/rules.d/99-zigbee.rules"
$ ssh pi@192.168.1.100 "sudo udevadm control --reload-rules && sudo udevadm trigger"
        

После этого адаптер Sonoff всегда доступен как /dev/zigbee — удобно и предсказуемо.

🧪 Проверка и запуск

Hermes запустит сервисы и проверит, что MQTT получает данные от Zigbee2MQTT:

🤖 [Hermes] → создаю systemd-сервис для zigbee2mqtt
$ ssh pi@192.168.1.100 "sudo tee /etc/systemd/system/zigbee2mqtt.service > /dev/null" <
🧠 Память Hermes запомнит: какой конфиг использован, какая версия прошивки на Sonoff, и при следующем диалоге сможет предложить обновление Zigbee2MQTT или ротацию network key.

🏠 Интеграция с твоим PHP + БД + MQTT-клоном

После работы Hermes у тебя в системе появляются MQTT-топики для каждого Zigbee-датчика. Твой велосипед на PHP слушает их через php-mqtt/client или просто пишет в базу:

<?php
// пример консьюмера, который сохраняет температуру в PostgreSQL
$loop = React\EventLoop\Loop::get();
$client = new PhpMqtt\Client\MQTTClient('192.168.1.100', 1883, $loop);
$client->subscribe('zigbee2mqtt/0x00158d0001a2b3c4', function ($topic, $message) {
    $data = json_decode($message, true);
    $pdo->prepare("INSERT INTO sensor_data (sensor_id, temp, humidity, battery) VALUES (?, ?, ?, ?)")
        ->execute([$data['device_id'], $data['temperature'], $data['humidity'], $data['battery']]);
}, 0);
$client->loop();

А команды на включение розетки или лампы отправляешь обратно в MQTT через топик zigbee2mqtt/FRIENDLY_NAME/set.

⚠️ Важное замечание про Sonoff USB и USB-удлинитель: Agent Hermes предупредит тебя, если увидит ошибки радиопомех. Обязательно используй удлинитель 30+ см, иначе Zigbee датчики будут «отваливаться».

🧰 Что Hermes делает, если что-то идёт не так?

Благодаря долговременной памяти агент не «забывает» предыдущие попытки. При ошибке:

  • 🔍 Проверяет journalctl -u zigbee2mqtt -n 50
  • 📌 Сравнивает порты: lsusb vs конфиг
  • 🔁 Перезапускает службы в правильном порядке (mosquitto → zigbee2mqtt)
  • 📄 Предлагает скорректировать параметры адаптера (например, сменить adapter с ezsp на zstack)

Ты просто описываешь проблему словами: «Hermes, Zigbee2MQTT не видит Sonoff, выдает permission denied» — и агент сам лечит права udev.

🧠 Заключение: ИТ как разговор с памятью

С Hermes настройка Zigbee-шлюза под PHP-умный дом перестаёт быть «квестом по гуглению ошибок». Агент не только исполняет команды, но и помнит архитектуру твоего «клона»: ему можно один раз объяснить, что ты используешь PostgreSQL, а команды в MQTT отправляешь через кастомный скрипт send.php. И при следующих задачах (обновить конфиг, добавить новый датчик) он будет действовать в рамках твоей парадигмы.

Попробуй такой подход — и ты увидишь, как обычный Raspberry Pi превращается в управляемого цифрового ассистента, а не «чёрный ящик с непонятными логами».

🚀 Что дальше? Попроси Hermes «добавить поддержку групповых команд на выключение всех розеток по Zigbee» — он сгенерирует и настройки, и пример кода на PHP.



Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога | 📡 Подписаться на RSS

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA