Содержание
- Введение
- Для создания приложения вам понадобится
- Шаг 1. Создайте стартовое приложение Watson IoT Platform
- Шаг 2. Создайте экземпляр сервиса Business Rules
- Шаг 3. Определите бизнес-правила с помощью Rule Designer
- Шаг 4. Выполните развертывание созданных правил и их тестирование на наборе данных
- Шаг 5. Изучите новый поток Node-RED
- Шаг 6. Добавьте новые узлы к потоку Node-RED
- Шаг 7. Выполните развертывание и тестирование нового потока
- Шаг 8. Модифицируйте бизнес-правила
- Шаг 9. Сравните температуру комфорта, рассчитанную по данным датчика, с данными Insights for Weather
- Заключение
- Ресурсы для скачивания
- Похожие темы
- Комментарии
Создание интеллектуальных датчиков с использованием сервисов Bluemix Business Rules, Watson IoT Platform и Insights for Weather
Благодаря сервису Watson Internet of Things (IoT) Platform на платформе IBM Bluemix, ваши приложения могут использовать информацию с подключенных к сети устройств. Например, можно создавать приложения, которые будут считывать показания с датчиков температуры и в зависимости от их значений инициировать какое-либо действие. Сервис Business Rules платформы Bluemix обеспечивает гибкое управление принятием решений и позволяет фиксировать решения в виде внешних бизнес-правил, используемых приложениями.
Изучив данное руководство, вы сможете с помощью сервисов Bluemix использовать в решении для IoT мощные возможности бизнес-правил. В качестве начального проекта решения по управлению энергопотреблением для "разумного" дома воспользуйтесь предлагаемым примером кода.
Для создания приложения вам понадобится
- Учетная запись IBM Bluemix. Если у вас нет учетной записи Bluemix, можете начать с бесплатной пробной версии.
- Среда Eclipse IDE for Java EE Developers, пакет из Juno SR2. Установите подключаемые модули Rule Designer для сервиса Business Rules.
- Знание Java™,принципов работы веб-сервисов, интерфейсов Representational State Transfer (REST) API и JavaScript Object Notation (JSON).
- (Факультативно) представление о Watson IoT Platform, Node-RED и платформе IBM Operational Decision Manager (ODM) – используемом на территории организации продукте, на базе которого функционирует сервис Business Rules.
- Примеры кода, которые можно получить с GitHub: примеры проектов Rule Designer в составе проекта Sensor Rules..
Шаг 1. Создайте стартовое приложение Watson IoT Platform
Начните с изучения того, как существующее стартовое приложение IoT Platform использует имитированные показания датчиков и простые правила, определенные в редакторе потока Node-RED, чтобы генерировать предупреждения о повышении температуры.
- Создайте стартовое приложение IoT Platform, следуя инструкциям, приведенным в
документе Creating apps with the Internet of Things starter application
(Создание приложений с помощью стартового приложения Интернета устройств) в
разделе Usage (Использование). Затем откройте редактор потока Node-RED, как
показано на следующем снимке экрана.
- Настройте в Node-RED имитацию датчика и узлы следующим образом: узел
IBM Iot App In
соединяется с имитацией устройства, а узелdevice data
отображает на панели отладки содержимое объекта сообщения, которое поступает от имитации устройства. - Выполните развертывание потока и посмотрите на сообщения о статусе
Temperature
3. на панели отладки справа. - С помощью симулятора датчика увеличьте значение температуры и посмотрите на
выходные данные узла
device data
на панели отладки справа. Обратите внимание на элемент сообщенияpayload
который содержит элементd
имеющий атрибутыname
,temp
,humidity
иobjectTemp
4. как показано на следующем снимке экрана. В этом формате содержит данные имитация датчика. - Изучите узел
temp thresh
и просмотрите правила, которые определяют, находится ли температура в безопасных пределах, как показано на следующем снимке экрана. - С помощью симулятора датчика увеличьте значение температуры и посмотрите, как
изменятся сообщения на панели отладки справа (см. следующий снимок экрана).
Чтобы увидеть, как по правилам генерируется другое сообщение с предупреждением о
высокой температуре, поднимите температуру выше 40 градусов Цельсия
Остальные части руководства посвящены использованию сервиса Business Rules для встраивания комплексных правил в созданное вами приложение IoT Platform, называемое также приложением IoT. Эти правила используются для расчета температуры комфорта по данным о температуре и влажности с датчика, а также для генерирования предупреждений в зависимости от температуры комфорта и типа датчика (внутренний или наружный).
Шаг 2. Создайте экземпляр сервиса Business Rules
Теперь, когда вы ознакомились с приложением IoT, можно создать экземпляр сервиса Business Rules, который ваше приложение будет использовать для применения комплексных бизнес-правил. Эти бизнес-правила не определяются в редакторе потока Node-RED приложения IoT; они создаются и применяются при помощи сервиса Business Rules.
- Войдите на платформу Bluemix создайте пространство и дайте ему имя, например,
dev
. - Создайте экземпляр сервиса Business Rules, как описано в разделе Creating a Business Rules service instance (Создание экземпляра сервиса Business Rules) документации по Bluemix. В категории Web and Application Services, каталога Bluemix выберите сервис Business Rules .
- В разделе Add Service (Добавить сервис) введите
dev
в качестве имени пространства иMyApp
в качестве имени приложения IoT, чтобы выполнить привязку экземпляра сервиса Business Rules. Нажмите кнопку CREATE. Приложение IoT необходимо разместить повторно. - Изучите вкладку Connection Settings (Настройки подключения) для экземпляра
сервиса Business Rules, показанную на следующем снимке экрана. Поле URL содержит
ID экземпляра сервиса (начинающийся с
brsv2-
) Также на этой вкладке отображаются имя пользователя и пароль для работы с экземпляром сервиса. Они используются на этапе Шаг 4 при развертывании правил в экземпляр сервиса и Шаг 6 4. при конфигурировании потока Node-RED приложения IoT для применения правил с помощью этого экземпляра.
Шаг 3. Определите бизнес-правила с помощью Rule Designer
Теперь необходимо определить бизнес-правила, которые будет применять ваше приложение IoT, используя экземпляр сервиса. Для создания таких правил служит средство Rule Designer на базе Eclipse.
- Установите в вашей среде Eclipse Juno 4.2.2 IDE средство Rule Designer для сервиса Business Rules, как описано в документации по Developing для Business Rules.
- Загрузите проекты
sensor-xom
иsensor-rules
по ссылке в документации. Импортируйте их в свое рабочее пространство Eclipse и переключитесь в представление Rule, чтобы открыть Rule Explorer. - Изучите модель объекта исполнения (XOM) – модель времени исполнения, к которой
применяются правила. XOM определена в Java-проекте
sensor-xom
но может быть задана и в формате XML. Изучите классeSensor
представляющий информацию, которая поступает с датчика. Этот класс определяется с помощью следующих атрибутов. Обратите внимание, что первые четыре атрибута в этом списке соответствуют данным сообщения на этапе Шаг 1. Создайте стартовое приложение Watson IoT Platform..name
(имя датчика)temp
(температура с датчика в градусах Цельсия)humidity
(влажность в процентах, в диапазоне от 0 до 100)objectTemp
(температура объекта в градусах Цельсия)type
(тип датчика, например "indoor" (внутренний) или "outdoor" (наружный))feelsLikeTemp
(температура комфорта в градусах Цельсия, вычисляемая по значениямtemp
иhumidity
)warning
(предупреждение о температуре, генерируемое в зависимости от значенияfeelsLikeTemp
)Этот класс также содержит метод
computeFeelsLikeTemperature()
который служит для вычисления температуры комфорта на основе значений влажности и температуры. - Изучите проект
sensor-rules
и элемент модели бизнес-объектов (BOM)sensors
созданный на основе модели XOM с помощью инструмента Rule Designer. Этот элемент BOM уже создан в примере кода, используемом для данного руководства. Он содержит классSensor
соответствующий классуSensor
определенному в Java, как показано на следующем снимке экрана. - Изучите содержимое папки
rules
в проекте правилsensor-rules
Она содержит таблицу принятия решенийgenerateWarning
и основной поток правил, как показано на следующем снимке экрана. Таблица принятия решенийgenerateWarning
служит для генерирования предупреждений о температуре в зависимости от типа датчика и значения температуры комфорта.Кликните, чтобы увидеть увеличенное изображение
Начальное действие потока
mainRuleflow
вычисление температуры комфорта по значениям температуры и влажности, определяемым входными данными, как показано на следующем снимке экрана.Кликните, чтобы увидеть увеличенное изображение
Затем поток правил активирует таблицу принятия решений
generateWarning
в пакетеsensor
.После запуска набора правил поток применяет правила в заданной последовательности. - С помощью параметров набора правил определите контракт между бизнес-логикой и
своим клиентским приложением. Заданные параметры набора правил можно
просмотреть, щелкнув правой кнопкой мыши на проекте
sensor-rules
и выбрав команду Properties. Входной/выходной параметр носит имяsensor
и имеет типSensor
, как показано на следующем снимке экрана. Имя этого параметра используется на этапе Шаг 6. Добавьте новые узлы к потоку Node-RED когда вы конфигурируете поток Node-RED для предоставления входных данных правилам в приложении IoT
Шаг 4. Выполните развертывание созданных правил и их тестирование на наборе данных
Чтобы выполнять только что определенные бизнес-правила из экземпляра сервиса Business Rules, их необходимо развернуть в этот экземпляр, созданный на этапе Шаг 2. Создайте экземпляр сервиса Business Rules. Правила развертываются в виде архивов с именами RuleApps из инструмента Rule Designer на сервер выполнения правил Rule Execution Server, ассоциированный с этим экземпляром сервиса. Выполните следующие действия.
- С помощью инструмента Rule Designer создайте проект конфигурации Rule Execution Server, следуя указаниям, приведенным в документе Creating a Rule Execution Server configuration(Создание конфигурации Rule Execution Server). В полях URL, Login и Password в окне Server Configuration используйте информацию со вкладки Connection Settings (Настройки подключения) для экземпляра сервиса Business Rules, созданного на этапе Шаг 2 , и нажмите кнопку Test Connection (Проверить подключение).
- С помощью инструмента Rule Designer создайте проект RuleApp Project с именем
и
SensorRuleApp
, проект правилsensor-rules
. На карте проектов правил Rule Project Map нажмите кнопку Create RuleApp project (Создать проект RuleApp). (Следуйте указаниям этапа "Шаг 3. Создайте RuleApp" в разделе Authoring rules and creating a RuleApp (Составление правил и создание RuleApp) документации по Bluemix). - Для развертывания RuleApp щелкните правой кнопкой мыши на проекте
SensorRuleApp
и выберите команду RuleApp > Deploy. Затем выберите тип развертывания Increment RuleApp major version (Увеличить номер основной версии RuleApp) как описано в разделе Deploying the RuleApp to the Business Rules service instance(Развертывание RuleApp в экземпляр сервиса Business Rules) документации по Bluemix. В окне Deploy a RuleApp to Rule Execution Server выберите конфигурацию Rule Execution Server для вашего экземпляра сервиса Business Rules и убедитесь, что установлен флажок Deploy XOM of rule projects and archives contained in the RuleApp (Развертывать XOM проектов правил и архивов, содержащихся в RuleApp) как показано на следующем снимке экрана. Нажмите кнопку Finish. - Перейдите к своему экземпляру сервиса Business Rules на панели управления
Bluemix и откройте вкладку Decision Services чтобы увидеть
развернутые приложения RuleApps и наборы правил. При необходимости выберите
ссылку Refresh как показано на следующем снимке экрана
- Чтобы открыть страницу Details с подробной информацией о наборе правил,
щелкните на имени набора (sensorrules 1.0 в данном примере).
Перейдите на вкладку JSON и нажмите кнопку WADL (в правом
нижнем углу на следующем снимке экрана) и убедитесь, что для данного набора
правил корректно сгенерирован язык описания. Если обнаружены ошибки, вернитесь к
этапу Шаг 3. Определите бизнес-правила с помощью Rule Designer чтобы
правильно сконфигурировать XOM.
Обратите внимание: URL-адрес для данного набора правил содержит версии RuleApp и набора правил, определяемые при развертывании RuleApp в соответствии с выбранным типом развертывания. Этот URL используется на этапе Шаг 6. Добавьте новые узлы к потоку Node-RED когда вы конфигурируете поток Node-RED приложения IoT для применения набора правил.
- Протестируйте набор правил на наборе данных в консоли Bluemix, выполнив
следующие действия.
- На странице Details с информацией о наборе правил выберите ссылку Back to Decision Services чтобы вернуться на страницу Decision Services. Для тестирования набора правил щелкните по стрелке рядом с ней. Загрузится страница Test с панелями Decision Request и Decision Response. Панель Decision Request заполнена примером данных, а панель Decision Response пуста.
- Сгенерировав набор данных JSON, заполните его тестовыми данными, как
показано на следующем снимке экрана, и нажмите кнопку Run
Test(Запустить тест). К тестовым данным применяется набор
правил, и отклик после выполнения этого набора отображается на панели
Decision Response. Этот отклик содержит значения температуры комфорта и
предупреждение, полученные в результате вычисления по применяемым
правилам. Более подробная информация содержится в разделе Testing a ruleset (Тестирование набора правил) документации по Bluemix.
Шаг 5. Изучите новый поток Node-RED
Теперь вам предстоит расширить поток Node-RED приложения IoT, чтобы применять правила, развернутые в экземпляр сервиса Business Rules. По этим правилам вычисляется температура комфорта и генерируются необходимые предупреждения.
На панели управления Bluemix перейдите к вашему приложению IoT и откройте редактор потока Node-RED. На следующем снимке экрана показано, как выглядит дополненный поток.

