Заводим машину голосом с помощью Алексы на 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! :)

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

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

Дайте свою оценку данной инструкции


Поделитесь этой инструкцией со своими друзьями

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

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