> 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/nodes/logic-node.md).

# IF/THEN Логика

Маршрутизируйте потоки данных IoT Logic по условиям с помощью узла IF/THEN Логика. Оценивайте значения телеметрии, запускайте действия для подходящих записей и пропускайте остальные.

## Технический обзор и возможности

{% columns %}
{% column %}
Вкладка **IF/THEN Логика** узел создает интеллектуальные точки ветвления, которые направляют входящие данные по разным путям в зависимости от логических условий. Он получает данные от других узлов, проверяет их на соответствие заданным вами условиям и направляет результаты по разным путям в зависимости от того, успешна проверка или нет. Узел позволяет строить рабочие процессы IF->THEN/ELSE, в которых разные действия выполняются автоматически на основе условий данных в реальном времени.
{% endcolumn %}

{% column %}

<figure><img src="https://2388694493-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-82bc1f63ee59856cd086bcafb471df3874d45cb5%2Fiot-logic-logic-node-tile.png?alt=media" alt="IF/THEN Logic node tile"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% hint style="info" %}
Вкладка **IF/THEN Логика** Узлы настраиваются отдельно для каждого потока в интерфейсе платформы Navixy. Каждый узел содержит только одну логическую формулу, опираясь на [язык выражений Navixy IoT Logic](/docs/iot-logic-api/technologies/navixy-iot-logic-expression-language.md).\
С конкретными вариантами синтаксиса, связанными с логическими выражениями, см. [выражения и синтаксис IF/THEN Логика](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md).
{% endhint %}

<figure><img src="https://2388694493-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-4501f0ee515603cadec633c0b982378708c29190%2Fiot-logic-logic-node-in-flow.png?alt=media" alt="IF/THEN Logic node positioning in the flow architecture (with inbound and outbound connections)"><figcaption></figcaption></figure>

### Как работают узлы IF/THEN Логика

Когда данные впервые достигают узла **IF/THEN Логика** , IoT Logic создает пользовательский логический атрибут, который хранит результаты вычисления. Каждый последующий пакет данных оценивается по вашему логическому выражению, обновляя значение этого атрибута и направляя данные соответствующим образом:

