Заводим машину голосом с помощью Алексы на Raspberry Pi

Друзья, автоматизация с помощью Алексы продолжается и недавно я подумал, а почему бы не дать возможность Алексе голосом заводить мою машину. Все дело в том, что машина располагается на стоянке вдалеке от дома и мой брелок на 868МГц просто не в состоянии завести её с такого расстояния через преграду близлежащих домов. Единственный способ завести машину удалённо возможен с помощью мобильного телефона. Я звоню на сигнализацию, она “поднимает трубку”, затем в тональном режиме я ввожу код запуска двигателя и двигатель запускается удалённо. Ездить мне приходится по нескольку раз в день, а поэтому и заводить машину приходится по нескольку раз заранее на прогрев, т.к. я живу в холодном регионе нашей необъятной страны. Данный пример будет рассматриваться для охранной системы Pandora 5000NEW, но по аналогии вы сможете это сделать для любой другой автомобильной сигнализации с поддержкой GSM.

Вам понадобится

Шаг 1 : Подключение модуля SIM800L

Отключаем питание от RPi и подключаем SIM800L согласно схеме:

Только не запитывайте SIM800L от выхода 5В на RPi. При установке соединения с сотовой вышкой GSM-модуль потребляет ток намного превосходящий тот, который вы можете безопасно брать с RPi.

GSM-модуль SIM800L v2.02

GSM-модуль SIM800L v2.02

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

Для установки антенны, делаем отверстие 6.5мм в любом удобном месте вашего корпуса RPi и устанавливаем антенну.

Подаём питание на RPi (предварительно соединив с LAN кабелем) и заходим на нее через SSH:

ssh pi@192.168.0.XXX

Далее, нам нужно зайти в Rasbian Config и включить поддержку UART (универсального асинхронного приемопередатчика). В терминале набираем:

sudo raspi-config

Идем в раздел 5 — Interfacing Options

и заходим в раздел 6 — Serial

Would you like a login shell to be accessible over serial? — Ставим No

Would you like the serial port hardware to be enabled? — Ставим Yes

Далее, заходим в файл config.txt:

sudo nano /boot/config.txt

И вставляем в разделе [all]

enable_uart=1

Сохраняем файл и перезагружаем RPi:

sudo reboot

Шаг 2 : Проверка SIM800L и прописывание номера сим-карты в сигнализации

Чтобы проверить работоспособность SIM800L нужно установить программу minicom:

sudo apt install minicom

Т.к. у нас RPi с архитектурой ARM, то путь к последовательному порту будет /dev/ttyAMA0

Запускаем mincom:

minicom -s

Идём в раздел Serial port setup, затем нажимаем клавишу A (что соответствует Serial Device) и вписываем путь к последовательному порту /dev/ttyAMA0. Жмём Enter.

Затем, нажимаем клавишу E, попадаем в меню Comm Parameters. Далее, жмём клавишу С (что соответствует скорости 9600), затем нажимаем клавишу Q (что соответствует 8-N-1). 8-N-1 — это сокращённая запись для настройки или конфигурации параметров последовательного порта в асинхронном режиме, в котором есть один стартовый бит, восемь (8) битов данных, нет (N) бита чётности и один (1) стоп бит.

Жмем Enter. Также в меню последовательного порта выбираем разделы F (Hardware Flow Control) и G (Software Flow Control) и для обоих ставим No.

Выходим в главное меню и сохраняем настройки, выбрав Save setup as dfl. Далее, жмём Exit и оказываемся в главном терминальном окне программы minicom.

Пробуем опросить GSM-модуль. Для начала набора команд нужно нажать CTRL+A, а потом клавишу E.

Набираем команду AT нажав Enter. Если GSM-модуль доступен, то после нажатия Enter вы увидите – OK. Это значит, что GSM-модуль мы подключили правильно и он откликается на команды.

