Разборка SMS и отправка на e-mail

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
shurik.volkov
Сообщения: 3
Зарегистрирован: 14 июн 2020, 12:00

А с дебагом он не отправляет вообще?
Адрес уже проверял несколько раз. Сообщения в логах не появляется, понять бы где оно останавливается.
SXT r11e-lte


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Дебаг только для отладки парсинга тела, в скрипте он не участвует, отсылать скрипт должен всегда, если что то есть.
Давайте посмотрим что у вас не так.
1- в модеме должно быть входящие sms
2- создаём новый скрипт с содержимом:

Код: Выделить всё

/system script run extractSmsModem
:global extractSmsModem
:local extracted [$extractSmsModem action="read"]
:set $extracted ([:len $extracted]."\r\n".[:typeof $extracted]."\r\n".$extracted)
/tool e-mail send to="supscriptpdu@mail.ru" subject="Error extracted" body=$extracted
:set $extractSmsModem

3- Запускаем на выполнение один раз
И выложите сюда саму изменённую функцию
Далее я посмотрю что у вас не так.


shurik.volkov
Сообщения: 3
Зарегистрирован: 14 июн 2020, 12:00

Скрипт не хочет отправлять сообщение на вашу почту.
Если отправлять по вашему адресу то в логах ошибка:
Error sending e-mail <Error extracted>: invalid BODY
Когда меняю почту на свою то все отправляется. Вот что приходит:
 Стандартный скрипт
Тема: Error extracted
0
array
Хотя сообщение в модеме точно есть, но если в скрипте extractSmsModem преобразовать функцию в такой вид

Код: Выделить всё

:set $tmp [/interface lte at-chat $nameIf input="AT+CMGL=4" as-value wait=yes]
Это дает скрипту время прочитать все сообщения из модема и вот такой результат приходит на почту.
 Измененная функция
Тема: Error extracted
1
array
07919730071111F1240B919746159295F9000802606111958221080422043504410442
Но при этом стандартный скрипт не хочет ни в каком виде отправлять сообщения, он видимо даже не доходит до момента отправки сообщений


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Исправил ошибку в PDUtoEMAIL перекачайте.

Смотрите лог на предмет записи NO clear SMS
Если появится, то скорее всего, надо добавить в функцию extractSmsModem на действие clear опцию wait=yes

Вообще wait=yes довольно не стабильно, лучше перед такими вызовами отправить в модем команду AT^CURC=0
Если вам поможет, то я переделаю функцию более к правильному виду.

По поводу не возможности отправки мне мыла, то существуют вполне реальные причины в виде того, что ваш почтовый сервер блокирует отправку таких сообщений. Могут проверятся название почты на предмет определённых слов вида support, script и т.д. а также тела письма на правдоподобность слов.
Вы можете включить логирование email в ros и там будет возвращён код причины отказа отправки письма с сервера почты


romanbodnarchuk
Сообщения: 1
Зарегистрирован: 23 июн 2020, 10:04
Откуда: Россия
Контактная информация:

Пожалуйста напишите скрипт не для LTE модемов

вот вывод микротика
/system resource usb print
# DEVICE VENDOR NAME SPEED
0 1-0 Linux 3.3.5 ehci_hcd RB400 EHCI 480
1 2-0 Linux 3.3.5 ohci_hcd RB400 OHCI 12
2 1-2 Telit wireless solutions Telit Wireless Module 480

/port print
Flags: I - inactive
# DEVICE NAME CHANNELS USED-BY BAUD-RATE
0 serial0 1 Serial Console auto
1 1-2 usb2 7 sms tool 9600

/system serial-terminal usb2 channel=0

[Ctrl-A is the prefix key]


AT
OK


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

К сожалению у меня нет возможности проверить и настроить все варианты модемов.
Вроде Ros поддерживала аргумент as-value для serial-terminal(хотя я могу и ошибаться)
Если у вас есть возможность дать мне доступ к терминалу своего оборудования, то я посмотрю что можно сделать.
Если нет, то проверяем, что Ros вообще может штатно общаться с модемом.
Для этого идем в /tool sms и включаем там получение sms. Если в меню появятся принятые sms, то на 99% вытащить sms можно будет через лог.
Для этого включите логирование gsm/lte в loging.
отошлите sms на модем, и если вы увидите в логе примерно такие записи :+CMTI; +CMGI; текст в формате PDU, то их можно изъять и обработать.
Ближайшее время, как у меня появится время, я напишу такую функцию.


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Вобщем-то для обычных модемов должна работать команда:

Код: Выделить всё

[/interface ppp-client at-chat $nameIf input="AT+CMGL=4" as-value]


EagleNN
Сообщения: 13
Зарегистрирован: 09 авг 2017, 19:45

На SIM картах Beeline не работает этот скрипт. Выдает ошибку. PDU считываются не каждый раз, но если добавить параметр wait приемлемо.
Выслал проблемные PDU в личку.

Думаю будет правильно, в случае возникновения ошибки на любом этапе декодирования отправлять не только текст ошибки пользователю (в моем случае это "function extractSmsModem; wrong length in CMGL"), но и прикладывать PDU вызвавшее проблему. В таком случае можно будет воспользоваться сторонним сервисом и, все-же прочесть эту SMS.

Буду благодарен за доработку скрипта.


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

EagleNN спасибо вам большое за отзыв.
Давайте по порядку.
На SIM картах Beeline не работает этот скрипт. Выдает ошибку.
1- оператор и сим карта никакого отношения не имеет к скрипту модему и так далее.
PDU считываются не каждый раз, но если добавить параметр wait приемлемо.
2- Тут я вас не понял; вы всегда получаете текст ошибки или после добавления wait на почту всё-таки приходят не разобранные PDU?
но и прикладывать PDU вызвавшее проблему.
3- На самом деле это так и реализовано, КРОМЕ самой функции извлечения. То-есть как можно слать не разобранное PDU если нет гарантии что оно вообще получено скриптом. Как только правильный массив вернулся в основной скрипт и не смог разобраться то отправится ошибка и само PDU в котором произошла ошибка.
4- В вашем случаи действительно произойдёт сбой парсинга. На момент написания скрипта у меня не было ни одного подходящего примера с кодом объединения 0x08, вы мне его любезно предоставили, ближайшее время я добавлю поддержку этого случая.

ещё раз повторю, у меня нет возможности проверить на всех модемах. функция extractSmsModem на данном этапе требует настройки под свой модем. Более ни чего трогать не надо.
Давайте попробую вам помочь
В модеме должно быть входящее смс
Пришлите в личку ответ от следующих команд из терминала:
:put [/interface lte at-chat lte1 input="AT+CMGL=4" as-value wait=yes]
:put [/interface lte info 0 once as-value]
Сейчас в процессе переделка функции extractSmsModem под автоматический поиск модемов и применения настроек из списков, Но вот списки смогут сформироваться благодаря таким людям как вы. Мне катастрофически не хватает времени заняться этим в плотную.
Если в письме вы увидете ошибку It is supported only by concatenated code 0x00 и тело PDU то функция извлечения заработала как надо.


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Приветствую, автора. Попробовал Ваши скрипты. На почту ничего не приходит.
В inbox sms четыре SMS на русском и английском языках.
В логе вот это:
Ковыряться искать где у Вас ошибка в скрипте сложно, Вам виднее, как автору:

Изображение


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить