К разработке собственной телеметрии меня привела, пожалуй, многим знакомая ситуация — работало, да перестало. Однажды вечером блок автосигнализации перестал воспринимать брелок. Я понимал, что нужно для начала попытаться перепривязать брелок, для чего требовалось выполнить несложную процедуру, четко следуя инструкциям из руководства по монтажу. Выполнение процедуры становилось невозможным, так как автосигнализация находилась в режиме охраны, отключить которую аварийно можно было кнопкой Valet, введя сервисный код.

Сервисный код я никогда не пытался запомнить, а мастер-код — тем более. Безуспешно перебрать на память несколько кодов я все-таки попытался. В течении нескольких минут мне пришлось угнать свой автомобиль. Трель от сирены в ушах еще потом стояла долго, так как сирена была установлена в салоне авто. Не помню почему я разместил сирену именно там — то ли по собственной лени, то ли увидел в этом какой-то смысл. Знаете, по личному испытанному ощущению, это может привести в сильное замешательство неподготовленного злодея. К моему глубокому сожалению, блок мне пришлось демонтировать. Я начал разбираться как быть дальше и что с этим делать. Кому интересно, что же вышло в итоге, прошу под кат.

У меня было несколько гипотез:

  1. Сбои в работе антенного модуля.
  2. Сбой энергонезависимой памяти в основном блока. В результате могли быть повреждены данные о брелоках и их синхронизации.
  3. Сбой энергонезависимой памяти брелока. Последствия схожи с п. 2.
  4. Глушение сигнала в целях подготовки к угону.

Вариант с наличием глушилки сигнала я проверил сразу же как переехал в безопасное место. Автосигнализация так же не реагировала на брелок.

Я обратился к дилеру по вопросу наличия тех. возможности сброса сервисных кодов. Мне ответили, что такой возможности нет и вам придется приобрести новый комплект за несколько тысяч рублей. Да и будет лучше если вы установите всё это дело у нас — сообщили они, отдав при этом еще несколько тысяч. Такой ответ меня ничуть не удивил, имхо, понятное дело! Дилеру лучше продать новый комплект, чем производить сервисное обслуживание. Тут внезапно я почувствовал как мое настроение резко улучшилось, появилась мысль разобраться во всем самостоятельно, попутно выяснив можно ли сбросить коды или нельзя. Вообще именно такие моменты и побуждают к альтернативам, реверсу, разработке и DIY. Я бросил себе вызов.

Начал я отнюдь не с копаний в блоках, а с альтернативного варианта. Пока Pandora лежала в шкафу я пытался сделать свой модуль. Я прикинул, что если разработать свой модуль автосигнализации, то это будет сразу круто, надежно, гибко и абсолютно не сложно. Что сказать, все это был голый энтузиазм. Я провел несколько недель за написанием прошивки и прототипированием модуля. Процесс был полностью творческим. Так, внезапно, мне приходила какая-либо идея и я с удовольствием реализовывал ее. Например, уже на стадии рабочего прототипа с нужными релюшками, транзисторами и GSM я вдруг захотел добавить еще GPS и Bluetooth. Ну а чего тянуть кота за хвост? Пусть модуль будет сразу крутым, как я изначально прикинул и мне пришлось сменить микроконтроллер на более жирный, так как UART портов у ATMega328 всего один единственный. Достать у AVR что-то распространенное и с тремя UART мне показалось нереальной затеей. Вариант реализации программных UART мне не понравился, по той простой причине, что аппаратный надежнее. Помню как STM32 уже вовсю мелькал в различных статьях по электронике и был доступен к заказу на AliExpress. Не долго думая я выписал себе пару STM32F103, так как это был настоящий 32-битный микроконтроллер с большим объемом памяти и богатой периферии, а тем более и нужным числом UART. Опыта программирования STM32 у меня на тот момент не было, но этого лишь возник интерес изучения чего-то нового.

В ожидании прихода микроконтроллеров было решено отложить прототип и не просто ждать, а проверить гипотезы, который остались.

Зима приближалась, да и машина без “присмотра” как-то не вселяла комфорта. Все продолжалось до тех пор, пока однажды я не заглянул под крышку блока автосигнализации. Внутри я обнаружил ATMega324! Радости моей не было и предела, так как это был AVR, а значит с ним можно было поработать и как следует. Первым делом я начал проверять разводку UART и SPI. У ATMega324 2 UART порта. Один UART заведен на сдвиговый регистр, а второй на разъем антенного модуля. Цепи SPI же привели меня на нераспаянную колодку (на фото у кварца в нижнем левом углу платы).



