Реализация двух входов в Node -RED

Вопрос:В моем текущем проекте мы пытаемся реализовать текущую функциональность приложения, используя Node -RED. Ниже приведена функциональность. Здесь состояние Fire получает два входа: (1) TemperatureSensor (2) SmokeDetector. Оба датчика публикуют данные с использованием издателей MQTT. и Firestate компонент может получать данные через субцибер MQTT. Состояние пожара может выдавать результат на основе этих двух параметров, которые if

Вопрос:

В моем текущем проекте мы пытаемся реализовать текущую функциональность приложения, используя Node -RED. Ниже приведена функциональность. Здесь состояние Fire получает два входа: (1) TemperatureSensor (2) SmokeDetector. Оба датчика публикуют данные с использованием издателей MQTT. и Firestate компонент может получать данные через субцибер MQTT.

Состояние пожара может выдавать результат на основе этих двух параметров, которые if temperaturevalue > 70 and Smokevalue == true. В связи с этим мой вопрос: Поддерживает ли Node -RED функциональность двух входов? Если да, то как мы можем реализовать эту функциональность? Если нет, то.. Могу ли я сказать, что две функции ввода не могут быть реализованы с помощью Node -RED???? Как мы видели, Node -RED обеспечивает несколько выходов, но не входы.

Лучший ответ:

Вам нужно будет использовать функцию node и использовать переменную context, чтобы сохранить состояние между сообщениями и использовать тему сообщения, чтобы определить, с какого ввода поступило сообщение.

Что-то вроде этого:

context.temp = context.temp || 0.0; context.smoke = context.smoke || false; if (msg.topic === ‘smokeDetector’) { context.smoke = msg.payload; } else if (msg.topic === ‘tempSensor’) { context.temp = msg.payload; } if (context.temp >= 70.0 && context.smoke) { return {topic: ‘fireState’, payload: ‘FIRE!’} } else { return null }

Более подробную информацию можно найти в функции node doc здесь

Ответ №1

Вы можете подключить любое количество входов к любому node – просто имейте в виду, что ваш node будет видеть только одно входное сообщение одновременно. Не существует встроенной агрегации msg просто потому, что есть несколько входных проводов.

Вместо этого задача агрегирования нескольких входных msgs обрабатывается определенными узлами, некоторые из которых встроены в основной сервер node, и некоторые из них были внесены сообществом. Какой из них выбрать, зависит от конкретного варианта использования. Например, должны ли два объекта быть добавлены в массив или объединены в один большой объект? Только вы будете знать, что хотите – node -red не делает никаких предположений, но дает вам разные узлы для обработки многих распространенных случаев использования. Для любых других случаев использования всегда существует общий function node, в котором вы можете использовать javascript для реализации любого поведения, которое вам нужно.

Для вашего первоначального вопроса вы ищете способ слияния 2 полезных данных с разных датчиков в один объект. Для этого могут использоваться основные узлы join и change, а также узлы node-red-contrib-bool-gate и node-red-contrib-aggregator, найденные в библиотеке потоков .

Здесь приведен пример объединения двух входов датчика с помощью join node, а затем с помощью switch node с выражением payload.temp > 70 and payload.smoke, чтобы определить, отправлять ли сообщение по тегу:

[{ “ID”: “87df68f8.51ad58”, “типа”: “впрыснуть”, “г”: “f9a2eec9.c2e26”, “имя”: “,” тема “:” дым “,” полезная нагрузка “:” истина “,” PayloadType “:” BOOL “,” повторить”: “,” кронтаб”: “,” один раз “ложь” onceDelay “: 0,1” х “: 160,” у “: 1180,” провода “: [[” da4182a8.47939 “]]}, {” идентификатор “:” 3ad419ec.1453a6 “,” тип”: “впрыснуть”, “г”: “f9a2eec9.c2e26”, “название”: “,” тема “:” дым “,” полезная нагрузка “:” ложь “,” PayloadType “:” BOOL “,” повторить”: “,” кронтаб”: “,” когда “ложь” onceDelay “: 0,1” х “: 170,” у “: 1140,” провода “: [[” da4182a8.47939 “]]}, {” идентификатор “:” a45b3cb0.f3312 “,” тип”: “впрыснуть”,” г “:” f9a2eec9.c2e26″, “имя”: “,” тема “:” темп “,” полезная нагрузка “:” 65 “,” PayloadType “:” номер “,” повторить”: “,” кронтаб”: “,” один раз “ложь” onceDelay “: 0,1” х “: 160,” у “: 1220,” провода “: [[” da4182a8.47939 “]]}, {” идентификатор “:” a3b07d81.e6b17″, “типа”: “впрыснуть”, “г”: “f9a2eec9.c2e26”, “имя”: “,” тема “:” темп “,” полезная нагрузка “:” 75 “,” PayloadType “:” Num “” повторить”: “,” кронтаб”: “,” один раз “ложь” onceDelay “: 0,1” х “: 160,” у “: 1260,” провода “: [[” da4182a8. 47939 “]]}, {” id “:” da4182a8.47939 “,” type “:” join “,” z “:” f9a2eec9.c2e26 “,” name “:” join payloads “,” mode “:” custom “” Буй л.д. “:” объект “” свойство “:” полезная нагрузка “,” PropertyType “:” сообщение “,” ключ “:” тема “,” столяр “:” п “,” joinerType “:” ул “,” аккумулировать “: правда,” тайм-аут “:” ,” подсчет “:” 2 “,” reduceRight “ложь” reduceExp”: “,” reduceInit”: “,” reduceInitType”: “,” reduceFixup”: “,” х “: 430,” у “: 1200,” провода “: [[” 315c9ce3.570d64 “,” 50f981b4.be654 “]]}, {” идентификатор “:” 315c9ce3.570d64 “,” тип “:” switch “,” z”: “f9a2eec9.c2e26”, “name “:” Trigger Alarm? “,” property “:” payload.temp > 70 и payload.smoke “,” propertyType “:” jsonata “, правила”: [{” Т “:” истина “}],” checkall “:” истина “,” ремонт “ложь” выходы”: 1, “X”: 640, “у “: 1200,” провода “: [[” 50f981b4.be654 “]]}, {” идентификатор “:” 50f981b4.be654 “,” тип “:” отладки”, “г”: “f9a2eec9.c2e26”, “название”: “,” активный “: правда,” tosidebar “: правда,” консоль “ложь” tostatus “ложь” полной “:” ложь “,” х “: 690,” у “: 1260,” провода”: []}]

Оцените статью
Добавить комментарий