Кликните, чтобы увидеть увеличенное изображение
Узлы data changed?
(изменились ли данные?) и data changed
(данные изменились) позволяют гарантировать, что правила применяются только если
температура или влажность на датчике изменились на заданное значение, а не для
каждого интервала, в котором происходит получение данных. Узел create rules
input
(создать вход правил) преобразует данные сообщения в требуемый для
правил формат, а узел rules input
(вход правил) отображает эти данные.
Узел Sensor rules
(Правила датчика) запускает набор правил, развернутый
в экземпляр сервиса Business Rules service, а узел rules output
(выход
правил) отображает результат применения этих правил. Узлы get
warning
(получить предупреждение), new warning
(новое
предупреждение) и show warning
(показать предупреждение) выполняют
получение и отображение предупреждения, которое генерируется по правилам в случае
изменения данных.
Шаг 6. Добавьте новые узлы к потоку Node-RED
Добавьте новые узлы к потоку Node-RED приложения IoT.
Вы можете воспользоваться быстрым способом – скопируйте следующий поток JSON в буфер обмена и затем импортируйте его в Node-RED с помощью команды Import > Clipboard (или сочетания клавиш Ctrl-I).
[{"id":"1f968581.e0697a","type":"http request","z":"fb2728c1.04d8d8","name":"Sensor rules","method":"POST","ret":"obj","url":"ruleset_url","x":654.5555801391602,"y":405.00000762939453,"wires":[["3afab48f.c5054c","e07eb510.1f8148"]]},{"id":"3afab48f.c5054c","type":"debug","z":"fb2728c1.04d8d8","name":"rules output","active":true,"console":"false","complete":"payload.sensor","x":830.5283584594727,"y":360.50000762939453,"wires":[]},{"id":"e07eb510.1f8148","type":"function","z":"fb2728c1.04d8d8","name":"get warning","func":"context.global.set(\"sensorFeelsLikeTemp\",msg.payload.sensor.feelsLikeTemp);\ncontext.global.set(\"sensorWarning\",msg.payload.sensor.warning);\n\nmsg.payload = msg.payload.sensor.warning;\nreturn msg;\n","outputs":1,"noerr":0,"x":825.5279312133789,"y":403.9722366333008,"wires":[["c55fc999.8f0318"]]},{"id":"6be8839.f94177c","type":"debug","z":"fb2728c1.04d8d8","name":"show warning","active":true,"console":"false","complete":"payload","x":1213.363624572754,"y":403.0833206176758,"wires":[]},{"id":"71fc0d5e.8bf2d4","type":"function","z":"fb2728c1.04d8d8","name":"create rules input","func":"msg.payload.sensor = msg.payload.d;\nmsg.payload.sensor.type=\"outdoor\";\nmsg.payload.sensor.warning=\"\";\ndelete msg.payload.d;\ndelete msg.payload.dataChanged;\nreturn msg;","outputs":1,"noerr":0,"x":449.74060821533203,"y":404.12271881103516,"wires":[["1f968581.e0697a","f1266aa4.b81db8"]]},{"id":"2f97466f.dc436a","type":"function","z":"fb2728c1.04d8d8","name":"data changed?","func":"var dataChanged = false;\nif ((msg.payload.d.temp >= context.global.get(\"currentTemp\") + 2) \n ||(msg.payload.d.temp <= context.global.get(\"currentTemp\") - 2)){\n dataChanged = true;\n} else if ((msg.payload.d.humidity >= context.global.get(\"currentHumidity\") + 5) \n ||(msg.payload.d.humidity <= context.global.get(\"currentHumidity\") - 5)){\n dataChanged = true;\n}\nif (dataChanged){\n context.global.set(\"currentTemp\",msg.payload.d.temp);\n context.global.set(\"currentHumidity\",msg.payload.d.humidity);\n msg.payload.dataChanged = \"true\";\n} else {\n msg.payload.dataChanged = \"false\";\n}\nmsg.headers = { \"Content-type\" : \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":449.5148162841797,"y":311.5407180786133,"wires":[["a7d743f4.3e8fa"]]},{"id":"f1266aa4.b81db8","type":"debug","z":"fb2728c1.04d8d8","name":"rules input","active":true,"console":"false","complete":"payload.sensor","x":651.3995132446289,"y":361.2501907348633,"wires":[]},{"id":"a7d743f4.3e8fa","type":"switch","z":"fb2728c1.04d8d8","name":"data changed","property":"payload.dataChanged","propertyType":"msg","rules":[{"t":"eq","v":"true","vt":"str"}],"checkall":"true","outputs":1,"x":448.17554473876953,"y":358.5407485961914,"wires":[["71fc0d5e.8bf2d4"]]},{"id":"c55fc999.8f0318","type":"rbe","z":"fb2728c1.04d8d8","name":"new warning","func":"rbe","gap":"","start":"","x":995.4109878540039,"y":403.5502395629883,"wires":[["6be8839.f94177c","86eba0fb.3365"]]}]
Соедините выход узла IBM IoT App In
со входом узла data
changed?
. Дважды щелкните узел Sensor rules
и замените
ruleset_url
URL-адресом со страницы Details набора
правил, который вы развернули в экземпляр сервиса Business Rules на этапе Шаг
4. Установите флажок Use basic authentication(Использовать обычную
аутентификацию) и задайте имя пользователя и пароль, используя
информацию со вкладки Connection Settings на этапе Шаг 2. Окно Edit http
request node для узла Sensor rules
должно выглядеть так, как в примере
на следующем снимке экрана:

