Pull to refresh

Мастер-аккаунт Zeekr. Как Arduino поможет Вашему китайскому авто?

Level of difficultyMedium
Reading time4 min
Views20K

Что происходит когда у Вас гаджет на колесах с одной стороны, и Вы уже окрыленные тем, что 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.

Tags:
Hubs:
Total votes 26: ↑24 and ↓2+30
Comments19

Articles