Что происходит когда у Вас гаджет на колесах с одной стороны, и Вы уже окрыленные тем, что Arduino скетчи Blink и Hello_world у Вас получилось запустить? Правильно, приходит мысль, как это можно соединить.

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

Что такое мастер-аккаунт?

Китайцы из Zeekr, он же Lynk&Co, он же Geely, он же Volvo, он же Гога, он же Гоша, он же Юрий...решили перестать принимать запросы от аккаунтов, которые находятся вне Китая. Использование VPN, DNS тоже не всегда помогает, а подключить новое устройство или передать права управления на другой номер телефона и вовсе сродни чуду.

Естественно в данной ситуации пришла мысль уйти от этой зависимости. Русификация не единственная проблема, с которой сталкивается владелец китайского авто.

Нам необходим микроконтроллер, который будет в роли шлюза, получать данные с нашего сервера и отправлять их по CAN, а так же считывать данные с нужных нам адресов и отправлять их на сервер. По сути это и есть самая сложная часть нашей системы. Приложение для Android или iOS написать на flutter намного проще, чем понять, что, как и куда отправлять.

Слушаем CAN

Разбивая задачу на подзадачи, не ради умещения спринта иноземного в скрам заморский, а для упрощения понимания процесса и макетирования из того, что есть в холодильнике. Берем любой CAN сниффер, например CAN Hacker, в моем случае, в память о моей долгой работе с Tesla я взял PCan, именно его Tesla рекомендует для работы и он сразу подтягивается в Tesla toolbox, он и попался под рукой.

Далее один из самых сложных процессов, так как в машине постоянно переписываются значения в CAN понять без информации, где именно заряд батарей, а где открытое окно крайне сложно. Выполняя одно и тоже действия, записываем лог и находим закономерности.

Долгие часы в машине с выполнением монотонных действий и записи лога.

Для тестов мы соединялись непосредственно в порт ODB, но в дальнейшем нужную CAN шину можно найти в любом удобном месте в авто.

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

Arduino+MCP2515CAN

Есть возможность работать с двумя CAN шинами одновременно.

#include <mcp2515.h>                // Подключаем библиотеку mcp2515
#define button 8                    // Указываем к какому выводу подключена кнопка
struct can_frame canMsg;    

MCP2515 mcp2515(10);

void setup() 
{
  pinMode(button, INPUT);            // Устанавливаем вывод, как вход
  digitalWrite(button, HIGH);        // Включаем подтягивающий резистор
  Serial.begin(115200);              // Открываем последовательную связь
  
  mcp2515.reset();                   // Перегружаем mcp2515
  mcp2515.setBitrate(CAN_125KBPS);   // Устанавливается скорость на 125 кбит\с
  mcp2515.setNormalMode();

  canMsg.can_id  = 0x0F6;
  canMsg.can_dlc = 1;
}

void loop() 
{
  int buton_1 = digitalRead(button); // Считывает значение с кнопки

// Если HIGH выполняем функцию
  if (buton_1 == HIGH)              
    {
     canMsg.data[0] = 0x20;
     mcp2515.sendMessage(&canMsg);
    }
// Если LOW выполняем функцию 

  else if (buton_1 == LOW) 
{
     canMsg.data[0] = 0x10;
     mcp2515.sendMessage(&canMsg);
} 
delay(1000);
}

Код Arduino для примера, чтобы показать, что самое сложное это знать ID и значение, которое следует отправить. Остальное только технический момент.

Серверная часть

Сервер для макета написали на mosquitto mqtt.

MQTT (Message Queuing Telemetry Transport) работает на основе публикации-подписки (publish-subscribe) модели коммуникации. В этой модели устройства могут публиковать сообщения на определенные темы (topics), а другие устройства могут подписываться на эти темы, чтобы получать эти сообщения.

Вот как работает процесс в MQTT:

  1. Устройство, которое хочет отправить сообщение, становится издателем (publisher) и публикует сообщение на определенную тему.

  2. Другие устройства, которые заинтересованы в получении сообщений на эту тему, становятся подписчиками (subscribers) и подписываются на эту тему.

  3. Когда издатель публикует сообщение на тему, MQTT брокер (broker) получает это сообщение и распространяет его всем подписчикам, которые подписаны на эту тему.

  4. Подписчики получают сообщение и могут обработать его соответствующим образом.

Суть общения в нашем случае максимально простая:

  • Arduino обращается с частотой 5 Гц и получает один бит, есть команда или нет. Если нет, засыпает.

  • Если команда есть, обращаемся за получением команды.

  • Приложение для телефона обращается для изменения параметра или запрашивает чтение определенного параметра с авто.