Кликните, чтобы увидеть увеличенное изображение
Или же вы можете создать узлы, выполнив следующие шаги:
- В редакторе потока Node-RED добавьте узел function (он
находится в категории function фильтра узлов на панели слева) с
именем
data changed?
. Добавьте следующий код, чтобы обновлять текущие значения температуры и влажности в глобальном контексте Node-RED, если они изменяются на определенную величину, и установите для свойстваmsg.payload.dataChanged
значениеtrue
.var dataChanged = false; if ((msg.payload.d.temp >= context.global.get("currentTemp") + 2) ||(msg.payload.d.temp <= context.global.get("currentTemp") - 2)){ dataChanged = true; } else if ((msg.payload.d.humidity >= context.global.get("currentHumidity") + 5) ||(msg.payload.d.humidity <= context.global.get("currentHumidity") - 5)){ dataChanged = true; } if (dataChanged){ context.global.set("currentTemp",msg.payload.d.temp); context.global.set("currentHumidity",msg.payload.d.humidity); msg.payload.dataChanged = "true"; } else { msg.payload.dataChanged = "false"; } msg.headers = { "Content-type" : "application/json"}; return msg;
Значения, сохраняемые в глобальном контексте, доступны для всех узлов данного потока. Также настройте заголовки сообщений так, чтобы указать, что данные представлены в формате JSON.
Соедините выход узла
IBM IoT App In
со входом узлаdata changed?
. - Затем добавьте узел switch (он находится в категории
function фильтра узлов на панели слева) с именем
data changed
, чтобы проверять, имеет ли свойствоmsg.payload.dataChanged
значениеtrue
. Сконфигурируйте его как показано на следующем снимке экрана. Соедините выход узлаdata changed?
со входом узлаdata changed
. - Добавьте узел function с именем
create rules input
. Эта функция инициализирует входной параметр набора правилsensor
который вы создали на этапе Шаг 3. Определите бизнес-правила с помощью Rule Designer полученными от датчика данными. Чтобы инициализировать элемент сообщенияsensor
значением элементаd
используйте следующий код. Он также инициализирует атрибутsensor.type
значением"outdoor"
, а атрибутsensor.warning
пустой строкой.msg.payload.sensor = msg.payload.d; msg.payload.sensor.type="outdoor"; msg.payload.sensor.warning=""; delete msg.payload.d; delete msg.payload.dataChanged; return msg;
Чтобы правила применялись только тогда, когда температура или влажность на датчике изменяются на заданную величину, соедините выход узла
data changed
со входом узлаcreate rules input
. - Добавьте узел debug (он находится в категории
output фильтра узлов на панели слева) с именем
rules input
. Задайте для выхода значениеmsg.payload.sensor
чтобы распечатать значения входных данных правил, как показано на следующем снимке экрана. Соедините выход узлаcreate rules input
со входом узлаrules input
как показано на следующем снимке экрана. - Добавьте узел http request node (он находится в категории
function фильтра узлов на панели слева) с именем
Sensor rules
.Используйте этот узел для применения правил, развернутых в экземпляр сервиса Business Rules, как веб-сервис, работающий на основе REST API. Возьмите значение URL со страницы Details набора правил, который вы развернули в экземпляр сервиса Business Rules на этапе Шаг 4. Выполните развертывание созданных правил и их тестирование на наборе данных а имя пользователя и пароль – со вкладки Connection Settings на этапе Шаг 2. Создайте экземпляр сервиса Business Rules. Соедините выход узлаcreate rules input
со входом узлаSensor rules
. - Добавьте узел debug с именем
rules output
. Задайте для выхода значениеmsg.payload.sensor
чтобы распечатать значения данных с датчика после вычислений по правилам. Соедините выход узлаSensor rules
со входом узлаrules output
. - Добавьте узел function с именем
get warning
. Чтобы сохранять температуру комфорта и сгенерированные по правилам предупреждения в глобальном контексте для использования в будущем, воспользуйтесь следующим кодом. Возвратите предупреждение в виде данных сообщения. Соедините выход узлаSensor rules
со входом узлаget warning
.context.global.set("sensorFeelsLikeTemp",msg.payload.sensor.feelsLikeTemp); context.global.set("sensorWarning",msg.payload.sensor.warning); msg.payload = msg.payload.sensor.warning; return msg;
- Добавьте узел rbe (он находится в категории
function фильтра узлов на панели слева) с именем
new warning
. Для параметра Mode (Режим) выберите значение (блокировать, если значение не изменяется). Соедините выход узлаget warning
со входом узлаnew warning
. - Добавьте узел debug с именем
show warning
. Задайте для выхода значениеmsg.payload
чтобы распечатать предупреждение. Соедините выход узлаnew warning
со входом узлаshow warning
.
Шаг 7. Выполните развертывание и тестирование нового потока
Убедитесь, что новые узлы соединены так, как описано на этапе Шаг 5. Изучите
новый поток Node-RED. Разверните новый поток и измените температуру на
датчике не менее чем на 2 градуса. В панели отладки отобразятся выходные данные
узлов rules input
и rules output
– это означает, что после
изменения температуры на датчике на 2 градуса правила были выполнены.
Затем измените влажность на датчике и проследите, как меняется узел rules
output
на панели отладки. Также обратите внимание на предупреждения,
отображаемые в выходных данных узла show warning
– например
"Below freezing point!"
("Ниже нуля") , если температура комфорта
становится минусовой.
На следующем снимке экрана представлен узел rules output
после того, как
температура на датчике стала равной 27 градусов Цельсия, 34 градуса Цельсия и 20
градусов Цельсия при влажности 78%. Обратите внимание, что температура комфорта
рассчитывается по правилам, а предупреждения генерируются в зависимости от
температуры комфорта и типа датчика.

