Ошибки wb-rules

В 2501 обнаружил две ошибки.

/*------------------------------------------------------------------------
// Основные виртуальные устройства с контролами управления обогревателями и вентиляторами в доме
------------------------------------------------------------------------*/

// Обогреватель отопления на кухне 1
defineVirtualDevice("HeaterControlKitchen1", {
	title:"Регулятор температуры на кухне",
	cells: {
		"SetPoint": {
			title: "Температура",
			type:"range",
			value: 25,
			precision: 1,
			max: 25,
			min: 0,
            readonly: true
		},
		"Hest": {
			title: "Гистерезис",
			type:"range",
			value: 2,
			precision: 1,
			max: 10,
            readonly: true
		},
		"Enable": {
			title: "Управление",
			type:"switch",
			value: 0
		},
		"EcoMode": {
			title: "Эко-режим",
			type:"switch",
			value: 0
		},
		"Work": {
			title: "Работа",
			type:"switch",
			value: 0,
            readonly: true
		},
		"WorkDisableDelay": {
			title: "Таймер отключения (часов)",
			type:"range",
			value: 48,
			max: 96,
			min: 0,
            units: "часы",
            readonly: true
		},
		"Temperature": {
			title: "Текущая температура",
			type:"value",
			value: 0,
            readonly: true
		}
	}
});

// Обогреватель отопления в маленькой комнате 2
defineVirtualDevice("HeaterControlRoom2", {
	title:"Регулятор температуры в маленькой комнате",
	cells: {
		"SetPoint": {
			title: "Температура",
			type:"range",
			value: 25,
			precision: 1,
			max: 25,
			min: 0,
            readonly: true
		},
		"Hest": {
			title: "Гистерезис",
			type:"range",
			value: 2,
			precision: 1,
			max: 10,
            readonly: true
		},
		"Enable": {
			title: "Управление",
			type:"switch",
			value: 0
		},
		"EcoMode": {
			title: "Эко-режим",
			type:"switch",
			value: 0
		},
		"Work": {
			title: "Работа",
			type:"switch",
			value: 0,
            readonly: true
		},
		"WorkDisableDelay": {
			title: "Таймер отключения (часов)",
			type:"range",
			value: 48,
			max: 96,
			min: 0,
            units: "часы",
            readonly: true
		},
		"Temperature": {
			title: "Текущая температура",
			type:"value",
			value: 0,
            readonly: true
		}
	}
});

// Освещение и отопление в погребе с овощами
defineVirtualDevice("HeaterControlPogreb3", {
	title:"Регулятор температуры в погребе с овощами",
	cells: {
		"SetPoint": {
			title: "Температура",
			type:"range",
			value: 5,
			precision: 1,
			max: 10,
			min: -5,
            readonly: true
		},
		"Hest": {
			title: "Гистерезис",
			type:"range",
			value: 2,
			precision: 1,
			max: 10,
            readonly: true
		},
		"Enable": {
			title: "Управление",
			type:"switch",
			value: 0,
            readonly: true
		},
		"Work": {
			title: "Работа",
			type:"switch",
			value: 0,
            readonly: true
		},
		"On": {
			title: "Освещение",
			type:"switch",
			value: 0
		},
		"Temperature": {
			title: "Текущая температура",
			type:"value",
			value: 0,
            readonly: true
		}

	}
});

// Освещение и отопление в погребе с овощами
defineVirtualDevice("HeaterControlPogreb1", {
	title:"Регулятор температуры в погребе водоснабжения",
	cells: {
		"SetPoint": {
			title: "Температура",
			type:"range",
			value: 5,
			precision: 1,
			max: 10,
			min: -5,
            readonly: true
		},
		"Hest": {
			title: "Гистерезис",
			type:"range",
			value: 2,
			precision: 1,
			max: 10,
            readonly: true
		},
		"Enable": {
			title: "Управление",
			type:"switch",
			value: 0,
            readonly: true
		},
		"Work": {
			title: "Работа",
			type:"switch",
			value: 0,
            readonly: true
		},
		"On": {
			title: "Освещение",
			type:"switch",
			value: 0
		},
		"Temperature": {
			title: "Текущая температура",
			type:"value",
			value: 0,
            readonly: true
		}

	}
});

// Расширенные параметры управления отоплением и охлаждением
defineVirtualDevice("HeaterAdvanceControl", {
	title:"Расширенные параметры управления отоплением и охлаждением",
	cells: {
		"AllowControl": {
			title: "Разрешить управление",
			type:"switch",
			value: 0,
            //forceDefault: true
		},
        "PogrebP1LowTemperature": {
			title: "Низкая температура погреба водоснабжения",
			type:"range",
			value: 1,
			precision: 1,
			max: 5,
			min: -5,
            readonly: true
		},
        "PogrebP3LowTemperature": {
			title: "Низкая температура погреба с овощами",
			type:"range",
			value: 1,
			precision: 1,
			max: 10,
			min: -10,
            readonly: true
		},
	}
});

