YAM и BetterYAM: плагины и Web UI¶
YAM (Y Application Manager) — менеджер пакетов .yap
с веб-панелью для колонки. На колонке работает демон yamd. Он ставит пакеты, запускает
Lua-скрипты и бинарники и даёт им доступ к железу: подсветке, громкости, датчикам, кнопкам,
часам и IPC Алисы. На компьютере — CLI yam, который ходит в API демона по сети.
BetterYAM — форк YAM с отдельным демоном под каждую модель. Поддерживаются Станция Мини (1-го поколения), Станция Лайт и Станция Мини 3 — чем он отличается.
Проверено на: Станция Лайт (yandexmicro) и Станция Мини 2 с YAM 0.1.19,
Станция Мини (1-го поколения) с BetterYAM 0.1.22, октябрь 2026. Оба проекта сторонние и
быстро меняются. Если что-то разошлось, смотрите docs/ в их репозиториях.
YAM переписан: следующая версия несовместима с тем, что ниже
Релиз 0.1.19 от 27 октября 2026 года помечен автором как EOL. В ветке разработки YAM
стал пакетным менеджером, который работает на самой колонке: десктопного CLI и
сетевого демона yamd там нет, пакеты имеют расширение .yampkg, а Lua, веб-панель
и поддержка старых .yap вынесены в отдельный пакет yam-lua-runtime. Старые пакеты
несовместимы.
Короткие адреса hackalice.me/install.sh и install.ps1 ведут на установщик из
ветки main и ставят новую версию (релизы yam-v0.2.*). Эта страница пока описывает
0.1.19, поэтому в командах ниже — установщик по тегу
v0.1.19.
Web UI и API без пароля
Панель на порту 8099 не спрашивает пароль. Любой в вашей сети может ставить пакеты, а
с включёнными бинарниками — запускать на колонке свой код от root. Держите колонку только
в доверенной сети и не пробрасывайте 8099 наружу.
Что понадобится¶
- root и ADB на колонке — см. Получение root;
- компьютер с
adb: Windows 10/11 x64, Linux x86_64 или Mac на Apple Silicon; - для YAM — колонка с 64-битным ядром (
uname -m=aarch64):yamdсобирается только под AArch64, и установщик 32-битную колонку не найдёт. На Станции Стрит ядро 32-битное (armv7l), YAM там не поставится. У BetterYAM есть сборка armv7 — но только для Станции Мини, см. ниже.
Установка¶
Новая версия ставится одной командой с коротких адресов — они запускают актуальный
установщик из ветки main репозитория YAM:
curl -fsSL https://hackalice.me/install.sh | sh # Linux, macOS
irm https://hackalice.me/install.ps1 | iex # Windows PowerShell
Шаги ниже — для версии 0.1.19, которую описывает эта страница, поэтому в них адреса
установщика по тегу v0.1.19.
Нужна Windows 10 или 11 x64: установщик скачивает CLI только под x86_64.
-
Проверьте, что
adbстоит и виден вPath:adb version. Если нет — поставьте, иначе CLI установится, аyamdна колонку не попадёт. -
Подключите колонку по ADB:
adb connect 192.168.1.120:5555 # IP вашей колонки adb devices # должна быть строка «192.168.1.120:5555 device»Если колонка не подключена, установщик сам спросит IP.
-
Запустите установщик в обычном PowerShell, права администратора не нужны:
CLI ставится в
%LOCALAPPDATA%\YAM\bin, папка добавляется вPath, а адрес колонки сохраняется в переменнойYAM_URL. -
Проверьте: в том же окне
yamработает сразу, в новых окнах — тоже.Веб-панель открывается в браузере по адресу колонки на порту 8099 (например,
192.168.1.120:8099).
Конкретная версия и удаление CLI:
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/nyakokitsu/yam/refs/tags/v0.1.19/install.ps1))) -Version 0.1.13
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/nyakokitsu/yam/refs/tags/v0.1.19/install.ps1))) -Uninstall
-Uninstall в Windows-установщике удаляет только CLI на компьютере. yamd с колонки
уберите вручную:
Нужен Linux x86_64 или Mac на Apple Silicon. Linux на ARM и Mac на Intel установщик не поддерживает.
- Проверьте
adb version; если утилиты нет — поставьте. - Подключите колонку:
adb connect <IP>:5555, затемadb devices. -
Запустите установщик:
-
Проверьте команду
yam deviceи откройте веб-панель на порту 8099 (http://<IP>:8099в браузере).
CLI ставится в ~/.local/bin/yam. Если команда не находится, добавьте папку в PATH:
export PATH="$HOME/.local/bin:$PATH" в ~/.bashrc или ~/.zshrc.
Конкретная версия и удаление (CLI и yamd на колонке):
curl -fsSL https://raw.githubusercontent.com/nyakokitsu/yam/refs/tags/v0.1.19/install.sh | sh -s -- 0.1.13
curl -fsSL https://raw.githubusercontent.com/nyakokitsu/yam/refs/tags/v0.1.19/install.sh | sh -s -- --uninstall
У BetterYAM свой установщик — см. BetterYAM.
Установщик сам находит колонку с aarch64 в adb devices (если их несколько — спросит
какую), сверяет SHA-256 релиза, ставит CLI на компьютер и копирует yamd в
/data/quazar/yam/bin — каталог действительно пишется через z.
Автозапуск после перезагрузки¶
Установщик YAM запускает yamd один раз через start-stop-daemon и в автозапуск его не
добавляет: после перезагрузки колонки демон не поднимется. Можно повторить установку или
добавить скрипт ниже. Пример на колонке не проверялся; на Мини 3 Про с прошивкой .50
корень после перезагрузки откатывается, там такой способ не сработает — а на заводской
factory-12 автозапуск из /etc/init.d работает.
Разбор отличий — на странице Мини 3 Про.
У BetterYAM автозапуск ставит сам установщик — /etc/init.d/S99zzbetteryam. Он тоже
переживает перезагрузку только там, где правки корневой ФС сохраняются.
adb shell
mount -o remount,rw /
cat > /etc/init.d/S99zyam <<'EOF'
#!/bin/sh
# Autostart yamd on :8099 (delete this file to remove).
P=/data/quazar/yam
case "$1" in
start)
[ -x "$P/bin/yamd" ] || exit 0
start-stop-daemon --start --background --make-pidfile --pidfile "$P/yamd.pid" \
--startas "$P/bin/yamd" -- --data-dir "$P/data" ;;
stop) killall yamd 2>/dev/null ;; # pid changes after a self-update
esac
exit 0
EOF
chmod +x /etc/init.d/S99zyam
sync; mount -o remount,ro /
Пакеты¶
.yap — ZIP или tar.gz с plugin.toml в корне. Бывают двух видов:
- Lua — скрипт, которому доступен API колонки: подсветка, громкость, датчики, голосовые команды. Работает сразу.
- binary — обычная программа. Нужна сборка под колонку (обычно AArch64 musl). Бинарники по умолчанию запрещены: включите «Разрешить бинарники плагинов» в настройках Web UI.
По режиму запуска пакет — oneshot (запустился, отработал, вывод сразу в терминал) или
service (работает в фоне и поднимается заново после перезапуска yamd).
Без аргументов yam install берёт пакеты из реестра
yapkg — того же, что использует
yse. Другой реестр задаётся --registry или YAM_REGISTRY_URL.
yam install nano # последняя версия из реестра
yam install nano 8.0 # конкретная версия
yam install ./package.yap # локальный архив (или через Web UI)
yam list # установленные пакеты
yam enable zip # включить (без этого oneshot не запустится)
yam run zip --help # запустить oneshot с аргументами
yam tui nano # интерактивная программа через ADB-терминал
yam service enable sensor-agent # включить фоновый пакет и запустить
yam service logs sensor-agent
yam service restart sensor-agent
yam service disable sensor-agent # остановить и убрать из автозапуска yamd
yam rm nano
Прямой доступ к железу без пакетов:
yam device # модель, архитектура и возможности (features)
yam sensors # датчики: свет, температура, батарея
yam led set '#4285F4' '#EA4335' '#FBBC05'
yam led off
yam logo set ... # логотип Миди, 6 цветов
yam clock status # сегментные часы, где они есть
Пакеты из apkg-репозиториев (например,
initialfox/yandex-station-repo)
переводятся в .yap скриптом tools/convert_apkg.py из репозитория YAM.
Модели и подсветка¶
Модель yamd определяет по подсветке в /sys/class/leds, а затем по device-tree. Подсветка
из коробки:
| Профиль | Модель | Светодиодов |
|---|---|---|
micro |
Станция Лайт | 3 |
plum |
Станция Лайт 2 | 3 |
mini2 |
Станция Мини 2 | 6 |
midi |
Станция Миди | 24 (кольцо) + логотип |
sysfs-ring, custom |
другие — вручную, по шаблону пути в sysfs | — |
Остальные возможности (громкость через amixer, звук через aplay, Bluetooth, кнопки
/dev/input, датчики) включаются, если найдены на колонке. Что нашлось — показывает
yam device. Модель можно задать вручную: --model у yamd или device.toml в
/data/quazar/yam/data.
Свой Lua-плагин¶
Минимальный пакет — два файла в архиве: plugin.toml и main.lua.
id = "hello-ring"
name = "Hello ring"
version = "1.0.0"
entry = "main.lua"
permissions = ["led"]
[launch]
kind = "lua"
mode = "oneshot"
[compatibility]
features = ["led.ring.rgb"]
zip hello-ring.yap plugin.toml main.lua
yam install hello-ring.yap && yam enable hello-ring && yam run hello-ring
Каждое API требует своё разрешение в permissions. Без разрешения API недоступно:
| Разрешение | Что даёт |
|---|---|
led |
alice.set(colors), off(), play(path), logo.set() |
volume, audio |
громкость, воспроизведение файла |
sensors, clock, display |
датчики, сегментные часы, подсветка экрана |
input |
события кнопок — только устройства из [input] devices |
commands |
alice.command.listen(фраза, функция) — свои голосовые команды |
ipc.alarm, ipc.speech |
события будильника и распознанная речь |
ipc.read, ipc.control |
сырой Quasar IPC (protobuf) к сервисам из [ipc] services |
network |
HTTPS к хостам из [network] allow; локальные адреса запрещены |
bluetooth, system, exec |
Bluetooth, сведения о системе, запуск программ |
Пример своей голосовой команды (пакет в режиме service, разрешение commands и
[commands] phrases = ["ананас"] в манифесте):
alice.command.listen("ананас", function(message)
alice.command.cancel() -- не отдавать фразу Алисе
alice.set({"#FFFF00", "#FFFF00", "#FFFF00"})
end)
Полный список функций — в
PLUGIN_API.md, примеры
пакетов — в examples/.
Текст речи — персональные данные
ipc.speech и commands получают всё, что колонка распознала. Не ставьте пакеты с
этими разрешениями и network вместе, если не доверяете автору. ipc.control и exec
могут менять состояние системы — давайте их только своим пакетам.
Автообновление¶
yamd сам проверяет GitHub Releases YAM через минуту после старта и затем каждые 6 часов.
Если бинарник изменился — скачивает новый и перезапускается. Хеш сверяется с SHA256SUMS
из того же релиза, то есть это защита от битой загрузки, а не подпись. Чтобы обновлять
вручную, снимите галочку в Web UI или пропишите в /data/quazar/yam/data/settings.toml:
BetterYAM¶
BetterYAM взял
за основу YAM, но у каждой модели свой демон (betteryamd) со своим API и Web UI. Пакеты
.yap, Lua API и CLI совместимы с YAM. CLI называется byam, yam ставится как псевдоним.
Сейчас есть три демона: Станция Мини (1-го поколения), сборка armv7, Станция Лайт
(yandexmicro) и Станция Мини 3 (yandexmini3), сборки aarch64. Модель установщик
определяет по uname -n (например, YandexStationMini_729E → YandexStationMini) и
сверяет с manifest.json релиза; похожую модель он не подставляет. Для Миди, Лайт 2 и
остальных демона пока нет, и установка завершается ошибкой.
Удаление — sh -s -- --uninstall, как у YAM. Демон ставится в /data/quazar/betteryam и
слушает 8099 на LAN-адресе колонки. Автозапуск установщик прописывает сам
(/etc/init.d/S99zzbetteryam), см. выше.
Что умеет демон для Мини:
- кольцо из 6 RGB-светодиодов, кнопки (
/dev/input), громкость ALSAMaster, звук WAV черезaplay, датчик приближения; - статус Bluetooth; включение и выключение — только при остановленном Quasar;
- Wi-Fi через
wpa_cliпрошивки: список, добавление и удаление сетей из Web UI и Lua (разрешениеwifi); - экспериментальная своя точка доступа
BetterYAM-XXXXдля настройки Wi-Fi с телефона. Нужен статическийhostapd, на железе пока не проверялась.
Неподдержанные функции возвращают понятную ошибку, а в GET /device у них
capabilities: false. Подробности и чек-лист для новой модели — в
DEPLOYMENT.md
и ADDING_DEVICES.md.
Чем отличается от yse¶
yse ставит программы в Entware и запускается на самой колонке по
SSH. YAM — менеджер плагинов с веб-панелью и API к железу колонки, управляется с компьютера.
Реестр .yap у них общий. Ставить можно оба, они не мешают друг другу.
Откат¶
Снять CLI с компьютера и демон с колонки:
В Windows установщик убирает только CLI, демон с колонки удаляется вручную:
Автозапуск, если ставили, — rm /etc/init.d/S99zyam. У BetterYAM каталог называется
/data/quazar/betteryam, скрипт автозапуска — S99zzbetteryam.