Категории

Автоматизация IoT: как избежать засорения эфира и лишних команд

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

Цель: предотвратить отправку лишних MQTT-команд, когда устройство уже находится в нужном состоянии (например, повторная отправка {"state_l3":"OFF"} каждую секунду).

Основное изменение

В блоке обработки триггерных правил (те, что с условиями вроде temperature > 25) добавлена проверка через существующую функцию shouldSkipAction().

Где именно

Найдите в файле цикл:

// 🔍 Проверяем триггерные правила через кэш $sensorData (БЕЗ запросов!)
foreach ($rules as $rule) {
    if ($rule['schedule_type'] !== 'none') continue;
    ...

Внутри этого цикла, после проверки условия (if ($condMet)), была простая конструкция:

if ($condMet) {
    echo "🎉 Сработало правило: " . $rule['name'] . "\n";
    handleAction($rule);
}

Она заменена на:

if ($condMet) {
    // Проверяем, нужно ли вообще отправлять команду
    if (shouldSkipAction($rule, $pdo)) {
        echo "⏭️ Устройство уже в нужном состоянии — пропускаем правило: " . $rule['name'] . "\n";
    } else {
        echo "🎉 Сработало правило: " . $rule['name'] . "\n";
        handleAction($rule);
    }
}

Как это работает

Результат

Теперь правила типа «если температура > 25 — выключи реле» срабатывают только один раз, пока состояние не изменится. Это:

Важно

Для корректной работы убедитесь, что:

Комментарии

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

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

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

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

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