Front-end developer
0,0
рейтинг
13 ноября 2013 в 19:35

Разработка → Система наблюдения в автомобиле за ним же на Raspberry Pi. Часть 1 из песочницы

Введение


Добрый день.
Однажды я приобрёл Raspberry Pi без каких-то на то целей — как только начались упоминания о нём на хабре. Начал бесцельно запускать фтп-сервера, пробовать Node.js и прочие мелкие серверные дела, пока не приобрёл новый автомобиль. Конечно, заниматься тем, что можно найти на просторах интернета вроде дистанционного открытия гаража я не стал — в силу нормального не знания системы Linux и серверных языков программирования. Автомобиль стал мне дорог и возникла идея — поставить малинку в автомобиль с прикрученными к ней USB девайсами: GPS, Web-камера, 3G-модем — для чего и был куплен 2-ой Raspberry.
В этой статье я опишу подготовку: установку Node.JS, настройку OpenVPN и 3G.

Планы

Необходимо чтобы в машине была установлена Малина с подключёнными к ней GPS и веб-камерой и чтобы в любой момент я мог даже с мобильного телефона посмотреть что творится с моей машиной.

Итак, приступим


Установка Node.JS

Устанавливаем Node.JS с сайта, так как в репозитории лежит версия 0.6.18.
sudo mkdir /opt/node
wget nodejs.org/dist/latest/node-v0.10.20-linux-arm-pi.tar.gz
tar xvzf node-v0.10.20-linux-arm-pi.tar.gz
sudo cp -r node-v0.10.20-linux-arm-pi/* /opt/node

Теперь добавим путь к Node.JS в переменные окружения, чтобы не приходилось прописывать длинный путь. Для этого отредактируем файл:
sudo nano/etc/profile
вставвил строчки:
NODE_JS_HOME="/opt/node"
PATH="$PATH:$NODE_JS_HOME/bin"

В итоге head этого файла будет выглдяеть вот так:
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games"
fi
NODE_JS_HOME="/opt/node"
PATH="$PATH:$NODE_JS_HOME/bin"
export PATH

Нам потребуется устанавливать некоторые модули глобально (напр. npm install -g express), поэтому сделаем нашего пользователя владельцем каталога ноды:
sudo chown -R pi /opt/node

Проверяем:


Для написания кода в дальнейшем создадим папку:


По правилам поиска модулей сделаем симлинк глобальной директории модулей в home директорию, подробнее об этом можно почитать тут: nodejs.ru/doc/v0.4.x/modules.html#_u0417_u0430_u0433_u0440_u0443_u0437_u043A_u0430_u0438_u0437_u043F_u0430_u043F_u043E_u043A_node_modules_)
ln -s /opt/node/lib/node_modules ~/node_modules



Настройка OpenVPN

Так как нету возможности подключаться по SSH или хоть как-то получить связь с Малинкой через ОпСоСа кроме оплаты услуги за внешний IP, настроим OpenVPN.

Подготовка


  • есть роутер со статическим внешним IP-адресом
  • одна Малинка подключена к роутера через Ethernet
  • есть 2 Малина, которая будет в далеке и доступна только через 3G


Для этого будем выдавать для Малины, подключённой к роутеру физический IP-адрес:


Переадресуем запросы OpenVPN к роутеру извне нашей «домашней» Малине, а за одно и SSH и HTTP:
На домашний Raspberry установим Node.JS так же как это было сделано ранее.

Установка

sudo apt-get install openvpn -y

Про генерацию и настройку уже много написано как на хабре, так и вне. Я воспользовался следующими статьями: habrahabr.ru/post/188474, adw0rd.com/2013/01/10/openvpn/#.UmTuCBCpFZQ, www.volmed.org.ru/wiki/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_OpenVPN_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0.

Приведу каты своих настроек.


Для клиента в поле remote указан мой внешний статический адрес на роутере.

Настройка 3G

Подготовка

Для доступа к 3G я купил 3G-модем Huawei E1550 от Мегафон, с её же сим-картой.

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


Для переключения его в режим модема необходимо установить программу и перезагрузиться.
sudo apt-get update && sudo apt-get install usb-modeswitch -y
sudo reboot


Посмотрим наши устройства:


Собственно настройка подключения

Создадим директорию:
$ mkdir ~/3g && cd ~/3g

Скачаем программу настройки 3G подключения:
wget http://sourceforge.net/projects/vim-n4n0/files/sakis3g.tar.gz/download
tar -xzvf sakis3g.tar.gz

Скачаем программу надстройки на UMTSKeeper (это надстройка над sakis3g и написана она вроде тем же автором=) )
Лежать UMTSKeeper должна в той же директории что и sakis3G
$ wget http://zool33.uni-graz.at/petz/umtskeeper/src/umtskeeper.tar.gz
$ tar -xzvf umtskeeper.tar.gz

Доустановим поддержку PPP
sudo apt-get install ppp -y

Теперь попробуем наладить 3G связь:
sudo /.sakis3g --interactive

В первой опции выбираем
Connect with 3G
, а во второй 11-ый пнукт —
Custom APN
.
Для мегафона настройки следующие:
  • APN: internet
  • APN_USER: megafon
  • APN_PASS: megafon

Если всё будет верно, то программа выдаст сообщение об успешной подключении.

Для того, чтобы при разрыве связи восстанавливалось подключение у нас уже лежит UMTSKeeper.
sudo /home/pi/3g/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1001' APN='CUSTOM_APN' CUSTOM_APN='internet' APN_USER='megafon' APN_PASS='megafon'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no' &

Вместо значения 12d1:1001' необходимо указать свой номер девайса из lsusb.

Теперь посмотрим журнал:


Всё работает, отлично!
Теперь пропишем эту команду в автозагрузку:
crontab -e



Заключение


В итоге у нас такая ситуация:
Есть роутер с внешним статическим IP-адресом, к которому подключён «домашний» Raspberry Pi и выступающий в роли OpenVPN сервера (и http в будущем) и «автомобильный» Raspberry Pi, который при помощи 3G модема подключается к «домашнему» OpenVPN.

Немного картинок для разнообразия:




P.S.

Я большую часть времени занимаюсь front-end'ом, поэтому серверная часть где-то может быть не идеальной.
При положительных отзывах — в следующей статье напишу о подключении и настройке GPS-приёмника и Web-камеры через USB-хаб.
Михаил @jaybekster
карма
12,0
рейтинг 0,0
Front-end developer
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

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

  • 0
    Сам потихоньку работаю над авто-компьютером на малине, но меня куда больше смущает вопрос энергопотребления… Тыкать его просто в усб зарядку в прикуривателе — при гашении машины он будут отключаться по питанию, файловая система рано или поздно посыплется. Да и в вашем применении смысла нет, если оно выключено когда машина не заведена. Включать напрямую к аккумулятору… сама малина жрет до 500мА, плюс юсбхаб, плюс 3г брелок, плюс камера — там как минимум в районе 1А выйдет суммарно. При среднем автомобильном аккумуляторе в 40-80А*Ч — это двое-трое суток до того, как малина высадит аккум и машина перестанет заводиться…
    Или я где-то не прав?
    • +2
      Еще один минус — автомобильный аккумулятор предназначен для старта двигателя, и не рассчитан на глубокий разряд малым током.
      • +1
        Прошу прощения, хотел плюсануть и промазал (на планшете)
    • +1
      Пожирание бортового аккума — извечная проблема. Даже обычная сига может убить его в усмерть, в зависимости от прожорливости. И возраст аккума тоже влияет на скорость разряда.

      Есть много интересных схем с резервным аккумулятором для периферии и простой автоматикой для поздарядки при заведенном двигателе. Такой вариант лучше — сдохнет и сдохнет, зато машина заведется. Но и там есть детская болезнь — нужны ключи на пороговые значения, так как на дохлом аккуме устройства будут «прыгать» — включаться-выключаться при пониженном питании. Включилось устройство — напряжение просело, отключилось — оно выравнивается, и так по кругу — зрелище плачевное…
      • +2
        А если взять в качестве источника питания PowerBank какой-нибудь? Там есть аккумуляторы на 12 А*Ч — хватит на то время, когда машина стоит на стоянке. А сам PowerBank можно запитать от прикуривателя — будет подзаряжаться, когда машина будет заведена. 12 часов это конечно не много, но кому-то этого может быть вполне достаточно
        • 0
          Вполне рабочий вариант, но от прикуривателя тоже не совсем правильно — потому что на морозе при запуске двигателя порой приходится выключат все приборы, чтобы оставить максимум аккума для старта. Тут либо реле времени — например, через минуту после включения зажигания, либо отдельный выключатель. Хотя проще будет просто подключиться к «фарам» — сейчас ездить с ними нужно обязательно, а при старте двигателя они выключены.
        • 0
          PowerBank придётся делать самому, на LiFePo — т.к. обычные литиевые аккумуляторы в промёрзшей машине тока не дадут.
    • 0
      Меньше. У меня за 2-3 суток аккум сажает магнитола. Это если я забуду вытащить панель. Панель при этом тянет 200-300 мА, а аккум у меня 55А*Ч. В общем, через это время аккум хоть и не в «0», но стартер уже не крутит.
    • 0
      Немного не правы. У вас напряжения разные. Аккумулятор выдает 40-80А*Ч при 12В, а у малины 5В, протянет немного дольше.
  • 0
    А что у Вас за роутер? На него ОпенВПН не поставить?
    • 0
      ASUS RT-N66U, можно.
      Когда я начал настраивать, то у меня был роутер ASUS WL-500g — на него нельзя.
      • 0
        Мдя. Приехали. Это почему интересно нельзя? С родной прошивкой может и нет, а с кастомными или с xxx-WRT без проблем. Это жеж культовый маршрутизатор, на котором, если добавить внешнюю флешку, можно поднять медленный в плане ресурсов, но в плане софта практически полноценный линуксовый сервак.
        Вторая малинка вообще лишняя сущность.
        Плюс я бы сделал так:
        1. Удаленная малинка цепляется клиентом в режиме tap в домашнюю локалку.
        2. Назначаем ей статический адрес из домашней сети.
        3. Со всех домашних компов и прочих устройств имеем к ней полный доступ
        4. На маршрутизаторе пробрасываем на внешнюю малинку только нужные порты.
        Собственно я так и планирую сделать в своем варианте умного дома.
        Плюс. Малинка это не самый хороший вариант в машину в плане энергопотребления. Тот же BBB жрет меньше и имеет несколько вариантов перехода в режим пониженного потребления.
        • 0
          Можете подробнее, что за BBB?
          • 0
            BeagleBone Black. Там и проц шустрее и armv7, и нормальная м/с управления питанием, подключенная к i2c. Плюс на ней можно потушить виртуальный cape, который обеспечивает работу hdmi и еще чуток снизить потребление.
  • 0
    Достаточно интересно и в качестве манула статья будет ценной. Жду продолжения.
  • 0
    Интересноя, а веб-камера какая? Raspberry Pi Camera, для которой доступно аппаратное кодирование видео, или обычная в USB?
    • 0
      Старая вебка, помоему Genius.
  • 0
    Интересно, но для чего это нужно в машине? Где-нибудь на даче или в гараже я б понял еще. В машину проще карманный gps трекер кинуть, который неделями работает от аккума, и периодически просыпается.
    • 0
      У него нет камеры.
    • 0
      Угонщики, наверно, сначала приглядываются к автомобилю. Могут подойти, случайно задеть, узнать, что за сигнализация, как работает. Могут и свой трекер прицепить, чтобы знать когда легче угнать. Возможно, это устройство поможет установить момент проявления активного интереса.
  • 0
    Я так понимаю, система задумывается как охранная.Несколько вопросов.
    1. Система будет смонтирована скрытно?
    2. Куда будет направлена камера?
    3. Можно ли добавить обратную связь, например заблокировать двигатель по команде?
    Можем перенести обсуждение в личку.
    • 0
      1. Да, под капотом или в багажнике.
      2. Пока в раздумье — например в салоне под задним стеклом, направленная вперед.
      3. Можно, но пока GPIO я не увлекался.
  • +1
    Вот так бывает — сидишь придумываешь проект, а потом заходишь на хабр и видишь статью про тоже самое) Только я думал машину не далеко от дома ставить и «протянуть» туда wifi с дома + добавить всяких отпугивающих вещей.
    В общем всегда интересно посмотреть как изобретают «параллельный» велосипед, спасибо!
    По поводу питания — пришел к выводу что самый оптимальный вариант это дополнительный аккумулятор от бесперебойника, так как литий ставить откровенно боязно.
    • 0
      Напрасно боитесь. Некоторая «взрывоопасность» лития (если боитесь вы ее) имеет место быть, но ее последствия молвой сильно преувеличены. Если вся система стоит в багажнике, да еще герметично закрыта в какой-нибудь банке из под кофе — опасаться особо нечего. А по терпимости к холодам, нестабильному заряду и по соотношению цена/качество модельный литий дюже хорош. Единственно что — возникают некоторые вопросы к процедуре боевой зарядки, но они тоже решаемы.
      • 0
        Возможно я сильно впечатлительный но, вот такой эфект в багажнике да еще и над топливным баком не очень хочется получить. А если еще учесть что этот самый багажник может деформироваться в случае ДТП и повредить литий с последующим возгоранием то мой выбор это аккумулятор от бесперебойника.
        • 0
          Между тем, Tesla ездит с полтонной литиевых батарей и считается одним из самых безопасных автомобилей. Бензобака нет, но будь все так плохо — и без него была бы знатная печка.

          Из личного опыта — годами общаемся с большим количеством всяческого лития и ниразу не видели схожих эффектов. Были разрывы при попытке заряда (по глупости) поврежденных батарей, но без таких красивых визуальных эффектов. Банки из под кофе вполне достаточно для защиты от последствий.
  • 0
    Меня одного слово «малинка» раздражает?
    • 0
      Жанна Фриске даже посвятила песню Raspberry Pi. Вот что значит маркетинг )

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