Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Работа из командной строки с модемом на Toshiba AC-100

Одна из задач, которую я хочу решить дома — слать СМС, если произошло что-то непредвиденное дома. Ближайшая задача — СМС, если уровень СО2 повысился выше нормы или произошло повышение температуры выше 40° (т. е. дома что-то горит).

С датчиком я определился, расскажу как-нибудь в другой раз, разбираюсь как можно отправить СМС по событию. У меня дома лежит не при деле смартбук Тошиба ЭйСи-100, на который я относительно недавно установил Линукс.

Что хорошо — у него есть 3Г-модем, а значит возможность слать СМС, осталось научиться это делать. Для начала надо найти как это устройство отображается в Линуксе. Нашёлся модем быстро, устройство F3307 — это модем фирмы Эрикссон (до названия идут какие-то странные спецсимволы):

Модем фирмы Эрикссон (43.48КиБ)

В логах видно, что это устройство «се́ло» на один из файлов /dev/ttyACM* (позднее испытания показали, что на первый):

Логи (26.19КиБ)

С этими файлами работать просто — нужно отослать команду, потом передать возврат каретки, перевод строки и символ с кодом ноль. Потом прочитать что устройство ответило.

# Нужен баш версии 4 и выше
shopt -s lastpipe

function Say {
    echo -en "$1\r\n\0" > /dev/ttyACM1
    local line
    cat -v < /dev/ttyACM1 |
    while read -r line; do
        [ "$line" = OK^M ] && return 0
        [ "$line" = ERROR^M ] && return 1

        [ "$line" = ^M ] || echo "${line/%^M/}"
    done
}

# пример использования
Say AT+CGMI

В выходном потоке будет ответ модема, а в коде возврата — есть ли ошибка. Гугление показало, что отослать СМС при помощи команд очень просто, достаточно ввести две команды.

Теперь надо купить симку и попробовать.

20 комментариев
Антон Морозов 2013

Зачем так сложно? Есть же куча сервисов, предоставляющих АПИ для отправки СМС. И отдельное устройство не нужно, и дешевле обойдется.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Антон Морозов:

Есть же куча сервисов, предоставляющих АПИ для отправки СМС.

Среди них есть бесплатные и без каптчи?

И отдельное устройство не нужно

Отдельное устройство нужно. Датчики сами что ли СМС будут слать?

и дешевле обойдется.

Дешевле, чем у сотового оператора?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Антон Морозов:

Кстати, как у этого сервиса с надёжностью и доступностью? 100% времени работает? А то откажет или закроется, а у меня пожар в этот день. Отлично сэкономлю :)

Михаил Иванов (m-ivanov.livejournal.com) 2013

А что Вы планируете делать, получив такую смс?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для m-ivanov.livejournal.com:

Звонить 911 и срочно ехать домой, что же ещё?

Vlad Frost (blog.rk2.ru) 2013

А как будете тестировать?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для blog.rk2.ru:

В чём проблема-то? Выставлю пороги ниже.

grishaev.me/ 2013

С АТ командами вы намучаетесь, если захотите слать кириллицу. Есть отличные утилиты для работы с модемами и сотовыми телефонами. Например, gnokii или gammu. Позволяют из командной строки рулить девайсом: слать/принимать смс, делать бекап и тд.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для http://grishaev.me/:

Я уж посмотрел: http://www.i2r.ru/static/341/out_16996.shtml

Выглядит не очень-то сложно.

Линар 2013

есть неплохая программка для отправки/получения смс
http://smstools3.kekekasvi.com
использовал для отправки смс через usb 3g модем
прекрасно работает и с кириллицей особых проблем не было

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Линар:

Она в 50 раз сложнее, чем следует :) Да я уж почти всё написал, всё что надо в строчках наверху, надо только кодировать научиться и всё.

Антон Морозов 2013

Среди них есть бесплатные и без каптчи?
Дешевле, чем у сотового оператора?

Гуглятся и бесплатные, но я не знаю, насколько можно на них положиться. Но модем же тоже не бесплатно это будет делать. У крупных сервисов, услугами которых пользуются большие компании, СМС стоит от 50 копеек и ниже. Некоторые на входе дают какое-то количество бесплатных СМС: smsaero.ru, например, дает 100, потом это стоит 19 копеек за каждое сообщение.

А капча зачем? Вы получаете логин и пароль и общаетесь с сервисом по SOAP, XMPP или просто GET/POST-запросами.

Отдельное устройство нужно. Датчики сами что ли СМС будут слать?