Кликните, чтобы увидеть увеличенное изображение
Теперь вы можете использовать выходные данные правил. Например, можно создать уведомление для мобильных устройств с помощью доступного в Bluemix сервиса IBM Push Notification. Вы также можете воспользоваться сервисом Watson Text to Speech, чтобы преобразовать текст предупреждения в речь.
Шаг 8. Модифицируйте бизнес-правила
Теперь мы модифицируем бизнес-правила и проверим, применяет ли измененные правила приложение IoT.
- С помощью Rule Designer измените правила в проекте
sensor-rules
. В таблице принятия решенийgenerateWarning
замените значение35
на30
в выделенной строке (см. следующий снимок экрана), чтобы предупреждениеRising temperatures, limit outdoor time in daylight
(Температура повышается; ограничьте пребывание на улице в дневное время) генерировалось при значениях температуры комфорта, больших или равных не 35, а 30 градусов Цельсия. Сохраните изменения - Разверните
SensorRuleApp
2. в экземпляр сервиса Business Rules. В окне "Deploy a RuleApp to Rule Execution Server" выберите тип развертывания Replace RuleApp version (Заменить версию RuleApp). - Измените значение температуры в симуляторе датчика.
На панели отладки вы увидите, что предупреждение для температуры комфорта в диапазоне от 30 до 35 градусов Цельсия изменилось на
'Rising temperatures, limit outdoor time in daylight'
.Вам не требуется вносить изменения в приложение IoT, чтобы новые правила начали действовать, поскольку для RuleApp был выбран тип развертывания Replace RuleApp version .
Если для типа развертывания RuleApp выбрано значение Increment the RuleApp major version (Увеличить номер основной версии RuleApp) или Increment the RuleApp minor version (Увеличить номер вспомогательной версии RuleApp) измените URL в узле
Sensor rules
который вы добавили на этапе Шаг 6. Добавьте новые узлы к потоку Node-RED чтобы он указывал на самую последнюю версию набора правил. Разверните последние изменения в редакторе Node-RED и убедитесь, что начала действовать новая версия правил. - В потоке Node-RED установите для свойства
msg.payload.sensor.type
узлаcreate rules input
значение"indoor"
, 4. и посмотрите, как изменятся выходные данные правила и предупреждение при изменении температуры или влажности, получаемых с внутреннего датчика. Чтобы ввести правила, учитывающие расположение внутренних датчиков в доме, можно добавить в таблицу принятия решенийgenerateWarning
такие строки, как"living room"
(гостиная) и"bedroom"
(спальня) для различных типов внутренних датчиков.
В дальнейшем вы сможете использовать этот стартовый проект правил, расширив модели XOM и BOM и добавив новые правила, чтобы генерировать предупреждения в зависимости от времени суток (например, для дневных и ночных часов). Вы можете попробовать дифференцировать дневные часы для будних и выходных дней. Кроме того, можно задать дополнительные условия для разных времен года, как показано на следующем снимке экрана (это не входит в пример кода).

