x-radio, Ответили вам письменно. Дублируем здесь ответ:
> Я создал датчик [реф заведен], который*корректно*отлавливает состояние установки (заведен/заглушен) и выдает, соответственно вкл/выкл.
Да, он работает корректно.
> Создал еще один датчик [моточасы реф], тип - счетчик дифференциальный, формула - (time - #time)*[реф заведен]/const3600. ,
> При выводе сообщений в виде показаний датчиков в столбце [моточасы реф] в каждой строке получаю либо 0ч., либо 0,17ч (сообщения каждые 10 минут).
Этой формулой вы считаете следующее:
1. Сколько времени прошло от предыдущего сообщения до текущего, в секундах.
2. Умножаете на статус рефа в текущем сообщении, т.е. на 0 или на 1.
3. Переводите время в часы.
При условии, что сообщения приходят каждые 10 минут, вы получаете:
А) 0 часов, если в текущем сообщении реф выключен.
Б) 0.17 часов, т.е. 1/6 часа = 10 минут, если в текущем сообщении реф включён.
По большому счёту, эта реализация датчика просто считает время между сообщениями.
> На мой неопытный взгляд датчик с*таким*типом должен суммировать текущее значение с предыдущим. Разве не так???
Нет. Этот датчик ничего не должен суммировать. Никакой датчик в принципе ничего не должен суммировать, если только вы не прописали это в его формуле.
Роль датчика: перевести значение параметра в человекопонятный вид для каждого конкретного сообщения.
Роль отчёта: провести вычисления на основании значения датчиков в каждом сообщении и учитывая тип датчиков, т.е. их логику.
Я неспроста отметил "тип датчика = логика". Устанавливая тип датчика, вы даёте системе понять, по каким принципам изменяются его значения и как она (система) должна с ними работать. Не наоборот!
Например:
1. Тип датчика "Счётчик -> Дифференциальный" означает, что его значение всегда увеличивается. Это может быть пробег с одометра машины (1000 км, 1001 км, 1002 км...), или счётчик расхода топлива (300л, 300.5л, 301л...), или счётчик абсолютных моточасов техники (70ч, 71ч, 72ч...).
2. Отчёт по датчику с типом "Счётчик -> Дифференциальный" считает приращение его значения за интервал времени. Было утром: 70ч. Стало вечером: 78 ч. Итог за день: 78 - 70 = 8 часов.
3. Чтобы правильно использовать этот тип датчика, вы должны подать на него значения, которые постоянно увеличиваются.
Для вашего датчика, с вашей формулой, нужен другой тип датчика: Счётчик -> Мгновенный.
Ведь вы считаете, сколько длился каждый из множества маленьких интервалов. В таком случае, используйте мгновенный счётчик, и система в отчёте посчитает их сумму: 0,17+0,17+0+0,17+0+... = N
Надеюсь, это объяснение поможет вам понять отличие датчика и отчёта. Теперь, переходим к главному.
> В итоге нужен датчик, который пользователь увидит из мобильного приложения в разделе [датчики].
Как мы уже выяснили:
- датчик считает по формуле своё значение в каждом конкретном сообщении
- датчик не считает и не накапливает сумму своих значений, т.к. это удел отчётов и счётчиков пробега/моточасов/трафика в настройках объекта
Дополнительно: датчик, который использует валидатор или предыдущее сообщение (#), не может быть использован ни для счётчика моточасов/пробега, ни в мобильном приложении
Для реализации обозначенной выше цели, у вас есть 2 варианта действий:
1. Считывать и передавать в систему текущее значение счётчика моточасов напрямую с рефа.
Такие решения существуют, всё упирается в возможности технической реализации.
2. Датчик работы рефа сделать ОСНОВНЫМ и, желательно, единственным датчиком зажигания.
Сейчас у вас в объекте 5 (!) датчиков зажигания. Это не так удобно, как если использовать 1 датчик зажигания, а остальные делать произвольными цифровыми датчиками.
Нюанс в том, что "Счётчик моточасов" на вкладке "Основное" зависит от того датчика зажигания, который создан первым. Как узнать, от какого это датчика зависит? Только экспортировав датчики объекта в WLP-файл и проверив их "id".
По итогу, у вас должен остаться только один датчик зажигания - "Реф заведён" - и счётчик моточасов будет работать по нему и отображаться в мобильном приложении.