Перейти к содержимому

IoT: Перегрев и восстановление температуры ​

Контроллер холодильной камеры сообщает, что температура вышла за допустимый предел, а затем восстановилась. Оба сообщения нужны ответственному, но с разной важностью и метками.

Порог и момент отправки определяет контроллер или внешняя автоматизация. В примере она уже выдаёт temperature_high и restored; сравнивать число с порогом в Депешере не потребуется.

Подготовьте оформление ​

  1. Создайте канал по инструкции IoT. В личном контексте привяжите свой подтверждённый способ получения. В организации назначьте команду и попросите сотрудников настроить «Мою доставку».
  2. В каталоге «Метки» того же контекста создайте температура, авария и восстановление.
  3. Создайте текстовый шаблон «Температура» и выберите его у канала:
text
{{message}}
Объект: {{json.site.name}}
Датчик: {{json.device.id}}
Температура: {{json.measurement.value}} {{json.measurement.unit}}
Важность: {{importance}}
Метки: {{tags}}

Создайте три правила ​

Создайте правила в том же контексте, сохраните и подключите к каналу:

ПорядокВид и условиеТекст сообщенияВажностьПолный набор меток
1По условиям: JSON event.type равно строке temperature_high«Задать текст сообщения»: Температура выше допустимойКритичнотемпература, авария
2По условиям: JSON event.type равно строке restored«Задать текст сообщения»: Температура восстановиласьИнформациятемпература, восстановление
DefaultПо умолчанию, без условий«Задать текст сообщения»: Неизвестное событие датчикаПредупреждениеТолько температура

Для текста добавьте операцию «Задать текст сообщения», для остальных настроек — действия важности и меток. Действия шаблона и доставки не добавляйте: все три правила наследуют шаблон и базовый маршрут канала.

Выбор меток задаёт весь набор. Значения выбираются из созданного каталога, а не автоматически генерируются из JSON.

Проверьте аварию ​

Откройте проверку на примере, выберите application/json и тело:

json
{
  "site": {
    "name": "Склад №1"
  },
  "device": {
    "id": "sensor-03"
  },
  "event": {
    "type": "temperature_high"
  },
  "measurement": {
    "value": 12.5,
    "unit": "°C"
  }
}

Должно выиграть первое правило, важность — critical, метки — температура и авария, маршрут — из настроек канала. При указанном порядке выбора меток итоговый текст:

text
Температура выше допустимой
Объект: Склад №1
Датчик: sensor-03
Температура: 12.5 °C
Важность: critical
Метки: температура, авария

Проверьте восстановление и неизвестное событие ​

Во втором примере измените event.type на restored, а measurement.value на 4. Должно выиграть второе правило, текст начнётся с Температура восстановилась, важность — info, метки — температура и восстановление.

В третьем примере измените тип на sensor_restarted. Должен выполниться default с текстом Неизвестное событие датчика, важностью warning и меткой температура.

Дополнительно отправьте только измерение без event.type. Оно тоже попадёт в default: Депешер сам не определяет перегрев по значению 12.5.

Проверьте реальное получение ​

Сохраните каждое тело в отдельный JSON-файл. Например, первое — в temperature-high.json. Замените URL своим:

bash
curl --include \
  --request POST \
  --header 'Content-Type: application/json' \
  --data-binary @temperature-high.json \
  'https://depesher.ru/w/ВАШ_PUBLIC_ID'

Для защищённого канала добавьте Bearer-токен. Повторите запрос с восстановлением и неизвестным событием. После HTTP 202 проверьте три отдельных сообщения в истории, их исходные и итоговые тексты, метки, важность и внешнее получение. Симуляция сама уведомления не отправляла.

«Критично» не меняет маршрут автоматически. Чтобы авария шла дополнительной команде, добавьте её в действие доставки соответствующего правила. Если аварии и восстановления нужны разным командам, оставьте базовых получателей пустыми и назначьте их в каждой ветке по примеру JSON-маршрутизации. Правило не исключает базовых получателей.

На стороне источника настройте отправку при переходе состояния, задержку или гистерезис, если сигнал колеблется у порога. Повторный запрос создаст новое сообщение; восстановления и аварии не объединяются автоматически. Если что-то расходится с ожиданиями, используйте диагностику.