Управление розеткой Redmond SkyPort 103S через Raspberry Pi

Дррузья, автоматизация моего дома продолжается и сегодня я бы хотел поделиться с вами о том, как управлять Bluetooth розеткой SkyPort 103S от Redmond через Raspberry Pi. Все дело в том, что для того, чтобы управлять данной розеткой голосом через Алису в доме нужно иметь постоянно находящийся смартфон или планшет с приложением Ready for Sky и включённым Bluetooth. Затем, в приложении от Яндекса на вашем гаджете, вы объединяете аккаунт с вашим аккаунтом Ready For Sky и розетка 103S начинает управляться голосом. Выделять отдельный смартфон или планшет с постоянно включённым интернетом и Bluetooth для одной розетки у меня не было желания, тем более, что всеми устройствами умного дома я управляю через Raspberry Pi с веб-сервером и “веб-хуками” сервиса “Домовенок Кузя”.

Что вам понадобится:

Шаг 1 : Установка Arduino IDE и необходимых библиотек

Скачиваем Arduino IDE отсюда.

Открываем Arduino IDE и идём в раздел File  Preferences и в поле Additional Boards Manager URLs вставляем ссылку https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json

Это нужно для того, чтобы на следующем этапе установить библиотеку поддержки чипа nRF51822 компании Nordic Semiconductor. Далее, идем в Tools – Board – Boards Manager и находим библиотеку Nordic Semiconductor nRF5 Boards написанную Sandeep Mistry. Устанавливаем последнюю версию данной библиотеки.

Затем нужно создать следующую папку:

~/Arduino/tools/nRF5FlashSoftDevice/tool/

и скопировать туда файл nRF5FlashSoftDevice.jar. Файл можно скачать отсюда.

Это нужно для того, чтобы прошить SoftDevice, что является стеком беспроводных протоколов, который дополняет систему на кристалле серии nRF5 (SoC). Nordic Semiconductor предоставляет их в виде предварительно скомпилированных бинарных файлов.

SoftDevice содержит стек BLE и служебные программы, и их необходимо загрузить один раз, прежде чем можно будет загрузить скетч, использующий BLE.

Также, нужно чтобы папка вашего будущего скетча также находилась в папке ~/Arduino/

Устанавливаем необходимые библиотеки в Ubuntu:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 libstdc++6:i386 libncurses5:i386 libudev1:i386

Перегружаем Arduino IDE и создаем следущий скетч:

#include <SPI.h>
#include <BLEPeripheral.h>

#define LED_PIN 3

BLEPeripheral blePeripheral = BLEPeripheral();

BLEService ledService = BLEService("0000180a00001000800000805f9b34fb");
BLECharCharacteristic switchCharacteristic = BLECharCharacteristic("00002a2900001000800000805f9b34fb", BLERead | BLEWrite);

void setup() {
pinMode(LED_PIN, OUTPUT);

blePeripheral.setLocalName("LED");
blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

blePeripheral.addAttribute(ledService);
blePeripheral.addAttribute(switchCharacteristic);

blePeripheral.begin();
}

void loop() {
BLECentral central = blePeripheral.central();

if (central) {
while (central.connected()) {
if (switchCharacteristic.written()) {
if (switchCharacteristic.value()) {
digitalWrite(LED_PIN, HIGH);
}
else {
digitalWrite(LED_PIN, LOW);
}
}
}

}
}

Сохраняем скетч.

После этого на данном этапе идём в Tools – Board – Nordic Semiconductor nRF5 Boards и выбираем Generic nRF51.

В Tools – Chip выбираем 16 kB RAM, 256 kB flash

В Tools – Softdevice выбираем S110

В Tools – Low Frequency Clock выбираем RC Oscillator

В Tools – Port выбирать не нужно, т,к. мы будем прошивать через интерфейс SWD, а он не предусматривает создание виртуального порта.

В Tools — Programmer выбираем ST-Link V2

Шаг 2 : Подключение программатора к розетке

С программатором уже будет идти шлейф из четырёх проводов с разъёмами для подключения “Мама х Мама”. Один конец я подключил к программатору согласно цветам: Оранжевый – 3.3V, Жёлтый – SWCLK, Зелёный – GND, Синий – SWDIO.

Разбираем розетку. Разбирается достаточно просто — откручиваем два шурупа с потайной шестигранной головкой. На плате розетки будут аналогичные 4-е входа. Слева – направо:

3.3V — Оранжевый провод

SWDIO — Синий

SWCLK — Жёлтый

GND — Зелёный

На ответном конце шлейфа я использовал дополнительные провода в коннекторами «Папа х Папа», одни концы подсоединил к шлейфу, а другие просто временно припаял к плате розетки на соответствующие цветам выходы.

Теперь нам нужно прошить SoftDevice. Это делается только один раз. Вставляем программатор в USB порт и открываем Arduino IDE.

Заходим в Tools и нажимаем на nRF5 Flash SoftDevice. Появится окно, где нужно нажать кнопку Accept. Все, SoftDevice прошит.

Теперь можно заливать cкетч. Нажимаем Upload и Arduino IDE прошьёт чип nRF51822. После этого можно извлекать программатор из USB-порта, отпаивать 4-е провода и собирать розетку обратно. После сборки Bluetooth розетки вставьте в неё вилку с настольной лампой для теста. Саму Bluetooth розетку подключите в обычную розетку.

Шаг 3 : Включение розетки через терминал

Заходим на Raspberry Pi через SSH. Набираем команду:

bluetoothctl

Далее набираем команду

scan on

Находим MAC-адрес устройства с именем LED и копируем его в буфер.

Пробуем подсоединиться к розетке

connect XX:XX:XX:XX:XX:XX

где XX:XX:XX:XX:XX:XX ваш MAC-адрес розетки.

Если соединение произойдёт успешно, вы увидите сообщение

Device XX:XX:XX:XX:XX:XX Connected: yes
Connection successful

Далее вводим scan off и потом exit, чтобы выйти из bluetoothctl.

Находим Handler нашей характеристики 00002a2900001000800000805f9b34fb.

Вводим команду:

gatttool -t random --device= XX:XX:XX:XX:XX:XX --characteristics

И видим что-то подобное

char value handle = 0x000b, uuid = 00002a29-0000-1000-8000-00805f9b34fb

0x000b – это и есть Handler данной характеристики.

А теперь пробуем включить нашу розетку следующей командой:

sudo gatttool -t random -i hci0 -b XX:XX:XX:XX:XX:XX --char-write-req -a 0x000b -n 01

Где hci0 – имя Bluetooth адаптера Raspberry Pi
XX:XX:XX:XX:XX:XX – MAC адрес розетки
0x000b – Handler характеристики (у вас будет свой)
01 – записываемое значение байта в данную характеристику

Соответственно команда на выключение будет следующей:

sudo gatttool -t random -i hci0 -b XX:XX:XX:XX:XX:XX --char-write-req -a 0x000b -n 00

P/S

Друзья, на этом все, теперь данной розеткой можно управлять через Raspberry Pi, но недостаток данного способа в том, что пока Sandeep Mistry не нашёл способа как соединяться по Bluetooth используя passkey (т.е. пароль), поэтому, любой на расстоянии 10 метров от розетки сможет включать её используя соответствущее оборудование. Думаю, как «прикрутить» терминальные команды управления розеткой через веб-сервер и «веб-хуки» к Алисе у вас не составит труда. Если у вас есть предложения о том, как создать подключение к розетке с паролем, напишите в комментариях.

С наступающим вас всех Новым годом! Всех вам благ и только удачи в новом году!

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

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

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

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