> 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/analytics/ru/iot-query/schema-overview/transformation-layer/common-transformations/input-change-events.md).

# События изменения ввода

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

Трансформация событий изменения входа записывает каждый раз, когда дискретный вход устройства меняет состояние и это изменение соответствует настроенному `input_change` правилу. Каждая строка в `processed_common_data.input_change_events` представляет одно совпавшее изменение: какой вход переключился, каким стало его новое значение, когда и где это произошло и какому правилу оно соответствовало.

Как и события водителя на основе правил, события изменения входа выполняются по фиксированному расписанию, а не непрерывно. Функция обновления повторно оценивает окно сырых данных каждые 15 минут, поэтому новая строка может отставать от фактического изменения входа на устройстве до 15 минут.

{% hint style="info" %}

* Все временные метки хранятся в UTC.
* Только изменения, которые соответствуют настроенному `input_change` правилу, дают строку. Активность дискретного входа, которая не соответствует ни одному правилу, по-прежнему доступна в `raw_telematics_data.additional_data`, просто здесь не отображается.
  {% endhint %}

## Выходная таблица: processed\_common\_data.input\_change\_events

Каждая строка представляет одно обнаруженное изменение входа, которое соответствовало `input_change` правилу. Таблица имеет ключ по `device_id`, `device_time`, и `rule_id`.

<table><thead><tr><th width="180">Поле</th><th width="100">Тип</th><th>Описание</th></tr></thead><tbody><tr><td><code>device_id</code></td><td>integer</td><td>Идентификатор устройства.</td></tr><tr><td><code>object_id</code></td><td>integer</td><td>Идентификатор объекта (транспортного средства/актива), связанного с устройством.</td></tr><tr><td><code>Объект_лейбл</code></td><td>текст</td><td>Человекочитаемое имя объекта. Уже денормализовано в эту таблицу, поэтому, в отличие от Поездок, для его отображения не требуется соединение с <code>raw_business_data.objects</code> ним.</td></tr><tr><td><code>device_time</code></td><td>метка времени</td><td>Момент, когда изменение входа произошло на устройстве.</td></tr><tr><td><code>rule_id</code></td><td>integer</td><td>Идентификатор <code>input_change</code> правила, которое совпало.</td></tr><tr><td><code>input_number</code></td><td>integer</td><td>Номер входа, начиная с 1, соответствующий позиции в <code>discrete_inputs</code> битовой строке в <code>raw_telematics_data.additional_data</code>.</td></tr><tr><td><code>input_value</code></td><td>integer</td><td>Новое значение входа после изменения: <code>0</code> или <code>1</code>.</td></tr><tr><td><code>event_type</code></td><td>текст</td><td>Всегда <code>input_change</code>.</td></tr><tr><td><code>event_comment1</code></td><td>текст</td><td>Первый комментарий, настроенный для совпавшего правила.</td></tr><tr><td><code>event_comment2</code></td><td>текст</td><td>Второй комментарий, настроенный для совпавшего правила.</td></tr><tr><td><code>zone_id</code></td><td>integer</td><td>Идентификатор геозоны, в которой находилось устройство в момент изменения. Null, если правило не связано с геозоной.</td></tr><tr><td><code>zone_label</code></td><td>текст</td><td>Название этой геозоны. Null, если правило не связано с геозоной.</td></tr><tr><td><code>latitude</code></td><td>numeric</td><td>Широта в момент изменения, в градусах.</td></tr><tr><td><code>longitude</code></td><td>numeric</td><td>Долгота в момент изменения, в градусах.</td></tr><tr><td><code>created_at</code></td><td>метка времени</td><td>Когда строка была записана в ходе запланированного обновления.</td></tr></tbody></table>

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

{% tabs %}
{% tab title="Базовый запрос" %}
{% code overflow="wrap" expandable="true" %}

```sql
SELECT
    device_id,
    Объект_label,
    device_time,
    input_number,
    input_value,
    zone_label
FROM processed_common_data.input_change_events
WHERE device_time >= CURRENT_DATE - INTERVAL '7 days'
ORDER BY device_id, device_time;
```

{% endcode %}
{% endtab %}

