ГлавнаяАкадемияОсновы умного дома → Сценарии для офиса: Управление освещением

Сценарии для офиса: Управление освещением

Урок 4 · Основы умного дома · 30 мин · theory

Введение в автоматизацию освещения в офисе

Автоматизация освещения в современных офисных пространствах перестала быть элементом роскоши и стала насущной необходимостью, продиктованной тремя основными факторами: энергоэффективностью, комфортом сотрудников и соблюдением нормативных требований. Грамотно спроектированная система не только снижает операционные расходы на электроэнергию на 30-60%, но и повышает продуктивность, создавая благоприятную рабочую среду.

Цели автоматизации:
  • Энергоэффективность. Это основная движущая сила внедрения. Свет, оставленный в пустых переговорных, складах или кабинетах в нерабочее время, составляет значительную часть ненужных расходов. Автоматизация позволяет выключать освещение при отсутствии людей и гибко управлять его яркостью, экономя каждый киловатт-час.
  • Комфорт сотрудников. Правильное освещение напрямую влияет на самочувствие и производительность. Слишком яркий или тусклый свет вызывает усталость глаз и головные боли. Автоматические системы поддерживают оптимальный уровень освещенности, плавно изменяя яркость искусственного света в зависимости от естественного, а также предоставляют пользователям возможность вызывать предустановленные световые сцены (например, "Презентация", "Сконцентрированная работа").
  • Соответствие нормам. В России действуют санитарные правила и нормы, такие как СанПиН 1.2.3685-21, которые устанавливают минимальные требования к освещенности рабочих мест. Для офисов, где ведется работа с документами и на компьютерах, этот уровень составляет не менее 300-500 люкс. Система автоматизации обеспечивает постоянный мониторинг и поддержание этих значений, что особенно важно при проверках со стороны надзорных органов.
  • Для реализации этих целей в профессиональных инсталляциях используются проверенные промышленные технологии:

    > 📋 Ключевые понятия:

    > * Энергоэффективность: Мероприятия, направленные на рациональное использование энергетических ресурсов.

    > * Датчики присутствия: Устройства, определяющие наличие людей в помещении. В отличие от датчиков движения, они способны детектировать даже мелкие движения сидящего за столом человека.

    > * Световая сцена: Заранее настроенная комбинация состояний (вкл/выкл, яркость) нескольких групп светильников, вызываемая одной командой.

    Сердцем всей системы является наш контроллер на базе Linux (Debian). Он собирает данные со всех датчиков и отправляет команды исполнительным устройствам. Вся логика, описывающая сценарии, реализуется в среде визуального программирования Node-RED. Это позволяет инженеру не писать сложный код, а "собирать" алгоритмы из готовых функциональных блоков, что многократно ускоряет пусконаладку и упрощает последующее обслуживание системы.

    ---

    Практика: Управление по датчикам присутствия

    Это самый базовый и наиболее эффективный сценарий для экономии электроэнергии. Его логика проста: "Есть человек — есть свет, нет человека — нет света". Он идеально подходит для зон с переменной посещаемостью: коридоров, санузлов, переговорных, кладовых и кухонь.

    Подключение датчиков и исполнительных устройств

    Для реализации сценария нам понадобятся датчики и исполнительные устройства (реле или DALI-драйверы).

  • Датчики присутствия. Рекомендуется использовать комбинированные датчики, сочетающие пассивный инфракрасный (PIR) и микроволновый (MW) сенсоры. Это минимизирует ложные срабатывания.
  • * Простой датчик с выходом "сухой контакт": Подключается к любому универсальному входу (UI) контроллера. Замыкание или размыкание контактов сигнализирует о движении.

    * Многофункциональный Modbus-датчик (например, WB-MSW v.3): Подключается к шине RS-485. Преимущество в том, что по двум проводам он передает в контроллер целый набор данных: факт движения, уровень освещенности, температуру, влажность и даже уровень шума.

  • Исполнительные устройства.
  • * Реле контроллера: Используются для коммутации недиммируемых групп света. Выход реле (например, `RL-01`) подключается в разрыв фазного провода, идущего к светильникам.

    * DALI-драйверы: Для диммируемых светильников. Управление происходит по шине DALI.

    Разбор логики в Node-RED

    Рассмотрим классический алгоритм с задержкой выключения. Задача: при обнаружении движения свет включается мгновенно. Если движение прекращается, система должна подождать некоторое время (например, 5 минут) и только потом выключить свет. Если в течение этого времени движение возобновится, таймер должен быть сброшен.

    Для этого идеально подходит узел `trigger`.

    ASCII-схема потока (`FLOW-OFFICE-LIGHT-001`):
    [mqtt in]------------>[trigger]------------>[function]------------>[mqtt out]
    

    (датчик движения) (задержка 5 мин) (формирование команды) (включение/выключение)

    Настройка узлов:
  • `mqtt in` (Получение данных от датчика):
  • * Topic: `/devices/wb-msw-v3_45/controls/Motion` (адрес вашего датчика WB-MSW).

    * Output: `a parsed JSON object` (если датчик отправляет JSON, иначе `a string`). Датчик WB-MSW отправляет `1` при движении и `0` при его отсутствии.

  • `trigger` (Реализация задержки):
  • * Send: `1` (сообщение, которое будет отправлено на включение света).

    * then send: `0` (сообщение для выключения света).

    * after: `5` minutes (время задержки).

    * Extend delay if new message arrives: `✓` (галочка должна быть установлена. Это ключевая настройка для сброса таймера).

  • `function` (Формирование команды для реле):
  • * Name: `Prepare Relay Command`

    * Код:

            // Входящий msg.payload будет '1' или '0' от узла trigger

    const command = msg.payload;

    // Меняем топик на топик управления реле

    msg.topic = "/devices/wb-mr6c_21/controls/K1/on";

    // Устанавливаем payload в виде строки, как требует драйвер реле

    msg.payload = command.toString();

    // Для отладки добавляем статус

    if (command == 1) {

    node.status({ fill: "green", shape: "dot", text: "Свет ВКЛ" });

    } else {

    node.status({ fill: "red", shape: "dot", text: "Свет ВЫКЛ" });

    }

    return msg;

  • `mqtt out` (Отправка команды):
  • * Topic: `оставить пустым` (будет взят из `msg.topic`).

    > 💡 Подсказка: Чтобы свет не включался днем, когда и так достаточно светло, можно добавить простую проверку. Перед узлом `trigger` поставьте узел `switch`, который будет пропускать сообщения о движении (`1`) только если значение с датчика освещенности (из топика `/devices/wb-msw-v3_45/controls/Illuminance`) ниже определенного порога (например, 300 люкс).

    Реализация "коридорного режима"

    В длинных коридорах или open-space зонах неудобно, когда свет включается только в непосредственной близости. "Коридорный режим" решает эту проблему, упреждающе включая свет по ходу движения.

    Логика: сработал датчик №2 — включить свет в зонах №1, №2 и №3.

    Реализация в Node-RED осуществляется через узел `function`, который на одно входящее сообщение генерирует несколько исходящих.

    Пример кода для узла `function`:
    // msg.topic от входящего MQTT-узла содержит ID датчика
    

    // Например: /devices/wb-msw-v3_corridor_2/controls/Motion

    const sensorId = msg.topic.split('/')[2]; // Получаем "wb-msw-v3_corridor_2"

    const command = msg.payload == '1' ? '1' : '0'; // 1 для включения, 0 для выключения

    let commands = [];

    let zonesToControl = [];

    // Определяем, какие зоны включать, в зависимости от датчика

    switch (sensorId) {

    case "wb-msw-v3_corridor_1":

    zonesToControl = [1, 2];

    break;

    case "wb-msw-v3_corridor_2":

    zonesToControl = [1, 2, 3];

    break;

    case "wb-msw-v3_corridor_3":

    zonesToControl = [2, 3, 4];

    break;

    // ... и так далее

    }

    // Формируем массив команд для каждой зоны

    zonesToControl.forEach(zoneNum => {

    commands.push({

    topic: `/devices/wb-mr6c_corridor/controls/K${zoneNum}/on`,

    payload: command

    });

    });

    // Отправляем массив сообщений, каждое из которых будет обработано отдельно

    return [commands];

    Этот узел `function` нужно подключить напрямую к `mqtt out`, который разошлет все команды. Логика с задержкой выключения (`trigger`) применяется к каждой зоне отдельно.

    ---

    Теория: Поддержание постоянной освещенности (Constant Light)

    Этот сценарий — вершина интеллектуального управления светом в офисе. Его цель — поддерживать заданный уровень освещенности на рабочих поверхностях (например, 500 люкс) в течение всего дня, плавно диммируя светильники для компенсации меняющегося естественного света из окон. Это не только создает максимально комфортные условия для глаз, но и обеспечивает колоссальную экономию электроэнергии в дневное время. Ключевой технологией для реализации этого сценария является DALI.

    > ⚠️ Внимание: Шина DALI имеет ограничения: не более 64 устройств на одной линии и максимальная длина до 300 метров. Пренебрежение правилами проектирования и пусконаладки, такими как отказ от топологии "шина" или превышение длины кабеля, может привести к нестабильной работе всей системы освещения.

    Протокол DALI и его преимущества

    Как мы уже знаем, DALI — это цифровой протокол управления освещением. В отличие от простого релейного управления (ВКЛ/ВЫКЛ), он предлагает ряд уникальных возможностей:

    Принцип работы функции Constant Light

    Механизм поддержания постоянной освещенности основан на контуре обратной связи, состоящем из трех элементов:

  • Датчик освещенности (люксметр): Устанавливается на потолке и направлен вниз, на рабочую поверхность. Он непрерывно измеряет суммарную освещенность в этой точке.
  • Диммируемый DALI-светильник: Исполнительное устройство, яркость которого мы можем плавно регулировать.
  • Контроллер с логикой регулирования: Мозг системы.
  • Алгоритм работы:
  • Задание уставки (Setpoint): Инженер или пользователь задает желаемый уровень освещенности, например, 500 люкс.
  • Измерение: Датчик измеряет текущую освещенность (Process Variable).
  • Расчет ошибки: Контроллер вычисляет разницу (Error) между уставкой и текущим значением. `Error = Setpoint - Process Variable`.
  • Коррекция: На основе этой ошибки контроллер вычисляет новое значение яркости для светильника и отправляет ему DALI-команду. Если света не хватает (Error > 0), яркость увеличивается. Если света в избытке (Error < 0), яркость уменьшается.
  • Повторение: Этот цикл повторяется непрерывно, с интервалом в несколько секунд.
  • Алгоритм ПИД-регулирования

    Чтобы система работала плавно, без резких скачков и "раскачки" (когда яркость постоянно колеблется вокруг нужного значения), для расчета коррекции используется ПИД-регулятор (пропорционально-интегрально-дифференциальный). В Node-RED для этого есть готовый узел `node-red-contrib-pid`.

    Настройка ПИД-регулятора — это итеративный процесс подбора коэффициентов (Kp, Ki, Kd), который требует определенных навыков, но результат того стоит: система будет работать идеально плавно и точно.

    Настройка DALI-шины на контроллере

    Наш контроллер оснащен (или может быть оснащен) специальным модулем для работы с шиной DALI. Процесс пусконаладки обычно включает следующие шаги, выполняемые через консольные утилиты контроллера:

  • `dali-scan`: Поиск всех подключенных к шине устройств.
  • `dali-set-short-addr`: Присвоение уникальных коротких адресов найденным светильникам.
  • Настройка групповых адресов и сцен через конфигурационные файлы или утилиты.
  • После пусконаладки управление светильниками становится доступно через MQTT, что позволяет легко интегрировать их в Node-RED.

    ---

    Пример: Сценарии по расписанию и внешним событиям

    Помимо автоматизации в реальном времени, важна возможность запускать сценарии по предопределенному графику или в ответ на события от смежных систем, таких как система контроля и управления доступом (СКУД).

    > 🔗 Связанный материал: Базовые принципы работы со сценами, групповыми адресами и широковещательными командами были рассмотрены в уроке `COURSE-01-M05-L01 'Сценарии для дома: Управление световыми сценами'`. Рекомендуем повторить материал перед выполнением практического задания.

    Создание сценариев по расписанию

    Расписание — это скелет, на который нанизывается вся автоматизация офиса. Для его создания в Node-RED мы будем использовать мощный узел `node-red-contrib-cron-plus`, который позволяет задавать время срабатывания в гибком формате cron.

    Типовые офисные сцены:

    | Сценарий | Время | Описание |

    |---------------|-----------|-------------------------------------------------------------------------------------|

    | "Утро" | 7:30 ПН-ПТ | Включение дежурного освещения (30%) в коридорах и на кухне, активация климат-систем. |

    | "Рабочий день" | 9:00 ПН-ПТ | Перевод освещения рабочих зон в режим "Constant Light" или включение на 100%. |

    | "Вечер" | 19:00 ПН-ПТ| Выключение света на большинстве рабочих мест, остается только дежурное освещение (20%). |

    | "Уборка" | 22:00 ПН, СР, ПТ | Включение всего освещения в офисе на 100% на 2 часа для работы клининговой службы. |

    | "Все выкл" | 00:00 Ежедневно | Гарантированное выключение всего освещения, если что-то осталось включенным. |

    Пример потока в Node-RED:
  • Берем узел `cron-plus` и настраиваем его. В поле `Expression` вводим `30 7 1-5` (что означает 7:30 утра с понедельника по пятницу).
  • К нему подключаем узел `function`, который формирует нужную DALI-команду. Например, для включения сцены №1 (которая заранее запрограммирована как "Утро"):
  •     // Отправляем широковещательную команду на всю DALI шину

    // для вызова сцены №1

    msg.topic = "/devices/wb-dali/controls/Broadcast/on";

    msg.payload = "scene 1";

    return msg;

  • Подключаем `function` к узлу `mqtt out`.
  • Повторяем эту связку для каждого события в расписании.
  • Интеграция с системой контроля доступа (СКУД)

    Современные СКУД часто могут отправлять уведомления о своих событиях по сети. Наиболее удобный способ интеграции — через MQTT.

    Логика взаимодействия: Обработка в Node-RED:

    Создаем поток, который подписывается на топик `office/security/state`.

    Это простой, но чрезвычайно эффективный способ связать две независимые системы в единый интеллектуальный организм.

    Конфигурация MQTT-топиков и использование контекста

    Для управления DALI-светильниками через MQTT-мост контроллера Wirenboard используются стандартизированные топики. Например, чтобы установить яркость для светильника с адресом `12` на `50%`:

    Чтобы его выключить:

    Для хранения текущего состояния системы (например, какой сценарий сейчас активен) удобно использовать переменные контекста.

    // В узле, который активирует сцену "Рабочий день"
    

    flow.set("currentLightScene", "WorkingDay");

    node.status({ text: "Активна сцена: Рабочий день" });

    Зачем это нужно? Например, у вас есть настенный выключатель для ручного управления. Его логика может проверять текущий сценарий: если активен `WorkingDay`, то нажатие на выключатель просто меняет яркость. А если активен `Cleaning`, то ручное управление блокируется, чтобы уборщики случайно не выключили себе свет.

    Таким образом, комбинируя управление по присутствию, поддержание постоянной освещенности, сценарии по расписанию и интеграцию со смежными системами, мы строим по-настоящему интеллектуальную, гибкую и энергоэффективную систему освещения для современного офиса.