Здравствуйте.
Пытаюсь на WB7 реализовать “тревожную” кнопку. Логика несложная. Есть 3 кнопки. По нажатию идёт вызов на телефон охраны.
Подключил кнопки ко входам WBIO-DI-WD-14, добавил виртуальное устройство с контролами, отображающими состояние кнопок, скрипт взял отсюда. Вроде всё просто, но при тестировании появились проблема – после нажатия на кнопку вижу в виртуальном устройстве, что контроллер реагирует, однако вызов проходит не всегда.
Подскажите, пожалуйста, что может быть причиной? Или, может, какие-то есть нюансы настройки? В общем, вопрос, как сделать так, чтобы после нажатия на кнопку вызов проходил 100%?
И ещё вопрос.
Можно ли для указанного функционала (подключение кнопок) использовать дискретные входы контроллера?
Добрый день.
Скрипт - выложен пользователем (интегратором).
Рекомендую добавить вывод в лог в ключевые моменты передаваемых параметров.
Ну и определить таким оразом что именно и на каком этапе выполнения не работает.
То есть - сравить парметры с ожидаемыми.
Да, можно.
Спасибо.
Сегодня попробовал подключить кнопку к дискретному входу WB. Работает, вроде, устойчивее, но удерживал кнопку в нажатом состоянии немного дольше обычного и результат был стабильным.
В связи с чем вопрос: можно ли подключить к дискретному входу выключатель с фиксацией, чтобы уж контакт замкнулся, так замкнулся?
Да, можно.
В продолжение темы надёжности.
Подскажите, пожалуйста, на тот случай, если команда дозвона не выполнилась и exitCode
в exitCallback
вернул не 0, можно ли внутри exitCallback
сделать ещё один вызов runShellCommand
с набором этого же номера, а если не получилось, то отправить SMS через Notify.sendSMS(...)
или это идея корявая и есть какой-то более идеологически верный путь?
Ну, типично все ж запускают цикл напримр тиз трех-четырех попыток, если попытка в цикле успешна - цикл прерывается.
Если за время цикла не было ни одной успешной - можно выполнить и другое действие. А вызов непосредственно из каллбэка - хороший шанс зациклить.
Да, спасибо, действительно, с циклом круто. А то у меня выходит корявая рекурсия.
Ещё вопрос по callback от Notify.sendSMS(...).
Подскажите, пожалуйста, как с этой команды снимать обратную связь? В интернете по этому методу информацию не нашел, только здесь. Проверил, что возвращает Notify.sendSMS(...).
– в log пишет undefined
.
Насколько вижу в исходниках - статус не предусмотрен, совсем.
Ясно.
Почесал затылок и решил принимать каллбэк таким образом:
function alarm_sms(phone_number, message){
runShellCommand("mmcli -m wbc --messaging-create-sms='text=\"" + message + "\",number=\"" + phone_number + "\"'", {
captureOutput: true, //Захватывать stdout
captureErrorOutput: true, //Захватывать stderr (если нужно)
exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
{
var sms_count = capturedOutput.substr(65);
sms_count = sms_count.replace(/\n/g, '');
log("cmd output: " + capturedOutput); //строка полностью
log("sms number: " + sms_count);
var sms_command = "mmcli -s " + sms_count + " --send";
log("sms_command: " + sms_command);
runShellCommand(sms_command);
log("cmd Erroroutput: " + capturedErrorOutput);
var delete_command = "mmcli -m wbc --messaging-delete-sms=/org/freedesktop/ModemManager1/SMS/" + sms_count;
runShellCommand(delete_command);
if (exitCode){
log.error("Попытка отправить SMS не удалась");
}
}
});
}
Да, хорошее решение. Собстввенно Notify.sendSMS() - это легаси, оставшееся с тех времен когда ModemManager’a не было. Ну и работа шла наприямую с модемом, AT-командами.