Сбор данных c Modbus-датчиков через Telegraf
Общая схема подключения датчика

Введение
В этой статье мы научимся писать конфигурации опроса через Telegraf для Modbus датчиков c сохранением данных с датчиков базу данных influxdb2.
- Научимся работать с шаблонами датчиков
- Разберем шаблоны датчиков для ModbusTCP и ModbusRTU
- Научимся "ловить" данные с датчиков
- Научимся редактировать шаблоны и тестировать конфигурации
- Разберем шаблон для реального устройства (датчика)
- Проверим данные с этого устройства.
☝ Эта инструкция подходит для любого Сборщика
Мы будем основываться на том, что мы совершаем все действия на устройстве с RS485м портом, Ethernet и установленной NapiLinux, в котором уже предустановлен telegraf, influxdb2 и имеется Веб-интерфейс управления NapiConfig.
Для любого датчика, мы должны знать
- Modbus адрес устройства
- Список и тип регистров, которые можно прочесть из датчика
- Для ModBus RTU - параметры последовательного порта
Сначала мы опросим датчик "без названия", у которого
modbus address = 1и есть как минимум первый регистр с адресом 0. Далее, мы рассмотрим уже реальный датчик с его регистрами.
Конфиг Telegraf для Modbus TCP
Опросим наш датчик по Modbus TCP. Мы должны знать IP адрес опрашиваемого устройства.
☝ ** Если на нашем Сборщике работает сервис шлюза ModbusRTU - ModbusTCP, то нужно опрашивать адрес 127.0.0.1 **
Шаблон конфига, принимающего данные для Telegraf для Modbus TCP выглядит следующим образом
## Any sensor with address=1. hold-register=0 (first) on localhost
[[inputs.modbus]]
#change name="YOUR_SENSOR" and measurement="YOUR_SENSOR"
name = "anysensor-modbus-localhost"
#change to your modbus address if your address is not equal 1
slave_id = 1
## Timeout for each request
timeout = "1s"
# TCP - connect via Modbus/TCP
controller = "tcp://127.0.0.1:502"
input_registers = [
{ measurement="anysensor-modbus-localhost", name = "First_Hold_Register", byte_order = "AB", data_type = "UINT16", scale=1.0, address = [0]},
]
В интерфейсе NapiConfig его можно найти в "Датчики" - "Управление датчиками"

Шаблон датчика - конфиг файл для Telegraf, описывающий механизм сбор данных. Из интерфейса NapiConfig можно править конфигурацию, загружать новые шаблоны, активировать и деактивировать шаблоны.

Рассмотрим шаблон
- (1) name, measurement - имя датчика, например DL-303
- (2) slave_id - modbus адрес устройства
- (3) controller - IP адрес и TCP порт modbus устройства. если на Сборщике работает mbusd (шлюз Modbus RTU - TCP), то адрес будет 127.0.0.1 (так как отвечать на запросы будет сам сборщик)
- (4) measurement имя измерения (должно совпадать с именем датчика и быть уникальным для устройства)
Если устройств одинаковых несколько, надо дать каждому уникальное измерение
-
(5) name произвольное имя, согласно которому регистр попадет в базу данных. Например это может быть temperature или current (то есть фактически то, что выдает этот регистр из устройства)
-
(6) byte_order - порядок байт для целочисленных значений (обычно нужно оставить по умолчанию, если нет, то надо сверится с документацией на устройство)
-
(7) data_type - тип данных
-
(8) scale - множитель \ делитель
-
(9) address - адрес регистра
Если устройство имеет modbus адрес "1" и имеет регистр "0" типа int, то наш шаблон "по молчанию" (Any sensor) корректно опросит устройство и его 1-й регистр.
Конфиг Telegraf для Modbus RTU
Для Modbus RTU в шаблоне указывается не IP-адрес, а параметры последовательного порта. Шаблон конфига для Telegraf ModbusRTU датчика "по умолчанию" выглядит так:
## Any sensor with address=1. hold-register=0 (first) on /dev/ttyS3 (FCC device) with 9600\8n1 (sensor parameter)
[[inputs.modbus]]
#change name="YOUR_SENSOR" and measurement="YOUR_SENSOR"
name = "anysensor-modbus-rtu"
#change to your modbus address if your address is not equal 1
slave_id = 1
#change to your port settings, if you need
baud_rate = 9600
data_bits = 8
parity = "N"
stop_bits = 1
#change ti your port (ttyS1 \ ttyUSB0 \ etc)
controller = "file:///dev/ttyS3"
transmission_mode = "RTU"
input_registers = [
{ measurement="anysensor-modbus-rtu", name = "First_Hold_Register", byte_order = "AB", data_type = "UINT16", scale=1.0, address = [0]},
В интерфейсе NapiConfig

Разберемся в отличиях с ModbusTCP
(5) - последовательный порт, из которого Telegraf будет читать данные (6) - ражим работы Modbus
Далее идут стандартные параметры последовательного порта
(1) baud_rate - скорость (2) data_bits - количество бит (3) parity - четность (4) stop_bits - стоп-бит
Эти данные есть в настройках или в паспорте датчика. Как правило это 8N1\8E1 (биты, четность, стоп-бит). Скорость во многих датчика по умолчанию 9600, но может быть и 115200. 🔥** Если указать эти параметры неверно, данные читаться и датчика не будут !**
🔥 Остальные настройки и параметры точно такие же, как для ModbusTCP 🔥
Проверка работы шаблонов в NapiConfig
Активируйте шаблон ("Активировать")
Если шаблон корректный появиться зеленая надпись "Шаблон активирован", а также кнопки для редактирования конфигурации шаблона.

Зайдите в "Графики - Сенсоры" и выберете наше устройство

Успешный итог
Если Вы увидите ЛЮБОЕ значение First_Hold_Register, значит опрос идет !

Неуспешный итог
Если вы увидите "За заданный период данных нет", значит данные не поступают

Редактирование шаблона
В NapiConfig есть возможность редактировать шаблон и проверять вручную конфигурацию, запуская Telegraf только для данного шаблона.
- Отключите датчик, если он включен.
- Нажмите "три точки" и кнопку "Ред. шаблон" напротив датчика.

- Откроется окно с конфигом датчика

- Отредактируйте конфиг и нажмите "Применить"
- Нажмите тест "конфигурации"
Система запустит telegraf в тестовом режиме и выдаст в окно результат с данными или ошибку
- Успешно е тестирование, данные идут

- Неуспешное тестирование, ошибка синтаксиса файла

- Неуспешное тестирование, ошибка получения данных их порта (в данном случае были неверные данные скорости порта)

После того, как Вы добились верного тестирования конфигурации, выйдите из редактирования и активируйте шаблон.
Описание своего устройства
Для описания устройства существует достаточно подробная документация на английском языке. Если Вам надо описать сложное устройство или несколько устройств, то рекомендуем ознакомится с первоисточником.
Адрес: https://github.com/influxdata/telegraf/blob/master/plugins/inputs/modbus/README.md
Мы приведем пример простейшего датчика с 5-ю холд регистрами.
Чтобы описать устройство, необходимо сделать смысловое описание регистров modbus (4,5,6,7,8,9) - для каждого регистра сделать строку с полями.
Смысловое значение регистров, тип, адрес необходимо взять из документации на устройство или опросить вручную через утилиту modpoll и разобрать вывод.