> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/user/ru/guide/account/iot-logic/flow-management/flow-configuration-example.md).

# Пример конфигурации потока

Пошаговый пример, показывающий, как создать поток IoT Logic, который собирает телеметрию устройства, вычисляет производные метрики и передает обогащенные данные внешним системам.

Этот пример демонстрирует, как настроить поток, который собирает данные с устройств IoT, выполняет расчёты для получения показателей, значимых для бизнеса, и передаёт обогащённые данные во внешнюю систему. В примере используется линейная схема потока, которую можно адаптировать под различные отраслевые сценарии использования.

## Бизнес-сценарий

В этом сценарии организация развернула GPS-устройства на своих активах и должна обрабатывать данные с этих устройств для бизнес-аналитики. Организация получает следующие параметры непосредственно со своих устройств мониторинга:

* `скорость`: Скорость транспортного средства в километрах в час
* `temperature`: Температура окружающей среды в градусах Цельсия
* `Одометр`: Пройденное расстояние в километрах
* `зажигание`: Состояние зажигания двигателя (1 = включено, 0 = выключено)
* `Уровень топлива`: Текущее измерение уровня топлива
* `Давление в psi`: Показание давления в PSI
* `напряжение`: Напряжение аккумулятора в вольтах
* `педаль акселератора`: Положение педали акселератора из CAN-шины (0-255)
* `уровень_топлива_1`: Первое измерение уровня топлива в баке
* `уровень_топлива_2`: Второе измерение уровня топлива в баке

Организации необходимо:

1. Собирайте сырые данные телеметрии с устройств, чтобы вести полную историю операций с активом
2. Преобразуйте единицы измерения в соответствии со стандартным форматом отчётности (имперские единицы), чтобы обеспечить согласованность с существующими бизнес-системами
3. Рассчитайте временные метрики, которые отражают особенности использования, чтобы оптимизировать использование актива и графики техобслуживания
4. Создайте производные метрики, чтобы получать операционные аналитические выводы, которые оборудование напрямую не предоставляет
5. Передавайте обогащённые данные во внешнюю систему анализа для интеграции с платформами бизнес-аналитики
6. Отправляйте неизменённые сырые данные в Navixy для мониторинга

Этот поток преобразует сырые данные устройств в формат, который напрямую поддерживает принятие бизнес-решений, сохраняя целостность исходных измерений.

## Шаги настройки потока

Выполните следующие шаги, чтобы создать полный поток преобразования и передачи данных:

{% stepper %}
{% step %}

### Создайте новый поток

Откройте IoT Logic. На стартовой странице нажмите **Создать поток**. Введите *Обработка телеметрии актива* в качестве имени потока, добавьте описание (*«Собирает данные устройства, рассчитывает производные показатели и отправляет их на аналитическую платформу.»*), и убедитесь, что **переключатель «поток включен»** включен. Нажмите **Подтвердить** чтобы открыть холст.
{% endstep %}

{% step %}

### Настройте источник данных

1. Перетащите **Источник данных** узел из левого меню в рабочую область
2. Дважды щёлкните по узлу, чтобы открыть его панель конфигурации
3. В **Имя узла** тип *Трекеры Актив*
4. Выберите из отфильтрованного списка устройства, которые нужно включить в этот поток

* Для этого примера выберите как минимум два устройства с похожими возможностями

5. Нажмите **Применить** чтобы сохранить конфигурацию узла
   {% endstep %}

{% step %}

### Настройте базовые преобразования данных

