УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

Пользовательский протоколОтправление СМС через GSM модем


Автор Сообщение
Сообщение создано: 08. 05. 2013 [10:47]
kerberous
Vitaliy Kleymenov
Создатель темы
Зарегистрирован(а) с: 24.04.2013
Сообщения: 1
Здравствуйте!
Имеется задача: отправлять СМС сообщения о критических авариях системы.
В качестве решения был принят механизм:
1) При аварии отправлять системные сообщения с отдельной категорией для смс.
2) Создать архиватор сообщений этой категории.
3) Выбирать сообщения архива по времени и отправлять их по СМС через транспорт сериал.

Однако столкнулся с непонятной ситуацией. Создал тестовую функцию для отправки СМС через пользовательский протокол SMS.
Выглядит она так:

//Подготовка запроса
req = SYS.XMLNode("send").setAttr("tel","+79600000000").setText("textSMS");
//Отправка запроса
SYS.Transport["Serial"]["out_com1"].messIO(req,"SMS");
if(!req.attr("err").length) SYS.messDebug("TEST REQ","RES: "+req.text());

В результате ошибок нет, но и пользовательский протокол не выполняется (счетчик не растет, добавлял отправку дебаг сообщения в первую строчку протокола - ничего не отправлялось).
Функцию запускал через 3-ю вкладку по кнопке.
Может кто подскажет что я делаю не так?
Сообщение создано: 08. 05. 2013 [17:29]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"kerberous" wrote:

Имеется задача: отправлять СМС сообщения о критических авариях системы.
В качестве решения был принят механизм:
1) При аварии отправлять системные сообщения с отдельной категорией для смс.
2) Создать архиватор сообщений этой категории.
3) Выбирать сообщения архива по времени и отправлять их по СМС через транспорт сериал.

Нормально.

"kerberous" wrote:

//Подготовка запроса
req = SYS.XMLNode("send").setAttr("tel","+79600000000").setText("textSMS");
//Отправка запроса
SYS.Transport["Serial"]["out_com1"].messIO(req,"SMS");
if(!req.attr("err").length) SYS.messDebug("TEST REQ","RES: "+req.text());

Так должно работать:
JAVASCRIPT
req = SYS.XMLNode("send").setAttr("ProtIt","SMS").setAttr("tel","+79600000000").setText("textSMS");
SYS.Transport["Serial"]["out_com1"].messIO(req,"UserProtocol");


Learn, learn and learn better than work, work and work.
Сообщение создано: 02. 09. 2013 [14:58]
Godzilla
Арсен Закоян
Contributor
Зарегистрирован(а) с: 12.02.2013
Сообщения: 123
Не стал создавать новую тему,спрошу здесь.
Задача также при возникновении аварии отсылать смс нужным людям через модем.Собственно все работает,только при аварии СМС отправляется постоянно, чуть ли не каждую секунду, а хотелось бы 1 раз.
Кусок кода отправки содержится в виджете ,вот он

//включение сигнализации
if(pErrCode==3 ){wColor = "#ac040d-255";alarm="90||высокое давление|5";diagram1_prm0color = "red";
//отправка СМС
req = SYS.XMLNode("send").setAttr("ProtIt","SMS").setAttr("tel","+79000000000").setText("message");
SYS.Transport["Serial"]["out_ttyACM0"].messIO(req,"UserProtocol");}
Сообщение создано: 02. 09. 2013 [20:39]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Godzilla" wrote:

Не стал создавать новую тему,спрошу здесь.
Задача также при возникновении аварии отсылать смс нужным людям через модем.Собственно все работает,только при аварии СМС отправляется постоянно, чуть ли не каждую секунду, а хотелось бы 1 раз.

Ну так, сделайте обработку формирования нарушений только при смене и в этот момент отсылать SMS.

P.S. Вообще нежелательно SMS отправлять из задачи интерфейса, поскольку это не быстро и влияет на реакцию интерфейса.

Learn, learn and learn better than work, work and work.
Сообщение создано: 03. 09. 2013 [15:39]
Godzilla
Арсен Закоян
Contributor
Зарегистрирован(а) с: 12.02.2013
Сообщения: 123
Был бы признателен за подсказку как сделать обработку формирования нарушений только при смене.Думаю не я один сталкивался с этой проблемой
Сообщение создано: 03. 09. 2013 [17:29]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Godzilla" wrote:

Был бы признателен за подсказку как сделать обработку формирования нарушений только при смене.Думаю не я один сталкивался с этой проблемой

В ДемоБД есть примеры:
Шаблон унифицированного аналогового параметра: /DAQ/tmplb_base/anUnif
Элемент отображения: Main.anShow

