Создание интеллектуальных датчиков с использованием сервисов Bluemix Business Rules, Watson IoT Platform и Insights for Weather

24.08.2016
PDF (2217 KB)
 

У. Сиддики

инженер-программист

У. Сиддики (U. Siddiqui) много лет работала с заказчиками отделения IBM Operational Decision Management над решением технических вопросов и приобрела обширные знания в области практического применения этих продуктов корпоративными клиентами и их интеграции.

Благодаря сервису Watson Internet of Things (IoT) Platform на платформе IBM Bluemix, ваши приложения могут использовать информацию с подключенных к сети устройств. Например, можно создавать приложения, которые будут считывать показания с датчиков температуры и в зависимости от их значений инициировать какое-либо действие. Сервис Business Rules платформы Bluemix обеспечивает гибкое управление принятием решений и позволяет фиксировать решения в виде внешних бизнес-правил, используемых приложениями.

Изучив данное руководство, вы сможете с помощью сервисов Bluemix использовать в решении для IoT мощные возможности бизнес-правил. В качестве начального проекта решения по управлению энергопотреблением для "разумного" дома воспользуйтесь предлагаемым примером кода.

Для создания приложения вам понадобится

 

Шаг 1. Создайте стартовое приложение Watson IoT Platform

 

Начните с изучения того, как существующее стартовое приложение IoT Platform использует имитированные показания датчиков и простые правила, определенные в редакторе потока Node-RED, чтобы генерировать предупреждения о повышении температуры.

  1. Создайте стартовое приложение IoT Platform, следуя инструкциям, приведенным в документе Creating apps with the Internet of Things starter application (Создание приложений с помощью стартового приложения Интернета устройств) в разделе Usage (Использование). Затем откройте редактор потока Node-RED, как показано на следующем снимке экрана. Node-RED flow editor for the IoT Platform starter app

    Кликните, чтобы увидеть увеличенное изображение

  2. Настройте в Node-RED имитацию датчика и узлы следующим образом: узел IBM Iot App In соединяется с имитацией устройства, а узел device data отображает на панели отладки содержимое объекта сообщения, которое поступает от имитации устройства.
  3. Выполните развертывание потока и посмотрите на сообщения о статусе Temperature 3. на панели отладки справа.
  4. С помощью симулятора датчика увеличьте значение температуры и посмотрите на выходные данные узла device data на панели отладки справа. Обратите внимание на элемент сообщения payload который содержит элемент d имеющий атрибуты name, temp, humidity и objectTemp 4. как показано на следующем снимке экрана. В этом формате содержит данные имитация датчика.Debug pane after sensor simulator temperature change
  5. Изучите узел temp thresh и просмотрите правила, которые определяют, находится ли температура в безопасных пределах, как показано на следующем снимке экрана. Rules for temperature threshold
  6. С помощью симулятора датчика увеличьте значение температуры и посмотрите, как изменятся сообщения на панели отладки справа (см. следующий снимок экрана). Чтобы увидеть, как по правилам генерируется другое сообщение с предупреждением о высокой температуре, поднимите температуру выше 40 градусов ЦельсияDebug pane after sensor simulator temperature change

Остальные части руководства посвящены использованию сервиса Business Rules для встраивания комплексных правил в созданное вами приложение IoT Platform, называемое также приложением IoT. Эти правила используются для расчета температуры комфорта по данным о температуре и влажности с датчика, а также для генерирования предупреждений в зависимости от температуры комфорта и типа датчика (внутренний или наружный).

Шаг 2. Создайте экземпляр сервиса Business Rules

 

Теперь, когда вы ознакомились с приложением IoT, можно создать экземпляр сервиса Business Rules, который ваше приложение будет использовать для применения комплексных бизнес-правил. Эти бизнес-правила не определяются в редакторе потока Node-RED приложения IoT; они создаются и применяются при помощи сервиса Business Rules.

  1. Войдите на платформу Bluemix создайте пространство и дайте ему имя, например, dev.
  2. Создайте экземпляр сервиса Business Rules, как описано в разделе Creating a Business Rules service instance (Создание экземпляра сервиса Business Rules) документации по Bluemix. В категории Web and Application Services, каталога Bluemix выберите сервис Business Rules .
  3. В разделе Add Service (Добавить сервис) введите dev в качестве имени пространства и MyApp в качестве имени приложения IoT, чтобы выполнить привязку экземпляра сервиса Business Rules. Нажмите кнопку CREATE. Приложение IoT необходимо разместить повторно.
  4. Изучите вкладку Connection Settings (Настройки подключения) для экземпляра сервиса Business Rules, показанную на следующем снимке экрана. Поле URL содержит ID экземпляра сервиса (начинающийся с brsv2-) Также на этой вкладке отображаются имя пользователя и пароль для работы с экземпляром сервиса. Они используются на этапе Шаг 4 при развертывании правил в экземпляр сервиса и Шаг 6 4. при конфигурировании потока Node-RED приложения IoT для применения правил с помощью этого экземпляра. Connection Settings of the Business Rules service instance

