Содержание


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

Comments

Благодаря сервису 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
    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
    Debug pane after sensor simulator temperature change
  5. Изучите узел temp thresh и просмотрите правила, которые определяют, находится ли температура в безопасных пределах, как показано на следующем снимке экрана. Rules for temperature threshold
    Rules for temperature threshold
  6. С помощью симулятора датчика увеличьте значение температуры и посмотрите, как изменятся сообщения на панели отладки справа (см. следующий снимок экрана). Чтобы увидеть, как по правилам генерируется другое сообщение с предупреждением о высокой температуре, поднимите температуру выше 40 градусов ЦельсияDebug pane after sensor simulator temperature                     change
    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
    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
    Connection Settings of the Business Rules service instance
  5. Изучите содержимое папки rules в проекте правил sensor-rules Она содержит таблицу принятия решений generateWarning и основной поток правил, как показано на следующем снимке экрана. Таблица принятия решений generateWarning служит для генерирования предупреждений о температуре в зависимости от типа датчика и значения температуры комфорта.Generate warnings based on the feels like                     temperature
    Generate warnings based on the feels like temperature

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

    Ruleflow with the initial actions
    Ruleflow with the initial actions

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

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

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

Flow to compare with Insights feels like                     temperature
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
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
    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.

Благодарности

Автор благодарит Алена Робера, Валери Лампкин и Алекса Меламеда за отзывы об этом руководстве.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

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