Как заставить работать «Страж-SMS 4×4-GPS» в Беларуси и Украине

Как-то так получилось, что мне досталась в наследство GSM-сигнализация «Страж-SMS 4×4-GPS» от «Телесистем». Какое ждало разочарование: эта система ни черта не хочет слать SMS-ки в родной Беларуси. Что она может, так только дозваниваться и «молчать» в трубку… Упоминание о неработоспособности «Стража» нашёл и на украинских форумах. На сайте производителя, правда, написано, что поделка «Страж» работает исключительно в российских сетях, но по жизни, чтобы программно привязать аппарат к региону надо очень постараться и написать извращённый код.

Надо чинить 🙂 Открыл пластмассовый корпус, оказалось, что конструкция «Стража» махровая кустарщина: в качестве GSM-модема с помощью МГТФ-проводков прилеплена плата от старого Siemens-а C35i с которой снята часть деталей, собственно контроллер сигнализации (какой-то PIC) подключен к выводам UART-а платы телефона. Чтобы включать телефон, когда он проваливается в спящий режим, к кнопочке «POWER» телефона припаян проводок, который идёт к контроллеру.
Страж-SMS 4x4-GPS

Ну, посмотрим, что не так в обмене с телефоном: припаиваю UART-интерфейс и смотрю лог обмена контроллера с телефоном во время срабатывания сигнализации.

............
at+cpbr=10 +CPBR: 10,"+375295968565*10",145,"Number1"
OK
at+cmgf=0 OK
at+cmgs=140 > 0011000C917325596958560F0000AA18D3B27BFE96C3686FB1BA3CA683866536BB67A3C16C0000 {1Ah}
ERROR    <<<<<<<<<< вот он "северный олень": неправильный формат номера :)

at+cpbr=05 +CPBR: 5,"0220010000000",129,"Sensor04object"
OK
at+cpbr=11 +CPBR: 11,"+375295968565*10",145,"Number2"
OK
at+cmgf=0 OK
at+cmgs=140 > 0011000C917325596958560F0000AA18D3B27BFE96C3686FB1BA3CA683866536BB67A3C16C0000 {1Ah}
ERROR    <<<<<<<<<< повтор ошибки
at+cpbr=05 +CPBR: 5,"0220010000000",129,"Sensor04object"
OK
............

Ошибка программистов «Телесистем» видна невооружённым глазом: телефон явно не согласен с такой СМС-кой и пишет «ERROR» 🙂 Ошибка кроется в формате передачи номера.

> было 0011000C917325596958560F0000AA18D3B27BFE96C3686FB1BA3CA683866536BB67A3C16C0000 {1Ah}
>                            ^^ - дополнение номера "выравнивающим" кодом не требуется!!!
> надо 0011000C917325596958560000AA18D3B27BFE96C3686FB1BA3CA683866536BB67A3C16C0000 {1Ah}

Врядли фирма "Телесистемы" захочет мне "за так" менять прошивку в моём вскрытом "Страже": скорее всего будет "пестня" про "вскрытую пломбу", ссылку в руководстве на "работу только в сетях России" и пр.бред: надо придумывать как ремонтировать самому.

Первой мыслью, которая меня посетила, было приделать маленький контроллер, который будет стоять в разрыве провода TX между контроллером и телефоном, и как только встречается команда at+cmgs= — исправляет в сообщении номер телефона. Это хорошее, простое и универсальное решение и на самом деле так и надо делать.

Мыслью номер два была мысль о том, а нельзя ли как-нибудь "обойти" это дефект? Ведь неспроста "Страж" работает в России и не работает в Беларуси и на Украине: может просто так получается, что из-за разницы длины кода страны в России всегда надо дополнять номер выравнивающим кодом, а в Беларуси и на Украине это выравнивание не требуется.
Решение оказалось простым: номера, по которым требуется рассылать СМС-ки, в конце надо дополнить символом #. Т.е. запись СМС-телефона должна выглядеть +375295968565#*10 (10 — значит, что на номер шлются только СМС-ки ), после такой записи начинают нормально рассылаться телефоном.

К сожалению, позвонить по номеру +375295968565# "стражу" не удаётся: сеть пишет, что это неправильный номер. Поэтому для дозвона по такому же номеру в следующей ячейке надо завести запись вида +375295968565*01 (01 — значит, что на номер идёт только дозвон). Создать номер для посылки СМС-ок и дозвона в виде одной записи, как задумывали авторы к сожалению не получится: для дозвона и посылки СМС по одному номеру придётся использовать 2 разных ячейки памяти.

Собственно, так и чинится этот баг 🙂