Быстренько напаял колодку и подключил программатор. Чтение прошивки и EEPROM приводили к пустым дампам. Понятное дело, разработчик не мог допустить такой прокол. Проверил обмен между блоком и антенным модулем. Линия TX была чистая в момент тревоги. Это могло означать, что число брелоков в памяти равно 0. Антенный модуль оказался совсем не разговорчивым. Также выяснилось, что микроконтроллер управляет питанием антенного модуля через транзисторный ключ. На выходе ключа было обнаружено входное напряжение, а по инструкции должно быть +5В. Все это мне показалось немного странным. Может быть по этой причине антенный модуль молчал? Вариантов проверки гипотез у меня не оставалось. А что там с фьюз-битами? Вот так сюрприз! Во фьзах разрешена прошивка через SPI интерфейс. Ну и как теперь сидеть на месте ровно? Правильно — написать свою прошивку! Это был такой хардкорный вариант, поскольку кроме самой прошивки еще и плату прозвонить пришлось.

Защитный лак мешал процессу, но вооружившись щупами с острым кончиком дела пошли гораздо лучше. Получалось, что слой лак не сдирался, а аккуратно прокалывался в нужных местах. Прозвонка платы заняла два вечера.

Распиновка портов микроконтроллера
Номер вывода Пин процессора Разъем под документации Номер выхода в разъеме Назначение согласно документации карты монтажа
9 PD0 (RXD0/PCINT24) X1 RX / CALL RX-сигнал антенны и вход кнопки CALL BUTTON
10 PD1 (TXD0/PCINT25) X1 TX TX-сигнал антенны
11 PD2 -> 6C595 RCK pin
12 PD3 -> 6C595 SER IN pin
13 PD4 -> 6C595 SRCK pin
14 PD5 X5 COM Вход кнопки iButton
15 PD6 X4, X4a DQ DQ сигнал от датчиков температуры двигателя и салона
16 PD7 X7 Вход срабатывания основного уровня
3 PB7/SCK -> 6C595 CLR
2 PB6 X8 5 Выход CH5 (300mA) -
1 PB5 X8 2 Выход CH4 (1A) -
PB4 X8 3 Выход СH2 (500mA) -
43 PB3 X8 20 Вход сигнала от тахометра, инжектора, генератора
42 PB2 X8 4 Выход CH3 (300mA) -
41 PB1 X8 13, 14 Фонарь левого поворота
Фонарь правого поворота
40 PB0 X8 18 Реле CH1 (15 A)
15, 16 -> 18
37 PA0 Акселерометр (ось X)
36 PA1 Акселерометр (ось Y)
35 PA2 X3 COM Кнопка Valet / измерение напряжения
34 PA3
33 PA4 X8 8 Концевой выключатель багажника (±)
32 PA5 X8 11 Концевой выключатель дверей (±)
31 PA6 X8 19 Вход от датчика нейтрали/ручного тормоза (±)
30 PA7 X8 7 Вход от датчика масла, лампы зарядка (±)
19 PC0 X7 Вход срабатывания предварительного уровня
20 PC1 X6 1 Красный индикатор
21 PC2 X6 2 Зеленый индикатор
22 PC3 X1 +12V Питание антенны
23 PC4 X8 21 Вход от кнопки педали тормоза
24 PC5 X8 10 Вход зажигания
25 PC6
26 PC7 X8 17 Сирена




Написал тестовую прошивку, прошил, пощелкал релюшками — отлично! Антенный модуль и брелок уже были бесполезны. Так если можно написать прошивку для блока автосигнализации, используя всю его готовую схемотехнику и точки подключения в авто, то остается решить вопрос с каналом связи. Я подумал, а что если оставить в своем проекте GSM и GPS, выкинуть Bluetooth и прикрутить все его к автосигнализации Pandora? Ну конечно, это же лучший вариант! Во-первых не нужно было готовить сложную плату, схемотехника Pandora решала многие задачи, а мне же лишь нужно было сделать модуль расширения, который подключался бы взамен штатного антенного модуля. Как можно понять, период ожидания микроконтроллеров из Китая прошел не заметно.

Чтобы соединить все модули между собой я вытравил плату. Она очень простая. В ней готовые модули GPS, GSM и блок автосигнализации подключены к UART портам микроконтроллера STM32.



Начинка модуля разместилась в корпусе блока питания от ноутбука.