Кликните, чтобы увидеть увеличенное изображение
Шаг 9. Сравните температуру комфорта, рассчитанную по данным датчика, с данными Insights for Weather
Для сравнения температуры комфорта, рассчитанной по данным с датчика, с фактическими погодными условиями можно использовать температуру комфорта, полученную с помощью сервиса Insights for Weather (при изменении сгенерированного по правилам предупреждения). Если наружный датчик отсутствует, температуру комфорта с Insights можно сопоставить с данными внутреннего датчика и принять решение, например, о том, чтобы летом для охлаждения комнаты не включать кондиционер, а открыть окна.
Добавьте сервис Insights for Weather к вашему приложению IoT, следуя инструкциям, приведенным в разделе "Add the Insights for Weather service" статьи Adding Insights for Weather to your application (Добавление Insights for Weather к приложению) в документации по Bluemix. Выполните повторное размещение приложения IoT. Перейдите к экземпляру сервиса Insights for Weather, чтобы узнать URL-адрес и учетные данные для использования этого сервиса, как показано на следующем снимке экрана.

Кликните, чтобы увидеть увеличенное изображение
Перейдите в редактор потока Node-RED для приложения IoT. Добавьте к потоку узлы, использующие сервис Insights for Weather для получения текущей температуры комфорта и сравните ее с температурой комфорта по данным датчика (рассчитанной сервисом Business Rules). Затем отобразите результат сравнения. На следующем снимке экрана показаны новые узлы.

