Современный автомобиль это не только средство передвижения, но и продвинутый гаджет с мультимедийными функциями и электронной системой управления агрегатами и кучей датчиков. Многие автопроизводители предлагают функции ассистентов движения, помощников при парковке, мониторинга и управления авто с телефона. Это возможно благодаря использованию в авто CAN шины к которой подключены все системы: двигатель, тормозная система, руль, мультимедиа, климат и др.

Мой автомобиль Skoda Octavia 2011 г. в. не предлагает возможностей управления с телефона, поэтому я решил исправить этот недостаток, а заодно и добавить функцию голосового управления. В качестве шлюза между CAN шиной и телефоном я использую Raspberry Pi с шилдом CAN BUS и WiFi роутер TP-Link. Протокол общения агрегатов авто закрытый, и на все мои письма предоставить документацию протокола Volkswagen отвечал отказом. Поэтому единственный способ узнать, как общаются устройства в авто и научиться ими управлять является реверс-инжиниринг протокола CAN шины VW.

Я действовал поэтапно:

  1. Разработка CAN шилда для Raspberry Pi
  2. Установка ПО для работы с CAN шиной
  3. Подключение к CAN шине авто
  4. Разработка сниффера и изучение протокола CAN шины
  5. Разработка приложения для телефона
  6. Голосовое управление с помощью 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.


