Вы в контрол виртуального устройства (то, что отображается у вас на экране в WEB интерфейсе) публикуете НЕ форматированное значение
dev[deviceName+”/impuls_3”] = newValue + 0.01;
В то время как в лог вы выводите (предварительно считав из контрола не форматированное значение) значение с форматированием “три знака после запятой” т.е. .toFixed(3)
log (“newValue = “, newValue.toFixed(3));
...
log (“сумма = “, (dev[deviceName+”/impuls_3”]).toFixed(3));
Вывод (решение) - опубликуйте в контрол предварительно отформатированное значение.
Рекомендую не использовать переменную newValue на все случаи жизни - это усложняет чтение кода ив какой-то момент времени может сыграть злую шутку (неконтролируемое изменение значения).
Опять же, как рекомендация (чтобы научиться разбираться в подобных проблемах самостоятельно) - не стесняйтесь делить задачу на мелкие шаги и контролировать (log()) каждый шаг, например:
if (newValue === true) {
// Считать текущее значение контрола
var CurrentValue = dev[deviceName+”/impuls_3”];
// Проверим, а что там считалось?
log (“Из контрола мы считали вот это = “, CurrentValue);
// инкрементируем значение контрола на величину "шага" 0.01
var NextStep = CurrentValue + 0.01;
// Посмотрим, а что там получилось и в каком виде представлено?
log (“Инкрементировали значение на 0.01 и получили вот это = “, NextStep);
// Ух ты! бардак! А что если отформатировать значение?
var NextStepFormated = NextStep.toFixed(3) ;
// Проверим, а что там получилось после форматирования?
log (“Отформатировали полученное значение до трех знаков после запятой = ",
NextStepFormated, " Получилось ли то, что ожидали? );
// Если все получилось как надо, то публикуем значение в контрол
dev[deviceName+”/impuls_3”] = NextStepFormated;
// И что же теперь имеем в контроле? Считаем значение в лог..
log (“Что же в итоге получили? Сумма = “, dev[deviceName+”/impuls_3”] );
}
Это, естественно, отладочный фрагмент кода, который расставит вам все точки над Ё
После этого удалите из кода все лишнее , как минимум вывод в логи - не стоит плодить файлы логов большого размера и содержащие много ненужного в нормальной работе “мусора”, и пользуйтесь.
Комментарии лучше оставлять в коде (если вы еще не супер спец в программировании, который одним взглядом на листинг из полторы тысячи строк легко разберется в логике работы скрипта и за одно обнажить ошибки в коде или логике его работы
)
PS код выше я не проверял - писал сразу в чат “в живую”. Надеюсь все запятые там на месте ![]()
PPS у элементов виртуального устройства есть нет свойства precision (см, например, тему Количество знаков после запятой )- т.е. значение контрола будет “отформатировано” с указанной точностью, но у меня не всегда это срабатывает, поэтому я “по старинке” сам форматирую значения перед выводом их в контролы виртуальных устройств.
PPPS безусловно, приведенный выше код можно сократить буквально до одной/двух строк. Он может стать менее “читаемым” для новичка, но от этого не утратит своей функциональности и заодно сократит размер “портянки” скрипта
Удачи в освоении!