Отправка SMS сообщений — различия между версиями
(→Отправка SMS сообщений с помощью 3G/GSM модема) |
|||
Строка 4: | Строка 4: | ||
}} | }} | ||
− | В WebHMI есть | + | В WebHMI есть инструменты сигнализации о различных событиях путем отправки смс-сообщений (смс-нотификация). <br> |
− | Для этого необходимо запросить у поставщика ключ API для | + | |
− | [[Файл: | + | == Отправка сообщений используя сервисы Level2 == |
− | SMS отправляется путем вызова скрипта. Для примера создадим скрипт для дешборда (который можно будет "привязать" к кнопке и проверить путем ее нажатия). В блоке send sms указывается номер телефона и текст сообщения. <br> | + | Для этого необходимо запросить у поставщика ключ API для интеграции с системой Level2, в меню "Конфигурация / Настройки", вкладка Level2.<br> |
+ | [[Файл:API key set.png|1024 px]]<br><br> | ||
+ | SMS отправляется путем вызова соответствующей функции внутри скрипта (программы) - '''SendSMS'''. Для примера создадим скрипт для дешборда (который можно будет "привязать" к кнопке и проверить путем ее нажатия). В блоке send sms указывается номер телефона и текст сообщения. <br> | ||
[[Файл:Sms notif script.png|800px]]<br><br> | [[Файл:Sms notif script.png|800px]]<br><br> | ||
На дешборде создадим кнопку с свойством вызова скрипта по нажатию: <br> | На дешборде создадим кнопку с свойством вызова скрипта по нажатию: <br> |
Версия 16:46, 12 марта 2018
В WebHMI есть инструменты сигнализации о различных событиях путем отправки смс-сообщений (смс-нотификация).
Отправка сообщений используя сервисы Level2
Для этого необходимо запросить у поставщика ключ API для интеграции с системой Level2, в меню "Конфигурация / Настройки", вкладка Level2.
SMS отправляется путем вызова соответствующей функции внутри скрипта (программы) - SendSMS. Для примера создадим скрипт для дешборда (который можно будет "привязать" к кнопке и проверить путем ее нажатия). В блоке send sms указывается номер телефона и текст сообщения.
На дешборде создадим кнопку с свойством вызова скрипта по нажатию:
Отправка SMS сообщений с помощью 3G/GSM модема
При необходимости отправлять СМС-сообщений без использования сторонних сервисов, можно реализовать такую возможность с помощью обычный GSM или 3G модемов. Для этого потребуется создание собственного протокола (см. Пользовательские протоколы).
Данная возможность работает в прошивках начиная с версии 2.0.
Отправка сообщения — это простой набор AT-команд, которые необходимо передать модему в управляющий порт.
Простой пример такого протокола показан ниже.
function createDevices ()
addDevice({name = "SMS", shift = 0, base = 10, xtraFields = {1, 5}});
end
function readRegister (reg, device, unitId)
return {}; -- можно поставить заглушку "Ок", чтобы выполнялась функция чтения
end
function writeRegister (reg, device, unitId, newValue)
sendString("AT+CPIN=\"0000\"\r");
sendString("AT+CMGF=1\r");
sendString("AT+CSMP=17,167,0,0\r");
sendString("AT+CMGS=\"+" .. reg.internalAddr .. "\"\r");
sendString(newValue);
sendString(string.char(26));
return true;
end
В данном примере для отправки сообщения необходимо создать регистр. В качестве адреса указывается номер телефона в виде SMS380671234567. При записи строки в такой регистр произойдет отправка соответствующего текста на указанный номер.
При необходимости отправлять сообщения с кириллицей, потребуется реализовать соответсвующие преобразования текста согласно поддерживаемым вашим модемом кодировкам.
Также, аналогично можно реализовать чтение входящих СМС сообщений и, как следствие, возможно организовать управление WebHMI с помощью СМС-сообщений.
В случае проблем с работой скрипта, можно для диагностики добавить функции чтения из порта ответов модема:
function createDevices ()
addDevice({name = "SMS", shift = 0, base = 10, xtraFields = {1, 5}});
end
function readRegister (reg, device, unitId)
return "Ok"; -- можно поставить заглушку "Ок", чтобы выполнялась функция чтения
end
function writeRegister (reg, device, unitId, newValue)
local replyTmp = ""
DEBUG("entered sms protocol for value "..newValue)
--sendString("AT+CPIN=\"0000\"\r");
sendString("AT+CMGF=1\r"); -- перевести модем в текстовый режим
-- прочитать ответ из порта
replyTmp = ReadModemReply()
if (replyTmp ~= "") then
DEBUG("modem replied with "..replyTmp)
end
sendString("AT+CSMP=17,167,0,0\r");
replyTmp = ReadModemReply()
if (replyTmp ~= "") then
DEBUG("modem replied with "..replyTmp)
end
-- при передаче номера телефона как аргумента надо не забыть правильно преобразовать reg.internalAddress в строку, заключенную в кавычки используя escape - символ "\"
sendString("AT+CMGS=".."\"+380631040159\"".."\r")
replyTmp = ReadModemReply()
if (replyTmp ~= "") then
DEBUG("modem replied with "..replyTmp)
end
sendString(newValue..string.char(26))
replyTmp = ReadModemReply()
if (replyTmp ~= "") then
DEBUG("modem replied with "..replyTmp)
end
return true;
end
function ReadModemReply()
local CR = "\r"
local one_char_tmp = ""
local readStringTmp = ""
repeat
one_char_tmp = readString(1)
if (one_char_tmp ~= false) then
readStringTmp = readStringTmp..one_char_tmp
else
DEBUG("can't readString")
return ""
end
until (one_char_tmp == CR)
readString(1) -- read rest symbol
return readStringTmp
end