Исходники приложения управления авто для iOS
//
//  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)


  1. xruyn
    11.11.2016 23:16
    +1

    Как говорится — «Кашааа». Судя по видео, присутствует какая-то задержка со стороны Siri?


    1. aivs
      11.11.2016 23:17

      готов разжевать, в чем вопрос? нет задержки.


  1. beliakov
    11.11.2016 23:22
    -2

    Интересно, в каком реальном сценарии может пригодиться голосовое управление стеклоподъемниками? В аварии руки оторвало и надо на помощь позвать? :-)


    1. aivs
      11.11.2016 23:28
      +1

      в этом случае у нас есть глонасс в новых тачках. А в перспективе управление мульдемидиа удобно голосом.


      1. Dolbe
        14.11.2016 10:12

        У меня, если музыка в машине играет, даже на средней громкости, гугл нау плохо может разобрать мой голос. У сири с этим лучше? Если нет, то мультимедиа будет неудобно пользоваться)


  1. webzuweb
    11.11.2016 23:30

    А на автомате с эл.усилителем можно через шину полностью управлять движением авто?
    Какая марка/модель наиболее подойдет для таких экспериментов?


    1. aivs
      11.11.2016 23:35
      +2

      У меня авто концерна Volkswagen Audi Group, команды в авто концерна: Skoda, VW, Audi, Porsche одинаковые.
      У любой из марок в максимальной комплектации есть ассистенты движения и парковки, можно расширить их работу до автопилота, спросите у Геохота :)


      Электроусилитель руля позволяет управлять рулем через CAN.


      1. Singerofthefall
        13.11.2016 14:29

        <зануда-mode>Извините за оффтоп, но компания называется не Volkswagen Audi Group, и даже не Volkswagen Auto Group, как думают многие. Более того, аббревиатура VAG никогда не была официальным названием. Компания называется просто Volkswagen Group, либо, по немецки, Volkswagen Aktiengesellschaft, причем Aktiengesellschaft это просто "акционерное общество".</зануда-mode>


        1. aivs
          13.11.2016 14:45

          Для обывателей все таки VAG ассоциируется с Volkswagen и Audi, да и Wikipedia не против:
          "Головной (материнской) компанией концерна является Volkswagen Aktiengesellschaft, чаще упоминаемая как Volkswagen AG или просто VAG. Неофициально аббревиатуру VAG расшифровывают как «Volkswagen Audi Gruppe»."


        1. Muzzy0
          16.11.2016 10:35
          +1

          Ещё Seat.


    1. AlexSam
      12.11.2016 00:10

      У меня Ford Kuga 2 умеет парковаться но там много доп. оборудования стоит для этого, возможно что прошивка мозгов другая. Но при мне официалы крутили рулем и газовали с ноута через CAN. Т.е. можно управлять.


      1. aivs
        12.11.2016 00:17
        +1

        Однозначно можно, но у GM другие команды, которые вычислить не сложно.


        1. 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/


      1. Pakos
        14.11.2016 11:00

        У меня Ford Kuga 2 умеет парковаться но там много доп. оборудования стоит для этого
        По идее там нужны датчики парковки (с камерой, возможно). Без них он будет парковаться, но куда (в кого) — не знает.


  1. ZigFisher
    11.11.2016 23:39

    Спасибо за статью

    Единственный вопрос: не думали упростить связку Raspberry Pi + WiFi роутер?
    Мне кажется, использование двух устройств несколько избыточно в данной ситуации.
    Или в Raspberry Pi воткнуть WiFi донгл + модем ну или роутер взять помощнее и отказаться от Pi.


    1. aivs
      11.11.2016 23:42

      Конечно изначально в разбери я воткнул wifi стик, но практика показала, что мой orient приводит к перезагрузке raspberry, поэтому за 400р купил отдельный роутер.
      Возможно сейчас и есть нормальные usb wifi стики.
      Мне нужен homebridge, raspberry самый дешевый комп поддерживающий его.


  1. PeterZha
    11.11.2016 23:50
    +5

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

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


    1. aivs
      11.11.2016 23:51

      кабель от патч корда за 2 года не сгнил. а если правильно подключиться к obd2 разъему, так вообще сносу не будет


    1. NickyX3
      14.11.2016 12:17

      +100500, сам от патч-кордов многожилку использовал для подключения кнопок управления вариатором на руле к мозгам, а так же ввиду отсутствия родного кабеля между головой и ченджером сделал тоже и витухи кабелек (мне не нужен был аудио с ченджера, а только факт его наличия, чтоб голова включила AUX, поэтому 8 проводов хватило)


  1. PoltoS
    12.11.2016 02:06

    У меня похожая Шкода L&K, но каким-то чудом у неё нет опции отключения передней пассажирской подушки (для детского кресла) — как такое не встоке, я не понял.

    Официалы сказали, что отключить/включить можно только на сервисе, ~5000 за процедуру. А переключать-то часто нужно.

    Можно ведь и это через CAN делать? Будет загораться при этом наверняка лампочка на панельки (лампочка есть, нет только переключалки)?


    1. aivs
      12.11.2016 02:13

      В моей комплектации есть кнопка отключения пассажирской подушки, это означает, что в любой комплектации есть команда для отключения подушки, нужно только её вычислить.


    1. viperet
      12.11.2016 04:07
      +1

      У меня тоже в Fabia нет кнопки отключения подушки пассажира, решение простое — ставить детское кресло за водителем, так безопаснее.


      1. PoltoS
        12.11.2016 20:36

        Ну, у меня трое, с трудом помещаются все кресла сзади. А в Фабию точно не влезут.


      1. shurupkirov
        14.11.2016 12:25

        безопаснее ставить не за водителем, на заднее сиденье с правой стороны двери или по центру. У нас все же правостороннее движения


      1. PitBeast
        14.11.2016 12:25

        Я в своей Fabia II 2014 у дилеров переднюю пассажирскую подушку отключил, через диагностический разъем.


    1. Barsuk
      12.11.2016 11:12

      посмотрите схему как ставится штатная кнопка, попробуйте себе ее поставить сами


      1. PoltoS
        12.11.2016 20:39

        Полезный совет ;) куда смотреть-то?


        1. Barsuk
          12.11.2016 20:50

          Для вашей модели автомобиля бывают комплектации у которых такой переключатель есть штатно? Если бывает то смотреть как реализовано, если не бывает то никак.


          1. ugsm
            12.11.2016 22:12

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


        1. Andy_Big
          13.11.2016 00:40

          В электросхемы :)


        1. PendalFF
          13.11.2016 13:46

          Как вариант — никто не мешает откусывать подушке электрозапал при помощи надежного тумблера.
          Чтобы не взбесился блок контроля — тумблер взять переключашку на 2 позиции и на вторую привесить балласт, имитирующий айрбэг


        1. aivs
          13.11.2016 23:45

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


    1. kAIST
      12.11.2016 22:21

      Через can, насколько знаю, нет такой возможности.
      В vcds (спец программа для диагностики), по крайней мере такой возможности нет. Есть настройка «у нас есть/нет подушки безопасности», но какой эффект это даст, неизвестно.


  1. Desire88
    12.11.2016 11:53
    +7

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


    1. kamm
      12.11.2016 18:58

      Присоединясь. Круто.


  1. msatersam11
    12.11.2016 11:53

    средство передвижение

    передвижениЯ

    По тексту — довольно интересно, но слишком много «Я» для 6-ти пунктов, наиболее тяжкие из которых ( 1, 2 ), по сути, сделаны товарищами с приведённого в статье сайта ( lnxpps.de/rpie )


    1. aivs
      12.11.2016 12:21
      +2

      Ну по сути я только фотки и видео сделал, остальное уже было.


  1. JekaKey
    12.11.2016 12:13

    Друзья, а как 2551 работает с комфорт шиной? На комфорте же low speed fault tolerance без концевых резисторов и даже уровни сигнала там отличаются. Разве не должен использоваться трансивер типа tja1054?


    1. aivs
      12.11.2016 12:17

      Я подключен именно к шине комфорт, проблем нет.


    1. Gorynch
      13.11.2016 17:11

      На passat b6 (дизель) использовал 2551, работает нормально.
      А вот на mercedes a class завелось только с tja1054.


  1. lonelymyp
    12.11.2016 13:55

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

    В автомобилях марки рено (ну и естественно у Весты и Иксрея тоже, ибо это тоже рено, хоть и с шильдиком ваза) например достаточно простой формат, описание всех команд управления и последовательностей команд сделано в формате XML. всякие там мигания фарами и управление стёклами подробно расписаны.


    1. begemot_sun
      12.11.2016 19:43

      А есть ссылочка какая на это дело?


      1. lonelymyp
        12.11.2016 22:31

        для рено это pyren, если для других марок, то не знаю, надо у сообществ интересоваться.

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


  1. MaxAlekseev
    12.11.2016 14:12
    +1

    >>На Raspbian 2-x годичной давность мне потребовалось пропатчить bcm2708.c, чтобы добавить поддержку CAN (возможно сейчас это не требуется).

    Сейчас поддержка MCP2515 уже реализована в ядре Raspbian, по сути работает из коробки.


  1. j0ker13
    12.11.2016 14:47

    у меня тоже машина семейства ваг и куплена VCDS. там для каждого блока есть тест исполнителей. может оттуда можно взять команды. и плюс что подключается через обд-2


    1. aivs
      13.11.2016 23:49

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


  1. BurlakovSG
    12.11.2016 14:49

    Тоже самое на форуме делаем с Citroen C4, только у нас зоопарк CAN шин побольше.


    1. aivs
      12.11.2016 14:50

      Ссылочку на форум можно? интересно посмотреть


      1. BurlakovSG
        12.11.2016 15:21

        Можно. Вот тут обсуждают все наработки.


  1. FreeManOfPeace
    12.11.2016 14:49
    -9

    Один я предпочитаю по старинке пользоваться машинами только с ручной крутёлкой для открытия окон?


    1. Pakos
      14.11.2016 11:08

      Заодно после грунтовки и разных пассажиров смотреть что там открылось. Очень удобно, примерно как бензобак и капот с багажником открывать ключами, в идеале — разными.


  1. Dimano
    12.11.2016 15:27

    Очень здорово! А кнопки нажимаемые на магнитоле в шину поступают? У меня такая же Октавия 11 года и магнитола болеро без SD/USB входа. Для прослушивания mp3 я купил Yatour, но он проработав (с перебоями) 2 года умер. Если в шине появляются команды от магнитолы, то можно подключить к AUX китайскую плату проигрывающую mp3 и приделать по CAN шине управление.


    1. extempl
      12.11.2016 15:45

      Я вот тоже думал в машину влепить и большой экран с камерой заднего вида, но всё это было в основе своей из-за музыки. Музыка решилась девайсом "Xiaomi Roidmi 2S" который просто транслирует музыку с телефона на заданной частоте радио — теперь просто переключается нужная станция и музыка играет из колонок.
      Необходимость в танцах с бубном/ aux/ usb отпала (а так хотелось).


      1. Dimano
        12.11.2016 15:57

        FM трансмиттер это у меня пройденый этап. Главный минус ловит сигналы с других машин и помехи. Второй минус у октавии не выключается прикуриватель после глушения двигателя, т.е. трасмиттер ещё помоему 20 минут будет сажать аккум распевая пестни. И ещё минус, неудобство управления, промотать песню, поставить на паузу и т.д. удобнее с магнитолы (у меня нет управления на руле) а не тыкаясь в слепую в маленькую коробочку. Или я что-то не знаю про конкретно этот трансмиттер?


        1. extempl
          12.11.2016 16:36

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


          Данный трансмиттер если не подключён к телефону ничего распевать не будет, так что и сажать аккум не должен.


          Неудобство управления — это да, но громче/тише/mute работает и с магнитолы.


          тыкаясь в слепую в маленькую коробочку
          Btw, это вы про трансмиттер или про телефон? Трансмиттер не имеет никаких контролов, всё управление через медиа-проигрыватель на телефоне. Свайп сверху вниз (например активно приложение навигатора) -> там три кнопки — предыдущий трек, play/stop, следующий трек. Не очень удобно, но в принципе, юзабельно. На радио тоже не особенно треки попереключаешь :) Так что как альтернатива радиостанциям вполне годно.


        1. extempl
          12.11.2016 16:39

          Изначально засматривался на вот это схему: https://geektimes.ru/post/272210/


    1. stivan
      12.11.2016 18:14
      +1

      Поступают. Я делал вот так, когда ставил iPad mini в качестве головного устройства


      1. aivs
        12.11.2016 18:19

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


      1. ayurkevich
        15.11.2016 20:12

        спасибо тебе добрый человек!


    1. kAIST
      12.11.2016 20:04

      Я купил себе AUX bluetooth приемник с кнопками и прилепил к магнитоле. Теперь все медиа со смартфона. Очень удобно получилось.


  1. kgbplus
    12.11.2016 20:49

    Готовые шилды CAN-SPI на MCP2515 недорого продаются на ибее


  1. iDoka
    12.11.2016 20:56

    Обе шины связаны через шлюз, который находится в области под рулем, так же к шлюзу подключен диагностический OBD2 разъем, к сожаление через OBD2 разъем нельзя послушать трафик от обеих шин, можно только передать команду и запросить состояние. Я решил, что буду работать только с шиной «Комфорт»

    Я так понимаю, для реверс-инжиниринга посылок необходимо подключение к шине «Комфорт», а разве процитированный абзац не утверждает, что для последующей выдачи «известных» посылок достаточно подключения к шине диагностики (500К), благодаря наличию шлюза?
    Это так?


    1. aivs
      13.11.2016 23:52

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


  1. kababok
    12.11.2016 22:13

    Кстати (и грубо говоря), обычно по стандарту CAN чем меньше число в идентификаторе (ID) CAN-сообщения (телеграммы), тем более приоритетно это сообщение в сети.

    Поэтому чаще всего ID сообщений для управления двигателем, тормозами, ABS, подушками безопасности и пр. будут находиться в «первых двустах»: то есть ID находятся между 0х001 и 0х1FF (очень грубо).


    1. pdima
      13.11.2016 11:54

      Не просто обычно, в CAN на физическом уровне при коллизии двух пакетов всегда пройдет пакет с меньшим ID (бит 0 в CAN доминантный).


  1. 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 (демо и примеры реверс инжиниринга автоматического в конце слайдов)


    1. aivs
      13.11.2016 02:35

      Классный проект, изучу подробно.
      Давно уже хочу сделать компактный девайс в обд2 разъем для демонстрации хака тачки. Прикуплюка RPI zero.


    1. iGeophysix
      14.11.2016 14:22

      крутой проект! обязательно присоединюсь!


  1. iGeophysix
    13.11.2016 11:05

    Клево!
    Я долго тоже мучался с CAN шиной.
    Но мозгов тогда не хватило сделать полную систему.
    Я в Infiniti интегрировал Nexus 7, но условие было — полное сохранение штатных кнопок.
    У фиников климат управляется кнопками, а отображается на мониторе. Поэтому надо было где-то прочитать климат-инфу, а в той шине, где я искал — не было.
    Оказалось, что есть еще третья шина…
    но машину уже продал)

    Клево! давай еще!


  1. ayurkevich
    13.11.2016 17:51

    Спасибо за статью!
    У меня всегда было горячее желание заменить штатное радио (с тачскрином и навигатором) на айпад мини с сохранением функционала (управление музыкой, отображение картинки с задней камеры). Ищу варианты реализации.
    Машина правда не VAG, а Ниссан.


    1. aivs
      13.11.2016 17:52

      Я столкнулся с проблемой прослушивания радиостанций и забил.


  1. MaxSoft
    13.11.2016 20:46

    а что происходит с машиной, если, например, уложить шину? Например, выставив не правильную скорость


    1. iGeophysix
      14.11.2016 12:49

      на моем опыте такого не случилось.
      Шина достаточно устойчива к помехам


  1. alecv
    13.11.2016 22:19

    Интересно, а бывают автономные CAN-датчики? Например, датчики давления, температуры или там кнопки?
    Типа пойти на разборку, взять отдельно CAN-датчик и потестить. Теоретически, если есть шина — то она вероятно соединяет центральный компьютер с чем-то.


    1. MaxSoft
      13.11.2016 23:07

      ну, например, iDrive от бмв, сам джойстик. Чем-то соответствует автономному


      1. alecv
        14.11.2016 12:17

        Спасибо, поглядел. Да, действительно, CAN-джойстик.


  1. 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?


    1. aivs
      14.11.2016 22:27
      +1

      Эту плату конечно можно по UART подключить к Raspberry pi, но спаять свою и именно под Raspberry в виде шилда гораздо интереснее.


  1. Sokol666
    14.11.2016 15:50

    То есть, если несанкционированно подкрутить ту-же малину к CAN шине можно вполне себе приспокойно едущий автомобиль заставить заблокировать двери, закрыть окна, открыть заслонки воздушные на побольше, вырубить подушки, включить например Highway to Hell погромче и весело прибавив газу заставить авто срулить вниз с ближайшего моста. А если учесть, что авто у нас тоже нутром своим в облака стремятся то могут и дыру найти, чтоб без малины. Вот это уже страшно, это не зараженными лампочками в квартирах мигать.


    1. aivs
      14.11.2016 15:55

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


  1. Saffron
    14.11.2016 20:16
    +1

    Как вообще может придти в голову управление автомобилем (голосовое) ставить в зависимость от интернета, от сервиса третьих лиц, которые могут заглючить как специально, так и случайно? Только проверенные оффлайн решения!


    1. aivs
      14.11.2016 20:31

      Android auto и Apple carplay не для вас это понятно, ссылки на офлайн решения в студию!


      1. Saffron
        14.11.2016 23:32

        Сносно работающих оффлайн решений распознавания голоса нет — и это удручает. Видимо, трудности монетизации.


        1. aivs
          14.11.2016 23:39

          Это трудности мощностей, для работы сири работает не один датацентр, на одном компьютере достичь сопостовимой скорости и точности распознавания не возможно.


          1. Saffron
            15.11.2016 01:52

            вот не думаю, что для каждого клиента работает по датацентру. Скорее всего этот датацентр обслуживает миллионы клиентов, и если поделить количество компьютеров в датацентре на количество пользователей siri, то окажется, что производительности одного компьютера достаточно.