1. Перетащите **Вычисление атрибута** узел из левого меню в рабочую область
2. Соедините **Источник данных** узел с этим **Вычисление атрибута** узел
3. Дважды щёлкните узел, чтобы открыть его конфигурацию
4. В **Имя узла** тип *Преобразование единиц измерения*
5. Создайте следующие атрибуты для преобразования единиц измерения (во всех примерах используется краткий синтаксис, который обращается к последним значениям атрибутов без проверки на валидность):
   1. Добавьте новый атрибут для преобразования скорости (км/ч в mph): 1. Имя атрибута: *speed\_mph* 2. Значение: `speed/1.609`
   2. Добавьте новый атрибут для преобразования температуры (Цельсий в Фаренгейт): 1. Имя атрибута: *temperature\_F* 2. Значение: `temperature*1.8 + 32`
   3. Добавьте новый атрибут для преобразования расстояния (километры в мили): 1. Имя атрибута: *distance\_miles* 2. Значение: `Одометр/1.609`
   4. Добавьте новый атрибут для преобразования давления (PSI в Bar): 1. Имя атрибута: *pressure\_bar* 2. Значение: `pressure_psi * 0.06895`
6. Нажмите **Применить** чтобы сохранить конфигурацию узла

{% hint style="info" %}
Пояснения к вычислениям, введённым на этом шаге, см. [Базовые преобразования единиц измерения](#basic-unit-conversions)
{% endhint %}
{% endstep %}

{% step %}

### Создайте расширенные вычисляемые метрики

1. Перетащите еще один **Вычисление атрибута** узел из левого меню в рабочую область
2. Подключите первый **Вычисление атрибута** Узел к этому новому
3. Дважды щелкните по Узлу, чтобы открыть его конфигурацию
4. В **Имя узла** тип *Расширенные вычисления*
5. Создайте следующие атрибуты для расширенных метрик:
   1. Добавьте атрибут для определения изменения температуры:
      1. Имя атрибута: *temperature\_change*
      2. Значение: `value('temperature', 0, 'valid') - value('temperature', 1, 'valid')`
      3. `genTime('temperature', 0, 'valid')`
   2. Добавьте атрибут для определения времени, прошедшего между двумя последними показаниями:
      1. Имя атрибута: *time\_between\_readings\_ms*
      2. Значение: `srvTime('speed', 0, 'valid') - srvTime('speed', 1, 'valid')`
      3. Время генерации: `genTime('speed', 0, 'valid')`
   3. Добавьте атрибут для округления температуры до ближайшего целого:
      1. Имя атрибута: *temperature\_rounded*
      2. Значение: `math:round(value('temperature', 0, 'valid'))`
   4. Добавьте атрибут для расчета стандартизированного значения (нормализации уровня топлива до 0–100%):
      1. Имя атрибута: *уровень\_топлива\_процент*
      2. Значение: `(value('fuel_level', 0, 'valid') - 0) / (100 - 0) * 100`
   5. Добавьте атрибут для расчёта процента заряда аккумулятора:
      1. Имя атрибута: *процент\_заряда\_аккумулятора*
      2. Значение: `(value('voltage', 0, 'valid') - 11) / (14 - 11) * 100`
   6. Добавьте атрибут для расчета положения дроссельной заслонки:
      1. Имя атрибута: *процент открытия дроссельной заслонки*
      2. Значение: `value('throttle', 0, 'valid') / 255 * 100`
   7. Добавьте атрибут для среднего значения уровня топлива с нескольких датчиков:
      1. Имя атрибута: *средний Уровень топлива*
      2. Значение: `(value('fuel_level_1', 0, 'valid') + value('fuel_level_2', 0, 'valid')) / 2`
6. Нажмите **Применить** чтобы сохранить конфигурацию узла

{% hint style="info" %}
Пояснения к вычислениям, введённым на этом шаге, см. [Расчет расширенных метрик](#advanced-metrics-calculations).
{% endhint %}
{% endstep %}

{% step %}

### Настройте узел передачи данных

1. Перетащите **Узел передачи данных** узел из левого меню в рабочую область
2. Подключите второй **Вычисление атрибута** узел с этим **Узел передачи данных** узел
3. Нажмите на узел, чтобы открыть его конфигурацию
4. Настройте следующие параметры:
   1. **Тип конечной точки**: *Узел передачи по MQTT*
   2. **Имя конечной точки**: *Аналитическая платформа*
   3. **Протокол**: по умолчанию *Navixy Generic Protocol (JSON)*
   4. **IP/домен**: введите адрес целевой системы (например, "*analytics.example.com*")
   5. **Порт**: *8883* (по умолчанию для MQTT, можно оставить пустым)
   6. **Включить SSL**: *включить*
   7. **Версия MQTT**: *5.0*
   8. **Идентификатор клиента MQTT**: *клиент телеметрии активов*
   9. **Тема**: *telemetry/assets/raw*
   10. **QoS**: *1*
   11. **Аутентификация MQTT**: *Да* (если это требуется вашей целевой системе)
   12. **MQTT-логин и пароль**: Введите учетные данные, если это применимо
5. Нажмите **Создать** чтобы сохранить конфигурацию узла
   {% endstep %}

{% step %}

### Добавьте Узел передачи данных по умолчанию

1. Перетащите **Узел передачи данных** узел из левого меню в рабочую область
2. В **Режим** выберите **Узел передачи данных по умолчанию**
3. Нажмите **Сохранить** чтобы применить конфигурацию узла
4. Соедините *Трекеры Актив* (**Источник данных**) узел к нему

Это гарантирует, что сырые данные будут отправляться в Navixy напрямую с устройств, без каких-либо преобразований и обогащения.
{% endstep %}

{% step %}

### Сохраните и проверьте поток

Ваша итоговая конфигурация будет выглядеть так:

<figure><img src="https://2388694493-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-76943e439a5bab01e5e25fe9f9199d46c99ade30%2Fiot-logic-flow-configuration-example.png?alt=media" alt="Complete flow configuration with all nodes connected in IoT Logic workspace"><figcaption></figcaption></figure>

Нажмите **Сохранить поток** кнопку на **Узлы** панели, чтобы сохранить конфигурацию потока.
{% endstep %}
{% endstepper %}

{% hint style="success" %}
Используйте [Анализ данных (DSA)](/docs/user/ru/guide/account/iot-logic/data-stream-analyzer.md) для мониторинга входящих данных, чтобы проверить:

* Устройства отправляют данные в поток
* Расчёты выполняются как ожидается
* Данные пересылаются в пункт назначения. Например, давайте проверим, что пересчёт скорости на грузовике выполняется корректно. Чтобы сделать это в DSA, выберите **Volvo** устройство и атрибуты **скорость** и **speed\_mph**:\ <img src="https://2388694493-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-dd91833c4e91cbf04798d44c3604cd4ef38c0937%2Fimage-20250407-204530.png?alt=media" alt="Speed attributes for one device in Data Stream Analyzer" data-size="original">

Всё хорошо! Данные успешно получены и преобразованы.
{% endhint %}

## Объяснение преобразований данных

Давайте рассмотрим основные расчёты, используемые в этом потоке.

### Базовые преобразования единиц измерения

Первый **Узел «Вычисление атрибута»** выполняет простые преобразования единиц измерения:

* **Скорость**: Преобразует км/ч в мили в час, деля на 1,609
* **Температура**: Преобразует градусы Цельсия в градусы Фаренгейта по формуле °F = °C × 1,8 + 32
* **Расстояние**: Преобразует километры в мили, деля на 1,609
* **Давление**: Преобразует PSI в бар, умножая на 0,06895, что делает значение совместимым с международными стандартами измерения давления

Эти преобразования обеспечивают согласованность со стандартными форматами отчётности и сразу делают данные пригодными для анализа. Преобразование единиц измерения особенно ценно для международных организаций, работающих в регионах с разными стандартами измерений.

### Расчет расширенных метрик

Второй **Узел «Вычисление атрибута»** выполняет более сложные вычисления:

* **Обнаружение изменений температуры**: Рассчитывает разницу между текущими и предыдущими показаниями температуры, чтобы выявлять резкие изменения. Это помогает обнаруживать проблемы с оборудованием, такие как сбои холодильного оборудования в транспортных средствах или проблемы HVAC на объектах. Например, резкое повышение температуры на 5 °C в рефрижераторном контейнере может указывать на отказ системы охлаждения, требующий немедленного внимания.
  * **Время генерации**: Использование `genTime('temperature', 0, 'valid')` критически важно здесь, поскольку это сохраняет точную метку времени, когда устройство сформировало показание температуры, обеспечивая точный анализ изменений температуры по времени.
  * **Время сервера**: Значение по умолчанию `now()` автоматически фиксирует момент получения данных сервером. Эта метка времени не требует изменения, поэтому оставьте это поле пустым при настройке.
* **Время между показаниями**: Измеряет интервал между последовательными передачами данных, сравнивая метки времени сервера. Этот расчёт помогает выявлять проблемы связи или проверять, что устройства передают данные с ожидаемой частотой. Нерегулярные интервалы могут указывать на проблемы с подключением, а постоянные задержки — на перегрузку сети или проблемы с конфигурацией устройства.
* **Округление значений**: Применяет математическое округление к показаниям температуры, уменьшая точность десятичных знаков до целых чисел. Это упрощает визуализацию данных и отчётность, а также снижает требования к хранению исторических данных. Округлённые значения особенно полезны для отображения на панелях и оповещений по пороговым значениям, где десятичная точность не нужна.
  * **Время генерации**: Указание `genTime('speed', 0, 'valid')` связывает эти метаданные напрямую с меткой времени исходного показания, что позволяет анализировать как временной интервал, так и момент его возникновения.
  * **Время сервера**: Значение по умолчанию `now()` автоматически фиксирует момент получения данных сервером. Эта метка времени не требует изменения, поэтому оставьте это поле пустым при настройке.
* **Расчет стандартизированного значения**: Нормализует сырые показания датчиков к процентной шкале (0–100 %). Такая стандартизация упрощает сравнение показаний между разными типами датчиков и моделями транспортных средств. Для Управления транспортом это обеспечивает единообразную отчётность по уровню топлива независимо от конкретной реализации датчика топлива в каждой модели транспортного средства, позволяя использовать единые оповещения о низком уровне топлива и анализ расхода.
* **Расчёт процента заряда аккумулятора**: Нормализует показания напряжения аккумулятора (диапазон 11–14 В) к шкале 0–100 % для более удобного мониторинга. Например, показание 12,5 В будет нормализовано до 50 %, что обеспечивает наглядный индикатор состояния аккумулятора для разных типов транспортных средств.
* **Расчёт положения дроссельной заслонки**: Преобразует сырые данные о положении дроссельной заслонки (диапазон 0–255) с шины CAN транспортного средства в процентную шкалу. Такая стандартизация помогает операторам быстро понимать поведение водителя и производительность транспортного средства без необходимости интерпретировать сырые значения датчиков.
* **Средний уровень топлива по нескольким датчикам**: Объединяет показания двух отдельных датчиков топлива, чтобы получить более точное общее измерение уровня топлива. Это особенно ценно для транспортных средств со сложной формой баков или несколькими баками, где один датчик может не обеспечивать надёжные показания из-за перемещения топлива при движении.

## Пример сводки потока

Эта конфигурация потока демонстрирует несколько ключевых возможностей IoT Logic:

1. **Стандартизация**: Преобразует показания, специфичные для устройства, в стандартизированные бизнес-метрики
2. **Обогащение**: Создаёт новые, значимые метрики, недоступные напрямую из датчиков устройства
3. **Преобразование**: Изменяет единицы измерения в соответствии с требованиями к бизнес-отчётности
4. **Исторический контекст**: Использует предыдущие показания для расчёта метрик на основе тренда
5. **Определение статуса**: Создаёт категориальные значения на основе нескольких входных сигналов датчиков

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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://navixy.com/docs/user/ru/guide/account/iot-logic/flow-management/flow-configuration-example.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
