Драйвер wb-mqtt-gpio получает необходимые параметры для запуска с файла /etc/wb-mqtt-gpio.conf, в этом файле должны находиться описания GPIO, с которыми драйвер должен работать. Примеры конфигурационных файлов находятся в папке /usr/share/wb-mqtt-gpio/.
Конфигурационный файл:
{
// отображаемое имя устройства. Публикуется как
// .../meta/name в MQTT
"device_name" : "GPIO DEVICES",
// Задаёт интервал в секундах, в течение которого неизменяющиеся значения не будут публиковаться в MQTT.
// По истечении интервала полученное значение будет опубликовано, даже если оно не изменилось.
// Если установлен 0, каждое полученное от устройств значение будет опубликовано в MQTT.
// Если установлено отрицательное значение, то значения будут публиковаться только при изменении. Это поведение по умолчанию.
"max_unchanged_interval": -1,
"channels" : [
]
}
Описание одного канала соответствует описанию отдельного GPIO. Параметры, которые описывают GPIO, ниже в примерах. Рекомендуется использовать новый интерфейс работы с GPIO, появившийся в ядре 4.8. Подробнее можно прочитать по ссылке https://ostconf.com/system/attachments/files/000/001/532/original/Linux_Piter_2018_-_New_GPIO_interface_for_linux_userspace.pdf
Формат настройки GPIO для нового интерфейса:
"gpio" : {
// путь к чипу GPIO
"chip": "/dev/gpiochip0",
// сдвиг линии относительно чипа
"offset" : 22
},
Пример полного конфигурационного файла:
{
"device_name" : "GPIO DEVICES",
"channels" : [
// канал, в котором не указан direction, по умолчанию работает на выход
{
// name значение которое передается в MQTT в примере ../controls/FET_1
"name" : "FET_1",
// чип и линия GPIO, который описывает данный канал
"gpio" : {
// путь к чипу GPIO
"chip": "/dev/gpiochip0",
// сдвиг линии относительно чипа
"offset" : 22
},
// либо номер GPIO, который описывает данный канал. Это устаревший вариант настройки. Не рекомендуется к использованию
"gpio" : 22,
// параметр inverted задает инвертированный канал или нет
"inverted" : false,
// восстанавливать состояние выхода при запуске сервиса, по умолчанию true
// true - при изменении состояния выхода в процессе работы сервиса, оно будет сохранено и восстановлено при перезапуске
// false - состояние выхода при запуске сервиса будет определяться значением initial_state
"load_previous_state": true,
// состояние выхода, которое устанавливается при старте сервиса, по умолчанию false
"initial_state" : false
}
//также gpio могут работать на вход и считывать изменения напряжения с клеммника
{
"name" : "D1_IN",
"gpio" : {
"chip": "/dev/gpiochip1",
"offset" : 36
},
"inverted" : false,
//для этого указать direction input
"direction" : "input",
// rising прерывания по восходящему фронту, falling - по нисходящему,
// both - по обоим фронтам, для GPIO с незаданным type принудительно устанавливается both
// для счетчиков определяется автоматически, если не указан.
"edge" : "falling"
}
//для работы с счетчиком электроэнергии
{
"name" : "D3_IN",
"gpio" : {
"chip": "/dev/gpiochip1",
"offset" : 38
},
"direction" : "input",
"inverted" : false,
// type указывает что GPIO описывает счетчик электроэнергии
"type" : "watt_meter",
//множитель для расчета, количество импульсов на kWh
"multiplier" : 1000
},
//для работы с счетчиком воды
{
"name" : "D3_IN",
"gpio" : {
"chip": "/dev/gpiochip1",
"offset" : 38
},
"direction" : "input",
"inverted" : false,
// type указывает что GPIO описывает счетчик воды
"type" : "water_meter",
//множитель для расчета, количество импульсов на м^3
"multiplier" : 100,
//число знаков после запятой в текущем потреблении (воды, электричества, etc)
"decimal_points_current" : 2,
//число знаков после запятой в полном потреблении (воды, электричества, etc)
"decimal_points_total" : 3
}
]
}