Далее, попробуем сделать тестовый звонок на свой мобильный телефон. В этом же окне набираем ATD+7XXXXXXXXXX; (где 7XXXXXXXXXX номер вашего мобильника) и жмём Enter. Если все нормально, то GSM-модуль позвонит Вам, и вы услышите звонок. На звонок не отвечайте, т.к. вы все равно ничего не услышите (у SIM800L нет поддержки микрофона и динамика в принципе). Звонок сбросьте либо на телефоне, либо через minicom, набрав команду ATH, и нажав Enter. Чтобы выйти из minicom, нажимаем сначала CTRL+A, а затем клавишу X.

Далее, берём ноутбук и ставим на него программу Pandora Alarm Studio последней версии. Подключиться к сигнализации можно через USB-кабель либо через беспроводной модуль RPM-03. Т.к. блок охранной сигнализации у меня был надёжно спрятан внутри машины, то единственным интерфейсом подключения без сторонней помощи у меня был беспроводной модуль RMP-03 на 2.4 гигагерц. Вставляем модуль в USB-порт ноутбука. Открываем программу Pandora Alarm Studio. На брелоке сигнализации зажимаем кнопку открытия дверей совместно с кнопкой F и держим три секунды. Так мы войдём в режим программирования. В самой программе нажимаем на значок радио сигнала в правом верхнем углу и нажимаем поиск нового устройства.

Когда произойдёт соединение, выбираем марку нашего автомобиля и идём в расширенные устройства.

В настройках Pandora Alarm Studio нам нужно зайти в раздел VI.GSM / 6.1 Настройки телефонных номеров / 6.1.2 Дополнительный номер владельца. Также нужно ввести гостевой ПИН-код в разделе 6.1.4.

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

Шаг 3 : Программа дозвона на Python и привязка к Алексе

Заходим на RPi и создаём файл power_train_on.py:

sudo nano power_train_on.py

В него вставляем следующий код:

import serial
import RPi.GPIO as GPIO
import os, time

GPIO.setmode(GPIO.BOARD)

port = serial.Serial("/dev/ttyAMA0", baudrate=9600, timeout=1) # Устанавливаем связь с GSM-модулем через последовательный порт

port.write(str.encode('AT\r\n')) # Проверяем связь с GSM-модулем
time.sleep(0.1)

port.write(str.encode('ATE0\r\n')) # Отключаем эхо от GSM-модуля
time.sleep(0.1)

port.write(str.encode('ATD+7XXXXXXXXXX;\r\n')) # Звоним на охранную сигнализацию, где 7XXXXXXXXXX; - номер ее сим-карты.
time.sleep(12)

port.write(str.encode('AT+VTS="1,1,1,1,#,1,2,3,*"\r\n')) # В тональном режиме вводим гостевой ПИН-код и код запуска двигателя
time.sleep(6)

port.write(str.encode('AT+CHUP\r\n')) # Вешаем трубку
time.sleep(1)

Сохраняем файл.

Далее, в веб-папке нашего сервера Apache на RPi создаем файл power_train.php и вставляем в него следующий код:

<?
if (isset($_POST['code'])) $code = $_POST['code']; else $code = "";

$code_power_train_on = "ViLmwBE4";
$cmd_power_train_on = "/usr/bin/python3 /home/pi/power_train_on.py'";
if ($code == $code_power_train_on) exec($cmd_power_train_on);
?>

Примечание: В данном примере структура сравнения кодов показана в упрощённом варианте для наглядности. В реальности, все мои коды в виде hash-значений сложены в базу данных для большей безопасности. Также файл на веб-сервере должен быть доступен через интернет. Чтобы это сделать нужно иметь фиксированный IP-адрес роутера дома, а также сделать проброс портов от роутера до RPi.

Далее, соединяем этот файл с Алексой через сервис IFTTT. Чтобы не повторяться, об этом можно прочитать в моей инструкции “Я есть универсальный ИК-пульт с голосовым управлением Алексой…

Теперь за несколько минут до выхода из дома мне достаточно сказать: “Alexa, trigger engine on…” и двигатель заведётся!

Profit! :)

Понравилась инструкция? Тогда поделитесь ей со своими друзьями или попробуйте написать свою собственную!

Регистрация на сайте

Оставьте свой отзыв

Вы должны Войти, чтобы оставлять отзывы.