Node-Red + Z5R-WEB

Фев 25 2022

В этой статье покажу простой пример, как подключить контроллер Z5R-WEB к NODE-RED.

Создатели контроллера Z5R-Web дали возможность самостоятельно написать сервер для работы контроллера, следовательно, можно подключить его куда угодно и использовать любой язык программирования. На сайте изготовителя имеются примеры на PHP и Python.

Я приведу пример использования с Node-Red. Создадим необходимые ноды.

Мы имеем ноду "Слушатель" http-in, которая принимает информацию от контроллера, и, затем передаёт её в функцию "Обработка", которая формирует контроллеру ответ через http-response. Debug "Текст запроса" отображает тот JSON, который пришёл от контроллера.

Рассмотрим код функции "Обработка"

// Коды разрешенных карт доступа 
Cards = ["005500E64623",
         "00380073ABB6"
];
 
let myMsg = {}; // Сообщение для ответа
let now = new Date();
 
myMsg.date = now.getYear() + "-" + now.getMonth() + "-" + now.getDay() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
myMsg.interval = 10;
myMsg.messages = [];
let messCount = 0;
 
if (typeof msg.payload.messages != "undefined")
{
    for (var i = 0; i < msg.payload.messages.length; i++)
    {
        if (msg.payload.messages[i].operation)
        {
            switch (msg.payload.messages[i].operation)
            {
                case 'power_on':
                    addMessage = {};
                    addMessage.id = 10 + messCount;
                    addMessage.operation = "set_active";
                    addMessage.active = 1;
                    addMessage.online = 1;
                    myMsg.messages.push(addMessage);
                    break;
                case 'events':
                    addMessage = {};
                    addMessage.id = msg.payload.messages[i].id;
                    addMessage.operation = "events";
                    addMessage.events_success = msg.payload.messages[i].events.length;
                    myMsg.messages.push(addMessage);
                    break;
                case 'ping':
                    var open_door = flow.get('open_door') || 0;
                    if (open_door)
                    {
                        addMessage = {};
                        addMessage.id = 10 + messCount;
                        addMessage.operation = "open_door";
                        addMessage.direction = 0;
                        myMsg.messages.push(addMessage);
                        flow.set('open_door', false);
                    }
                    break;
                case 'check_access':
                    if (Cards.indexOf(msg.payload.messages[i].card) != -1)
                    {
                        addMessage = {};
                        addMessage.id = msg.payload.messages[i].id;
                        addMessage.operation = "check_access";
                        addMessage.granted = 1;
                        myMsg.messages.push(addMessage);
                    }
                    break;
            }
            messCount++;
        }
    }
}
msg.payload = myMsg;
return msg;

В переменной Cards мы описываем коды ключей, которые будут открывать нашу дверь. Далее формируем сообщение, отправляемое контроллеру, в зависимости от его запроса. Рассмотрим некоторые варианты сообщений - power_on отсылается при включении контроллера. Мы должны ответить, что всё слышим и переводим в активное состояние, отсылая ответ set_active. Событием events контроллер оповещает о новых событиях. В рамках данной статьи я рассматривать их не буду, они описаны на сайте производителя, наше дело-обработать их. И событие check_access формируется при подносе ключа к считывателю. Проверяем, есть ли он в нашей базе, и дадим сигнал на открытие двери в случае необходимости. Ещё контроллер будет отсылать нам сообщение ping для проверки связи с сервером - отвечаем, что сервер не упал и жив. Так же в ответ на пинг отправляем, что хотим открыть дверь вручную. Интервал отправки пинга контроллером настраивается в соответствующем пункте меню - Interval в секундах.

В строке Server Address указываем IP сервера с установленным Node-Red и не забываем добавить /z5r в конце. Work Mode соответственно WEB JSON.

Как видно, меньше шестидесяти строк кода, и мы можем удаленно управлять из Node-Red устройством Z5R-Web.

Скачать файл для импорта в Node-Red можно тут.

Раздел: Разное Теги: Z5R