DC-DC преобразователь ни в какую не хотел размещаться внутри корпуса и пришлось подыскать более просторный корпус. В итоге на роль корпуса очень хорошо подошел пенал от лицевой части магнитолы SUPRA с удобным механизмом защелкивания.



Плата была покрыта полиуретановым лаком.

Компоненты. Тут все просто:

DC-DC преобразователь LM2596
GSM модем SIM800L (питание 3.6-4.4)
GPS модуль NEO-6M (питание 3.4-3.8)
Кусок текстолита.

Необходимое напряжение для модулей формирует DC-DC преобразователь. Его выходное напряжение установлено в 3.7 вольта. Винт регулировки замазан лаком, чтобы предотвратить его смещение от вибраций.

Я думал какую периферию мне необходимо поддержать в первую очередь и получился такой список:

  1. Датчики температуры салон и двигателя.
  2. Акселерометр.
  3. Вольтметр бортовой сети.
  4. Вход концевых выключателей дверей.
  5. Вход концевого выключателя багажника.
  6. Вход концевого выключателя педали тормоза.
  7. Выход на зажигание.
  8. Выход на реле повторителей.
  9. Выход на обходчик иммобилайзера.
  10. Выход на реле блокировки.
  11. Выход на сирену.

Сознательный отказ от поддержки:

  1. Выход на реле центрального замка. В автомобиле отсутствует проводка до двери центрального замка.
  2. Вход тахометра, так как он просто не имеет смысла для подключения на гибридном автомобиле.
  3. Вход концевого выключателя капота, так как отсутствует штатно на автомобиле.

Алгоритмы и функции, которые были реализованы:

  1. Хранение настроек в EEPROM.
  2. Запуск двигателя по технологии START-STOP.
  3. Активация бесключевого обходчика с аналоговым управлением (iDatalink).
  4. Удаленный запуск двигателя.
  5. Контроль пониженного напряжения на аккумуляторе.
  6. Контроль работы двигателя по напряжению.
  7. Постановка/снятие охраны (контроль периметра зон).
  8. Контроль концевых выключателей дверей и багажника.
  9. Поддержка сирены.
  10. Поддержка сигнальных огней (повторителей поворотов).
  11. Поддержка тихого режима.
  12. Поддержка внешней платы расширения (модуль телеметрии).
  13. Соединение и передача состояний на сервер.
  14. Управление системой DTMF кодами, в случае отсутствия связи с сервером.
  15. Список доверенных номеров.

Обратная связь реализована вызовом на доверенный номер телефона, c которого был установил режим охраны.

Управление системой было реализовано через Telegram-бот:

image

Также бот отправляет сообщения о критических состояниях, таких как:

  1. Низкое напряжение на аккумуляторе.
  2. Напряжение на аккумуляторе восстановлено.
  3. Низкая температура двигателя.
  4. Высокая температура двигателя.

По факту самоделке уже исполнилось 3 года и за этот срок я выяснил, что:

  1. Самоделка была в максимальном аптайме порядка 80 дней, затем следовала перезагрузка устройства, так как GSM модем переставал принимать даже звонки.
  2. Стабильная работа в отрицательные и высокие температуры (от -40 до +40).
  3. Нужно сделать поддержку цифровых шин.

Возможность перепрошивки Pandora DXL 3000 по SPI шине является уязвимостью, потому что позволяет загрузить ПО, которое может активировать выходы бесключевого обходчика иммобилайзера и деактивировать блокировки.

В целом проделанная работа дала мне огромный опыт. Я изучил схемотехнику автомобильный сигнализации, увидел как можно делать компактно и просто и научился программировать микроконтроллеры STM32. В итоге я сделал продукт, которым пользуюсь сам. Я вдохновился и продолжил разработку второй версии. Вторая версия сможет подключаться к цифровым шинам для упрощения и сокращения числа точек подключения, а также реализовывать обход штатного иммобилайзера без внешних обходчиков по цепям IMMO-IMI.

Ах да, все это время система работала и продолжает работать на семейном автомобиле Toyota Prius в 20 кузове, который богат на цифровые шины. Полным ходом идет отладка поддержки шины BEAN.

P.S.: Вторая версия была разработана и проходит тестирование на автомобиле Toyota Camry 2007 года выпуска.

В итоге свой проект я вижу как возможность создания открытой системы автомобильной телеметрии.

Спасибо за внимание!

