Какой командой просмотреть смс на модеме?

Модератор: adventurer

Аватара пользователя

Автор темы
adventurer
Супермодератор
Сообщения: 2970
Зарегистрирован: 15 июн 2011, 18:24

Re: Какой командой просмотреть смс на модеме?

#21

Сообщение adventurer » 09 ноя 2015, 19:22

Уважаемый Клиент! У Вас недостаточно денежных средств для отправки SMS-сообщения. Зачислите на свой счет Обещанный платеж в размере 100 руб., для этого отправьте 100 в ОТВЕТНОМ SMS (активация платежа 14 руб.).
Я так не играю! :(

Аватара пользователя

newerty
Сообщения: 282
Зарегистрирован: 11 окт 2015, 20:52

Re: Какой командой просмотреть смс на модеме?

#22

Сообщение newerty » 09 ноя 2015, 19:24

кстати да, вполне возможно, что оно поэтому и не отправилось :ROFL:

Аватара пользователя

Автор темы
adventurer
Супермодератор
Сообщения: 2970
Зарегистрирован: 15 июн 2011, 18:24

Re: Какой командой просмотреть смс на модеме?

#23

Сообщение adventurer » 09 ноя 2015, 19:29

Ладно, здесь важно чтение сообщений, а не отправка. Разбираемся дальше.


azmcrum
Сообщения: 75
Зарегистрирован: 12 авг 2015, 02:33

Re: Какой командой просмотреть смс на модеме?

#24

Сообщение azmcrum » 10 ноя 2015, 05:42

1. Скрипт для чтения/удаления всех SMS.
Запускать двойным кликом на раб. столе или ФМ, для вывода используется zenity.
Не забываем добавить права на выполнение скрипта chmod'ом или в свойствах файла.

Read_n_del_all_sms.sh
СпойлерПоказать

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

#!/bin/bash

# Деактивировать модем во время выполнения: 1-Да, 0-Нет
DEATC_F=0
# Деактивация модема позволяет избежать иногда возникающего "зависания" состояния модема,
# но после деактивации активные сетевые соеденения модема будут отключены.

ps ax | grep "$0" | grep -v grep | cut -d " " -f2 | grep -v $$ | xargs kill -9

{
Zn_er() { kill -9 $PRGRS_PID; zenity --error --title="Чтение SMS" --width=280 --text="$*"; }

zenity --progress --text="Выполнение..." --title="Чтение SMS" --width=280 --percentage=10 --pulsate --no-cancel &
PRGRS_PID=$!

[ -z "$(nmcli -t -f STATE dev status)" ] && { Zn_er "Модем не подключен."; exit 1; }

MODEM_DBUS_PATH=$(mmcli -L | grep -o "/org/freedesktop/ModemManager[^ ]*" | tr -d '\n')
[ -z "$MODEM_DBUS_PATH" ] && { Zn_er "Не удалось получить D-Bus путь модема."; exit 1; }

[ "$DEATC_F" = 1 ] && mmcli -m $MODEM_DBUS_PATH -d
mmcli -m $MODEM_DBUS_PATH -e || { Zn_er "Не удалось активировать модем."; exit 1; }

ALL_MSGS_PATHS="$(mmcli -m $MODEM_DBUS_PATH --messaging-list-sms | grep -o "/org/freedesktop/ModemManager[^ ]*")"
[ -z "$ALL_MSGS_PATHS" ] && { Zn_er "Нет SMS сообщений."; exit 1; }
COUNT_MSGS=$(echo "$ALL_MSGS_PATHS" | wc -l)

Deleting_msgs() {
zenity --question --text "Удалить $COUNT_MSGS сообщений?" --title="Удаление сообщений" --width=280 || exit 0
zenity --progress --text="Выполнение..." --title="Чтение SMS" --width=280 --percentage=10 --pulsate --no-cancel &
PRGRS_PID=$!

for X in $ALL_MSGS_PATHS; do
mmcli -m $MODEM_DBUS_PATH ---messaging-delete-sms=$X || { Zn_er "Ошибка при удалении SMS."; exit 1; }
sleep 0.5
done

kill -9 $PRGRS_PID
zenity --info --text "Все сообщения удалены." --title="Удаление сообщений" --width=280 &
}

kill -9 $PRGRS_PID

for X in $ALL_MSGS_PATHS; do
	let N+=1; [ "$N" = 1 ] && echo -e "Всего SMS: $COUNT_MSGS\n"; 
	echo "*************************"
	echo "Сообщение $N"
	DBUS_NMBR="$(basename -z "$X")"
	MSG="$(mmcli -m $MODEM_DBUS_PATH --sms=$X | sed 's/^  -*$//; s/^  Content * | *//; s/^  Properties * | *//; s/ *| *//; /./!d')"
	TEXT="$(echo "$MSG" | sed -n '/text:/,/PDU type:/p' | sed "s/^text: '/Текст: /" | sed -z "s/'\nPDU type: .*[^\n]//g")"
	NUMBER="$(echo "$MSG" | grep -o "^number: .*$" | sed 's/^number:/Номер:/')"
	TIMESTMP="$(echo "$MSG" | sed '/^timestamp: */!d; s///;q' | tr -d "'")"
	MSG_DATE="$(date -d "$(sed 's/./& /6;s/\( ..\)\(..\)/\1:\2:/' <<<"$TIMESTMP")" +"Дата: %d.%m.%Y\nВремя: %X")"
	echo -e "$TEXT\n$NUMBER\n$MSG_DATE\nD-bus номер: $DBUS_NMBR"
	[ "$N" = "$COUNT_MSGS" ] && echo "*************************"
done | zenity --text-info --width=750 --height=450 --title="Чтение SMS" --cancel-label="Выход" --ok-label="Удалить все сообщения" && Deleting_msgs

[ "$DEATC_F" = 1 ] && mmcli -m $MODEM_DBUS_PATH -d
} &>/dev/null

Десктоп файл для запуска с рабочего стола:

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

[Desktop Entry]
Name=Просмотр и удаление SMS
Type=Application
Exec=Full/path/to/Read_n_del_all_sms.sh
Где Full/path/to/Read_n_del_all_sms.sh - полный путь до файла скрипта.

2. Скрипт для отправки SMS.
Без zenity. Запускать в терминале. Текст сообщения и номер получателя
писать в файл скрипта (в ковычках).

Send_SMS.sh
СпойлерПоказать

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

#!/bin/bash

# Текст сообщения
TEXT=""

# Номер получателя
NUMBER=""

# Удалять SMS после оправки? 1-да, 0-нет
DEL_MSG=1

# Деактивировать модем во время выполнения: 1-Да, 0-Нет
DEATC_F=0
# Деактивация модема позволяет избежать иногда возникающего "зависания" состояния модема,
# но после деактивации активные сетевые соеденения модема будут отключены.

[ -z "$NUMBER" ] && { echo "Не указан номер."; exit 1; }

echo -n "Проверка статуса модема... "
[ -z "$(nmcli -t -f STATE dev status)" ] && { echo "модем не подключен."; exit 1; }
echo "OK."

echo -n "Получение D-Bus пути модема... "
MODEM_DBUS_PATH=$(mmcli -L | grep -o "/org/freedesktop/ModemManager[^ ]*" | tr -d '\n')
[ -z "$MODEM_DBUS_PATH" ] && { echo "ошибка."; exit 1; }
echo "OK."

echo -n "Активация модема... "
[ "$DEATC_F" = 1 ] && mmcli -m $MODEM_DBUS_PATH -d >/dev/null
mmcli -m $MODEM_DBUS_PATH -e >/dev/null || { echo "ошибка."; exit 1; }
echo "OK."

MSG="$(echo -en "text=\x27$TEXT\x27,number=\x27$NUMBER\x27")"

echo -n "Создание сообщения... "
MSG_PATH="$(mmcli -m 0 --messaging-create-sms="$MSG" || { echo "ошибка."; exit 1; })"
[ -z "$MSG_PATH" ] && { echo "ошибка."; exit 1; }
MSG_PATH="$(echo -n "$MSG_PATH" | grep -o "/org/freedesktop/ModemManager[^ ]*")"
[ -z "$MSG_PATH" ] && { echo "ошибка."; exit 1; }
sleep 1
echo "OK."

echo "Отправка сообщения... "
if mmcli -m $MODEM_DBUS_PATH -s "$MSG_PATH" --send &>/dev/null; then
	sleep 1
	echo "Сообщение успешно отправлено."
else
	echo "Ошибка."
	exit 1
fi

if [ "$DEL_MSG" = 1 ]; then
	echo "Удаление сообщения... "
	mmcli -a -m $MODEM_DBUS_PATH ---messaging-delete-sms="$MSG_PATH" &>/dev/null || { Zn_er "Ошибка при удалении SMS."; exit 1; }
	echo "Сообщение успешно удалено."
fi

2. Скрипт для проверки баланса.
Используется zenity.

Balance.sh
СпойлерПоказать

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

#!/bin/bash

# Команда проверки баланса
BALANCE_CMD="*100#"

# Деактивировать модем во время выполнения: 1-Да, 0-Нет
DEATC_F=0
# Деактивация модема позволяет избежать иногда возникающего "зависания" состояния модема,
# но после деактивации активные сетевые соеденения модема будут отключены.

ps ax | grep "$0" | grep -v grep | cut -d " " -f2 | grep -v $$ | xargs kill -9

{
Zn_er() { kill -9 $PRGRS_PID; zenity --error --title="Баланс" --text="$*"; exit 1; }
zenity --progress --text="Проверка баланса..." --title="Баланс" --percentage=10 --pulsate --no-cancel &
PRGRS_PID=$!

[ -z "$(nmcli -t -f STATE dev status)" ] && Zn_er "Модем не подключен."

MODEM_DBUS_PATH=$(mmcli -L | grep -o "/org/freedesktop/ModemManager[^ ]*" | tr -d '\n')
[ -z "$MODEM_DBUS_PATH" ] && Zn_er "Не удалось получить D-Bus-путь модема."

[ "$DEATC_F" = 1 ] && mmcli -m $MODEM_DBUS_PATH -d
mmcli -m $MODEM_DBUS_PATH -e || Zn_er "Не удалось активировать модем."

BALANCE_MESG="$(mmcli -m $MODEM_DBUS_PATH --3gpp-ussd-initiate="$BALANCE_CMD" | sed 's/USSD session initiated; new reply from network: //')"
[ -z "$BALANCE_MESG" ] && Zn_er "Не удалось получить сообщение о балансе."

[ "$DEATC_F" = 1 ] && mmcli -m $MODEM_DBUS_PATH -d
kill -9 $PRGRS_PID
zenity --info --title="Баланс" --text="$BALANCE_MESG"
} &>/dev/null

Последний раз редактировалось azmcrum 23 ноя 2015, 22:33, всего редактировалось 4 раза.


azmcrum
Сообщения: 75
Зарегистрирован: 12 авг 2015, 02:33

Re: Какой командой просмотреть смс на модеме?

#25

Сообщение azmcrum » 10 ноя 2015, 18:51

Скрипт для чтения всех SMS. Консольная версия.
Read_all_sms.sh
СпойлерПоказать

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

#!/bin/bash

clear; echo
[ -z "$(nmcli -t -f STATE dev status)" ] && { echo "Модем не подключен."; exit 0; }

MODEM_DBUS_PATH=$(mmcli -L | grep -o "/org/freedesktop/ModemManager[^ ]*" | tr -d '\n')
[ -z "$MODEM_DBUS_PATH" ] && { echo "Не удалось получить D-Bus путь модема."; exit 1; }

mmcli -m $MODEM_DBUS_PATH -d &>/dev/null
mmcli -m $MODEM_DBUS_PATH -e &>/dev/null || { echo "Не удалось активировать модем."; exit 1; }

ALL_MSGS_PATHS="$(mmcli -m $MODEM_DBUS_PATH --messaging-list-sms | grep -o "/org/freedesktop/ModemManager[^ ]*")"
COUNT_MSGS=$(echo "$ALL_MSGS_PATHS" | wc -l)
[ "$COUNT_MSGS" -gt 0 ] || { echo "Нет SMS сообщений."; exit 0; }

IFS=$'\n'
for X in $ALL_MSGS_PATHS; do
[ -z "$N" ] && echo -e "Всего сообщений: $COUNT_MSGS"; let N+=1
MSG="$(mmcli -m $MODEM_DBUS_PATH --sms=$X)"
echo "************************************
Сообщение: $N
$MSG
"
done
echo "************************************"
sleep 1
mmcli -m $MODEM_DBUS_PATH -d &>/dev/null
echo

Аватара пользователя

Автор темы
adventurer
Супермодератор
Сообщения: 2970
Зарегистрирован: 15 июн 2011, 18:24

Re: Какой командой просмотреть смс на модеме?

#26

Сообщение adventurer » 10 ноя 2015, 20:30

Спасибо!
Не успеваю даже проверить! :D


azmcrum
Сообщения: 75
Зарегистрирован: 12 авг 2015, 02:33

Re: Какой командой просмотреть смс на модеме?

#27

Сообщение azmcrum » 11 ноя 2015, 05:14

Все скрипты проверял, и они работают.
Но иногда бывает смски с первого раза не удаляются, или модем инициализируется после реконнета с ошибкой. Но это было и в нетворк-манагере-гуи, и врядли лечится.


azmcrum
Сообщения: 75
Зарегистрирован: 12 авг 2015, 02:33

Re: Какой командой просмотреть смс на модеме?

#28

Сообщение azmcrum » 14 ноя 2015, 23:45

adventurer,

Тема решена?
Или тебе принципиально одной командой все смски читать надо?
Тогда вот:

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

MDP=$(mmcli -L | grep -o "/org/freedesktop/ModemManager[^ ]*" | tr -d '\n'); mmcli -m $MDP -e; AMP="$(mmcli -m $MDP --messaging-list-sms | grep -o "/org/freedesktop/ModemManager[^ ]*")"; IFS=$'\n'; for X in $AMP; do mmcli -m $MDP --sms=$X; echo; done
Последний раз редактировалось azmcrum 15 ноя 2015, 07:07, всего редактировалось 2 раза.

Аватара пользователя

Автор темы
adventurer
Супермодератор
Сообщения: 2970
Зарегистрирован: 15 июн 2011, 18:24

Re: Какой командой просмотреть смс на модеме?

#29

Сообщение adventurer » 15 ноя 2015, 05:51

Да, спасибо, решена.
Кроме отправки смс ещё раз проверил. Хочу перенести в раздел How-To, думаю что написать или как есть перенести.

PS
Я тут немножко охладел к этой проблеме. :)
Надо было дублировать смс-сообщения на электронную почту. Такой возможности не нашёл. На другой номер перенаправляют, но ещё и за плату.