/*------------------------------------------------------------------------
// Реакция на кнопку разрешения управлением
------------------------------------------------------------------------*/
defineRule({

	whenChanged: ["HeaterAdvanceControl/AllowControl"],
	then: function (newValue, devName, cellName) {

        log("Переключение управления");

		if (newValue) {

            getControl("HeaterControlKitchen1/SetPoint").setReadonly(false);
            getControl("HeaterControlKitchen1/WorkDisableDelay").setReadonly(false);
            getControl("HeaterControlKitchen1/Hest").setReadonly(false);
            getControl("HeaterControlRoom2/SetPoint").setReadonly(false);
            getControl("HeaterControlRoom2/WorkDisableDelay").setReadonly(false);
            getControl("HeaterControlRoom2/Hest").setReadonly(false);
            getControl("HeaterControlPogreb3/Enable").setReadonly(false);
            getControl("HeaterControlPogreb3/SetPoint").setReadonly(false);
            getControl("HeaterControlPogreb3/Hest").setReadonly(false);
            getControl("HeaterControlPogreb1/Enable").setReadonly(false);
            getControl("HeaterControlPogreb1/SetPoint").setReadonly(false);
            getControl("HeaterControlPogreb1/Hest").setReadonly(false);
            getControl("HeaterAdvanceControl/PogrebP3LowTemperature").setReadonly(false);
            getControl("HeaterAdvanceControl/PogrebP1LowTemperature").setReadonly(false);

            log("Переключение управления: разрешено");

		} else {

            getControl("HeaterControlKitchen1/SetPoint").setReadonly(true);
            getControl("HeaterControlKitchen1/WorkDisableDelay").setReadonly(true);
            getControl("HeaterControlKitchen1/Hest").setReadonly(true);
            getControl("HeaterControlRoom2/SetPoint").setReadonly(true);
            getControl("HeaterControlRoom2/WorkDisableDelay").setReadonly(true);
            getControl("HeaterControlRoom2/Hest").setReadonly(true);
            getControl("HeaterControlPogreb3/Enable").setReadonly(true);
            getControl("HeaterControlPogreb3/SetPoint").setReadonly(true);
            getControl("HeaterControlPogreb3/Hest").setReadonly(true);
            getControl("HeaterControlPogreb1/Enable").setReadonly(true);
            getControl("HeaterControlPogreb1/SetPoint").setReadonly(true);
            getControl("HeaterControlPogreb1/Hest").setReadonly(true);
            getControl("HeaterAdvanceControl/PogrebP3LowTemperature").setReadonly(true);
            getControl("HeaterAdvanceControl/PogrebP1LowTemperature").setReadonly(true);

            log("Переключение управления: запрещено");

		}

	}

});
  1. Не срабатывает precision. Пробовал туда 1, 2, 0.1 писать - range только единицы меняет. Страницу обновлял.

  2. Есть контрол HeaterAdvanceControl/AllowControl. Если установлен forceDefault: true, то правило, привязанное к контролу - не срабатывает. Не знаю воспроизведется ли у вас, но у меня не работает именно в том коде, что приложен выше. Раньше работало точно, я часто этим выключателем пользовался.

Добрый день.

Актуально только в testing.

Пробую воспроизвести.

//01_29_test_01.js 
defineVirtualDevice("HeaterAdvanceControl", {
	title:"Расширенные параметры управления отоплением и охлаждением",
	cells: {
		"AllowControl": {
			title: "Разрешить управление",
			type:"switch",
			value: true,
            forceDefault: true
		}
    }
})


defineRule({

	whenChanged: ["HeaterAdvanceControl/AllowControl"],
	then: function (newValue, devName, cellName) {

        log("Переключение управления");
    }
})

Screenshot_20250129_134450

Несколько раз проверял, поведение было одинаковое - закомментироовал forceDefault - работает, снял - не работает. Проверил в двух разных скриптах - поведение одинаковое.

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

Ваш короткий скрипт работает у меня норм. Что-то там более сложное.

Продолжаю исследование.

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

По precision всё так же не работает или не верно настроена, в общем эффекта не вижу.

Опять же - работает (да и вообще добавлено) только в tesеing. У вас stable.

Ясно)) Но я его в вашей статье об обновлениях 2501 прочитал)
https://wirenboard.com/statics/release-changelogs/wb-2501/changelog.html

Support precision, дальнейший поиск по справке дал только параметр у range.

Также столкнулся с этой бедой в части “precision” после перехода с 2410 на 2501. В 2410 всё работало, ошибок не было, к тому же в правилах после перехода всё красно, периодически всё что-то не так.
![На изображении представлено множество сообщений об ошибках и предупреждениях, связанных с выполнением скриптов и контролем устройств в системе.


Срочняком сейчас откатываюсь на 2410.

Добрый день.
Тема потерялась, прошу прощения. Создайте новую если вопрос актуален.