Про asSoonAs

Добрый день. Есть правило на управление батареей отопления в нем использовал триггер asSoonAs только вот не понял смысла его использования если у него нет никакого else(или чего нибудь в духе) чтобы вернуть значения в исходное сотояние. То есть получается, что для правил asSoonAs нужно обратное такое же правило по сути с копипастой основного? Или я что-то делаю не так? Спасибо.

var tempThreshold = 24.5,
	tempTimerId = null,
	actuatorDelay = 180000;

defineRule('temperature_control_kab_on', {
	asSoonAs: function() {
		return dev["wb-msw-v3_227/Temperature"] < tempThreshold;
	},
	then: function (newValue, devName, cellName) {
		if (null === tempTimerId){
			log("Температура на датчике в кабухнете стала ниже " + tempThreshold, newValue, devName, cellName);
			dev["wb-gpio/EXT1_K1"] = false;
			log("Включили батарею.");

			tempTimerId = setTimeout(function (){
				tempTimerId = null;
			}, actuatorDelay)
		}
	}
});

defineRule('temperature_control_kab_off',{
	asSoonAs: function() {
		return dev["wb-msw-v3_227/Temperature"] > tempThreshold;
	},
	then: function (newValue, devName, cellName) {
		if (null === tempTimerId){
			log("Температура на датчике в кабухнете стала выше " + tempThreshold, newValue, devName, cellName);
			dev["wb-gpio/EXT1_K1"] = true;
			log("Выключили батарею.");

			tempTimerId = setTimeout(function (){
				tempTimerId = null;
			}, actuatorDelay)
		}
	}
});

Добрый день.
А почему вы выбрали реализацию управления отоплением через asSoonAs? Почему не через whenChanged?
Смысл asSoonAs как раз в запуске правила по фронту, как описано в документации.

В основном интереса ради. По логике asSoonAs (исходя из названия) как раз должна работать когда какое-то пороговое значение изменяется. Но честно говоря из документации не понятно в чем тогда особенность этого варианта, если нет исходных параметров или варианта как то вернуть состояние.

Не совсем так. Вот, что указано в документации: " asSoonAs. Правила, задаваемые при помощи asSoonAs , называются edge-triggered и срабатывают в случае, если значение функции, заданной в asSoonAs было ложным и стало истинным."

1 лайк

Не вижу никаких логических противоречий. Температура подходит для включения отопления - нет - ложно, как только она опускается ниже порога - становится истинным. Следовательно все условия для использования asSoonAs сходятся.
Можете привести примеры подходящего использования asSoonAs?

Все верно. Но вы почему-то ожидаете еще действий и при переходе с состояния “истина” в “ложь”. Вот этого и нет в asSoonAs.
Примеры использования есть в документации по wb-rules.

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.