azmcrum
Сообщения: 75
Зарегистрирован: 12 авг 2015, 02:33

Re: Какой командой просмотреть смс на модеме?

#30

Сообщение azmcrum » 15 ноя 2015, 08:02

Отправляет четко, проверял. Номер только нужно писать с +7........ и баланса конечно должно хватать :D
Можно также одной командой, но эта каша смотрится как-то страшновато))
СпойлерПоказать

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

TEXT=""; NUMBER=""; DEL_MSG=1; MDP=$(mmcli -L | grep -o "/org/freedesktop/ModemManager[^ ]*" | tr -d '\n'); mmcli -m $MDP -e && { MSG="$(echo -en "text=\x27$TEXT\x27,number=\x27$NUMBER\x27")"; MSG_PATH="$(mmcli -m $MDP --messaging-create-sms="$MSG" | grep -o "/org/freedesktop/ModemManager[^ ]*")"; mmcli -m $MDP -s "$MSG_PATH" --send; [ "$DEL_MSG" = 1 ] && mmcli -m $MDP ---messaging-delete-sms="$MSG_PATH"; }
и это для краткости без проверок.

Как How-To думаю это будет не лишним.
Надо было дублировать смс-сообщения на электронную почту.
Так это просто. Нужна только команда для отправки сообщения на мыло. Остальное допишу. Запускать можно будет по крону, или вручую.

Ответить