January 1st, 2018

С Новым Годом, с Новым MQTT/UDP

Спите? :)

А у меня в новогоднюю ночь родилась новая идея про использование MQTT/UDP - дистанционное централизованное конфигурирование устройств и конфигурирование с нуля.

Задача: есть устройство без UI (экран, кнопки, светодиоды - ничего нет), но конфигурация нужна.

Бродкаст хорош тем, что он работает даже если у устройства всё плохо с IP-адресом. Даже MAC адрес может быть бредовый, если он один такой в сети. Это позволяет обеспечить конфигурацию "с нуля".

Для этого предлагается два или три этапа конфигурации.

Первый нужен если устройство вообще невменяемое и никак не умеет себя идентифицировать. Тогда, очевидно, оно должно быть в сети такое одно, и конфигуратор отправляет ему пакет (обычный topic publish) с настройками MAC/IP/mask/gw/id - приняв его устройство должно записать и принять настройки.

На втором этапе устройство запомнило или изначально знает хотя бы какой-то свой идентификатор, один из двух:

  • id - абстрактная уникальная строка, можно взять из DS2401 serial number, например. Или, если есть уникальный MAC, тупо скопировать сюда его. Если прошитого нет, то на первом этапе его должен был установить конфигуратор.

  • MAC - уникальный MAC-адрес: или из ПЗУ, или установленный конфигуратором на первом этапе.

В этот момент есть и уникальный IP-адрес. Опять же, или его выдал конфигуратор, или DHCP.

Далее конфигуратор общается с устройством уже не бродкастом, а отправляя ему личные пакеты на его IP-адрес, но в рамках того же MQTT/UDP протокола.

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

На третьем этапе конфигуратор может запросить (перебором номера) список конфигурационных параметров устройства (имя, тип, список значений) и загрузить настройки. Или интерактивно - запросив их у юзера за клавиатурой, или пакетно, загрузив из центральной базы данных.

Предполагается, что устройство запишет настройки в ППЗУ и далее при рестарте в конфигурации нуждаться не будет.

В принципе, возможна и работа при реконфигурировании на каждом старте устройства. Тодга конфигуратор должен всегда присутствовать и отвечать на запрос конфигурации от устройства. Этот режим пока не спроектирован никак.

Примерная спека тут - https://github.com/dzavalishin/mqtt_udp/wiki/MQTT-UDP-message-content-specification

Шампанского выпили уже с утра, аристократы? С Новым Годом! :)