Кликните, чтобы увидеть увеличенное изображение
Вы можете воспользоваться быстрым способом – скопируйте следующий поток JSON в буфер
обмена и затем выберите команду Import >
Clipboard (или нажмите клавиши Ctrl-I
)чтобы
импортировать его в Node-RED.
[{"id":"86eba0fb.3365","type":"http request","z":"fb2728c1.04d8d8","name":"Insights weather","method":"GET","ret":"obj","url":"insights_url","x":658.0973892211914,"y":466.5407180786133,"wires": [["22615c13.055cb4"]]},{"id":"22615c13.055cb4","type":"switch","z":"fb2728c1.04d8d8","name":"compare 'Feels like'","property":"payload.observation.metric.feels_like","propertyType":"msg","rules":[{"t":"lt","v":"sensorFeelsLikeTemp","vt":"global"},{"t":"gte","v":"sensorFeelsLikeTemp","vt":"global"}],"checkall":"true","outputs":2,"x":882.1528091430664,"y":465.7073440551758,"wires":[["1520303b.8b7e1"],["155a17fd.51c268"]]},{"id":"1520303b.8b7e1","type":"function","z":"fb2728c1.04d8d8","name":"sensor warmer","func":"msg.payload=\"The sensor 'Feels like' temperature \" + context.global.get(\"sensorFeelsLikeTemp\") + \" is warmer than the Insights 'Feels like' temperature \" + msg.payload.observation.metric.feels_like;\nreturn msg;","outputs":1,"noerr":0,"x":1079.375099182129,"y":443.23511505126953,"wires":[["1cf07b90.02a7d4"]]},{"id":"155a17fd.51c268","type":"function","z":"fb2728c1.04d8d8","name":"sensor cooler","func":"msg.payload=\"The sensor 'Feels like' temperature \" + context.global.get(\"sensorFeelsLikeTemp\") + \" is cooler than the Insights 'Feels like' temperature \" + msg.payload.observation.metric.feels_like;\nreturn msg; \n","outputs":1,"noerr":0,"x":1077.625099182129,"y":491.48511505126953,"wires":[["1cf07b90.02a7d4"]]},{"id":"1cf07b90.02a7d4","type":"debug","z":"fb2728c1.04d8d8","name":"'Feels like' status","active":true,"console":"false","complete":"payload","x":1279.2741928100586,"y":465.5407772064209,"wires":[]}]
Соедините выход узла new warning
со входом узла Insights
weather
. Дважды щелкните узел Insights weather
и замените
insights_url
на строку
url
/api/weather/v2/observations/current?units=m&geocode=
latitude
%2C
longitude
&language=en-US
.
Получите значение url
из учетных данных для сервиса Insights
for Weather. Замените latitude
значениями широты и долготы,
соответствующими текущему географическому расположению вашего датчика, как показано
на следующем снимке экрана.

