Как я попробовал Balena Cloud

Balena Cloud

Всем привет!

Сегодня речь пойдет о сервисе для управления IoT-устройствами под названием Balena Cloud. Многим видимо покажется знакомым название Balena так как существует очень популярная утилита для подготовки загрузочных флешек под названием balenaEtcher.
Этой программой я и сам пользуюсь уже давно.

Причем тут IoT - спросите вы и будете правы. Это все дело случая.

Предыстория

Понадобилось мне позавчера подготовить загрузочную флешку со свежей версией Lubuntu. Ожидая окончания процесса загрузки я заинтересовался рекламой которая в этот момент крутилась в окне balenaEtcher.
Там было описание штуки под названием balenaSound которая может превратить Raspberry PI в Bluetooth-адаптер для старых аудиосистем которые поддерживают только AUX.

Мне стало интересно и я кликнул по рекламе (да, такое тоже бывает =)). В открывшейся статье предлагалось залить на малинку balenaOS. Это минималистичная ОС которая умеет запускать docker-контейнеры и коннектиться к облаку Balena для получения команд из панели управления.

Вообще это конечно оверкилл - использовать полноценный компьютер с ОС на борту и запущенными на нем docker-контейнерами только для получения звука по Bluetooth и передачи его через аналоговый mini-jack.

Но у меня уже несколько месяцев лежал без дела Raspberry PI 3B+. Поэтому я решил попробовать.

Ключ на старт

  1. Регаемся на balena-cloud.com. На бесплатном тарифе можно подключать до 10 устройств.

  2. Кликаем по Add Device. Выбираем там ваше устройство, версию прошивки и вариант его подключения к интернету - Ethernet или WiFi (потребуется указать реквизиты доступа).

  3. Скачиваем прошивку и прошиваем ее на microSD при помощи balenaEtcher

  4. Вставляем карту в малинку, включаем ее и надеемся что в скором времени она появится на дашборде в Balena Cloud.

Balena Cloud dashboard Raspberry PI

  1. Если все ок то жмем Add release и выбираем один из вариантов отправки проекта на устройство - через Balena CLI или при помощи git.
    Мне ставить какой-то дополнительный софт не хотелось, поэтому я выбрал git и добавил свой публичный ключ в появившемся модальном окне.
    Также важный момент - на этом этапе нам предлагается скопировать команды для git.
    Там указан адрес remote-репозитория на который необходимо будет запушить проект.
    Будет что-то вида balena100500@git.balena-cloud.com:balena100500/example.git

  2. Теперь нужно выбрать проект который мы хотим задеплоить на устройстве.
    Я склонировал https://github.com/balena-io-projects/balena-sound, добавил туда remote-репозиторий из предыдущего шага и сделал пуш

1
2
3
4
git clone https://github.com/balena-io-projects/balena-sound
cd balena-sound
git remote add balena balena100@git.balena-cloud.com:balena100/example.git
git push balena master

После того как пуш-прошел в консоли весело забегали строчки отображающие процесс сборки докер-контейнеров проекта.

Balena Cloud git push complete

В конце я увидел ASCII-единорога и отправился в дашборд смотреть как там поживает малинка. Устройство было в статусе uploading и отображало статус-бар загрузки.
Через пару минут оно перешло в статус online.

Вот на этом моменте я взял в руки телефон и подключился с него к малинке по Bluetooth. Название устройства было вида balenaSound 1234.
К малинке подключил наушники и на телефоне включил первый подвернувшийся подкаст. Звук пошел =)

Удивительно, но все завелось без танцев с бубном и костылей.

Также появилась возможность управлять докер-контейнерами на устройстве и подключаться к нему через терминал прямо из панели управления.

Balena Cloud dashboard

Скорость загрузки

На этом этапе я решил отключить Raspberry PI, затем включить снова и замерить время через которое телефон подключится к устройству по Bluetooth.
Оказалось что это долго - целых полторы минуты!

В проекте по дефолту используется аж 3 докер контейнера - один для bluetooth-аудио, один для airplay и еще один для spotify. От последних двух было решено отказаться.
Я форкнул репозиторий на гитхабе, убрал из конфига лишние контейнеры и отправил пропатченый проект на малинку. В итоге время холодного старта уменьшилось до приемлемых 30 секунд.

Выводы

Я давно хотел попробовать что-то связанное с IoT, да все руки не доходили. А тут совершенно случайно попробовал и мне даже понравилось. Правда пока не знаю что можно более интересное на малинке запустить, но главное что разобрался с тем как это делается.

Раньше эта малинка трудилась в офисе будучи подключенной к старому музыкальному центру. На ней был установлен Raspbian и для того чтобы переключить песню необходимо было зайти на нее по VNC. Это было не очень удобно.
Затем я попробовал вариант с плеером Mopidy который имеет свой веб-интерфейс. Но в итоге оказалось что это еще более неудобно. Потому пользовались первым вариантом.

Если бы тогда я знал что можно потратить 10 минут и поднять такую удобную штуку в докер-контейнере то я выбрал бы этот вариант.

P.S. Теперь еще осталось куда-то Arduino Nano с кучей датчиков пристроить =)