* **Истинные результаты**: Данные проходят по соединению THEN (зелёный цвет), а логический атрибут получает значение `true`.
* **Ложные результаты**: Данные проходят по соединению ELSE (красный цвет), а логический атрибут получает значение `false`. Это обычный случай, но не единственный: при отсутствии значения некоторые операторы направляют данные в ELSE, оставляя атрибут null `null` вместо false `false`. См. [Отсутствующие значения и маршрутизация null](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md#missing-values-and-null-routing).

Эта проверка выполняется независимо для каждого пакета данных, позволяя разным записям с одного и того же устройства следовать разными путями в зависимости от условий в реальном времени.

### Интеграция в архитектуру потока

Логические атрибуты, создаваемые **IF/THEN Логика** узлами, выходят за рамки маршрутизации потока и интегрируются с более широкими возможностями мониторинга Navixy. Поскольку это пользовательские настраиваемые атрибуты, их можно:

* **Отслеживать в реальном времени**: Просматривать результаты проверки в [Анализ данных](/docs/user/ru/guide/account/iot-logic/data-stream-analyzer.md) для диагностики условий и проверки логики
* **Добавлять как пользовательские датчики**: Интегрировать с главным интерфейсом Navixy для постоянного мониторинга

Как пользовательские датчики, эти атрибуты обеспечивают две ключевые возможности:

* **Срабатывание контроля событий**: Вы можете создавать пользовательские правила на основе значения датчика, чтобы получать уведомления в случае отклонений. Подробнее о создании правил см. [Правила и уведомления](/docs/user/ru/guide/events-and-notifications.md).
* **Контролируемые сущности**: Вы можете добавить атрибут в [Список объектов](/docs/user/ru/guide/tracking/objects-list.md) виджет, чтобы отслеживать его значение вместе с другими показаниями устройства. Подробнее о том, как создать пользовательский датчик из атрибута IoT Logic, см. [Отображение новых вычисленных атрибутов на платформе Navixy](/docs/user/ru/guide/account/iot-logic/nodes/initiate-attribute-node/displaying-new-calculated-attributes-on-the-navixy-platform.md).

{% hint style="info" %}
Вкладка **IF/THEN Логика** Узел требует подключения хотя бы к одному предыдущему узлу (**Источник данных** или другим узлам обработки), чтобы получать входные данные для проверки.
{% endhint %}

### Возможности узла

Вкладка **IF/THEN Логика** Узел предлагает:

* **Условная маршрутизация данных**: Создавайте разветвлённые рабочие процессы, которые автоматически направляют данные на основе логических выражений, возвращающих true или false.
* **Проверка в реальном времени**: Проверяйте входящие данные устройства на соответствие бизнес-правилам и эксплуатационным порогам по мере поступления данных.
* **Поддержка сложных условий**: Комбинируйте несколько параметров с помощью логических операторов (AND, OR и т. д.) для сложного принятия решений.
* **Условия на основе зон**: Ссылайтесь на именованные зоны Navixy непосредственно в выражениях с помощью `inGeofence()`, `enterGeofence()`, и `leaveGeofence()` функций, без ручного сравнения координат. `geofenceName()` возвращает название зоны, в которой находится устройство, так что одно условие может охватывать много областей. См. [Функции зон](/docs/user/ru/guide/account/iot-logic/nodes/geofence-functions.md).
* **Создание атрибута**: Генерируйте логические атрибуты, которые записывают результаты проверки для использования в других узлах, системах мониторинга Navixy и сторонних сервисах.
* **Гибкие пути вывода**: Направляйте данные через соединения THEN (true) и ELSE (false, а иногда null при отсутствии значения), чтобы запускать разные последующие действия.

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

{% columns %}
{% column valign="middle" %}
Вкладка **IF/THEN Логика** узел позволяет задавать условные выражения, которые оценивают входящие данные и создают разветвлённые пути в вашем потоке на основе результатов.
{% endcolumn %}

{% column %}

<figure><img src="https://2388694493-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-b6c0a06da08316f5e17ead42e1e5b2083b59603a%2FLogic_node_edit.png?alt=media" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

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

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

{% stepper %}
{% step %}

#### Укажите имя узла

Введите описательное имя для этого **IF/THEN Логика** Узел.

* Используйте имя, которое ясно обозначает цель проверки (например, *Проверка температурного оповещения*, *Обнаружение контроля скорости*).
* Это имя будет отображаться на схеме потока для удобства идентификации.
  {% endstep %}

{% step %}

#### Определите имя выражения

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

* Этот атрибут появится в [Анализ данных](/docs/user/ru/guide/account/iot-logic/data-stream-analyzer.md) и станет доступен для использования в последующих узлах.
* Используйте описательные имена, например *high\_temperature\_alert* или speed\_violation\_detected.
* Система автоматически сгенерирует имена вроде *logic\_1*, *logic\_2* если ничего не указано.
  {% endstep %}

{% step %}

#### Создайте условное выражение

Постройте логическое выражение в поле выражения.

* Используйте [логические операторы в соответствии с синтаксисом языка выражений Navixy](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md) для обращения к параметрам устройства и вычисленным атрибутам.
* Выражение должно возвращать логическое значение (true/false) для корректной работы узла. Отсутствующее значение может вести себя иначе. См. [Отсутствующие значения и маршрутизация null](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md#missing-values-and-null-routing).
* Используйте [функцию автодополнения](/docs/user/ru/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#autofill-attribute-names) для выбора доступных атрибутов из подключённых источников данных.
* Чтобы сослаться на зону Navixy как на условие, используйте [выбор зоны](/docs/user/ru/guide/account/iot-logic/nodes/geofence-functions.md#how-to-add-a-geofence-condition) в поле выражения.
  {% endstep %}

{% step %}

#### Сохраните конфигурацию узла

Нажмите **Примените изменения** чтобы завершить создание узла.
{% endstep %}

{% step %}

#### Подключите выходные пути

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

* **Соединение THEN** (зелёное): Подключается к узлам, которые должны обрабатывать данные, когда выражение вычисляется как true.
* **Соединение ELSE** (красное): Подключается к узлам, которые должны обрабатывать данные всякий раз, когда выражение не вычисляется как true. Сюда входит false или отсутствующее значение, которое узел не смог вычислить.
* Соединение THEN обязательно, а соединение ELSE — необязательно.
  {% endstep %}
  {% endstepper %}

{% hint style="warning" %}
Отсутствующие данные часто направляются по пути ELSE, но не всегда.  `!=` сравнение отсутствующего значения с не-null литералом вычисляется как true `true` и направляется в THEN вместо ELSE, как и `!~`, и `!^` и `!$` когда значение поступает из `value()`. Ошибки синтаксиса также направляются в ELSE, но сохраняют атрибут как false, а не как null. `null`для полного набора `false`. См. [Отсутствующие значения и маршрутизация null](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md#missing-values-and-null-routing) устойчивых к null шаблонов и таблиц операторов.
{% endhint %}

Подробную информацию о синтаксисе выражений, операторах и поведении потока данных см. [выражения и синтаксис IF/THEN Логика](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md).

## Выходные соединения и поток данных

Вкладка **IF/THEN Логика** узел создаёт два отдельных выходных пути на основе результатов вычисления выражения.

<figure><img src="https://2388694493-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-4501f0ee515603cadec633c0b982378708c29190%2Fiot-logic-logic-node-in-flow.png?alt=media" alt="IF/THEN Logic node showing THEN and ELSE connections with green and red color coding"><figcaption></figcaption></figure>

### Соединение THEN (<mark style="color:зелёный;">зелёный</mark>)

* **Активируется, когда**: Логическое выражение возвращает `true`.
* **Требование к соединению**: Обязательно. Каждый узел IF/THEN Логика должен иметь как минимум один выход THEN.
* **Несколько соединений**: Может соединяться с несколькими последующими узлами для параллельной обработки.
* **Типичные сценарии использования**: Срабатывание контроля событий, специальная обработка, условные вычисления или направление данных к определённым конечным точкам.

### Соединение ELSE (<mark style="color:красное;">красное</mark>)

* **Активируется, когда**: Логическое выражение возвращает `false`, вычисляется как `null`, или не может быть вычислено.
* **Исключения, на которые стоит обратить внимание**: Сюда попадает большинство сравнений с отсутствующим значением.  `!=` сравнение отсутствующего значения с не-null литералом вместо этого направляется в THEN, как и `!~`, и `!^` и `!$` при отсутствии `value()` результата.
* **Сохранённое значение не всегда `false`**: Направление в ELSE не гарантирует, что логический атрибут будет сохранён как false, а не как null. Реляционные сравнения ( `false`>) и простая ссылка на отсутствующее значение приводят к ELSE, при этом атрибут остаётся`<`, `<=`, `>`, `>=`null. `null`. См. [Отсутствующие значения и маршрутизация null](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md#missing-values-and-null-routing).
* **Требование к соединению**Необязательно. Используйте только когда нужно обрабатывать отрицательные результаты.
* **Обработка ошибок**: Обрабатывает случаи, когда выражения не могут быть вычислены из-за синтаксических ошибок или недопустимых типов данных. Маршрутизация отсутствующих данных зависит от оператора. См. [Отсутствующие значения и маршрутизация null](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md#missing-values-and-null-routing).
* **Типичные сценарии использования**: Запись неудачных проверок, направление данных по альтернативным путям обработки или продолжение нормальной работы.

### **Требование к конечному узлу**

При подключении к конечным узлам ([Действие](/docs/user/ru/guide/account/iot-logic/nodes/action-node.md), [Вебхук](/docs/user/ru/guide/account/iot-logic/nodes/webhook-node.md)) которые не поддерживают исходящие соединения, создайте параллельные соединения, чтобы и конечный узел, и узел передачи данных получали данные:

<figure><img src="https://2388694493-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-4501f0ee515603cadec633c0b982378708c29190%2Fiot-logic-logic-node-in-flow.png?alt=media" alt=""><figcaption></figcaption></figure>

**Почему обеим ветвям нужны узлы передачи данных:**

* Обеспечивает сохранность данных и видимость системы
* Позволяет проверять поток
* Обе ветви могут использовать один и тот же узел передачи данных

{% hint style="danger" %}
**Ошибка проверки:** Потоки без узлов передачи данных на всех ветвях не удастся сохранить — будет показана ошибка.
{% endhint %}

## Часто задаваемые вопросы

#### Могу ли я использовать атрибуты, созданные другими узлами, в выражениях IF/THEN Логика?

Да. **IF/THEN Логика** Узлы могут ссылаться на любые атрибуты, доступные из подключённых источников данных, включая исходные параметры устройства и атрибуты, вычисленные предыдущими **Вычисление атрибута** узлами. Функция автодополнения помогает выбрать из всех доступных атрибутов.

#### Что произойдёт, если в моём выражении есть синтаксические ошибки?

Если выражение содержит синтаксические ошибки или не может быть вычислено, **IF/THEN Логика** узел направит данные через соединение ELSE и сохранит атрибут как `null`для полного набора `false`. Проверьте синтаксис выражения и убедитесь, что все упомянутые атрибуты существуют в вашем потоке данных.

#### Можно ли подключить несколько узлов к одному выходу узла IF/THEN Логика?

Да. И соединения THEN, и соединения ELSE поддерживают несколько исходящих соединений, что позволяет запускать несколько разных действий на основе одного и того же логического условия. Это обеспечивает параллельную обработку для сложных бизнес-процессов.

#### Как отслеживать результаты узла IF/THEN Логика?

Результаты узла IF/THEN Логика отображаются как логические атрибуты в [Анализ данных](/docs/user/ru/guide/account/iot-logic/data-stream-analyzer.md) таблице. Выберите устройства и найдите имя атрибута, которое вы указали в поле имени выражения. Значения обычно отображаются как `true` или `false`false, но при отсутствии значения атрибут может остаться `null` вместо этого, в зависимости от оператора. См. [Отсутствующие значения и маршрутизация null](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md#missing-values-and-null-routing).

#### Почему моё условие сработало, хотя у атрибута ещё нет значения?

Скорее всего, условие использует `!=` по отношению к не-null литералу, или `!~`, для значения, которое ещё ни разу не поступало. Оба оператора рассматривают «отсутствие значения» как нечто отличное от литерала, с которым вы сравниваете, поэтому они вычисляются как `true` true и направляют данные в THEN. Безопасное значение по умолчанию сделало бы обратное.  `!^` и `!$` операторы делают то же самое при отсутствии `value()` результата и приводят к null `null` когда атрибут указан по имени. Добавьте проверку наличия (`value('attr', 0, 'all') != null && ...`) или явную `проверку == null` чтобы условие срабатывало только после того, как у атрибута появится реальное значение. См. [Отсутствующие значения и маршрутизация null](/docs/user/ru/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md#missing-values-and-null-routing) для полного разбора по каждому оператору.

#### Можно ли выстраивать несколько узлов IF/THEN Логика в цепочку?

Да. Вы можете последовательно соединять **IF/THEN Логика** узлы, чтобы создавать сложные деревья принятия решений. Каждый **IF/THEN Логика** узел может ссылаться на логические атрибуты, созданные предыдущими **IF/THEN Логика** узлами, что позволяет создавать сложные многоэтапные рабочие процессы проверки.

<figure><img src="https://2388694493-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-ee4829400641ec381aa3dec65b7dbb1d01d6ebc1%2Fiot-logic-logic-node-chained.png?alt=media" alt="Example flow showing multiple IF/THEN Logic nodes connected in sequence for complex decision trees"><figcaption></figcaption></figure>

#### Почему ветви IF/THEN Логика должны подключаться к узлам передачи данных?

Каждая ветвь IF/THEN Логика должна завершаться узлом передачи данных для проверки потока данных и видимости системы. При использовании конечных узлов (Action, Вебхук), которые не поддерживают исходящие соединения, создайте параллельное соединение от узла IF/THEN Логика напрямую к узлу передачи данных. При необходимости обе ветви могут использовать один и тот же узел передачи данных.


---

# 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/nodes/logic-node.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.
