Мой дневник

10.01.2018

SMS to Telegram and Google Doc

Наступил новый год, внезапно у нас разблокировали wordpress, а я тут как раз с новым проектом.

Screenshot_20180110-112508Сначала была симка.
Номер существовал давно, и была заведена на него куча всяких сервисов. Особенно подтверждения всяких финансовых операций.
Но тут появился новый провайдер, тарифный план и т.п., к тому же при поездках за границу не всегда удобно ловить смс-ки в роуминге. В общем, созрела мысль:
– оставлять нечто с сим-картой дома
– при поступлении смс перенаправлять их в интернет, в мессенджер.
Выбор мессенджера определялся его открытостью, тут telegram вне конкуренции. Однако, хотелось гибкости, поэтому решил ввести еще один “слой”. Есть такая система, IFTTT. Так что смс сначала идет в это облако, а уже там обрабатывается. Причем обработчиков можно создать несколько, например, отправлять в telegram и сохранять в google-документах.

ifttt

Кстати, тут уже можно остановиться: есть готовое приложение ifttt, оно наверное может ловить смс на оставшемся дома старом телефоне и отправлять его в сеть. Но на тот момент свободной сотки под рукой не оказалось, и я решил собрать свое устройство.

m590eНа алиэкспрессе приобрел модуль gsm, m590e. Хитрые китайцы продают “набор diy”, на деле же они где-то навыдирали б/у модулей и просто прикладывают к ним примитивную плату и пяток деталек. Выходит дешево, но паять smd-компоненты нужно хорошее увеличение. Тем не менее модуль запускается, в сети регистрируется. Будьте внимательны с питанием, при gsm-операциях потребление резко возрастает, я допаял еще конденсатор на 2000мкФ.

Первые опыты с модулем делал на компьютере, через usb-serial кабель. Только питания не хватает. Если решить вопрос, можно также написать скрипт и повесить сервисом на компьютере. Возможно, когда-нибудь я так и сделаю.

d1_mini_v2.3.0_1_16x9Но я пошел дальше. В качестве сервера взял модуль esp8266. Wifi в нем есть, serial как раз 3.3V, а поскольку взял модуль nodemcu, то получил micro-usb вход для питания и 5V вывод для подключения gsm-модуля.

Все бы хорошо, но serial порт в esp8266 всего один. По нему надо и программировать, и отлаживать, и работать с gsm… Весьма неудобно. В Arduino IDE есть библиотека SoftwareSerial, можно использовать ее, но при малейшей модификации кода нужно пересобирать и перезаливать всю прошивку. В общем, посмотрел я многие варианты, и остановился на Cesanta Mongoose OS с примитивной javascript-машиной.

Большим плюсом является возможность заливать только js-файлы, не пересобирая прошивку. Также имеется встроенный web и rpc – сервисы. А это значит, что программировать модуль можно не через usb/serial, а прямо по wifi сети!

mos

O Mongoose OS от Cesanta. Это не первый мой проект под этой системой. В целом мне нравится ее гибкость и функционал. Однако, хочу все же влить пару ложек дегтя в эту бочку меда. Вся система развивается, и части меняются полностью, так что через полгода приходится заново скачивать и изучать систему. Отсюда возникают проблемы с недостатком документации. И к большому сожалению, новая версия javascript-машины, mJS, настолько “оптимизирована”, что функционала явно не хватает. Например, не осталось функций работы со строками, типа indexOf или escape, что почти убивает возможности программирования на javascript. Форкнуть что ли проект пока не поздно… По крайней мере, прошивку и IDE точно надо сохранить.

IMG_20180110_103734Но вернемся к проекту. Подключил я модуль к RX,TX,Gnd и 5V, для запуска модема подключил пин модема Boot к выводу nodemcu D2… и нифига модем не запускается! Для начала оказалось, что D2 это вовсе не 2, а GPIO5 (а сначала на тестер грешил ))) читаем даташиты!). Затем, оказалось, что логического 3V мало, поэтому подтянул вывод boot на +5V через резистор 15K, а вывод D2 перевожу в режим INPUT, тогда и получаем достаточный для старта уровень.

Затем, оказалось, что передача данных в модем работает, а прием от модема – никак. Долго измерал уровни, подтягивал резистором… а оказалось, что нужно отключить обработчик rpc-комманд от порта. Прописал в conf0.conf uart: -1 и дело пошло на лад. Но времени потратил изрядно.

Затем, нужно дождаться от модема строки +PBREADY, и лишь после этого инициализировать его серией AT-команд для того чтобы он передавал по serial номер звонящего и текст смс. Однако в новой mJS нет нормальных функций задержки! delay просто затормаживает весь модуль. Выполнение javascript внутри обработчиков событий тоже имеет свои особенности. Словом, пришлось городить функцию, в которой внутренний счетчик определяет который раз она вызвана, и в зависимости от этого выполняет набор инструкций, а сама функция вызывается по таймеру. Ну и вообще пришлось поломать голову, так что “не ругайте программиста”… Код постараюсь выложить на github.

Для отладки и некоторых тестов в программу включил также примитивный telnet. Ведь консоль занята gsm-модемом. Вывод всей консольной информации туда все же не доходит, так что если в javascript ошибка, получаем “кирпичик”, который впрочем можно поднять через wifi rpc.

Добавил мониторинг модема. Теперь программа временами отправляет на модем “AT”, а обработчик ответа выставляет таймстамп последнего “ОК”. Если ответа нет, происходит повторное дерганье пина BOOT.

Много возни с кириллицей. Переключился на формат UCS2, получаю много цифр, перевести это в url-кодированный utf8 было непросто. Тем более что часть сообщения приходит в ascii, а функционал javascript в mjs обрезан до слез.

telneДобавил конфигурацию через веб-интерфейс. Фактически, взял готовый пример и добавил в него всего один параметр – ключ ifttt. По дизайну системы, просто так добавить поле в параметры нельзя. Нужно пересобрать всю прошивку, перегуглить кучу страниц, понять как правильно добавить поле… выкинуть все нафиг и записать ключ в неиспользуемый параметр.

Наконец, множественные сохранения в чипе тоже иногда приводят к злым глюкам, время от времени приходилось полностью перешивать чип и настраивать заново.

Теперь я понимаю как Толстой писал вайнуимир.

Но в конце все более-менее получилось. Код выложу на github, однако есть несколько тонкостей в настройке модуля, так что повторение может быть не столь тривиальным…

Advertisements

08.02.2016

Портативная зарядка АКБ

Filed under: arduino,автомобиль,электроника — sae762 @ 09:35

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

panel

Прибор подзаряжает импульсами частотой 1 кГц, следит за напряжением на выходе (сейчас стоит 15 вольт), также следит за напряжением на входе (откл при <10 вольт), в процессе подзарядки делает паузы, и следит за мощностью импульсов (силовая часть собрана по схеме flyback)

inside

с декабря проходят полевые испытания. в целом положительно: подтянул аккумуляторы (их у меня два, пришлось поочередно, вторую пару проводов – слишком запутанно получается), машину таки завел (хотя пришлось зачистить контакты и все же подключить литиевый бустер).

Доп плюс – девайс также проводит десульфатацию, хотя не всегда помогает.

Минус – flyback очень не любит переполюсовку на выходе, сгорает диод. Также не любит обрыв выхода – может сгореть mosfet, он всего на 30 вольт у меня, надо бы 60, но под рукой не было.

Для тех кто сомневается в накачке от маленького аккумулятора:

5 Ампер-часов = 300 Ампер-минут =)