Шаг 3. Определите бизнес-правила с помощью Rule Designer

 

Теперь необходимо определить бизнес-правила, которые будет применять ваше приложение IoT, используя экземпляр сервиса. Для создания таких правил служит средство Rule Designer на базе Eclipse.

  1. Установите в вашей среде Eclipse Juno 4.2.2 IDE средство Rule Designer для сервиса Business Rules, как описано в документации по Developing для Business Rules.
  2. Загрузите проекты sensor-xom и sensor-rules по ссылке в документации. Импортируйте их в свое рабочее пространство Eclipse и переключитесь в представление Rule, чтобы открыть Rule Explorer.
  3. Изучите модель объекта исполнения (XOM) – модель времени исполнения, к которой применяются правила. XOM определена в Java-проекте sensor-xom но может быть задана и в формате XML. Изучите классe Sensor представляющий информацию, которая поступает с датчика. Этот класс определяется с помощью следующих атрибутов. Обратите внимание, что первые четыре атрибута в этом списке соответствуют данным сообщения на этапе Шаг 1. Создайте стартовое приложение Watson IoT Platform..

    name (имя датчика)

    temp (температура с датчика в градусах Цельсия)

    humidity (влажность в процентах, в диапазоне от 0 до 100)

    objectTemp (температура объекта в градусах Цельсия)

    type (тип датчика, например "indoor" (внутренний) или "outdoor" (наружный))

    feelsLikeTemp (температура комфорта в градусах Цельсия, вычисляемая по значениям temp и humidity)

    warning (предупреждение о температуре, генерируемое в зависимости от значения feelsLikeTemp)

    Этот класс также содержит метод computeFeelsLikeTemperature() который служит для вычисления температуры комфорта на основе значений влажности и температуры.

  4. Изучите проект sensor-rules и элемент модели бизнес-объектов (BOM) sensors созданный на основе модели XOM с помощью инструмента Rule Designer. Этот элемент BOM уже создан в примере кода, используемом для данного руководства. Он содержит класс Sensor соответствующий классу Sensor определенному в Java, как показано на следующем снимке экрана.Connection Settings of the Business Rules service instance

    Кликните, чтобы увидеть увеличенное изображение

  5. Изучите содержимое папки rules в проекте правил sensor-rules Она содержит таблицу принятия решений generateWarning и основной поток правил, как показано на следующем снимке экрана. Таблица принятия решений generateWarning служит для генерирования предупреждений о температуре в зависимости от типа датчика и значения температуры комфорта.Generate warnings based on the feels like temperature

    Кликните, чтобы увидеть увеличенное изображение

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

    Ruleflow with the initial actions

    Кликните, чтобы увидеть увеличенное изображение

    Затем поток правил активирует таблицу принятия решений generateWarning в пакете sensor .После запуска набора правил поток применяет правила в заданной последовательности.

  6. С помощью параметров набора правил определите контракт между бизнес-логикой и своим клиентским приложением. Заданные параметры набора правил можно просмотреть, щелкнув правой кнопкой мыши на проекте sensor-rules и выбрав команду Properties. Входной/выходной параметр носит имя sensor и имеет тип Sensor, как показано на следующем снимке экрана. Имя этого параметра используется на этапе Шаг 6. Добавьте новые узлы к потоку Node-RED когда вы конфигурируете поток Node-RED для предоставления входных данных правилам в приложении IoT Ruleset parameter

    Кликните, чтобы увидеть увеличенное изображение

Шаг 4. Выполните развертывание созданных правил и их тестирование на наборе данных

 