{% tab title="Фильтр по входу" %}
{% code overflow="wrap" expandable="true" %}

```sql
SELECT
    device_id,
    Объект_label,
    device_time,
    input_value,
    zone_label
FROM processed_common_data.input_change_events
WHERE input_number = 3
  AND input_value = 1
  AND device_time >= CURRENT_DATE - INTERVAL '7 days'
ORDER BY device_id, device_time;
```

{% endcode %}
{% endtab %}

{% tab title="Фильтр по правилу" %}
{% code overflow="wrap" expandable="true" %}

```sql
SELECT
    device_id,
    Объект_label,
    device_time,
    input_number,
    input_value
FROM processed_common_data.input_change_events
WHERE rule_id = 12345
  AND device_time >= CURRENT_DATE - INTERVAL '7 days'
ORDER BY device_id, device_time;
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Как обнаруживаются изменения входа

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

{% stepper %}
{% step %}

#### Scheduled refresh

Каждые 15 минут функция обновления читает самое свежее окно строк из `raw_telematics_data.additional_data`.
{% endstep %}

{% step %}

#### Сравнение с последним известным состоянием

Текущие `discrete_inputs` и `discrete_outputs` битовые строки сравниваются побитово с состоянием, записанным при предыдущем обновлении. Дальше учитываются только те биты, которые действительно переключились.
{% endstep %}

{% step %}

#### Сопоставление с правилами

Переключившийся бит становится кандидатом на событие, если его номер входа и новое значение соответствуют условию, настроенному на `input_change` правиле. См. [Срабатывание входа](https://gitlab.navixy.dev/docs/user-docs/-/tree/main/docs/user-guide/guide/events-and-notifications/inputs-and-outputs/input-triggering.md) о том, как настраиваются эти правила, и [Справочник типов правил](https://navixy.com/docs/navixy-api/user-api/backend-api/resources/tracking/tracker/rules/rule_types) для полного списка типов правил.
{% endstep %}

{% step %}

#### Проверка геозоны

Если совпавшее правило связано с геозоной, обновление перед записью строки подтверждает, что устройство находилось внутри этой зоны в момент изменения. Для правил, не связанных с зоной, эта проверка пропускается.
{% endstep %}

{% step %}

#### Обновление последнего известного состояния

После завершения обновления для каждого устройства записывается его последнее битовое состояние для сравнения при следующем запуске.
{% endstep %}
{% endstepper %}

## Настройка

События изменения входа не настраиваются через рабочий процесс Transformation Builder так, как это делается для Поездок. Строки, которые появляются здесь, напрямую отражают те `input_change` правила, которые настроены в вашей учетной записи: чтобы изменить то, что записывается, добавляйте, редактируйте или удаляйте соответствующие правила, а не шаблон трансформации. См. [Срабатывание входа](https://gitlab.navixy.dev/docs/user-docs/-/tree/main/docs/user-guide/guide/events-and-notifications/inputs-and-outputs/input-triggering.md) о том, как настроить эти правила.

## Следующие шаги

* [**Общие преобразования**](/docs/analytics/ru/iot-query/schema-overview/transformation-layer/common-transformations.md): Назад к индексу преобразований.
* [**Поездки**](/docs/analytics/ru/iot-query/schema-overview/transformation-layer/common-transformations/trips.md): Соседняя трансформация, которая также выполняется по расписанию на сырых телематических данных.
* [**События Водителя на основе правил**](/docs/analytics/ru/iot-query/schema-overview/transformation-layer/common-transformations/rule-based-driver-events.md): Родственная трансформация, которая записывает нарушения вождения по тому же 15-минутному расписанию.
* [**Слой сырых данных**](/docs/analytics/ru/iot-query/schema-overview/bronze-layer.md): Изучить `additional_data`, исходная таблица, которая подает данные в События изменения входа.
* [**Срабатывание входа**](https://gitlab.navixy.dev/docs/user-docs/-/tree/main/docs/user-guide/guide/events-and-notifications/inputs-and-outputs/input-triggering.md): Настройте `input_change` правила, которые определяют, какие изменения входа здесь записываются.


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://navixy.com/docs/analytics/ru/iot-query/schema-overview/transformation-layer/common-transformations/input-change-events.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
