Node-Red + Z5R-WEB
В этой статье покажу простой пример, как подключить контроллер 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 можно тут.