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

Узел атрибута Initiate в IoT Logic поддерживает широкий спектр вычислений через Navixy IoT Logic Expression Language. Это руководство содержит практические примеры распространённых вычислений, которые помогут вам извлечь максимальную ценность из ваших данных IoT.

Важные замечания

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

  • Корректность имён атрибутов: Убедитесь, что вы используете правильные имена атрибутов в вычислениях. Вы можете найти существующие имена атрибутов с помощью Data Stream Analyzer, или вставлять их с помощью gУправление атрибутами используя автозаполнение.

  • Корректность данных: Убедитесь, что ваши выражения корректно обрабатывают возможные значения null или недействительные показания

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

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

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

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

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

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

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

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

can_speed/1.609

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

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

temperature * 1.8 + 32

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

Вычисление разностей

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

Обнаружение изменения температуры

temperature - value('temperature', 1, 'valid')

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

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

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

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

Нахождение времени, прошедшего между последними валидными показаниями

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

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

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

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

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

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

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

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

Округление значений

Округлить температуру до ближайшего целого

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

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

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

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

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

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

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

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

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

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

  • Вычислений уровней звука, где децибелы являются логарифмическими единицами

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

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

Операции квадратного корня

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

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

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

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

  • Вычисления стандартных отклонений в статистическом анализе данных датчиков

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

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

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

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

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

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

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

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

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

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

Стандартизированное вычисление значения

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

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

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

Последнее обновление

Это было полезно?