[comment]: # attributes: notoc

[comment]: # ({ee75c9cc-2e2a1a06})
# 8 Прогностические функции

Все функции, перечисленные здесь, поддерживаются в:

-   [Триггерных выражениях](/manual/config/triggers/expression)
-   [Вычисляемых элементах данных](/manual/config/items/itemtypes/calculated)
-   [Макросах выражений](/manual/config/macros/expression_macros)

Функции перечислены без дополнительной информации. Щелкните по функции, чтобы увидеть полные сведения.

|Function|Description|
|--|--------|
|[forecast](#forecast)|Будущее значение, max, min, delta или avg элемента данных.|
|[timeleft](#timeleft)|Время в секундах, необходимое элементу данных для достижения указанного порога.|

[comment]: # ({/ee75c9cc-2e2a1a06})

[comment]: # ({645b8a56-4d343eb8})
##### Общие параметры

-   `/узел_сети/ключ` является общим обязательным первым параметром для функций,
    ссылающихся на историю элемента данных узла сети
-   `(сек|#число)<:сдвиг_времени>` является общим вторым параметром для функций,
    ссылающихся на историю элемента данных узла сети, где:
    -   **сек** — максимальный [период
        вычисления](/manual/config/triggers#период-вычисления) в секундах
        (могут использоваться [суффиксы](/manual/appendix/suffixes) времени), либо
    -   **\#число** — максимальная [область
        вычисления](/manual/config/triggers#период-вычисления) среди последних
        собранных значений (если начинается со знака решётки)
    -   **сдвиг_времени** (опционально) позволяет сдвигать точку вычислений
        по времени назад в прошлое. Смотрите [более подробную
        информацию](/manual/config/triggers/expression#сдвиг-времени) относительно
        того, как указывать сдвиг времени.

[comment]: # ({/645b8a56-4d343eb8})

[comment]: # ({c645f0e4-f3b63bc1})
### Подробности функций

Некоторые общие замечания о параметрах функций:

-   Параметры функций разделяются запятой
-   Необязательные параметры функций (или части параметров) обозначаются
`<` `>`
-   Параметры, специфичные для функций, описаны с каждой функцией
-   Параметры `/host/key` и `(sec|#num)<:time shift>` никогда не должны
заключаться в кавычки

[comment]: # ({/c645f0e4-f3b63bc1})

[comment]: # ({8a873b31-e4452b37})
##### forecast(/узел_сети/ключ,(сек\|\#число)<:сдвиг_времени>,время,<аппроксимация>,<режим>) {#forecast}

Будущее значение, наибольшее, наименьшее, дельта или среднее элемента данных.<br>
Поддерживаемые типы значений: *Float*, *Integer*.

Параметры: 

-   Смотрите [общие параметры](#общие-параметры);<br>
-   **время** — горизонт предсказания в секундах (могут использоваться суффиксы времени); поддерживаются отрицательные значения;<br>
-   **аппроксимация** (опционально; должна быть в двойных кавычках) — функция, используемая для аппроксимации данных истории. Поддерживаются аппроксимации:<br>*linear* — линейная функция (по умолчанию)<br>*polynomialN* — полиномиальная степени N (1 <= N <= 6)<br>*exponential* — экспоненциальная функция<br>*logarithmic* — логарифмическая функция<br>*power* — степенная  функция<br>Обратите внимание, что *polynomial1* эквивалентно *linear*;
-   **режим** (опционально; должен быть в двойных кавычках) — требуемый вывод. Поддерживаются режимы:<br>*value* — значение (по умолчанию)<br>*max* — максимум<br>*min* — минимум<br>*delta* — *max*-*min*<br>*avg* — среднее<br>Обратите внимание, что *value* оценивает значение элемента данных на момент `текущий_момент` + `время`; *max*, *min*, *delta* и *avg* исследуют оценку значения элемента данных в интервале между `текущий_момент` и `текущий_момент` + `время`.

Комментарии:

-   Если возвращаемое значение больше, чем 1.7976931348623157E+308, или меньше, чем -1.7976931348623157E+308, то возвращаемое значение усекается до 1.7976931348623157E+308 или -1.7976931348623157E+308 соответственно;
-   Переходит в неподдерживаемое состояние только при некорректном использовании в выражении (ошибочный тип элемента данных, недопустимые параметры), в противном случае при ошибках возвращает -1;
-   Смотрите также дополнительную информацию о [прогнозирующих функуциях триггеров](/manual/config/triggers/prediction).

Примеры:

    forecast(/узел_сети/ключ,#10,1h) #предсказать значение элемента данных через час, основываясь на последних 10 значениях
    forecast(/узел_сети/ключ,1h,30m) #предсказать значение элемента данных через 30 минут на основании данных последнего часа
    forecast(/узел_сети/ключ,1h:now-1d,12h) #предсказать значение элемента данных через 12 часов на основании одного часа сутки назад
    forecast(/узел_сети/ключ,1h,10m,"exponential") #предсказать значение элемента данных через 10 минут, основываясь на данных последнего часа и экспоненциальной функции
    forecast(/узел_сети/ключ,1h,2h,"polynomial3","max") #предсказать максимальное значение, которое элемент данных может достичь через следующие два часа на основании данных последнего часа и кубическом (третьей степени) многочлене
    forecast(/узел_сети/ключ,#2,-20m) #ожидаемое значение элемента данных 20 минут назад на основании последних двух значений (это может оказаться более точным, чем использование last(), особенно если элемент данных обновляется редко — скажем, раз в час)

[comment]: # ({/8a873b31-e4452b37})

[comment]: # ({834aceba-9b065620})
##### timeleft(/узел_сети/ключ,(сек\|\#число)<:сдвиг_времени>,порог,<аппроксимация>) {#timeleft}

Время в секундах, которое требуется для достижения элементом данных указанного порогового значения.<br>
Поддерживаемые типы значений: *Float*, *Integer*.

Параметры: 

-   Смотрите [общие параметры](#общие-параметры);<br>
-   **порог** — достигаемое значение (могут использоваться [суффиксы единиц измерения](/manual/appendix/suffixes));
-   **аппроксимация** (опционально; должна быть в двойных кавычках) — см. [forecast()](#forecast).

Комментарии:

-   Если возвращаемое значение больше, чем 1.7976931348623157E+308, то возвращаемое значение усекается до 1.7976931348623157E+308;
-   Возвращает 1.7976931348623157E+308, если пороговое значение недостижимо;
-   Переходит в неподдерживаемое состояние только при некорректном использовании в выражении (ошибочный тип элемента данных, недопустимые параметры), в противном случае при ошибках возвращает -1;
-   Смотрите также дополнительную информацию о [прогнозирующих функуциях триггеров](/manual/config/triggers/prediction).

Примеры:

    timeleft(/узел_сети/ключ,#10,0) #время до тех пор, пока значение элемента данных не достигнет нуля, на основании последних 10 значений
    timeleft(/узел_сети/ключ,1h,100) #время до тех пор, пока значение элемента данных не достигнет 100, на основании данных последнего часа
    timeleft(/узел_сети/ключ,1h:now-1d,100) #время до тех пор, пока значение элемента данных не достигнет 100, на основании данных одного часа сутки назад
    timeleft(/узел_сети/ключ,1h,200,"polynomial2") #время до тех пор, пока значение элемента данных не достигнет 200, на основании данных последнего часа и предположении, что элемент данных ведёт себя как квадратный (второй степени) многочлен

[comment]: # ({/834aceba-9b065620})

[comment]: # ({ba59dd3a-9958c480})

См. [все поддерживаемые функции](/manual/appendix/functions).

[comment]: # ({/ba59dd3a-9958c480})

