Категории

Как я сделал систему логики автоматизации для IoT-проекта

2025-09-20 12:18:55 | IOT умный дом
Как я сделал систему логики автоматизации для IoT-проекта

Как я сделал систему логики автоматизации для IoT-проекта

Привет! Сегодня хочу рассказать, как я реализовал ядро системы автоматизации для своего IoT-проекта — а именно, два ключевых компонента:

Это не про весь “умный дом”, а именно про логику принятия решений: когда, почему и как система должна включить свет, обогреватель или закрыть шторы.

Зачем это нужно?

В IoT-системах устройства генерируют данные (температура, движение, открытие двери), а другие устройства должны на них реагировать. Но реакция должна быть умной:

Для этого нужен “мозг” — и я его сделал на PHP + MySQL + MQTT.

Структура БД: таблица automations

Всё хранится в одной таблице — automations. Вот ключевые поля:

Таблица спроектирована так, чтобы одно правило могло охватывать множество сценариев — от простого “включил-выключил” до сложных сцен с подтверждениями, расписаниями и скриптами.

logic.php — веб-интерфейс администратора

Это PHP-страница с формой, где можно создавать, редактировать и удалять правила. Ключевые фичи:

1. Тип активации

2. Условия

Можно выбрать один из двух типов:

Условие работает и для триггеров, и для расписания. Например: “Каждый день в 8:00 включать обогрев, ЕСЛИ температура < 10”.

3. Действия

4. Зависимости

Дополнительный “флаг безопасности”: правило сработает только если другой топик имеет определённое значение. Например: “Включить полив, только если датчик дождя == сухо”.

5. Безопасность скриптов

Скриптовые условия выполняются через безопасный интерпретатор:

mqtt_listener.php — “движок” автоматизации

Это фоновый PHP-скрипт, который работает в бесконечном цикле. Он:

  1. Раз в 5 секунд перезагружает активные правила из БД.
  2. Раз в минуту проверяет, не наступило ли время по расписанию.
  3. Постоянно проверяет, выполнились ли условия для триггерных правил.
  4. Отправляет команды через mosquitto_pub.
  5. Ждёт подтверждений от устройств.
  6. Выполняет отложенные действия (если задана задержка).

Ключевые функции:

evaluateRuleCondition($rule, $pdo)

Проверяет, истинно ли условие правила — простое или скриптовое. Для скриптов использует тот же безопасный механизм, что и в logic.php.

handleAction($rule)

Выполняет действие с учётом задержки и подтверждения. Если указана delay_seconds — действие откладывается. Если указан confirmation_topic — система ждёт подтверждения и может повторять попытки.

checkPendingConfirmations($pdo)

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

Как это работает вместе?

  1. Ты заходишь в logic.php, создаёшь правило: “Если температура < 10 — включить обогрев”.
  2. Правило сохраняется в БД.
  3. mqtt_listener.php подхватывает его при следующей перезагрузке.
  4. Каждые 5 секунд он проверяет: а не изменилась ли температура? А не наступило ли время по расписанию?
  5. Если условие выполнилось — отправляет команду в MQTT.
  6. Если нужно — ждёт подтверждения.
  7. Логирует всё в консоль (можно легко перенаправить в файл).

Что дальше?

Это основа. В будущем можно добавить:

Заключение

Я не использовал готовые платформы вроде Node-RED или Home Assistant — мне хотелось полного контроля и понимания “под капотом”. PHP + MySQL + MQTT — оказалось, отличный стек для этого.

Система получилась гибкой, расширяемой и безопасной. И самое главное — она работает 😊

Код открыт, структура понятна — приходите, задавайте вопросы, кастомизируйте под себя. Умный дом — это не про покупку коробки, а про создание того, что действительно нужно именно тебе.

P.S. В следующей статье разберу код построчно — если хотите глубже понять, как всё устроено “под капотом”

🔐 Код пока в секрете!

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

👉 Хотите файлы logic.php и mqtt_listener.php?
Пишите в комментариях:

Самые активные и интересные комментаторы получат код в личку 🎁
(А потом, возможно, сделаю отдельную статью с построчным разбором!)

Комментарии

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

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

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

Важно: Блог-эксперимент

Внимание: Cтатьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.

Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


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