Кликните, чтобы увидеть увеличенное изображение
Или же вы можете создать дополнительные узлы, выполнив следующие шаги:
- Откройте редактор потока Node-RED для приложения IoT и добавьте узел
http request node (он находится в категории
function фильтра узлов на панели слева) с именем
Insights weather
. Используйте этот узел, чтобы запускать сервис Insights for Weather для получения текущей информации о погоде. Установите значения параметров, как показано на предыдущем снимке экрана.- Задайте для параметра URL значение
url
/api/weather/v2/observations/current?units=m&geocode=
latitude
%2C
longitude
&language=en-US
. Получите значениеurl
из учетных данных для сервиса Insights for Weather. Заменитеlatitude
иlongitude
значениями широты и долготы, соответствующими текущему географическому расположению вашего датчика. - Ознакомьтесь с разделом Getting current conditions (Получение текущих погодных условий)
документации по Bluemix, чтобы узнать, как с помощью сервиса Insights
for Weather получать информацию о текущих погодных условиях и найти
описание формата данных ответа. В данных ответа присутствует атрибут
observation.metric.feels_like
, который имеет значение, соответствующее текущей температуре комфорта.
- Задайте для параметра URL значение
- Соедините выход узла
new warning
со входом узлаInsights weather
. - Добавьте узел switch (он находится в категории
function фильтра узлов на панели слева) с именем
compare 'Feels like'
, для сравнения температуры комфорта от сервиса Insights с температурой комфорта по данным датчика в глобальном контексте. Сконфигурируйте его как показано на следующем снимке экрана. Если температура комфорта от сервиса Insights ниже температуры комфорта по данным датчика, отправьте сообщение на первый выход. В противном случае отправьте сообщение на второй выход. Соедините выход узлаInsights weather
со входом узлаcompare 'Feels like'
. - Добавьте два узла function с именами
sensor warmer
иsensor cooler
.Добавьте к узлу
sensor warmer
следующий код для возврата соответствующего сообщения.msg.payload="The sensor 'Feels like' temperature " + context.global.get("sensorFeelsLikeTemp") + " is warmer than the Insights 'Feels like' temperature " + msg.payload.observation.metric.feels_like; return msg;
Добавьте к узлу
sensor cooler
следующий код для возврата соответствующего сообщения.msg.payload="The sensor 'Feels like' temperature " + context.global.get("sensorFeelsLikeTemp") + " is cooler than the Insights 'Feels like' temperature " + msg.payload.observation.metric.feels_like; return msg;
Соедините первый выход узла
compare 'Feels like'
со входом узлаsensor warmer
. Соедините второй выход узлаcompare 'Feels like'
со входом узлаsensor cooler
input.
- Добавьте узел debug с именем
'Feels like' status
. Чтобы распечатать результат сравнения температур комфорта, задайте для выхода значениеmsg.payload
. Соедините выходы узловsensor warmer
иsensor cooler
со входом узла'Feels like' status
. - Разверните обновленный поток и измените температуру или влажность на датчике.
На панели отладки отобразится результат сравнения температур комфорта,
полученных из сервиса Insights и по данным датчика, например:
The sensor 'Feels like' temperature 30 is cooler than the Insights 'Feels like' temperature 35
6. (Температура комфорта 30 по данным датчика ниже, чем температура комфорта 35, полученная из Insights).
Заключение
Из данного руководства вы узнали, как с помощью сервиса Business Rules в Bluemix встраивать комплексные правила в приложение Интернета устройств. Вы использовали бизнес-правила, чтобы добавить возможность менять принимаемые решения без необходимости модифицировать приложение IoT.
Применяйте полученные знания на практике, чтобы затрачивать меньше времени на изменения кода и тестирование своего приложения. Ведь логику приложения можно изменять и тестировать средствами сервиса Business Rules. Такой подход открывает возможность более гибкого принятия решений.
Также вы научились использовать сервис Insights for Weather, чтобы встраивать в приложение для Интернета устройств актуальную информацию о погоде. Созданный вами пример может служить в качестве начального проекта интеллектуальной системы управления энергопотреблением. Например, такой, которая контролирует обогрев и охлаждение помещения в зависимости от температуры внутри и снаружи, времени суток и смены времен года. Подобные решения можно задействовать и модифицировать без необходимости постоянно вносить изменения в поток Node-RED приложения IoT.
Благодарности
Автор благодарит Алена Робера, Валери Лампкин и Алекса Меламеда за отзывы об этом руководстве.
Ресурсы для скачивания
Похожие темы
- Getting started with Business Rules
- Deploying and configuring Watson IoT Platform for your organization
- Getting started with Insights for Weather
- Smart traffic management for connected cars using Watson IoT and Node-RED on Bluemix
- Stack Overflow questions about Bluemix and Business Rules
Комментарии
Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.