Категории

Сценарии умной вентиляции: логика для самописного Home Assistant

2025-08-14 10:23:13 | 2040
Сценарии умной вентиляции для самописного Home Assistant

MQTT, Zigbee, PHP, MySQL. Без YAML. Только сценарии.

🔧 Система: что есть

  • Датчики: DHT22 (T, RH), MH-Z19B (CO₂), датчик открытия ворот, датчик протечки, Zigbee-кнопка
  • Исполнительные: Вентиляторы (приток/вытяжка), сервоприводы (байпас, пассивный клапан), фильтр (HEPA+уголь)
  • MQTT топики:
    • garage/sensor/temperature
    • garage/sensor/humidity
    • garage/sensor/co2
    • garage/door/state
    • outside/air_quality_pm25
    • outside/weather/temp
  • API: OpenWeatherMap, AQICN (через PHP-запросы раз в 10 мин)
  • Режимы: passive, filtered, recuperation, bypass, emergency

📌 Сценарий 1: Пассивная вентиляция (самотёк)

Условия включения:

  • Разница T_гараж - T_улица > 15 °C
  • PM2.5 < 25 µg/m³
  • CO₂ < 800 ppm
  • Ворота закрыты
  • Нет дождя (по API)

Действия:

  1. MQTT: garage/vent/mode → passive
  2. Открыть пассивный клапан: servo/passive_damper → 100
  3. Закрыть байпас: servo/bypass_damper → 0
  4. Выключить все вентиляторы: fan/intake → off, fan/exhaust → off

Частота проверки: каждые 10 минут

📌 Сценарий 2: Фильтрация (загрязнение воздуха)

Условия включения:

  • PM2.5 > 35 µg/m³ (из API)
  • ИЛИ дым на улице (по API или ручной сигнал)
  • ИЛИ пожар в регионе (wildfire_alert = 1)

Действия:

  1. MQTT: garage/vent/mode → filtered
  2. Закрыть пассивный клапан: servo/passive_damper → 0
  3. Включить фильтр: filter/hepa → on
  4. Включить приток: fan/intake → on (50%)
  5. Включить вытяжку: fan/exhaust → on (50%)

Выключение: когда PM2.5 < 20 и прошло 30 мин

📌 Сценарий 3: Рекуперация (зима, тепло)

Условия включения:

  • T_улица < +5 °C
  • CO₂ > 900 ppm
  • Ворота закрыты
  • Нет обмерзания (нет конденсата на дренаже ИЛИ T_выхода > -2 °C)

Действия:

  1. MQTT: garage/vent/mode → recuperation
  2. Открыть рекуператор: servo/bypass_damper → 0
  3. Включить вентиляторы: fan/intake → on, fan/exhaust → on (60–80%)
  4. Проверять каждые 5 мин: если дренаж = "протечка" → перейти в bypass

📌 Сценарий 4: Байпас (обход рекуператора)

Условия включения:

  • Ворота открыты
  • ИЛИ обмерзание (конденсат + T < -15 °C)
  • ИЛИ CO₂ > 1200 ppm (нужна быстрая вентиляция)

Действия:

  1. MQTT: garage/vent/mode → bypass
  2. Открыть байпас: servo/bypass_damper → 100
  3. Включить вытяжку на 100%
  4. Выключить приток (или включить на 30%, если нужно)

Вернуться в recuperation: если ворота закрыты, T_гараж - T_улица > 10 °C, нет льда

📌 Сценарий 5: Аварийный режим (CO₂, дым, взрыв)

Условия включения:

  • CO₂ > 1500 ppm
  • ИЛИ smoke_inside = 1
  • ИЛИ button_emergency = 1 (кнопка на стене)

Действия:

  1. MQTT: garage/vent/mode → emergency
  2. Открыть байпас: 100%
  3. Включить все вентиляторы: 100%
  4. Включить свет в гараже
  5. Отправить в Telegram: "АВАРИЯ: высокий CO₂ или дым!"
  6. Через 5 мин: если CO₂ < 800 → вернуться в предыдущий режим

📌 Сценарий 6: Летний режим (охлаждение от земли)

Условия включения:

  • T_гараж > T_улица + 8 °C
  • Влажность < 70%

Действия:

  1. MQTT: garage/vent/mode → ground_cooling
  2. Переключить приток на земляной теплообменник
  3. Включить приток и вытяжку на 70%
  4. Открыть вентиляцию в подвале

📌 Сценарий 7: Ночной режим (тихий, экономный)

Условия: 22:00 – 07:00 И нет движения

Действия:

  1. Если CO₂ < 900 → перейти в passive или off
  2. Если CO₂ > 900 → включить filtered на 30%
  3. Отключить все звуки и уведомления (кроме emergency)

⚙️ Как проверять условия (PHP-логика)

Пример псевдокода:

// Каждые 5–10 минут
$co2 = mqtt_get('garage/sensor/co2');
$pm25 = api_get('https://api.waqi.info/...');
$temp_diff = $inside_temp - $outside_temp;
$door_open = mqtt_get('garage/door/state');

if ($pm25 > 35) {
    set_mode('filtered');
} elseif ($temp_diff > 15 && $pm25 < 25 && $door_open == 'off') {
    set_mode('passive');
} elseif ($outside_temp < 5 && $co2 > 900) {
    set_mode('recuperation');
}
// ... и так далее
        

💾 Режимы в MySQL (пример таблицы)

CREATE TABLE vent_modes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    mode VARCHAR(20),           -- passive, filtered, recuperation...
    activated_at DATETIME,
    reason TEXT                 -- "high PM2.5", "temp diff >15"
);
        

Комментарии

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

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

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

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

Внимание: Cтатьи здесь сгенерированы нейросетью, пока не правил ошибки, только запустил его да и не до этого. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я реально делал минимум один раз. Серьёзно.
Сервера стоят, клиенты довольны, дата-центры не горят.
Это не просто копипаста — это опыт, выстраданный в бою, просто пересказанный через ИИ.
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

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


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