ГлавнаяАкадемияДатчики и входы: нормализация сигналов → Чтение состояния геркона: отслеживание открытия двери/окна

Чтение состояния геркона: отслеживание открытия двери/окна

Урок 2 · Датчики и входы: нормализация сигналов · 30 мин · theory

Принцип работы геркона и его роль в системах автоматизации

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

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

В зависимости от исходного состояния контактов без воздействия магнитного поля, герконы делятся на два основных типа, которые мы рассматривали в предыдущем уроке: нормально-открытые (NO) и нормально-закрытые (NC). Понимание их различий критически важно для правильного проектирования системы.

| Характеристика | Нормально-открытый (NO) | Нормально-закрытый (NC) |

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

| Состояние без магнита | Контакты разомкнуты (цепь разорвана) | Контакты замкнуты (цепь замкнута) |

| Состояние при поднесении магнита | Контакты замыкаются (цепь замыкается) | Контакты размыкаются (цепь разрывается) |

| Состояние двери/окна | Дверь/окно открыто = контакты разомкнуты (`false`) | Дверь/окно открыто = контакты разомкнуты (`false`) |

| | Дверь/окно закрыто = контакты замкнуты (`true`) | Дверь/окно закрыто = контакты замкнуты (`true`) |

| Логика для контроллера | Замкнутая цепь означает "Закрыто" | Замкнутая цепь означает "Закрыто" |

| Типовое использование | Мониторинг состояния (например, для управления светом) | Системы безопасности, охранные контуры |

| Надежность при обрыве | Обрыв провода будет интерпретирован как "Дверь открыта" | Обрыв провода будет интерпретирован как "Тревога" (аналогично открытию) |

> 💡 Подсказка: Для охранных систем предпочтительнее использовать NC-герконы. В этом случае обрыв провода или выход датчика из строя будет немедленно зафиксирован как тревога (размыкание цепи), что повышает надежность системы. Система не сможет быть "ослеплена" простым перерезанием кабеля, так как любое нарушение целостности контура приведет к срабатыванию.

Особенности физического монтажа

