Node-RED:Введение/Создание второго потока

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Создание второго потока[1]

Поток, который мы создадим в этом руководстве, чуть сложнее, чем тот, что мы создавали в статье «Создание первого потока». В нем мы будем получать данные из внешнего источника, а затем локально делать с их помощью что-то полезное.

  • Мы перейдем на внешний вебсайт;
  • Прочтем оттуда некоторую информацию;
  • Преобразуем эту информацию в полезную форму;

Добавляем ноду «inject»

В руководстве «Создание первого потока» мы использовали ноду «inject» (находится в списке «input») как кнопку, запускающую отправку сообщения в поток. В этом руководстве нода «inject» будет использоваться для отправки сообщения через регулярные промежутки времени.

Переместите ноду «inject» из левой панели в рабочую область Node-RED.

Сделайте двойной клик по ноде «inject», чтобы открыть меню ее редактирования. Задайте интервал отправки сообщений на 5 секунд.

Кликните на красную кнопку «Done», чтобы закрыть это меню.

Добавляем ноду «http request»

Ноду «http request» (находится в списке «function») можно использовать для извлечения данных из веб-страницы.

Добавив ноду «http request» в рабочую область, вставьте в поле «URL» этой ноды вот эту ссылку:

https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.csv

Опционально можно задать для этой ноды какое-нибудь понятное и удобное название.

Это страница сайта Геологической службы США с информацией о сильных землетрясениях, произошедших в течение последних 7 дней. Там много разной информации – на тот случай, если вы захотите поэкспериментировать с тем, чтобы создать поток на свой вкус (см. тут).

Добавляем ноду «csv»

Добавляем в поток ноду «csv» (находится в списке «function»), дважды кликаем по ней (чтобы открыть меню ее редактирования) и ставим галочку рядом с пунктом «first row contains column names».

Добавляем ноду «debug»

Добавляем в поток ноду «debug» (находится в списке «output»).

Соединяем ноды

  1. Соединяем выходной «контакт» ноды «inject» с входным «контактом» ноды «http request»;
  2. Соединяем выход ноды «http request» с входом ноды «csv»;
  3. Соединяем выход ноды «csv» с входом ноды «debug»;

Добавляем ноду «switch»

  1. Добавляем в поток ноду «switch» (находится в списке «function»);
  2. Подключаем выход ноды «csv» ко входу ноды «switch»;
  3. Вписываем в поле «Property» значение «msg.payload.mag»;
  4. В поле ниже задаем знак «>=» и значение «7»;

Добавляем ноду «change»

  1. Добавляем в поток ноду «change» (находится в списке «function»);
  2. Соединяем выход ноды «switch» со входном ноды «change»;
  3. Задаем свойства ноды «change» на «Set», «msg.payload» и «PANIC!»;

Добавляем ноду «debug»

Добавляем в поток ноду «debug», а затем соединяем ее вход с выходом ноды «change».

Выполняем развертку

На данный момент эти ноды существуют только в редакторе, поэтому нам нужно выполнить развертку этого потока на сервере.

Кликните на красную кнопку «Deploy» (она находится в правом верхнем углу редактора).

Выберите в правой панели вкладку «Debug» ( Ctrl + Пробел  или кликнув на кнопку настроек справа вверху, а затем на «View» > «Show sidebar», а затем кликнув на кнопку с жуком), а затем кликните на кнопку ноды «inject». На вкладке «Debug» должно появиться примерно такое сообщение:

msg.payload : Object
{"time":"2017-11-19T15:09:03.120Z","latitude":-21.5167,"longitude":168.5426,"depth":14.19,"mag":6.6,"magType":"mww","gap":21,"dmin":0.478,"rms":0.86,"net":"us","id":"us2000brgk","updated":"2017-11-19T17:10:58.449Z","place":"68km E of Tadine, New Caledonia","type":"earthquake","horizontalError":6.2,"depthError":2.8,"magError":0.037,"magNst":72,"status":"reviewed","locationSource":"us","magSource":"us"}

Вы также можете кликнуть на маленькую стрелочку в левой части сообщения – это раскроет его и сделает более удобочитаемым.

Если на сайте будет информация о землетрясении с магнитудой более 7 баллов, то справа появится сообщение вроде:

msg.payload : string(6)
PANIC!

В правой части каждой ноды «debug» находится зеленая кнопка, с помощью которой эту ноду можно либо включить, либо выключить.

Итого

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

Прямой импорт потока

Поток, который мы создали в этом руководстве, представлен в JSON-объекте ниже, и его можно импортировать прямо в редактор Node-RED. Для этого кликните на  Ctrl + I  или нажмите на кнопку настроек (с тремя вертикальными полосками) справа вверху, потом на «Import» > «Clipboard». В результате откроется новое меню – вставьте JSON-код ниже в поле посередине этого меню и нажмите на «Import».

[{"id":"e36406f2.8ef798","type":"inject","z":"f03b57d5.e525f8","name":"","topic":"","payload":"","payloadType":"str","repeat":"300","crontab":"","once":false,"x":130,"y":900,"wires":[["c3c50023.3bbed"]]},{"id":"c3c50023.3bbed","type":"http request","z":"f03b57d5.e525f8","name":"Recent Quakes","method":"GET","url":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.csv","tls":"","x":300,"y":900,"wires":[["8afc6cac.e0812"]]},{"id":"8afc6cac.e0812","type":"csv","z":"f03b57d5.e525f8","name":"","sep":",","hdrin":true,"hdrout":"","multi":"one","ret":"\\n","temp":"","x":470,"y":900,"wires":[["44779781.4190f8","6f0eb546.9e208c"]]},{"id":"44779781.4190f8","type":"debug","z":"f03b57d5.e525f8","name":"","active":true,"complete":false,"x":630,"y":900,"wires":[]},{"id":"6f0eb546.9e208c","type":"switch","z":"f03b57d5.e525f8","name":"","property":"payload.mag","propertyType":"msg","rules":[{"t":"gte","v":"7","vt":"num"}],"checkall":"true","outputs":1,"x":510,"y":960,"wires":[["d78d4aa8.8c8208"]]},{"id":"d78d4aa8.8c8208","type":"change","z":"f03b57d5.e525f8","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"PANIC!","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":650,"y":1020,"wires":[["72fddece.fac0d"]]},{"id":"72fddece.fac0d","type":"debug","z":"f03b57d5.e525f8","name":"","active":true,"complete":false,"x":750,"y":960,"wires":[]}]

См.также

Внешние ссылки