Node-RED:Библиотеки/node-red-node-rbe
Модуль «node-red-node-rbe»[1]
Эта нода добавляет в Node-RED возможность пропускать или не пропускать дальше в поток сообщения в зависимости от того, отличается ли новое значение от предыдущего (RBE-режим), и от того, попадает ли новое значение в заданный диапазон (deadband- и narrowband-режимы).
Установка
Запустите в пользовательской директории Node-RED (обычно это «~/.node-red») команду ниже:
npm i node-red-node-rbe
Использование
Нода «RBE» работает «потопиково». То есть одна нода «RBE» может одновременно обрабатывать разные серии сообщений отдельно друг от друга – согласно их значениям в свойстве «msg.topic». Допустим, у вас есть сообщения, в «msg.topic» которых хранится «humidity» – они будут обрабатывать как один поток сообщений, и есть сообщения, в «msg.topic» которых хранится «light» – они будут обрабатываться как другой поток сообщений.
Режим работы ноды «RBE» задается в поле «Mode».
RBE-режимы
В этих режимах – «block unless value changes» («пропустить, если значение изменилось») и «block unless value changes (ignore initial value)» («пропустить, если значение изменилось, но игнорировать начальное значение») – нода не будет пропускать сообщения дальше в поток, если новое значение в «msg.payload» будет аналогично предыдущему. Работает с числами и строками.
Этот режим полезен для фильтрации повторяющихся сообщений (имеющих одно и то же значение), что позволяет, например, снизить нагрузку на канал связи и т.д.
Deadband- и narrowband-режимы
В deadband-режимах – «block unless value change is greater or equal to» («пропустить, если новое значение больше или равно...») и «block unless value change is greater than» («пропустить, если новое значение больше, чем...») – для пропуска сообщения дальше в поток в «msg.payload» входящего сообщения должно содержаться число, находящееся за пределами диапазона, который рассчитывается относительно предыдущего значения.
В narrowband-режимах – «block if value change is greater or equal to» («блокировать, если новое значение больше или равно...») и «block if value change is greater than» («блокировать, если новое значение больше, чем...») – нода «RBE», наоборот, будет пропускать дальше только те сообщения, значения которых попадают в диапазон, рассчитываемый относительно предыдущего значения. Это можно использовать, например, чтобы игнорировать случайные данные и прочие значения, выходящие за пределы нужного диапазона.
В поле, которое находится ниже, можно задать, по какому значению будет выполняться сравнение – по выходящему или входящему. В первом случае значения будут примерно держаться заданного диапазона, тогда как во втором будет достаточно двух «плохих» значений подряд, чтобы с их помощью серьезно сместить диапазон в какую-либо сторону. Второй вариант может пригодиться, например, для равномерного увеличения или уменьшения значения.
Диапазон для deadband- и narrowband-режимов можно задать с помощью обычного числа (вроде «10») или процентов (вроде «5%»).
К примеру, если у вас выставлен режим «block unless value change is greater or equal to», предыдущим значением было «100», а диапазон составляет 10%, то значение «110» пройдет, а «109» – нет. Следующим значением, которое пройдет, будет «121» (110 + 10% = 121).
Нода «RBE» полезна главным образом при работе с разными потоками сообщений. Т.е. одна такая нода позволяет одновременно работать, например, с сообщениями, присылаемыми от датчика температуры, и сообщениями из интернет-источника о курсе какой-то валюты.
Нода «RBE» принимает только числа и строки, значения в которых можно пропарсить (вроде «18.4 C» или «$500»).
Ноды
Функция
См.также
Внешние ссылки