Спасибо за разъяснение.
Бегунком регулировать у меня регулировать не вышло.
Могу предложить для более точной подстройки использовать вариант с добавлением к значению нужного значения в десятых.
// Функция для корректного округления до одного знака после запятой
function roundToOneDecimal(value) {
return Math.round(value * 10) / 10;
}
// Создание виртуального устройства с контролом температуры и двумя кнопками
defineVirtualDevice("test_device", {
title: "Тестовое устройство",
cells: {
SetPoint: {
type: "range",
value: 22.5,
max: 25.0,
min: 0.0,
step: 0.1,
readonly: false
},
AddValueButton: {
type: "pushbutton", // Кнопка +0.1
value: false,
title: "+0.1"
},
SubtractValueButton: {
type: "pushbutton", // Кнопка -0.1
value: false,
title: "-0.1"
}
}
});
// Правило для обработки нажатия на кнопку добавления +0.1
defineRule("add_value_button_pressed", {
whenChanged: "test_device/AddValueButton",
then: function (newValue, devName, cellName) {
if (newValue) {
var currentTemp = dev["test_device"]["SetPoint"];
var newTemp = currentTemp + 0.1;
// Проверка на пределы значений (max)
if (newTemp > 25.0) {
newTemp = 25.0;
}
// Округление значения до одного знака после запятой
newTemp = roundToOneDecimal(newTemp);
// Установка нового значения температуры
dev["test_device"]["SetPoint"] = newTemp;
log.info("Значение температуры увеличено на 0.1. Новое значение: " + newTemp + " °C");
}
}
});
// Правило для обработки нажатия на кнопку уменьшения -0.1
defineRule("subtract_value_button_pressed", {
whenChanged: "test_device/SubtractValueButton",
then: function (newValue, devName, cellName) {
if (newValue) {
var currentTemp = dev["test_device"]["SetPoint"];
var newTemp = currentTemp - 0.1;
// Проверка на пределы значений (min)
if (newTemp < 0.0) {
newTemp = 0.0;
}
// Округление значения до одного знака после запятой
newTemp = roundToOneDecimal(newTemp);
// Установка нового значения температуры
dev["test_device"]["SetPoint"] = newTemp;
log.info("Значение температуры уменьшено на 0.1. Новое значение: " + newTemp + " °C");
}
}
});