Intel Edison. Работа с облаком Intel IoT Analytics: создание правил и отправка уведомлений
Облако Intel IoT Analytics позволяет закладывать простую логику на выполнения определенного действия. Создание правил разделяется на два этапа. На первом этапе требуется указать выполняемые действия. На втором этапе указать набор условий, которые должны выполняться для выполнения действия. Например, значение температуры выше 28 C.
Действиями могут быть:
- отправка уведомления на email;
- отправка сформированной команды элементу Actuation. Управляющий элемент на конечном устройстве, например включение-выключение реле;
- выполнение запроса GET HTTP с определенным набором параметрам. Отправка сообщения внешним системам;
Рассмотрим следующий сценарий: при достижение температуры 28 С, требуется:
- отправить уведомление на email web@devdotnet.org
- включить вентилятор для снижения температуры, путем включения реле. Необходимо учесть, что достижение температуры в 28 С может быть кратковременным колебанием. Поэтому, для избегания частого включения вентилятора, требуется установить интервал времени в 10 секунд на протяжение которого температура будет выше 28 С. Только в этом случае, вентилятор должен быть включен.
- при опускания температуры ниже 28 С, вентилятор требуется выключить.
Правила создаются в разделе Rules. Каждое выполнение правило сопровождается формированием оповещения в системе, раздел Alerts.
Возьмем стенд из Intel Edison. Работа с облаком Intel IoT Analytics: регистрация и отправка данных.
Решение состоит из следующих пунктов:
- Формирование команд для отправки Actuation — реле
- Создание правил отправки уведомлений и включения/выключения реле
- Изменение Arduino-кода
1. Формирование команд для отправки Actuation — реле
Требуется создать команды Complex command, для этого перейдем в раздел Control.
Создадим команду на включение реле.
Выберем устройство edison habr, компонент relay1, действие значение 1, транспорт websocket, добавим команду Add action. Нажмем на кнопку Save as complex command и сохраним команду с именем relay1_ON
Так же создадим команду на выключения, только выберем, действие значение 0, имя relay1_OFF
В разделе Complex commands отобразятся созданные команды
2. Создание правил отправки уведомлений и включения/выключения реле
Перейдем в раздел Rules, добавим правило Add a rule
Заполним поля:
Name: Higth_temp_PowerOnRelay_and_send_to_web@devdotnet.org
Description: при достижение температуры 28 С, отправить уведомление на email web@devdotnet.org и включить реле
Priority: Medium — влияет только на очередность обработки, правило с значением Higth выполнится первым
Notifications type. Далее укажем тип уведомления.
Доступно:
- отправка email
- выполнение команды для Actuation
- выполнение запроса GET HTTP
Для правила можно создавать несколько различных уведомлений/действий.
Выберем Email. В разделе Email notifications выберем из списка web@devdotnet.org.
Добавим второе действие Actuation. Из списка Actuation notifications выберем relay1_ON.
Перейдем на следующую страницу, копка Next
На шаге выбора устройства выберем — edison habr
Следующий шаг — создание условий.
Условий может быть несколько. Для нескольких условий задается логическое правило:
Add Conditions
- At least one condition is satisfield — должно быть выполнено(значение true) хотя бы бы одно условие
- All condition are satisfield — все условия должны быть выполнены(значение true)
Параметр Enable Automatic Reset — влияет на многократное выполнение условия. Если его не отметить, то плавило один раз выполниться, и перейдет в статус Archive и в дальнейшем будет не активно. Поэтому в нашем случае требуется отметить этот пункт как true.
Требуется добавить два условия. Первое условие, сопоставление значения температуры, выражение: ">=28".
Поле Monitored Measure: temperature1 (Number) — из списка выберем нужный сенсор
Поле Trigger When содержит пункты:
- Base Condition — базовое сравнение
- Timenased Condition — сравнение должно выполнять в течение определенного времени (секунды, минусы, часы, недели, месяцы)
- Statistics Based Condition -на основание статистического среднеквадратического отклонение всех значений в указанном выражении.
Выберем — Timenased Condition
Выражение: ">=28" за последние 10 секунд
Второе, состояние реле должно быть false т.е. выключено. Иначе, постоянно будут отправлять ся команды на включение реле, после каждого измерения температуры выше 28 C.
Поле Monitored Measure: relay1 (Boolean)
Поле Trigger When: Base Condition — базовое сравнение
Условие Eqal «0» — равно 0
Сохраним, кнопка Done.
Создадим второе правило
Name: Low_temp_PowerOffRelay_and_send_to_web@devdotnet.org
Actuation notifications: relay1_OFF
В результате будет создано два правила
3. Изменение Arduino-кода
В предыдущем примере была допущена ошибка в отправки состояния реле. Вне зависимости от отправки команды, состояние реле всегда принимало значение false, оператор:
iotkit.send("relay1", 0);
Ниже исправленный вариант кода:
if ((component != NULL)) {
if (strcmp(component->valuestring, "relay1") == 0) {
if ((command != NULL)) {
if (strcmp(command->valuestring, "RELAY.v1.0") == 0 && strcmp(value->valuestring, "0") == 0) {
Serial.println("Relay Off!");
digitalWrite(9, false);
//Send state Actiator
iotkit.send("relay1", 0);
}
if (strcmp(command->valuestring, "RELAY.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
Serial.println("Relay on!");
digitalWrite(9, true);
//Send state Actiator
iotkit.send("relay1", 1);
}
}
}
}
Теперь проведем тест, повысим температуру
График температуры
Оповещение
Письмо на email
Охладим датчик
На этом создание правил закончено. При ожидание действий, следует учитывать временную задержку (до 1 минуты) от момента совпадения условий.
Как видно из статьи, заложен достаточно гибкий функционал формирования условий, и присутствуют основные действия. Запрос GET HTTP, можно использовать для отправки SMS сообщения через HTTP шлюзы отправки.
Небольшое дополнение. Агент отправки данных в облако автоматически по умолчанию не запускается при включение Intel Edison, поэтому его следует перевести в режим автостарта. Выполнить команду:
# systemctl enable iotkit-agent