Приложение для телефона

Для прототипа использовали flutter, накидали простейший дизайн в figma. Это лишь черновой вариант для теста.

Вопрос безопасности и прочие проблемы

Тут же приходит на ум вопрос безопасности и это большая проблема. В текущем варианте скомпрометрировать устройство очень просто для открытия авто. Планируем общение с ключом шифрования.

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

  1. Угон автомобиля:

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

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

  1. Взлом системы:

  • Доступ к данным: Злоумышленник может получить доступ к данным автомобиля, хранящимся на сервере, включая информацию о местоположении, пробеге, истории обслуживания и т.д.

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

  • Вымогательство: Злоумышленник может заблокировать автомобиль и потребовать выкуп за его разблокировку.

  • Шпионаж: Злоумышленник может следить за местоположением автомобиля и использовать эту информацию для незаконных целей.

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

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


  1. ignatfomenko
    29.07.2024 14:24
    +7

    Здесь лучше думаю ESP32 взять, у нее wifi на борту есть. Просто подойти и с телефона с ней связаться. Конечно все по каналу с шифрованием.


    1. webzuweb Автор
      29.07.2024 14:24
      +4

      Конечно же продукт будет сделан совершенно на другой базе. Это прототип для проверки идеи.


      1. diaskzn
        29.07.2024 14:24
        +7

        Вы OVMS изобретаете?


  1. beho1der
    29.07.2024 14:24
    +1

    Можно использовать уже готовые устройства с CAN и GSM, как сделал evolute(используют vega). При этом уже у вас будет серверный софт с оптимизированным протоколом,достаточно будет только перенести CAN команды и связать со своим приложением.


    1. webzuweb Автор
      29.07.2024 14:24

      Есть, и у Gelioscan есть. Есть и GSM системы сигнализации


      1. beho1der
        29.07.2024 14:24

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


    1. fokin91
      29.07.2024 14:24
      +1

      Там тоже не просто, пишу как разработчик этой системы. Для прототипа - рановато Вега. Там пришлось часть хардкодить в прошивку, что бы это хорошо работало. Хотя какой то минимальный функционал можно реализовать. Кстати к автору, на зикре еще аналоговые выходы нужны под аварийку и гудок, так что к арудинке надо будет еще пару полевых транзисторов приделать.


  1. sdegtyarev
    29.07.2024 14:24

    У меня есть собственной разработки плата на esp32 с can и дисплеем (ну и WiFi/BT, понятно дело) и автомобильным питанием.


    1. webzuweb Автор
      29.07.2024 14:24

      Можете дать для теста?


      1. sdegtyarev
        29.07.2024 14:24

        А есть без дисплея, но с LTE-модемом, наверное такая больше подойдёт(но их собранных нет, хотя комплектуха вся есть). Киньте контакт tg.


        1. SonAlex
          29.07.2024 14:24

          Коллеги, я для себя лет 5 примерно, разрабатываю разные приблуды для умного дома на ESP с MQTT. Если нужна помощь или хотя бы примеры рабочих скетчей - обращайтесь)


          1. m0tral
            29.07.2024 14:24

            Там как бэ главная часть на CAN, общаться с сервером это тривиальная задача.


        1. webzuweb Автор
          29.07.2024 14:24

          webzuweb


  1. m0tral
    29.07.2024 14:24
    +1

    Тут уже давно назрел вопрос, когда уже CAN начнут шифровать) вот чтобы был полный секьюред) и все только по подписке))


    1. webzuweb Автор
      29.07.2024 14:24

      Скорость важна. Коллизии будут чаще.


      1. Artemka86
        29.07.2024 14:24

        коллизий точно не будет


    1. Artemka86
      29.07.2024 14:24

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


  1. zuek
    29.07.2024 14:24

    По прочтении статьи закрались сомнения - если CAN-шина настолько всемогущая и вездесущая, не пользуются ли ею злоумышленники?.. Беглый гуглёж показал, что пользуются.


  1. PolarWolf
    29.07.2024 14:24

    Все уже придумано до нас) Большинство охранных комплексов в той или иной мере для большинства тачек такое реализуют - к тому же, неся финансовую гарантию на секурность. Не знаю как они работают с зикрами правда, но скорее всего рано или поздно научатся. Климатом, конечно, удаленно не поуправляешь (если только не через автоматизации, которые, в принципе, есть), но все остальное есть