Skip to content

GPIO driver service for Wiren Board

License

Notifications You must be signed in to change notification settings

wirenboard/wb-mqtt-gpio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wb-mqtt-gpio драйвер

Драйвер 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
        }
    ]
}