Здравствуйте, уважаемые коллеги!
Прошу поделиться знанием по использованию 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() в данном контексте и если да, то какой должен быть синтаксис?
Тут видимо надо разделить переменные, в которых хранится значение адреса контрола (‘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()?
Похоже, что никак…