Подойдет любой компьютер с интернетом. Датчик, наверное, можно подключить к домашнему серверу или роутеру с линуксом, если что-то такое у вас есть.

Кстати, как у этого сервиса с надёжностью и доступностью? 100% времени работает? А то откажет или закроется, а у меня пожар в этот день. Отлично сэкономлю :)

Он не один, тысячи их. Учитывая их условно-бесплатность, можно зарегистрироваться на нескольких, положить на их счет по какой-то минимальной сумме и слать сообщения сразу через всех или по очереди. Как мне кажется, в условиях пожара в квартире самое узкое место — это наличие электричества дома. А 3G-модем тоже не гарантирует стопроцентную надежность, согласитесь.

Но если у вас есть ненужный компьютер с модемом, да еще и со своей батарейкой, и вы уже все написали, то возможно действительно не надо ничего менять :)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Антон Морозов:

Но модем же тоже не бесплатно это будет делать. У крупных сервисов, услугами которых пользуются большие компании, СМС стоит от 50 копеек и ниже. Некоторые на входе дают какое-то количество бесплатных СМС: smsaero.ru, например, дает 100, потом это стоит 19 копеек за каждое сообщение.

Модем это будет слать напрямую оператору, ничего надёжнее этого быть не может.

Подойдет любой компьютер с интернетом. Датчик, наверное, можно подключить к домашнему серверу или роутеру с линуксом, если что-то такое у вас есть.

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

Он не один, тысячи их. Учитывая их условно-бесплатность, можно зарегистрироваться на нескольких, положить на их счет по какой-то минимальной сумме и слать сообщения сразу через всех или по очереди.

Зачем так сложно, если можно слать напрямую через модем?
Как мне кажется, в условиях пожара в квартире самое узкое место — это наличие электричества дома.
Конечно. Только смартбука аккумулятор есть. Что ему электричество? Другое дело, что часть датчиков вырубится, надо думать о дублирующей системе. Да и ваша схема автоматически перестанет работать — где взять интернет без электричества?

А 3G-модем тоже не гарантирует стопроцентную надежность, согласитесь.

Ничего надёжнее не придумать.

Антон Морозов 2013

Комментарий для Евгения Степанищева:

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

Я сказал: «Если что-то такое у вас есть». Если уже есть сервер или уже есть роутер, то датчик можно подключить к нему.

Но в целом вы правы: батарейка решает главную проблему, поэтому решение использовать такое устройство многократно повышает надежность в любом случае. А как слать смски — через модем или интернет (через тот же модем) — это уже вопрос десятый. Мне как человеку, не искушенному во всех этих сокетах, возвратах кареток, нулевых символах и прочих низкоуровневых штуках, это показалось сильно сложнее, чем послать простой POST-запрос. Для вас, возможно, это не аргумент.

Прошу прощения, что вызвал у вас раздражение, я не хотел :)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Антон Морозов:

Прошу прощения, что вызвал у вас раздражение, я не хотел :)

Я не раздражён, просто не вижу предмета дискуссии :)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Антон Морозов:

Код, который работает с модемом, кстати, в статье приведён, это он целиком, больше ничего не нужно (разве что если я захочу русскоязычные SMS его придётся серьёзно дополнить, но пока мне и латиница подойдёт).

Шалтай-Болтай 2013

Женя, 911 тебе тупо выломает двери, даже если выедут. И в случае пожара лично тебе ехать издалека уже бессмыссленно. Ты хочешь одеялком “накрыть очаг возгорания“, как истинный пионер? )

Разумнее выглядят страховка и дружба с соседями. Последнее сложнее, чем программировать модемы, да ) но можно.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Шалтай-Болтай:

И в случае пожара лично тебе ехать издалека уже бессмыссленно.

Мне нужно 10—15 минут, чтобы приехать, если пробок нет.

Женя, 911 тебе тупо выломает двери, даже если выедут.

Я могу приехать раньше их и открыть дверь. Что значит «даже если»?

Разумнее выглядят страховка и дружба с соседями.

Какой в этом смысл? У меня соседи работают так же, как и я.

Шалтай-Болтай 2013

Даже если — буквально. Не опыта? Они не поедут по смс.

У соседей есть бабушки. Если нет, можешь не дружить. Но «лучше жить в мире, чем в злобе».

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Шалтай-Болтай:

Они не поедут по смс.

По какой СМС? СМС я получу, им — позвоню.

У соседей есть бабушки.

У соседей бабушки дома не живут. У меня тут нет квартир «три поколения на одной площади».