Чтобы выполнять только что определенные бизнес-правила из экземпляра сервиса Business Rules, их необходимо развернуть в этот экземпляр, созданный на этапе Шаг 2. Создайте экземпляр сервиса Business Rules. Правила развертываются в виде архивов с именами RuleApps из инструмента Rule Designer на сервер выполнения правил Rule Execution Server, ассоциированный с этим экземпляром сервиса. Выполните следующие действия.

  1. С помощью инструмента 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 (Проверить подключение).
  2. С помощью инструмента Rule Designer создайте проект RuleApp Project с именем и SensorRuleApp, проект правил sensor-rules . На карте проектов правил Rule Project Map нажмите кнопку Create RuleApp project (Создать проект RuleApp). (Следуйте указаниям этапа "Шаг 3. Создайте RuleApp" в разделе Authoring rules and creating a RuleApp (Составление правил и создание RuleApp) документации по Bluemix).
  3. Для развертывания 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.
  4. Перейдите к своему экземпляру сервиса Business Rules на панели управления Bluemix и откройте вкладку Decision Services чтобы увидеть развернутые приложения RuleApps и наборы правил. При необходимости выберите ссылку Refresh как показано на следующем снимке экранаDecision Services tab of Business Rules service

    Кликните, чтобы увидеть увеличенное изображение

  5. Чтобы открыть страницу Details с подробной информацией о наборе правил, щелкните на имени набора (sensorrules 1.0 в данном примере). Перейдите на вкладку JSON и нажмите кнопку WADL (в правом нижнем углу на следующем снимке экрана) и убедитесь, что для данного набора правил корректно сгенерирован язык описания. Если обнаружены ошибки, вернитесь к этапу Шаг 3. Определите бизнес-правила с помощью Rule Designer чтобы правильно сконфигурировать XOM.

    Обратите внимание: URL-адрес для данного набора правил содержит версии RuleApp и набора правил, определяемые при развертывании RuleApp в соответствии с выбранным типом развертывания. Этот URL используется на этапе Шаг 6. Добавьте новые узлы к потоку Node-RED когда вы конфигурируете поток Node-RED приложения IoT для применения набора правил.

    Ruleset Details page of Business Rules service

    Кликните, чтобы увидеть увеличенное изображение

  6. Протестируйте набор правил на наборе данных в консоли 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.Testing the Business Rules service payload

      Кликните, чтобы увидеть увеличенное изображение

Шаг 5. Изучите новый поток Node-RED

 

Теперь вам предстоит расширить поток Node-RED приложения IoT, чтобы применять правила, развернутые в экземпляр сервиса Business Rules. По этим правилам вычисляется температура комфорта и генерируются необходимые предупреждения.

На панели управления Bluemix перейдите к вашему приложению IoT и откройте редактор потока Node-RED. На следующем снимке экрана показано, как выглядит дополненный поток.

Node-RED flow with Business rules invocation

Кликните, чтобы увидеть увеличенное изображение

Узлы 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 должно выглядеть так, как в примере на следующем снимке экрана:

Sensor rules node

Кликните, чтобы увидеть увеличенное изображение

Или же вы можете создать узлы, выполнив следующие шаги:

  1. В редакторе потока 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? .

  2. Затем добавьте узел switch (он находится в категории function фильтра узлов на панели слева) с именем data changed, чтобы проверять, имеет ли свойство msg.payload.dataChanged значение true. Сконфигурируйте его как показано на следующем снимке экрана. Соедините выход узла data changed? со входом узла data changed .Data changed node
  3. Добавьте узел 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 .

  4. Добавьте узел debug (он находится в категории output фильтра узлов на панели слева) с именем rules input. Задайте для выхода значение msg.payload.sensor чтобы распечатать значения входных данных правил, как показано на следующем снимке экрана. Соедините выход узла create rules input со входом узла rules input как показано на следующем снимке экрана.Rules input debug node
  5. Добавьте узел 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 .
  6. Добавьте узел debug с именем rules output. Задайте для выхода значение msg.payload.sensor чтобы распечатать значения данных с датчика после вычислений по правилам. Соедините выход узла Sensor rules со входом узла rules output .
  7. Добавьте узел 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;
  8. Добавьте узел rbe (он находится в категории function фильтра узлов на панели слева) с именем new warning. Для параметра Mode (Режим) выберите значение (блокировать, если значение не изменяется). Соедините выход узла get warning со входом узла new warning .
  9. Добавьте узел 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%. Обратите внимание, что температура комфорта рассчитывается по правилам, а предупреждения генерируются в зависимости от температуры комфорта и типа датчика.

Rule output data for varying sensor temperatures

Кликните, чтобы увидеть увеличенное изображение

Теперь вы можете использовать выходные данные правил. Например, можно создать уведомление для мобильных устройств с помощью доступного в Bluemix сервиса IBM Push Notification. Вы также можете воспользоваться сервисом Watson Text to Speech, чтобы преобразовать текст предупреждения в речь.

Шаг 8. Модифицируйте бизнес-правила

 