Комментарии (18)


  1. slog2
    08.12.2019 16:38

    Я так и не понял, телеграм-бот то где живёт? Неужто в STM32F103


    1. 50cmd Автор
      09.12.2019 05:55

      Телеграм-бот существует как отдельный компонент системы. По архиктетуре проекта идет как часть docker-контейнера. А можно реализовать бота и прямо в устройстве — занесу в список идей. Железо проекта еще не зафиксировано.


      1. slog2
        09.12.2019 10:55

        Я так и не понял — где выполняется код телеграмм-бота? Есть ещё какой-то внешний сервер? В России телеграмм-боты не работают без VPN. Как реализовать бота прямо в устройстве? По-моему для этого нужно железо как минимум уровня самых дешёвых роутеров, типа mr3020.


        1. 50cmd Автор
          10.12.2019 04:46

          Телеграм-бот крутится на внешнем сервере. Для его бесперебойной работы по callback модели был написан свой https прокси-сервис и размещен на VPS вне территории России. Устройство и телеграм-бот взаимодействуют между собой через сервер проекта по бинарному протоколу, ну а дальше все уже заворачивается по необходимости на внешний https прокси-сервис бота.
          Таким же образом можно реализовать телеграм-бота в устройстве, но только по polling-модели, ведь GSM модем умеет нативно формировать и посылать HTTP запросы, а модели постарше уже и HTTPS, например тот же SIM900.


          1. slog2
            10.12.2019 10:44

            Вот теперь понятно. Это такая сигналка со своим VPS за границей. Чуда не случилось. Расходимся :)


  1. unwrecker
    08.12.2019 17:15

    Да, эта странность у Пандор с невозможностью сброса пин-кода совершенно необъяснима. Ну сделали бы паузу на сброс, раз надеятся на остаток защиты в виде радиореле....


    Самодельная сигналка вышла дешевле?


    1. 50cmd Автор
      09.12.2019 05:49

      Да, самоделка вышла дешевле. Проект планирую сделать полностью открытым. Когда это произойдет я не могу сказать, но уже очень скоро. Ради такого события будет создан отдельный пост.
      Крутым достижением в проекте считаю наличие реализации бесключевого обходчика иммобилайзера по цепям IMO-IMI — ради этого есть смысл развивать проект.


  1. maxwolf
    08.12.2019 18:22

    Круто! Снимаю шляпу!

    P.S. Мне вот тоже не хватает в пандоре (DX-90B, если что) возможности посылать с брелка или телефона кастомные команды на CAN-bus… Тут и задумаешься, ждать милости от природы производителя, или самому засучивать рукава…


    1. 50cmd Автор
      09.12.2019 05:40

      Для варианта «посылать кастомные команды в CAN-bus с телефона» могу посоветовать вам сделать WiFi/Bluetooth шлюз на базе ESP32. У ESP32 есть CAN-контроллер. Легко будет добавить GSM модем.


  1. WebMonet
    09.12.2019 10:24

    Хочу такую штуку к своей пандоре. Куда давать деньги?


    1. 50cmd Автор
      10.12.2019 04:17

      У вас Pandora 3000?


      1. WebMonet
        10.12.2019 14:25

        По крайней мере от прошлого хозяина в машине лежит инструкция к ней.
        Есть еще какой-то способ идентифицировать устройство, кроме как демонтаж?


  1. Anfinagen
    09.12.2019 13:47

    Тоже есть pandora (3700) c отсутствием обновлений… и ценой… Думаю отличная идея собрать сигнализацию самому. Потребление у Pandor заявлено минимальное у вас с этим как?


    1. Oakum
      09.12.2019 14:26

      Присоединяюсь к вопросу, делаю управление предпусковым подогревателем через SMS, в режиме ожидания не могу сделать потребление менее 16mA@12V. А тут судя по всему удержание IP соединения. Сколько потребление схемы?


      1. 50cmd Автор
        10.12.2019 04:25

        Да, вы правы. Удержание IP соединения весьма затратно и превосходит 16mA. Точные цифры сказать не могу, так как не проводил испытаний по данным критериям.


    1. 50cmd Автор
      10.12.2019 04:20

      Вопрос энергопотребления мной не рассматривался от слова совсем.


  1. MrCrooK
    10.12.2019 04:25

    В итоге свой проект я вижу как возможность создания открытой системы автомобильной телеметрии.

    Добрый день!
    не увидел исходников, схем и разводки печатной платы. А так же исходников телеграмм бота.


    1. 50cmd Автор
      10.12.2019 04:32

      Вы правильно заметили, что существует возможность создания открытой системы. Статья повествовала о истории обратной разработки устройства, утратившего свой функционал и не более того. Я готов поделиться своими исследованиями немногим позже.