Установка
Скачайте пакет для своей архитектуры и поставьте его. apt предпочтительнее dpkg, потому что сам разрешает зависимости.
sudo apt install ./elxmodbusmqtt_1.2.38_amd64.deb
systemctl status elxmodbusmqtt
xdg-open http://localhost:8080
Какой пакет нужен, скажет uname -m: x86_64 — amd64, aarch64 — arm64, armv7l — armhf.
systemctl status elxmodbusmqtt
journalctl -u elxmodbusmqtt -f
sudo systemctl restart elxmodbusmqtt
Добавление шлюза
Шлюз — это физический путь к шине. Всё, что под ним, — устройства и регистры — опрашивается через него, по одному запросу за раз.
| Тип | Что указать |
|---|---|
| Modbus TCP | Адрес и порт устройства, обычно 502 |
| RTU-over-TCP | Адрес и порт преобразователя Ethernet ↔ RS-485 |
| Serial RTU | Порт (/dev/ttyUSB0), скорость, чётность, биты данных и стоп-биты |
dialout. Если в терминале одни тайм-ауты, а проводка в порядке, проверьте, может ли пользователь службы открыть устройство.Устройства и регистры
У устройства есть адрес на шине, имя, префикс MQTT и список регистров. Шаблон из библиотеки заполняет список; своё устройство начинается с пустого.
| Поле | Что означает |
|---|---|
| Тип регистра | Holding и Coil можно писать; Input и Discrete только читаются |
| Адрес | Номер регистра как в техпаспорте — следите за началом отсчёта, некоторые производители считают с единицы |
| Тип данных | int16, uint16, int32, float32, строка или один бит |
| Порядок слов | Какая половина 32-разрядного значения идёт первой; обычная причина неправдоподобных чисел |
| Множитель и смещение | Превращают сырой отсчёт в единицы: 0,1 делает из 245 значение 24,5 |
| Битовая маска | Вынимает один флаг из упакованного слова состояния |
| Период | Как часто опрашивается именно этот регистр, если он должен отличаться от устройства |
Брокер
- Адрес и порт. Хост и порт брокера; TLS доступен там, где брокер его предлагает.
- Учётные данные. Имя и пароль, если брокер их требует.
- Базовый топик. Префикс, под которым появляется всё, что публикует эта служба, — например
home. - Retain. Хранить ли брокеру последнее значение каждого топика.
- Командные топики. Суффикс, принимающий запись, по умолчанию
/set.
Полный топик складывается как {базовый}/{префикс устройства}/{ключ регистра}, поэтому его можно предсказать по одной конфигурации — подписку в Home Assistant реально написать раньше, чем устройство будет подключено к шине.
Терминал обмена
Терминал показывает каждый запрос и каждый ответ сырыми кадрами, с временем и ошибками. Это инструмент для двух самых трудных моментов: запустить устройство, которое никто не описал, и объяснить, почему перестало работать то, что работало.
| Что видно | Что это обычно значит |
|---|---|
| Тайм-аут на каждом запросе | Не тот порт, не та скорость, перепутаны A и B или на устройство не подано питание |
| Тайм-аут только у одного устройства | Не тот адрес на шине или это устройство отключено |
| Исключение 02 | Такого адреса регистра у этого устройства нет |
| Исключение 03 | Записываемое значение вне диапазона, который принимает устройство |
| Ошибки CRC под нагрузкой | Слишком длинный кабель, отсутствие терминаторов или скорость, которую линия не тянет |
Резервная копия и восстановление
Вся конфигурация — шлюзы, устройства, карты регистров и настройки брокера — выгружается в один файл JSON и восстанавливается из него. Этот же файл — правильный способ перенести рабочую настройку на вторую машину или положить конфигурацию объекта под контроль версий.
Когда что-то не так
| Симптом | Куда смотреть |
|---|---|
| Веб-интерфейс не открывается | systemctl status elxmodbusmqtt; служба могла не занять порт 8080 |
| Значения есть в интерфейсе, но нет в MQTT | Публикация выключена или неверные данные брокера — журнал событий скажет, что именно |
Команда в /set ничего не меняет | Канал только для чтения или регистр относится к Input, а не к Holding |
| Значения обновляются слишком медленно | Слишком много регистров на одном шлюзе с одним периодом; поднимите период тем, что не меняется |
| Числа скачут между правдоподобными и абсурдными | Порядок слов или два мастера на одной шине, отвечающие друг поверх друга |