Теперь мы модифицируем бизнес-правила и проверим, применяет ли измененные правила приложение IoT.

  1. С помощью Rule Designer измените правила в проекте sensor-rules . В таблице принятия решений generateWarning замените значение 35 на 30 в выделенной строке (см. следующий снимок экрана), чтобы предупреждение Rising temperatures, limit outdoor time in daylight (Температура повышается; ограничьте пребывание на улице в дневное время) генерировалось при значениях температуры комфорта, больших или равных не 35, а 30 градусов Цельсия. Сохраните измененияModified generateWarning decision

    Кликните, чтобы увидеть увеличенное изображение

  2. Разверните SensorRuleApp 2. в экземпляр сервиса Business Rules. В окне "Deploy a RuleApp to Rule Execution Server" выберите тип развертывания Replace RuleApp version (Заменить версию RuleApp).
  3. Измените значение температуры в симуляторе датчика.

    На панели отладки вы увидите, что предупреждение для температуры комфорта в диапазоне от 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 и убедитесь, что начала действовать новая версия правил.

  4. В потоке Node-RED установите для свойства msg.payload.sensor.type узла create rules input значение "indoor", 4. и посмотрите, как изменятся выходные данные правила и предупреждение при изменении температуры или влажности, получаемых с внутреннего датчика. Чтобы ввести правила, учитывающие расположение внутренних датчиков в доме, можно добавить в таблицу принятия решений generateWarning такие строки, как "living room" (гостиная) и "bedroom" (спальня) для различных типов внутренних датчиков.

В дальнейшем вы сможете использовать этот стартовый проект правил, расширив модели XOM и BOM и добавив новые правила, чтобы генерировать предупреждения в зависимости от времени суток (например, для дневных и ночных часов). Вы можете попробовать дифференцировать дневные часы для будних и выходных дней. Кроме того, можно задать дополнительные условия для разных времен года, как показано на следующем снимке экрана (это не входит в пример кода).

Additional conditions in generateWarning decision table

Кликните, чтобы увидеть увеличенное изображение

Шаг 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-адрес и учетные данные для использования этого сервиса, как показано на следующем снимке экрана.

Insights for Weather Service credentials

Кликните, чтобы увидеть увеличенное изображение

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

Flow to compare with Insights feels like temperature

Кликните, чтобы увидеть увеличенное изображение

Вы можете воспользоваться быстрым способом – скопируйте следующий поток 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%2Clongitude&language=en-US. Получите значение url из учетных данных для сервиса Insights for Weather. Замените latitude значениями широты и долготы, соответствующими текущему географическому расположению вашего датчика, как показано на следующем снимке экрана.

Insights weather node

Или же вы можете создать дополнительные узлы, выполнив следующие шаги:

  1. Откройте редактор потока Node-RED для приложения IoT и добавьте узел http request node (он находится в категории function фильтра узлов на панели слева) с именем Insights weather. Используйте этот узел, чтобы запускать сервис Insights for Weather для получения текущей информации о погоде. Установите значения параметров, как показано на предыдущем снимке экрана.
    • Задайте для параметра URL значение url/api/weather/v2/observations/current?units=m&geocode=latitude%2Clongitude&language=en-US. Получите значение url из учетных данных для сервиса Insights for Weather. Замените latitude и longitude значениями широты и долготы, соответствующими текущему географическому расположению вашего датчика.
    • Ознакомьтесь с разделом Getting current conditions (Получение текущих погодных условий) документации по Bluemix, чтобы узнать, как с помощью сервиса Insights for Weather получать информацию о текущих погодных условиях и найти описание формата данных ответа. В данных ответа присутствует атрибут observation.metric.feels_like , который имеет значение, соответствующее текущей температуре комфорта.
  2. Соедините выход узла new warning со входом узла Insights weather .
  3. Добавьте узел switch (он находится в категории function фильтра узлов на панели слева) с именем compare 'Feels like', для сравнения температуры комфорта от сервиса Insights с температурой комфорта по данным датчика в глобальном контексте. Сконфигурируйте его как показано на следующем снимке экрана. Если температура комфорта от сервиса Insights ниже температуры комфорта по данным датчика, отправьте сообщение на первый выход. В противном случае отправьте сообщение на второй выход. Соедините выход узла Insights weather со входом узла compare 'Feels like' . Compare feels like node
  4. Добавьте два узла 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.

  5. Добавьте узел debug с именем 'Feels like' status. Чтобы распечатать результат сравнения температур комфорта, задайте для выхода значение msg.payload. Соедините выходы узлов sensor warmer и sensor cooler со входом узла 'Feels like' status .
  6. Разверните обновленный поток и измените температуру или влажность на датчике. На панели отладки отобразится результат сравнения температур комфорта, полученных из сервиса Insights и по данным датчика, например: The sensor 'Feels like' temperature 30 is cooler than the Insights 'Feels like' temperature 356. (Температура комфорта 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

Добавить комментарий

Внимание: HTML элементы не поддерживаются в комментариях.


осталось 1000 символов

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Облачные вычисления, Когнитивное программированиеs
ArticleID=1036420
ArticleTitle=Создание интеллектуальных датчиков с использованием сервисов Bluemix Business Rules, Watson IoT Platform и Insights for Weather
publish-date=08242016