Общий смысл в том чтобы сохранить предыдущую ошибку и если в следующем цикле она совпала то пропустить.

Learn, learn and learn better than work, work and work.
Сообщение создано: 06. 09. 2013 [12:21]
Godzilla
Арсен Закоян
Contributor
Зарегистрирован(а) с: 12.02.2013
Сообщения: 123
Спасибо Роман,все получилось.Но если нужно послать смску нескольким людям,то происходит следующее:
при аварии посылается смс на первый номер
и сразу же начинается запрос на посылку на второй номер,но в это время еще не закончена посылка на первый номер.Естественно на второй номер смс не отправляется.
Существует ли какая нибудь команда с помощью которой выполнение приостанавливается на некоторое количество секунд?Пока нашел выход в пустом запросе,для того чтоб потянуть время.
Но в любом случае это увеличивает время выполнения проекта (код отправки в виджете)с 1 сек до 5 при 2х номерах.Куда посоветуете тогда вставить код отправки?
Сообщение создано: 06. 09. 2013 [13:30]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Godzilla" wrote:

Но если нужно послать смску нескольким людям,то происходит следующее:
при аварии посылается смс на первый номер
и сразу же начинается запрос на посылку на второй номер,но в это время еще не закончена посылка на первый номер.Естественно на второй номер смс не отправляется.

Как это сразу и как может быть не закончена предыдущая отправка если транспорт отпускает после окончания отправки? Вы-же на второй номер отправляете отдельным вызовом?

"Godzilla" wrote:

Существует ли какая нибудь команда с помощью которой выполнение приостанавливается на некоторое количество секунд?

Она то существует, но я крайне не рекомендую её использовать!

"Godzilla" wrote:

Пока нашел выход в пустом запросе,для того чтоб потянуть время.
Но в любом случае это увеличивает время выполнения проекта (код отправки в виджете)с 1 сек до 5 при 2х номерах.Куда посоветуете тогда вставить код отправки?

Я сразу говорил, что ему там не место.
Лучше всего создать отдельный контроллер спулера с очередью SMS или на крайний случай делать это в шаблоне параметра, но только не в скрипте виджета, что прямо влияет на интерактивность взаимодействия с оператором.

Learn, learn and learn better than work, work and work.
Сообщение создано: 30. 08. 2015 [22:19]
green
Александр Белоногов
Зарегистрирован(а) с: 23.08.2015
Сообщения: 4
Доброго дня!
Пытаюсь разобраться с USB модемом,используя данный пример. Для этого настроил последовательный транспорт "gsm_out", а обработку хочу проводить в пользовательском протоколе "GSM_modem".
Проблема в том,что у меня не получается передать данные из функции контроллера через протокол исходящему транспорту. По аналогии с отправкой смс,я передаю номер телефона на который делаю звонок:

//отправка запроса из функции
req=SYS.XMLNode("send").setAttr("Profit","GSM_modem").setAttr("tel", "0990000000");
SYS.Transport["Serial"]["gsm_out"].messIO(req,"UserProtocol");

Не работает и запрос из темы выше, если я исползьзую мой модем и протокол "СМС"
req = SYS.XMLNode("send").setAttr("ProtIt","SMS").setAttr("tel","+79600000000").setText("textSMS");
SYS.Transport["Serial"]["gsm_out"].messIO(req,"UserProtocol");

Мой вопрос первый: что я делаю не так? Модем управлется из Putty и из выходного транспорта(gsm_out) через кнопку "отправить" без проблем.
И второе: я понимаю,что запрос в виде дерева XML позволяет использовать настроенные транспорты, оперируя только атрибутами. Но вот споткнулся об это "облегчение" и задумался, а можно ли напрямую работать с транспортом из пользовательской функции или виджета ?

Спасибо.
Сообщение создано: 31. 08. 2015 [09:02]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"green" wrote:

Мой вопрос первый: что я делаю не так? Модем управлется из Putty и из выходного транспорта(gsm_out) через кнопку "отправить" без проблем.
И второе: я понимаю,что запрос в виде дерева XML позволяет использовать настроенные транспорты, оперируя только атрибутами. Но вот споткнулся об это "облегчение" и задумался, а можно ли напрямую работать с транспортом из пользовательской функции или виджета ?

Телепаты в отпуске, что-бы отвечать на вопросы, что Вы там себе делаете.
У меня очевидно работает, через XML это: http://wiki.oscada.org/HomePageEn/Using/APIFunctionLibs/LibUserPrtDevs#h1161-4
Если Вам так не нравится, то не используйте, но и вопрошать тогда не нужно!

Learn, learn and learn better than work, work and work.



6415