Правильный монтаж — залог стабильной работы датчика.

  • Расположение: Геркон устанавливается на неподвижной части (дверной косяк, оконная рама), а магнит — на подвижной (дверное полотно, створка окна).
  • Выравнивание: На корпусах геркона и магнита обычно есть специальные метки (треугольники, точки). При монтаже необходимо добиться их точного совмещения, когда дверь или окно закрыты.
  • Зазор: Расстояние между герконом и магнитом в закрытом состоянии не должно превышать значения, указанного в паспорте устройства (обычно 10-15 мм). Слишком большой зазор может привести к ложным срабатываниям или полному отказу.
  • Металлические поверхности: Избегайте установки герконов непосредственно на стальные двери или рамы. Металл может экранировать или искажать магнитное поле, снижая чувствительность датчика. Если такой монтаж неизбежен, используйте специальные пластиковые проставки для увеличения расстояния между датчиком и металлической поверхностью на 1-2 см.
  • ---

    Физическое подключение геркона к дискретному входу контроллера HI

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

    Геркон, по своей сути, является простым выключателем. Он либо замыкает цепь, либо размыкает ее. Дискретный вход контроллера HI предназначен именно для того, чтобы детектировать эти два состояния.

    Схема подключения

    Для подключения геркона к контроллеру HI нам понадобятся два провода и два свободных терминала на модуле входов:

    Схема подключения предельно проста:

  • Один провод от геркона подключается к клемме `GND` на контроллере.
  • Второй провод от геркона подключается к выбранной клемме дискретного входа (например, `UI-05`).
  • Ниже приведена типовая ASCII-схема подключения `WIRING-SENS-011`, которую следует включать в проектную документацию.

    //========= WIRING-SENS-011: Front Door Reed Switch =========
    
    

    // Контроллер HI Датчик открытия (Геркон)

    // Модуль входов (SENS:REED:FrontDoor-01)

    //

    // +---------+ +-----------+

    // | UI-05 |-----------------| Contact 1 |

    // | | | |

    // | GND |-----------------| Contact 2 |

    // +---------+ +-----------+

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

    Роль внутреннего подтягивающего резистора (Pull-Up)

    Почему схема так проста? Потому что универсальные входы контроллера HI, сконфигурированные для работы с "сухими контактами", используют внутренний подтягивающий резистор (pull-up resistor).

    Благодаря этому механизму, вам не нужно устанавливать внешние резисторы, что значительно упрощает монтаж и повышает надежность системы.

    > ⚠️ Внимание: Категорически запрещается подавать на дискретный вход любое внешнее напряжение при подключении "сухого контакта". Вход рассчитан на замыкание на `GND`, а не на получение внешнего сигнала. Подача напряжения от стороннего блока питания может привести к необратимому повреждению порта или всего модуля входов контроллера.

    ---

    Настройка узла 'DI' в Node-RED для чтения состояния

    После того как геркон физически подключен к контроллеру, необходимо настроить программную часть — создать в среде Node-RED поток (flow), который будет считывать его состояние. Для этого используется специальный узел из палитры HI, который мы назовем `HI-DI`.

    Пошаговая настройка узла

  • Добавление узла: Откройте редактор Node-RED. В палитре узлов слева найдите узел, отвечающий за чтение дискретных входов (обычно он находится в категории с названием вашей платформы, например, "HI"). Перетащите узел `HI-DI` на рабочее поле.
  • Конфигурация: Дважды щелкните по добавленному узлу, чтобы открыть окно его настроек. Здесь необходимо указать, с какого именно физического входа мы хотим читать данные.
  • * Server / Controller: Выберите из выпадающего списка ваш контроллер. Если он один, он будет выбран по умолчанию.

    * Input / Channel: Укажите номер дискретного входа, к которому вы подключили геркон. Если вы использовали клемму `UI-05`, введите `5`.

    * Poll Interval (ms): Это частота опроса в миллисекундах. Этот параметр определяет, как часто Node-RED будет запрашивать у контроллера состояние входа.

    * Для датчиков открытия дверей, где важна быстрая реакция (например, для включения света), рекомендуется значение в диапазоне `100` - `250` мс.

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

    * Name: Дайте узлу осмысленное имя, например, "Датчик входной двери". Это поможет легко ориентироваться в потоке.

  • Проверка работы:
  • * Сохраните настройки узла, нажав кнопку "Done".

    * Из палитры перетащите узел `Debug` и соедините его с выходом узла `HI-DI`.

    * Разверните изменения, нажав красную кнопку "Deploy" в правом верхнем углу.

    * Перейдите на вкладку "Debug messages" (иконка жука) в правой панели.

    Теперь, при открытии и закрытии двери, вы будете видеть в окне отладки сообщения.

    > ℹ️ Информация: По умолчанию узел `HI-DI` выдает булево значение (boolean): `true` при замкнутом контакте и `false` при разомкнутом.

    При замкнутом герконе (дверь закрыта) вы будете видеть сообщения:

    // msg.payload
    

    true

    При разомкнутом (дверь открыта):

    // msg.payload
    

    false

    Обратите внимание, что без дополнительной обработки эти сообщения будут появляться с частотой, заданной в `Poll Interval`, даже если состояние не меняется. В следующем разделе мы это исправим.

    ---

    Нормализация сигнала и обработка изменений

    На данном этапе наш поток генерирует избыточное количество данных: он шлет `true` или `false` каждые 100 мс. Для большинства задач автоматизации нам нужно знать не текущее состояние, а момент его изменения. Кроме того, булевы значения `true`/`false` неудобны для отображения в интерфейсах и для ведения логов. Наша задача — нормализовать этот сигнал.

    Для этого мы используем два стандартных узла Node-RED: `rbe` и `change`.

    1. Фильтрация дубликатов с помощью узла `rbe`

    Узел `rbe` (Report by Exception) — это мощный фильтр, который пропускает сообщение дальше по потоку только в том случае, если его значение отличается от предыдущего.

    Теперь, когда вы будете открывать или закрывать дверь, в окне отладки появится только одно сообщение в момент смены состояния. В статичном положении (дверь постоянно открыта или закрыта) новых сообщений не будет. Это кардинально снижает нагрузку на систему и упрощает дальнейшую логику.

    2. Преобразование данных с помощью узла `change`

    Теперь преобразуем `true`/`false` в понятные строковые значения, например, "closed" и "open". Это делает логику более читаемой и готовит данные для отправки в системы верхнего уровня.

    * Правило 1:

    * `Set`: `msg.payload`

    * `to the value`: `closed` (строка)

    * `if`: `msg.payload` `is true` (булево)

    * Правило 2 (добавляется нажатием кнопки `+add`):

    * `Set`: `msg.payload`

    * `to the value`: `open` (строка)

    * `if`: `msg.payload` `is false` (булево)

    Сохраните настройки и разверните поток. Теперь в окне отладки вы будете видеть:

    Пример итогового потока

    Вот как выглядит наш финальный поток для обработки сигнала с геркона:

    ASCII-схема потока:
    [HI-DI: Дверь] -> [rbe: Фильтр] -> [change: Формат] -> [debug: Результат]
    
    Пример прохождения сообщения `msg` через поток (для NC-геркона):
  • Дверь закрывается, геркон замыкается.
  • * `[HI-DI]` генерирует `msg` с `payload: true`.

    * `[rbe]` пропускает `msg`, так как предыдущее значение было `false`.

    * `[change]` применяет правило №1 и изменяет `msg.payload` на `"closed"`.

    * `[debug]` выводит:

            {

    "payload": "closed",

    "_msgid": "..."

    }

  • Дверь открывается, геркон размыкается.
  • * `[HI-DI]` генерирует `msg` с `payload: false`.

    * `[rbe]` пропускает `msg`, так как предыдущее значение было `true`.

    * `[change]` применяет правило №2 и изменяет `msg.payload` на `"open"`.

    * `[debug]` выводит:

            {

    "payload": "open",

    "_msgid": "..."

    }

    Этот простой, но эффективный поток является стандартным паттерном для обработки любых дискретных входов.

    ---

    Публикация состояния в MQTT

    Теперь, когда у нас есть чистое, нормализованное состояние датчика, его необходимо сделать доступным для других систем: панелей визуализации, мобильных приложений, голосовых ассистентов или других контроллеров. Стандартным протоколом для такого взаимодействия в IoT является MQTT.

    Наша задача — отправлять состояние `"open"` или `"closed"` в определенный MQTT топик.

    Настройка узла `mqtt out`

  • Добавление узла: Перетащите узел `mqtt out` из палитры на рабочее поле и соедините его с выходом узла `change`.
  • Конфигурация: Откройте настройки узла `mqtt out`.
  • * Server: Выберите из выпадающего списка ваш MQTT-брокер. Если он еще не настроен, нажмите на иконку карандаша и укажите IP-адрес/хост контроллера (так как на нем запущен MQTT-брокер, обычно это `localhost` или `127.0.0.1`) и порт (`1883` по умолчанию).

    * Topic: Это самое важное поле. Здесь задается "адрес", по которому будет опубликовано состояние. Крайне важно придерживаться иерархической структуры топиков для порядка в системе. Рекомендуемый формат:

    `{project}/{location}/{sub-location}/{device-class}/{device-name}/state`

    Например: `hi/floor1/livingroom/window1/state`

    Для нашей входной двери это может быть: `hi/groundfloor/hall/maindoor/state`

    * QoS (Quality of Service): Установите `1` или `2` для гарантированной доставки сообщения. Для состояний датчиков QoS `1` (`At least once`) является хорошим выбором.

    * Retain: Установите галочку напротив `true`.

    > ⚠️ Внимание: Всегда устанавливайте флаг `retain=true` для сообщений, передающих состояние (state). Это гарантирует, что при перезагрузке систем визуализации или логики они получат последнее известное состояние, а не будут ждать следующего изменения. MQTT-брокер сохранит последнее сообщение с этим флагом и немедленно отправит его любому новому клиенту, подписавшемуся на этот топик.

  • Имя: Дайте узлу имя, например, "Публикация MQTT: Дверь".
  • Сохраните настройки и разверните поток. Теперь состояние вашей двери публикуется в общую шину данных и доступно всей системе автоматизации. Вы можете использовать любой MQTT-клиент (например, MQTT Explorer), чтобы подписаться на топик `hi/groundfloor/hall/maindoor/state` и в реальном времени видеть, как приходят сообщения `"open"` и `"closed"`.

    Итоговый поток (полный цикл):
    [HI-DI] -> [rbe] -> [change] -> [mqtt out]
    

    Этот поток реализует всю цепочку от физического мира до цифрового представления, готового к использованию в сценариях.

    ---

    Резюме и практическое применение

    В этом уроке мы прошли полный цикл работы с одним из самых распространенных датчиков в автоматизации — герконом. Мы научились:

  • Физически подключать датчик типа "сухой контакт" к дискретному входу `UI` контроллера HI, используя клеммы `DI` и `GND`.
  • Настраивать опрос этого входа в среде Node-RED с помощью узла `HI-DI`, задавая частоту опроса.
  • Нормализовать сигнал, отсекая дублирующиеся сообщения с помощью узла `rbe` и преобразуя булевы значения `true`/`false` в понятный формат `open`/`closed` с помощью узла `change`.
  • Публиковать итоговое состояние в MQTT-топик с использованием флага `retain`, делая его доступным для всей экосистемы умного дома.
  • Теперь, когда состояние двери представлено в системе в виде четких сообщений в стандартном топике, открываются безграничные возможности для создания сценариев автоматизации. На основе полученных данных `"open"`/`"closed"` можно легко реализовать:

    Эти практические сценарии мы начнем подробно разбирать в следующих модулях. Вы освоили фундаментальный навык, который является кирпичиком для построения по-настоящему интеллектуальной системы.

    🔗 Связанный материал: Повторите принципы работы с узлами отладки (`debug`, `status`, `catch`), рассмотренные в курсе `COURSE-01-M03`, для диагностики возможных проблем в ваших потоках.

    Что дальше

    В следующем уроке мы рассмотрим работу с другим популярным типом дискретных датчиков — датчиком движения (PIR). Мы изучим его особенности, такие как время "остывания" и защита от ложных срабатываний, и создадим на его основе сценарий автоматического управления освещением.