Протокол XPL

Протокол XPL — открытый протокол, предназначенный для управления и мониторинга устройств автоматизации дома. Основная цель разработки XPL — предоставление богатого набора функций при одновременном сохранении элегантной и простой структуры сообщений. Протокол обладает возможностями автоматического обнаружения и конфигурирования устройств, что обеспечивает полноценную plug-n-play-архитектуру, необходимую для удобства пользователей.[1]

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

В рамках локальной сети (LAN) для обмена данными между XPL-приложениями используется протокол UDP с использованием порта 3865.

Разработка XPL ведётся преимущественно в сообществе DIY-энтузиастов, где пользователи создают ПО-шлюзы для интеграции протокола с существующими устройствами и стандартами.[2] Примеры таких интеграций включают мосты (bridges) для других протоколов домашней автоматизации, таких как Z-Wave и UPB. Коммерческой реализацией с поддержкой XPL является ПО Logitech SqueezeCenter для Squeezebox.

Архитектура

Различные устройства обмениваются сообщениями по протоколу XPL внутри локальной сети, транслируя пакеты на UDP-порт 3865, зарегистрированный в IANA.

Поскольку на современных операционных системах только одна программа может прослушивать один и тот же порт одновременно, возникает необходимость в наличии специального хаба. Хаб пересылает сообщения всем подключённым к нему устройствам на этой же машине. Устройства регистрируются у хаба на индивидуальных UDP-портах, а хаб перенаправляет все входящие сообщения на эти порты.[3]

Хаб

Хаб (hub) — первый обязательный компонент XPL на каждом компьютере с XPL-устройствами.

Все устройства регулярно, обычно раз в 5 минут, отправляют харт-бит

undefined

хабу. При отключении устройства могут отправить специальное сообщение об окончании "сигнала жизни" (heartbeat end message), чтобы удалить себя из списка хаба.

Хаб пересылает все полученные сообщения всем зарегистрированным устройствам, не осуществляя фильтрации: всё происходит по принципу широковещательной ретрансляции.

XPL-устройство

Приложения на устройствах расширяют функционал домашней автоматизации (управление освещением, отслеживание времени восхода/захода солнца, погодные данные и прочее).

Устройство выбирает свободный UDP-порт и посылает с него heartbeat-сообщения хабу на IANA-регистрированный порт 3865.

С этого момента оно прослушивает свой приватный порт, а свои сообщения отправляет как широковещательные по XPL-порту 3865. Существуют три типа сообщений:

  • command — команды для управления другими устройствами;
  • status — ответы на команды;
  • trigger — уведомления об изменении состояния устройства.

Полный перечень приложений и наборов инструментов для самостоятельной разработки доступен на официальном сайте сообщества.

Мост (Bridge)

Основной транспортный протокол XPL — UDP/IP, однако это не является обязательным. Для передачи сообщений между различными средами передачи данных (например, между UDP/IP и RS-232) необходим мост.

Правила

В среде Windows приложение xPL HAL обрабатывает входящие XPL-сообщения и запускает сценарии для выполнения различных задач. Конфигурирование производится через менеджер под Windows или браузер, также имеется конфигурационный менеджер XPL.

На Linux и MacOS программа xpl-central отслеживает все приходящие XPL-сообщения и может порождать новые сообщения согласно заданным в XML-файле правилам.

Среды передачи данных

Протокол XPL поддерживает различные среды передачи, включая Ethernet, RS232 и RS485.

Ethernet

Все устройства XPL транслируют свои сообщения по протоколу UDP на IANA-регистрированный порт 3865.

Так как одновременное прослушивание порта возможно только одним приложением, XPL использует хаб, который ретранслирует широковещательные сообщения нужным приложениям. Приложения регистрируются у хаба на свободном порту, отправляя heartbeat, где указывается прослушиваемый порт; хаб затем рассылает все сообщения из своей очереди каждому из приложений.

Протокол

Минимальная нагрузка на сеть (Lite on the wire), как принцип

Пример сообщения

XPL-сообщения представляют собой строки, каждая из которых заканчивается символом перевода строки (ASCII 10). Пример сообщения:

xpl-cmnd
{
hop=1
source=xpl-xplhal.myhouse
target=acme-cm12.server
}
x10.basic
{
command=dim
device=a1
level=75
}

Структура сообщения

Каждое сообщение XPL состоит из следующих частей:

  • Тип сообщения (xpl-cmnd, xpl-stat или xpl-trig);
  • Заголовочный блок в фигурных скобках c полями:
    • hop — счётчик переходов (hop count), увеличивается каждый раз при передаче сообщения между физическими сетями;
    • source — идентификатор источника (vendor_id-device_id.instance_id);
    • target — идентификатор цели (vendor_id-device_id.instance_id);
  • Схема сообщения (class.type);
  • Тело сообщения — пары имя=значение в фигурных скобках.

В заголовке, имя цели может быть заменено на символ * для широковещательных сообщений, что характерно для сообщений типа trigger и status.

Схемы сообщений

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

Это облегчает синтаксический разбор сообщений даже для простых устройств.

Полный список существующих схем размещён на официальной вики проекта XPL. Разработчики могут создавать новые схемы по мере необходимости.

Примечания

  1. About the Project « The xPL Project. xplproject.org.uk. Дата обращения: 23 октября 2025. Архивировано 5 сентября 2025 года.
  2. Gerald Duprey. UPB4Java - Java API for the UPB automation protocol. web.archive.org. Дата обращения: 23 октября 2025.
  3. XPL Specification Document - XPLProject. xplproject.org.uk. Дата обращения: 23 октября 2025. Архивировано 24 января 2025 года.

Категории