...

среда, 13 ноября 2013 г.

[Из песочницы] Система наблюдения в автомобиле за ним же на 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-хаб.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий