Современный автомобиль это не только средство передвижения, но и продвинутый гаджет с мультимедийными функциями и электронной системой управления агрегатами и кучей датчиков. Многие автопроизводители предлагают функции ассистентов движения, помощников при парковке, мониторинга и управления авто с телефона. Это возможно благодаря использованию в авто CAN шины к которой подключены все системы: двигатель, тормозная система, руль, мультимедиа, климат и др.
Мой автомобиль Skoda Octavia 2011 г. в. не предлагает возможностей управления с телефона, поэтому я решил исправить этот недостаток, а заодно и добавить функцию голосового управления. В качестве шлюза между CAN шиной и телефоном я использую Raspberry Pi с шилдом CAN BUS и WiFi роутер TP-Link. Протокол общения агрегатов авто закрытый, и на все мои письма предоставить документацию протокола Volkswagen отвечал отказом. Поэтому единственный способ узнать, как общаются устройства в авто и научиться ими управлять является реверс-инжиниринг протокола CAN шины VW.
Я действовал поэтапно:
- Разработка CAN шилда для Raspberry Pi
- Установка ПО для работы с CAN шиной
- Подключение к CAN шине авто
- Разработка сниффера и изучение протокола CAN шины
- Разработка приложения для телефона
- Голосовое управление с помощью Homekit и Siri
В конце видео голосового управления стеклоподъемником.
Разработка CAN шилда для Raspberry Pi
Схему шилда взял здесь lnxpps.de/rpie, там же и описание выводов, для общения с CAN используются 2 микросхемы MCP2515 и MCP2551. К шилду подключаются 2 провода CAN-High и CAN-Low. В SprintLayout 6 развел плату, может кому пригодится CANBoardRPi.lay (на заглавном фото прототип шилда на макетке).
Установка ПО для работы с CAN шиной
На Raspbian 2-x годичной давность мне потребовалось пропатчить bcm2708.c, чтобы добавить поддержку CAN (возможно сейчас это не требуется). Для работы с CAN шиной нужно установить пакет утилит can-utils с github.com/linux-can/can-utils, после этого подгрузить модули и поднять can интерфейс:
# initialize
insmod spi-bcm2708
insmod can
insmod can-dev
insmod can-raw
insmod can-bcm
insmod mcp251x
# Maerklin Gleisbox (60112 and 60113) uses 250000
# loopback mode for testing
ip link set can0 type can bitrate 125000 loopback on
ifconfig can0 up
Проверяем, что интерфейс CAN поднялся командой ifconfig:
Проверить, что все работает можно отправив команду и получив ее.
В одном терминале слушаем:
root@raspberrypi ~ # candump any,0:0,#FFFFFFFF
В другом терминале отправляем:
root@raspberrypi ~ # cansend can0 123#deadbeef
Более подробный процесс установки описан здесь lnxpps.de/rpie.
Подключение к CAN шине авто
Немного изучив открытую документацию на CAN шину VW я выяснил, что у меня используется 2 шины.
Шина CAN силового агрегата, передающая данные со скоростью 500 кбит/с, связывает все обслуживающие этот агрегат блоки управления.
Например, к шине CAN силового агрегата могут быть подключены следующие приборы:
- блок управления двигателем,
- блок управления АБС,
- блок управления системой курсовой стабилизации,
- блок управления коробкой передач,
- блок управления подушками безопасности,
- комбинация приборов.
Шина CAN системы «Комфорт» и информационнокомандной системы, позволяющая передавать данные со скоростью 100 кбит/с между обслуживающими эти системы блоками управления.
Например, к шине CAN системы «Комфорт» и информационно<командной системы могут быть
подключены следующие приборы:
- блок управления системой Climatronic или климатической установкой,
- блоки управления в дверях автомобиля,
- блок управления системой «Комфорт»,
- блок управления с дисплеем для радио и навигационной системы.
Получив доступ к первой можно у управлять движением (в моем варианте на механике, как минимум можно управлять круиз контролем), получив доступ ко второй можно управлять магнитолой, климатом, центральным замком, стеклоподъемниками, фарами и др.
Обе шины связаны через шлюз, который находится в области под рулем, так же к шлюзу подключен диагностический OBD2 разъем, к сожаление через OBD2 разъем нельзя послушать трафик от обеих шин, можно только передать команду и запросить состояние. Я решил, что буду работать только с шиной «Комфорт» и самым удобным местом подключения к шине оказался разъем в водительской двери.
Теперь я могу слушать, все что происходит в CAN шине «Комфорт» и отправлять команды.
Разработка сниффера и изучение протокола CAN шины
После того как я получил доступ к прослушиванию CAN шины, мне нужно расшифровать кто кому и что передает. Формат пакета CAN показан на рисунке.
Все утилиты из набора can-utils сами умеют разбирать CAN пакеты и отдают только полезную информацию, а именно:
- Идентификатор
- Длина данных
- Данные
Данные передаются в не зашифрованном виде, это облегчило изучение протокола. На Raspberry Pi я написал маленький сервер который перенаправляет данные с candump в TCP/IP, чтобы на компьютере разобрать поток данных и красиво показать их.
Для macOS я написал простое приложение, которое для каждого адреса устройства добавляет ячейку в табличку и в этой ячейке я уже вижу какие данные меняются.
Нажимаю кнопку стеклоподъемника я нашел ячейку в которой меняются данные, затем я и определил какие команды соответствуют нажатию вниз, нажатию вверх, удержанию вверх, удержанию вниз.
Проверить, что команда работает, можно отправив из терминала, например команду поднять левое стекло вверх:
cansend can0 181#0200
Команды, которые передают устройства по CAN шине в автомобилях VAG (Skoda Octavia 2011), полученные методом реверс-инжиниринг:
// Front Left Glass Up
181#0200
// Front Left Glass Down
181#0800
// Front Right Glass Up
181#2000
// Front Right Glass Down
181#8000
// Back Left Glass Up
181#0002
// Back Left Glass Down
181#0008
// Back Right Glass Up
181#0020
// Back Right Glass Down
181#0080
// Central Lock Open
291#09AA020000
// Central Lock Close
291#0955040000
// Update Light status of central lock (Когда отправляешь команду открыть/закрыть замок то на кнопке управления замком светодиод не изменяет состояние, чтобы он показал реальное состояние центрального замка, нужно отправить команду обновления)
291#0900000000
Мне было лень изучить все остальные устройства, поэтому в этом списке, только то что мне было интересно.
Разработка приложения для телефона
Используя полученные команды я написал приложение для iPhone, которое открывает/закрывает стекла и управляет центральным замком.
На Raspberry Pi я запустил 2 маленьких сервера, первый отправляет данные с candump в TCP/IP, второй принимает команды от iPhone и передает их cansend.
//
// FirstViewController.m
// Car Control
//
// Created by Vitaliy Yurkin on 17.05.15.
// Copyright (c) 2015 Vitaliy Yurkin. All rights reserved.
//
#import "FirstViewController.h"
#import "DataConnection.h"
#import "CommandConnection.h"
@interface FirstViewController () <DataConnectionDelegate>
@property (nonatomic, strong) DataConnection *dataConnection;
@property (nonatomic, strong) CommandConnection *commandConnection;
@property (weak, nonatomic) IBOutlet UILabel *Door_1;
@property (weak, nonatomic) IBOutlet UILabel *Door_2;
@property (weak, nonatomic) IBOutlet UILabel *Door_3;
@property (weak, nonatomic) IBOutlet UILabel *Door_4;
@property (weak, nonatomic) IBOutlet UIButton *CentralLock;
- (IBAction)lockUnlock:(UIButton *)sender;
@end
@implementation FirstViewController
- (void)viewDidLoad {
self.dataConnection = [DataConnection new];
self.dataConnection.delegate = self;
[self.dataConnection connectToCanBus];
self.commandConnection = [CommandConnection new];
[self.commandConnection connectToCanBus];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)doorStatusChanged:(char)value {
/*
1 - Front Left Door
2 - Front Right Door
4 - Back Left Door
8 - Back Right Door
3 - Front Left&Right Door = 1 + 3
5 - Front& Back left Door = 1 + 4
*/
// Front Left Door
if (value & 1) {
self.Door_1.backgroundColor = [UIColor yellowColor];
self.Door_1.text = @"Открыто";
NSLog(@"1");
}
else {
self.Door_1.backgroundColor = [UIColor lightGrayColor];
self.Door_1.text = @"Закрыто";
}
// Front Right Door
if (value & 2) {
self.Door_2.backgroundColor = [UIColor yellowColor];
self.Door_2.text = @"Открыто";
NSLog(@"2");
}
else {
self.Door_2.backgroundColor = [UIColor lightGrayColor];
self.Door_2.text = @"Закрыто";
}
// Back Left Door
if (value & 4) {
self.Door_3.backgroundColor = [UIColor yellowColor];
self.Door_3.text = @"Открыто";
NSLog(@"4");
}
else {
self.Door_3.backgroundColor = [UIColor lightGrayColor];
self.Door_3.text = @"Закрыто";
}
// Back Right Door
if (value & 8) {
self.Door_4.backgroundColor = [UIColor yellowColor];
self.Door_4.text = @"Открыто";
NSLog(@"8");
}
else {
self.Door_4.backgroundColor = [UIColor lightGrayColor];
self.Door_4.text = @"Закрыто";
}
}
BOOL firstStatusChange = YES;
BOOL lastStatus;
-(void) centralLockStatusChanged:(BOOL)status {
// At first status changes set lastStatus variable
if (firstStatusChange) {
firstStatusChange = NO;
// Invert status, to pass the next test
lastStatus = !status;
}
// Change Lock image only if status changed
if (!(lastStatus == status)) {
// Check status
if (status) {
[self.CentralLock setBackgroundImage:[UIImage imageNamed:@"lock_close"] forState:UIControlStateNormal];
}
else {
[self.CentralLock setBackgroundImage:[UIImage imageNamed:@"lock_open"] forState:UIControlStateNormal];
}
lastStatus = status;
}
}
// Front Left Glass
- (IBAction)frontLeftUp:(UIButton *)sender {
[self.commandConnection sendMessage:@"cansend can0 181#0200"];
}
- (IBAction)frontLeftDown:(id)sender {
[self.commandConnection sendMessage:@"cansend can0 181#0800"];
}
// Front Right Glass
- (IBAction)frontRightUp:(UIButton *)sender {
[self.commandConnection sendMessage:@"cansend can0 181#2000"];
}
- (IBAction)frontRightDown:(id)sender {
[self.commandConnection sendMessage:@"cansend can0 181#8000"];
}
// Back Left Glass
- (IBAction)backLeftUp:(UIButton *)sender {
[self.commandConnection sendMessage:@"cansend can0 181#0002"];
}
- (IBAction)backLeftDown:(id)sender {
[self.commandConnection sendMessage:@"cansend can0 181#0008"];
}
// Back Right Glass
- (IBAction)backRightUp:(UIButton *)sender {
[self.commandConnection sendMessage:@"cansend can0 181#0020"];
}
- (IBAction)backtRightDown:(id)sender {
[self.commandConnection sendMessage:@"cansend can0 181#0080"];
}
- (IBAction)lockUnlock:(UIButton *)sender {
// If central lock closed
if (lastStatus) {
// Open
[self.commandConnection sendMessage:@"cansend can0 291#09AA020000"];
int64_t delayInSeconds = 1; // 1 sec
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.commandConnection sendMessage:@"cansend can0 291#0900000000"];
});
}
else {
// Close
[self.commandConnection sendMessage:@"cansend can0 291#0955040000"];
int64_t delayInSeconds = 1; // 1 sec
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.commandConnection sendMessage:@"cansend can0 291#0900000000"];
});
}
}
@end
Есть способ не писать свое приложение для телефона, а воспользоваться готовым из мира умных домов, всего лишь потребуется установиться на Raspberry Pi систему автоматизации Z-Way командой:
wget -q -O - razberry.z-wave.me/install | sudo bash
После этого добавляем наши CAN устройства в Z-Way систему автоматизации
И управляем стеклоподъемником как обычным выключателем:
Мобильный приложения для Z-Way: ZWay Home Control и ZWay Control.
Голосовое управление с помощью Homekit и Siri
В одной из своих статей я описывал процесс установки Homebridge на Raspberry Pi для голосового управления домашней системой автоматизации Z-Way. После установки Homebridge вы получите возможность голосового управления с помощью Siri. Уверен, что для Android есть множество приложений позволяющих голосом отправлять HTTP запросы для управления Z-Way.
Видео голосовогу управления стеклоподъемником прилагаю.
Комментарии (85)
beliakov
11.11.2016 23:22-2Интересно, в каком реальном сценарии может пригодиться голосовое управление стеклоподъемниками? В аварии руки оторвало и надо на помощь позвать? :-)
aivs
11.11.2016 23:28+1в этом случае у нас есть глонасс в новых тачках. А в перспективе управление мульдемидиа удобно голосом.
Dolbe
14.11.2016 10:12У меня, если музыка в машине играет, даже на средней громкости, гугл нау плохо может разобрать мой голос. У сири с этим лучше? Если нет, то мультимедиа будет неудобно пользоваться)
webzuweb
11.11.2016 23:30А на автомате с эл.усилителем можно через шину полностью управлять движением авто?
Какая марка/модель наиболее подойдет для таких экспериментов?aivs
11.11.2016 23:35+2У меня авто концерна Volkswagen Audi Group, команды в авто концерна: Skoda, VW, Audi, Porsche одинаковые.
У любой из марок в максимальной комплектации есть ассистенты движения и парковки, можно расширить их работу до автопилота, спросите у Геохота :)
Электроусилитель руля позволяет управлять рулем через CAN.
Singerofthefall
13.11.2016 14:29<зануда-mode>Извините за оффтоп, но компания называется не Volkswagen Audi Group, и даже не Volkswagen Auto Group, как думают многие. Более того, аббревиатура VAG никогда не была официальным названием. Компания называется просто Volkswagen Group, либо, по немецки, Volkswagen Aktiengesellschaft, причем Aktiengesellschaft это просто "акционерное общество".</зануда-mode>
aivs
13.11.2016 14:45Для обывателей все таки VAG ассоциируется с Volkswagen и Audi, да и Wikipedia не против:
"Головной (материнской) компанией концерна является Volkswagen Aktiengesellschaft, чаще упоминаемая как Volkswagen AG или просто VAG. Неофициально аббревиатуру VAG расшифровывают как «Volkswagen Audi Gruppe»."
AlexSam
12.11.2016 00:10У меня Ford Kuga 2 умеет парковаться но там много доп. оборудования стоит для этого, возможно что прошивка мозгов другая. Но при мне официалы крутили рулем и газовали с ноута через CAN. Т.е. можно управлять.
aivs
12.11.2016 00:17+1Однозначно можно, но у GM другие команды, которые вычислить не сложно.
AlexSam
12.11.2016 00:54+3У Ford'a есть почти полностью открытый SDK, так что…
https://media.readthedocs.org/pdf/openxc-vehicle-interface-firmware/v7.1.0/openxc-vehicle-interface-firmware.pdf
https://habrahabr.ru/post/165929/
Pakos
14.11.2016 11:00У меня Ford Kuga 2 умеет парковаться но там много доп. оборудования стоит для этого
По идее там нужны датчики парковки (с камерой, возможно). Без них он будет парковаться, но куда (в кого) — не знает.
ZigFisher
11.11.2016 23:39Спасибо за статью
Единственный вопрос: не думали упростить связку Raspberry Pi + WiFi роутер?
Мне кажется, использование двух устройств несколько избыточно в данной ситуации.
Или в Raspberry Pi воткнуть WiFi донгл + модем ну или роутер взять помощнее и отказаться от Pi.aivs
11.11.2016 23:42Конечно изначально в разбери я воткнул wifi стик, но практика показала, что мой orient приводит к перезагрузке raspberry, поэтому за 400р купил отдельный роутер.
Возможно сейчас и есть нормальные usb wifi стики.
Мне нужен homebridge, raspberry самый дешевый комп поддерживающий его.
PeterZha
11.11.2016 23:50+5Как ненастоящий автоэлектрик, хочу заметить, что использование кабеля Cat5e solid в автомобиле крайне чревато, а в том месте, где они показаны на фото, чревато втройне. Вибрации и перегибы вкупе с перепадом температур и влажности быстро доконают эти проводки, причем в довольно неожиданном месте.
Если очень хочется использовать подручный айтишный склад, то лучше использовать многожильные пары от патч-кордов, а по хорошему лучше зайти на любую разборку и взять бесплатно, то есть даром, ненужную косу от более-менее современного аппарата и далее разобрать ее на годные провода в правильной изоляции.aivs
11.11.2016 23:51кабель от патч корда за 2 года не сгнил. а если правильно подключиться к obd2 разъему, так вообще сносу не будет
NickyX3
14.11.2016 12:17+100500, сам от патч-кордов многожилку использовал для подключения кнопок управления вариатором на руле к мозгам, а так же ввиду отсутствия родного кабеля между головой и ченджером сделал тоже и витухи кабелек (мне не нужен был аудио с ченджера, а только факт его наличия, чтоб голова включила AUX, поэтому 8 проводов хватило)
PoltoS
12.11.2016 02:06У меня похожая Шкода L&K, но каким-то чудом у неё нет опции отключения передней пассажирской подушки (для детского кресла) — как такое не встоке, я не понял.
Официалы сказали, что отключить/включить можно только на сервисе, ~5000 за процедуру. А переключать-то часто нужно.
Можно ведь и это через CAN делать? Будет загораться при этом наверняка лампочка на панельки (лампочка есть, нет только переключалки)?aivs
12.11.2016 02:13В моей комплектации есть кнопка отключения пассажирской подушки, это означает, что в любой комплектации есть команда для отключения подушки, нужно только её вычислить.
viperet
12.11.2016 04:07+1У меня тоже в Fabia нет кнопки отключения подушки пассажира, решение простое — ставить детское кресло за водителем, так безопаснее.
PoltoS
12.11.2016 20:36Ну, у меня трое, с трудом помещаются все кресла сзади. А в Фабию точно не влезут.
shurupkirov
14.11.2016 12:25безопаснее ставить не за водителем, на заднее сиденье с правой стороны двери или по центру. У нас все же правостороннее движения
PitBeast
14.11.2016 12:25Я в своей Fabia II 2014 у дилеров переднюю пассажирскую подушку отключил, через диагностический разъем.
Barsuk
12.11.2016 11:12посмотрите схему как ставится штатная кнопка, попробуйте себе ее поставить сами
PoltoS
12.11.2016 20:39Полезный совет ;) куда смотреть-то?
Barsuk
12.11.2016 20:50Для вашей модели автомобиля бывают комплектации у которых такой переключатель есть штатно? Если бывает то смотреть как реализовано, если не бывает то никак.
ugsm
12.11.2016 22:12конкретно в фабии по инструкции выключатель под ключ должен быть с правой стороны панели, доступ при открытой двери. Сам долго втыкал в инструкцию с картинками и в пластиковую заглушку в моем экземпляре авто. Сборка чешская. Приходится кресло возить сзади.
PendalFF
13.11.2016 13:46Как вариант — никто не мешает откусывать подушке электрозапал при помощи надежного тумблера.
Чтобы не взбесился блок контроля — тумблер взять переключашку на 2 позиции и на вторую привесить балласт, имитирующий айрбэг
aivs
13.11.2016 23:45Бегло посмотрел, можно ли установить личинку замка отключения подушки в бардачок, похоже не все так просто, придется еще и проводку менять до личинки. Проще CAN командой отключать подушку.
kAIST
12.11.2016 22:21Через can, насколько знаю, нет такой возможности.
В vcds (спец программа для диагностики), по крайней мере такой возможности нет. Есть настройка «у нас есть/нет подушки безопасности», но какой эффект это даст, неизвестно.
msatersam11
12.11.2016 11:53средство передвижение
передвижениЯ
По тексту — довольно интересно, но слишком много «Я» для 6-ти пунктов, наиболее тяжкие из которых ( 1, 2 ), по сути, сделаны товарищами с приведённого в статье сайта ( lnxpps.de/rpie )
JekaKey
12.11.2016 12:13Друзья, а как 2551 работает с комфорт шиной? На комфорте же low speed fault tolerance без концевых резисторов и даже уровни сигнала там отличаются. Разве не должен использоваться трансивер типа tja1054?
Gorynch
13.11.2016 17:11На passat b6 (дизель) использовал 2551, работает нормально.
А вот на mercedes a class завелось только с tja1054.
lonelymyp
12.11.2016 13:55Вариант использования диллерского диагностического оборудования не рассматривался?
Все функции упарвления доступные из диллерского сканера прописаны в базе данных программы.
Возможно проще распаковать эту базу, чем сниферить нужные команды в шине?
В автомобилях марки рено (ну и естественно у Весты и Иксрея тоже, ибо это тоже рено, хоть и с шильдиком ваза) например достаточно простой формат, описание всех команд управления и последовательностей команд сделано в формате XML. всякие там мигания фарами и управление стёклами подробно расписаны.begemot_sun
12.11.2016 19:43А есть ссылочка какая на это дело?
lonelymyp
12.11.2016 22:31для рено это pyren, если для других марок, то не знаю, надо у сообществ интересоваться.
просто любая диллерская программа которая с диллерским сканером работает в себе содержит базу всех кодов нужных для управления по шине, вопрос в том как эти данные в программе расшифровать.
MaxAlekseev
12.11.2016 14:12+1>>На Raspbian 2-x годичной давность мне потребовалось пропатчить bcm2708.c, чтобы добавить поддержку CAN (возможно сейчас это не требуется).
Сейчас поддержка MCP2515 уже реализована в ядре Raspbian, по сути работает из коробки.
j0ker13
12.11.2016 14:47у меня тоже машина семейства ваг и куплена VCDS. там для каждого блока есть тест исполнителей. может оттуда можно взять команды. и плюс что подключается через обд-2
aivs
13.11.2016 23:49Пытался в дистрибутиве "Вася" найти коды, но быстро не получилось, поэтому не стал с ним заморачиваться, хотя можно было бы и Васю послушать. Надо будет еще разок его в HEX редакторе посмотреть.
BurlakovSG
12.11.2016 14:49Тоже самое на форуме делаем с Citroen C4, только у нас зоопарк CAN шин побольше.
FreeManOfPeace
12.11.2016 14:49-9Один я предпочитаю по старинке пользоваться машинами только с ручной крутёлкой для открытия окон?
Pakos
14.11.2016 11:08Заодно после грунтовки и разных пассажиров смотреть что там открылось. Очень удобно, примерно как бензобак и капот с багажником открывать ключами, в идеале — разными.
Dimano
12.11.2016 15:27Очень здорово! А кнопки нажимаемые на магнитоле в шину поступают? У меня такая же Октавия 11 года и магнитола болеро без SD/USB входа. Для прослушивания mp3 я купил Yatour, но он проработав (с перебоями) 2 года умер. Если в шине появляются команды от магнитолы, то можно подключить к AUX китайскую плату проигрывающую mp3 и приделать по CAN шине управление.
extempl
12.11.2016 15:45Я вот тоже думал в машину влепить и большой экран с камерой заднего вида, но всё это было в основе своей из-за музыки. Музыка решилась девайсом "Xiaomi Roidmi 2S" который просто транслирует музыку с телефона на заданной частоте радио — теперь просто переключается нужная станция и музыка играет из колонок.
Необходимость в танцах с бубном/ aux/ usb отпала (а так хотелось).Dimano
12.11.2016 15:57FM трансмиттер это у меня пройденый этап. Главный минус ловит сигналы с других машин и помехи. Второй минус у октавии не выключается прикуриватель после глушения двигателя, т.е. трасмиттер ещё помоему 20 минут будет сажать аккум распевая пестни. И ещё минус, неудобство управления, промотать песню, поставить на паузу и т.д. удобнее с магнитолы (у меня нет управления на руле) а не тыкаясь в слепую в маленькую коробочку. Или я что-то не знаю про конкретно этот трансмиттер?
extempl
12.11.2016 16:36В принципе, наложений с другими сигналами не испытываю, там настраивается частота, так что можно выбрать неиспользуемую. Конечно, до поры до времени, никаких гарантий нет что частота будет свободна.
Данный трансмиттер если не подключён к телефону ничего распевать не будет, так что и сажать аккум не должен.
Неудобство управления — это да, но громче/тише/mute работает и с магнитолы.
тыкаясь в слепую в маленькую коробочку
Btw, это вы про трансмиттер или про телефон? Трансмиттер не имеет никаких контролов, всё управление через медиа-проигрыватель на телефоне. Свайп сверху вниз (например активно приложение навигатора) -> там три кнопки — предыдущий трек, play/stop, следующий трек. Не очень удобно, но в принципе, юзабельно. На радио тоже не особенно треки попереключаешь :) Так что как альтернатива радиостанциям вполне годно.
kAIST
12.11.2016 20:04Я купил себе AUX bluetooth приемник с кнопками и прилепил к магнитоле. Теперь все медиа со смартфона. Очень удобно получилось.
iDoka
12.11.2016 20:56Обе шины связаны через шлюз, который находится в области под рулем, так же к шлюзу подключен диагностический OBD2 разъем, к сожаление через OBD2 разъем нельзя послушать трафик от обеих шин, можно только передать команду и запросить состояние. Я решил, что буду работать только с шиной «Комфорт»
Я так понимаю, для реверс-инжиниринга посылок необходимо подключение к шине «Комфорт», а разве процитированный абзац не утверждает, что для последующей выдачи «известных» посылок достаточно подключения к шине диагностики (500К), благодаря наличию шлюза?
Это так?aivs
13.11.2016 23:52Команды можно отправлять из одной шины в другую, если знаешь адрес. OBD2 разъем, например это отделен от обеих шин шлюзом, но зная команды, через OBD2 можно и двигателем управлять.
kababok
12.11.2016 22:13Кстати (и грубо говоря), обычно по стандарту CAN чем меньше число в идентификаторе (ID) CAN-сообщения (телеграммы), тем более приоритетно это сообщение в сети.
Поэтому чаще всего ID сообщений для управления двигателем, тормозами, ABS, подушками безопасности и пр. будут находиться в «первых двустах»: то есть ID находятся между 0х001 и 0х1FF (очень грубо).pdima
13.11.2016 11:54Не просто обычно, в CAN на физическом уровне при коллизии двух пакетов всегда пройдет пакет с меньшим ID (бит 0 в CAN доминантный).
d00kie
13.11.2016 02:25+1по поводу реверс инжиниринга КАН сети, я пилю опен сорс фреймворк который упрощает исследование и изучение и если кому интересно потестить или по-пилить вместе, было бы здорово… ну например методы детекта типа данных или стат. отклонения, по ссылке с слайдами уже есть конкретные примеры…
https://github.com/eik00d/CANToolz
https://www.blackhat.com/docs/eu-16/materials/eu-16-Sintsov-Pen-Testing-Vehicles-With-Cantoolz.pdf (демо и примеры реверс инжиниринга автоматического в конце слайдов)aivs
13.11.2016 02:35Классный проект, изучу подробно.
Давно уже хочу сделать компактный девайс в обд2 разъем для демонстрации хака тачки. Прикуплюка RPI zero.
iGeophysix
13.11.2016 11:05Клево!
Я долго тоже мучался с CAN шиной.
Но мозгов тогда не хватило сделать полную систему.
Я в Infiniti интегрировал Nexus 7, но условие было — полное сохранение штатных кнопок.
У фиников климат управляется кнопками, а отображается на мониторе. Поэтому надо было где-то прочитать климат-инфу, а в той шине, где я искал — не было.
Оказалось, что есть еще третья шина…
но машину уже продал)
Клево! давай еще!
ayurkevich
13.11.2016 17:51Спасибо за статью!
У меня всегда было горячее желание заменить штатное радио (с тачскрином и навигатором) на айпад мини с сохранением функционала (управление музыкой, отображение картинки с задней камеры). Ищу варианты реализации.
Машина правда не VAG, а Ниссан.
MaxSoft
13.11.2016 20:46а что происходит с машиной, если, например, уложить шину? Например, выставив не правильную скорость
alecv
13.11.2016 22:19Интересно, а бывают автономные CAN-датчики? Например, датчики давления, температуры или там кнопки?
Типа пойти на разборку, взять отдельно CAN-датчик и потестить. Теоретически, если есть шина — то она вероятно соединяет центральный компьютер с чем-то.
broken-ufa
14.11.2016 15:38Пардон за нубские вопросы, но:
1. Нельзя ли было купить http://www.ebay.com/itm/SPI-MCP2515-EF02037-CAN-BUS-Shield-Controller-communication-speed-high-Arduino-/401090806613?hash=item5d62e00355:g:E7oAAOSwpLNX9bla?
Он как раз на микросхемах MCP2515 и MCP2551.
2. Интересно, а пойдет ли такое добро на Orange Pi PC/PCplus?aivs
14.11.2016 22:27+1Эту плату конечно можно по UART подключить к Raspberry pi, но спаять свою и именно под Raspberry в виде шилда гораздо интереснее.
Sokol666
14.11.2016 15:50То есть, если несанкционированно подкрутить ту-же малину к CAN шине можно вполне себе приспокойно едущий автомобиль заставить заблокировать двери, закрыть окна, открыть заслонки воздушные на побольше, вырубить подушки, включить например Highway to Hell погромче и весело прибавив газу заставить авто срулить вниз с ближайшего моста. А если учесть, что авто у нас тоже нутром своим в облака стремятся то могут и дыру найти, чтоб без малины. Вот это уже страшно, это не зараженными лампочками в квартирах мигать.
aivs
14.11.2016 15:55Все это возмжно, а также возможны программные ошибки от производителей: не сработала подушка, руль ослаб на скорости, тормоз не в полную силу жмет.
Saffron
14.11.2016 20:16+1Как вообще может придти в голову управление автомобилем (голосовое) ставить в зависимость от интернета, от сервиса третьих лиц, которые могут заглючить как специально, так и случайно? Только проверенные оффлайн решения!
aivs
14.11.2016 20:31Android auto и Apple carplay не для вас это понятно, ссылки на офлайн решения в студию!
Saffron
14.11.2016 23:32Сносно работающих оффлайн решений распознавания голоса нет — и это удручает. Видимо, трудности монетизации.
aivs
14.11.2016 23:39Это трудности мощностей, для работы сири работает не один датацентр, на одном компьютере достичь сопостовимой скорости и точности распознавания не возможно.
Saffron
15.11.2016 01:52вот не думаю, что для каждого клиента работает по датацентру. Скорее всего этот датацентр обслуживает миллионы клиентов, и если поделить количество компьютеров в датацентре на количество пользователей siri, то окажется, что производительности одного компьютера достаточно.
xruyn
Как говорится — «Кашааа». Судя по видео, присутствует какая-то задержка со стороны Siri?
aivs
готов разжевать, в чем вопрос? нет задержки.