Использование defineAlias()

Здравствуйте, уважаемые коллеги!
Прошу поделиться знанием по использованию defineAlias() при назначении их выходам и затем использованию в качестве входных параметров для функций.
В качестве рабочего примера параметр ‘wb-gpio/A3_OUT’ функции указан напрямую и сценарий работает исправно:

funcSimpleSwitch ('simple_switch', 'wb-gpio/A4_IN', 'wb-gpio/A3_OUT'); 
// нажатие кнопки на входе приводит к замыканию соответствующего реле на выходе

function funcSimpleSwitch (name, btn, rel) {
	defineRule(name, {
		whenChanged: [btn],
		then: function (newValue, devName, cellName) {
					dev[rel] = newValue;
					log("Button pressed: " + rel);
		}
	});
}

Теперь вводим defineAlias(‘relay_3’, ‘wb-gpio/A3_OUT’);

defineAlias('relay_3', 'wb-gpio/A3_OUT');

funcSimpleSwitch ('simple_switch', 'wb-gpio/A4_IN', 'relay_3'); 
// нажатие кнопки на входе не приводит к замыканию соответствующего реле на выходе

function funcSimpleSwitch (name, btn, rel) { 
	defineRule(name, {
		whenChanged: [btn],
		then: function (newValue, devName, cellName) {
					rel = newValue;
					log("Button pressed: " + rel);
		}
	});
}

И теперь функция исполняется, но переключения реле нет.

Скажите пожалуйста можно ли использовать defineAlias() в данном контексте и если да, то какой должен быть синтаксис?

Попробуйте без кавычек

funcSimpleSwitch ('simple_switch', 'wb-gpio/A4_IN', relay_3);

Удаление кавычек ничего не изменило.

Тут видимо надо разделить переменные, в которых хранится значение адреса контрола (‘wb-gpio/A3_OUT’) и те, в которых хранится значение для передачи по этому адресу (true/false).

Кстати, если передавать через defineAlias() значение адреса входа, то все в порядке и ошибка не возникает.

defineAlias('button', 'wb-gpio/A4_IN');
funcSimpleSwitch ('simple_switch', 'button', 'wb-gpio/A3_OUT');
function funcSimpleSwitch (name, btn, rel) { // нажатие кнопки на вход приводит к замыканию соответствующего реле на выходе
	defineRule(name, {
		whenChanged: [btn],
		then: function (newValue, devName, cellName) {
					dev[rel] = newValue;
					log("Button pressed: " + rel);
		}
	});
}

Еще помнится отмечалось, что синтаксис обращения к каналу выхода прописывается в формате
dev['wb-gpio']['A3_OUT'] = 1
И как тут использовать defineAlias()?
Похоже, что никак…

dev['wb-gpio']['A3_OUT'] = 1

и

dev['wb-gpio/A3_OUT'] = 1

Это совершенно равнозначные записи. Первая оставлена для совместимости с первыми версиями движка, где поддерживалась только такая запись.

Казалось бы, вам вообще не нужен defineAlias, нужны переменные.

var channelName = "wb-gpio/A3_OUT";  // это обычная строчка
dev[channelName] = 1;
1 Like

Да, это как раз решение проблемы!