Skip to main content
Skip table of contents

Примеры вычислений

Узел Вычисление атрибута в IoT Logic поддерживает широкий спектр вычислений с использованием языка выражений ГМ Телематика IoT Logic. В этом руководстве приведены практические примеры распространённых вычислений, которые помогут вам максимально эффективно использовать ваши IoT-данные.

Важные моменты

При создании вычислений учитывайте следующие моменты:

  • Корректность имён атрибутов: убедитесь, что используете правильные имена атрибутов. Их можно посмотреть в разделе Анализ данных или вставить через автоподстановку с использованием короткого синтаксиса

  • Валидность данных: убедитесь, что выражения корректно обрабатывают возможные null значения или некорректные данные

  • Влияние на производительность: сложные вычисления с большим количеством вложенных функций могут снижать скорость обработки при высокочастотных данных

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

  • Работа с историческими данными: при использовании индексированных значений (например, value('param', 1, 'valid')) убедитесь, что у вас есть достаточное количество исторических данных и используйте полный синтаксис выражений

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

Базовые вычисления

Преобразование единиц измерения

Преобразование значений между различными единицами — одна из самых распространённых операций при обработке IoT-данных.

Преобразование скорости (км/ч → мвч)

CODE
can_speed/1.609

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

Преобразование температуры (Цельсий → Фаренгейт)

CODE
temperature * 1.8 + 32

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

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

Вычисления на основе времени

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

Определение времени между последними корректными значениями

CODE
srvTime('avl_25', 0, 'valid') - srvTime('avl_25', 1, 'valid')

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

Пример: Для парка такси это вычисление помогает выявлять проблемы с подключением GPS-трекеров. Если интервал между передачами данных увеличивается с обычных 30 секунд до нескольких минут, это может указывать на плохое покрытие сети или неисправность устройства, что позволяет оперативно принять меры.

Преобразование временной метки в читаемый формат

CODE
dtFormat(genTime('can_fuel_1', 0, 'all'))

Практическое применение:
Преобразование Unix-времени в формат ISO 8601 делает данные более читаемыми в логах и отчётах. Этот формат широко поддерживается аналитическими инструментами и базами данных, что упрощает интеграцию с другими системами.

Продвинутые математические функции

IoT Logic поддерживает сложные математические операции с помощью встроенных функций.

Округление значений
Округление температуры до ближайшего целого:

CODE
math:round(value('temperature_2', 0, 'valid'))

Практическое применение:
Округление полезно, когда высокая точность не требуется или нужно снизить шум в данных датчиков. Например, при мониторинге окружающей среды округлённых значений достаточно, при этом уменьшается объём хранимых данных. Эта функция также удобна для создания диапазонов значений (например, группировки температуры по шагу 5 градусов).

Пример:
В управлении автопарком значения температуры двигателя часто содержат дробную часть, которая не имеет значения для уведомлений водителя или планирования обслуживания. Округление упрощает отображение на панели и позволяет легче задавать пороговые значения. Например, уведомление можно отправлять при превышении округлённой температуры 90°C вместо работы с точными значениями вроде 89.7°C.

Логарифмические вычисления

Натуральный логарифм значения

CODE
math:log(value('temperature_2', 0, 'valid'))

Практическое применение:
Логарифмические преобразования особенно полезны для:

  • Сжатия данных, охватывающих несколько порядков величин, в более удобный диапазон

  • Преобразования экспоненциальных зависимостей в линейные для упрощения анализа

  • Работы с датчиками, имеющими логарифмическую характеристику отклика

  • Расчётов уровня звука (децибелы — логарифмическая величина)

  • Измерений pH в экологическом мониторинге

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

Ещё один пример — работа с датчиками топлива, которые дают нелинейные показания. Некоторые датчики уровня топлива имеют нелинейную зависимость сопротивления от уровня топлива. Использование логарифмических вычислений помогает преобразовать такие данные в более точные значения уровня топлива в процентах.

Операции с квадратным корнем

Вычисление квадратного корня значения

CODE
math:sqrt(value('temperature_2', 0, 'valid'))

Практическое применение:
Функция квадратного корня полезна для:

  • Преобразования между мощностью и амплитудой в электрических измерениях

  • Расчёта стандартного отклонения при статистическом анализе данных датчиков

  • Определения среднеквадратичного значения (RMS) для электрических параметров

  • Расчёта расстояния в многомерном пространстве (например, трилатерация для позиционирования)

  • Нормализации некоторых типов данных датчиков

Пример:
При расчёте реального расстояния между двумя GPS-точками (широта и долгота) используется функция квадратного корня как часть формулы расстояния. Например, при вычислении дистанции, пройденной транспортным средством между двумя GPS-координатами по формуле евклидова расстояния, квадратный корень является обязательным элементом.

Ещё один распространённый пример — расчёт величины вибрации или ударов на основе данных акселерометра по осям X, Y и Z. Квадратный корень из суммы квадратов значений по каждой оси даёт общую величину вибрации, что полезно для обнаружения ударов или движения по неровной дороге.

Комбинированные операции

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

Геометрическое среднее с округлением

CODE
math:round(math:sqrt(value('temperature_1', 0, 'valid') * value('temperature_2', 0, 'valid')))

Практическое применение:
Это вычисление определяет геометрическое среднее значений с двух температурных датчиков и округляет результат для более удобного отображения. Геометрическое среднее часто более уместно, чем арифметическое, при работе с величинами, связанными с коэффициентами, отношениями или значениями, где естественным способом объединения является умножение.

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

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

Расчёт нормализованного значения

CODE
(value('sensor_reading', 0, 'valid') - value('sensor_min', 0, 'valid')) / (value('sensor_max', 0, 'valid') - value('sensor_min', 0, 'valid')) * 100

Практическое применение:
Это вычисление нормализует показание датчика в процентную шкалу от 0 до 100%, что позволяет сравнивать данные от разных датчиков с различными диапазонами. Это особенно полезно для создания унифицированных дашбордов и настройки оповещений на основе относительных значений, а не абсолютных.

Пример:
Менеджер автопарка работает с транспортом разных производителей, у которых датчики топлива выдают значения в разных единицах (омы, вольты, цифровые значения). Приводя эти данные к единой процентной шкале, можно использовать одинаковые пороги для предупреждений о низком уровне топлива и формировать унифицированные отчёты без учёта особенностей конкретных датчиков.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.