Студия плагинов в кабинете
Личный проект, редактор Rust и схем, проверки и сборка BTP. Сохраняйте исходники в кабинете и проверяйте конкретную версию перед установкой.
Открыть студию
- Войдите в личный кабинет сайта под своим аккаунтом. Для первого входа подтвердите почту; при требовании смены стартового пароля завершите её в разделе безопасности.
- Выберите «Студия плагинов» в боковой навигации. На телефоне раздел отмечен значком кода.
- Нажмите «Новый плагин» или откройте сохранённый проект из списка. Поиск фильтрует названия ваших проектов.
- Проект принадлежит текущему аккаунту. Ссылка на страницу редактора не открывает доступ другому пользователю и не публикует исходники в магазине.
Выбрать заготовку
- Задайте понятное название, например «Контроль температуры». Его можно изменить позднее, независимо от ID пакета.
- Введите собственный ID вида io.example.temperature: строчные латинские буквы, цифры и разделители точки или дефисы. Для настоящего продукта используйте пространство имён, которым управляете.
- Выберите «Подписка USEPI» для обработки событий источника и публикации числового результата. В стартовой логике результат равен input * scale + offset.
- Выберите «Жизненный цикл» для минимального процесса без разрешений на данные. Он подключается к менеджеру, сообщает готовность и корректно завершается по сигналу остановки.
- Нажмите «Создать». Проект сохраняется в кабинете, а редактор открывает src/main.rs. Вставлять ключи, пароли оборудования или реальные секреты в исходники не нужно.

Рабочее место автора
Слева находится дерево файлов, сверху открытые вкладки, в центре редактор с подсветкой Rust, JSON, TOML и Markdown. Нижняя панель показывает предварительные ошибки структуры. Строка состояния содержит позицию курсора, кодировку и размер шрифта.
- Выберите файл в дереве. Переключение вкладок сохраняет текст; закрытие вкладки не удаляет сам файл.
- Раскрывайте папки стрелками. Значок панели в начале вкладок скрывает дерево, освобождая место для кода, в том числе на телефоне.
- Используйте обычное редактирование, выделение, отмену и повтор. Поиск в открытом файле доступен через Ctrl+F или Cmd+F.
- Поменяйте размер шрифта внизу редактора. Длинные строки прокручиваются внутри области кода, а не растягивают всю страницу.
- Наведите указатель на значок действия: подсказка показывает назначение. Действия над текущим файлом находятся справа над кодом; действия над всем проектом расположены в верхней панели.

Какие файлы менять
В редакторе показан ваш crate плагина. После экспорта эти файлы находятся в starter/, а публичные библиотеки SDK лежат рядом в crates/. Если добавляете модуль src/processing.rs, подключите его из Rust-кода через mod processing; наличие файла само по себе не включает модуль в сборку.
| Файл | Назначение |
|---|---|
| src/main.rs | Подключение к SDK, проверка конфигурации, прикладная логика и остановка |
| Cargo.toml | Версия, зависимости и настройки Rust-проекта |
| package/plugin.toml | ID, версия, платформа, диапазон API и запрошенные возможности |
| package/schemas/config.schema.json | Типы, ограничения и значения по умолчанию для настроек |
| package/schemas/ui.schema.json | Порядок полей, группы и элементы формы |
| config.example.json | Только учебная конфигурация для локальной проверки; не входит в BTP |
| tests/*.rs | Ваши интеграционные тесты прикладной логики |
Добавить, переименовать и удалить файл
- Нажмите значок файла с плюсом над деревом. Введите относительный путь, например src/processing.rs или tests/transform.rs.
- Для переименования откройте файл и нажмите значок карандаша над кодом. Новое имя не может совпадать с существующим путём, в том числе при отличии только регистра.
- Не используйте абсолютные пути, .., обратные слеши, каталоги .git, target или node_modules. Файл и папка не могут занимать один путь.
- Для удаления откройте файл, нажмите корзину над редактором и подтвердите. Последний файл проекта удалить нельзя. Удаление обязательного файла отмечается в проверке структуры.
- Для JSON и TOML доступно форматирование значком волшебной палочки. Сначала исправьте синтаксис; при ошибке форматирование не заменяет ваш текст.
Лимиты одного проекта: 64 текстовых файла, 128 КиБ на файл и 512 КиБ суммарно с путями. В кабинете доступны 32 проекта и 8 МиБ исходников. Бинарники, ключи и большие медиафайлы не предназначены для этого хранилища.
Сохранение без потери новых правок
После паузы в редактировании студия автоматически отправляет изменения. Кнопка сохранения или Ctrl+S / Cmd+S позволяет отправить их сразу. Надпись «Сохранено» появляется только после ответа сервера. Экспорт скачивает текущий текст, включая ещё не подтверждённые изменения.
- Дождитесь «Сохранено», прежде чем закрывать вкладку или переходить к другому проекту.
- Если отображается «Не сохранено», проверьте сообщение и соединение. При неопределённом результате нажмите «Повторить»: студия повторит тот же запрос, не создавая дубликат.
- Можно продолжать печатать во время отправки. Запоздалое подтверждение не заменяет новые правки старой копией; последующие изменения отправляются отдельно.
- После исправления слишком большого или некорректного файла повторите сохранение. Студия не устраивает непрерывный цикл повторов при ошибке.
- Для возврата позднее откройте проект в том же аккаунте. В браузерном localStorage исходники не хранятся; подтверждённая версия находится на сервере.
Несохранённый текст находится в памяти открытой страницы. Аварийное закрытие браузера до подтверждения может его потерять. При длительном сбое скачайте исходники или сохраните отдельную копию проекта, когда соединение восстановится.
Если проект открыт в двух вкладках
- Сохранение проверяет версию проекта. Только одна из конкурирующих записей принимается; другая вкладка показывает конфликт.
- Не обновляйте страницу сразу, если в ней есть нужные изменения. Сначала скачайте текущие исходники или нажмите «Сохранить копию».
- Чтобы принять серверную версию, выберите «Загрузить актуальную» и подтвердите отказ от локальных несохранённых правок.
- Сверьте версии и перенесите необходимые изменения вручную. Совместного редактирования и автоматического слияния в студии пока нет.
После конфликта автоматическая запись остановлена. Студия не перезаписывает чужую более свежую работу по принципу «последняя вкладка победила».
Что проверяется в браузере
Предварительная проверка обнаруживает непереносимые и конфликтующие пути, превышение лимитов, ошибки JSON/TOML, отсутствие основных файлов, неверный plugin.id, расхождение версий и базовые требования к корневой схеме конфигурации. Выбор сообщения открывает соответствующий файл, если он существует.
Отсутствие сообщений не означает успешную компиляцию, безопасность или право запуска. Для компиляции и тестов отправьте отдельное задание кнопкой студии. Проверка пакета, реальные grants, лицензия и запуск остаются обязанностью целевого Plugin Manager.
Проверить, протестировать и собрать
Задания доступны только владельцу проекта и выполняются в отдельной изолированной среде с ограничениями ресурсов, без доступа к оборудованию и сети. Это не процесс веб-сервера и не ваш рабочий экземпляр плагина.
Сборочная среда работает offline и использует подготовленные зависимости SDK/заготовки. Произвольная новая зависимость, Git-репозиторий или скачивание из build script могут быть недоступны. Для собственного набора зависимостей экспортируйте исходники и используйте локальную сборку; не включайте токены реестров в проект.
- Сначала дождитесь подтверждённого сохранения проекта. Задание относится к неизменяемому снимку конкретной сохранённой версии.
- Нажмите нужную кнопку и следите за состоянием очереди, журналом и итогом задания.
- Можно продолжать редактирование: результат старого задания не подтверждает новые несохранённые правки. После изменений запустите проверку новой версии.
- Отмените ненужное задание. При ошибке прочитайте журнал, исправьте источник проблемы и создайте новое задание.
- Скачайте готовый артефакт в течение 24 часов. Если срок хранения истёк, соберите его снова.
- Перед рабочим использованием установите BTP на отдельный совместимый стенд и выполните проверку запуска, данных и остановки.
| Кнопка | Результат | Чего она не доказывает |
|---|---|---|
| Проверить | cargo check проверяет компиляцию сохранённой версии | Программа не выполняется; успешное чтение реальных данных не проверяется |
| Тесты | cargo test запускает тесты проекта, в том числе написанные вами тесты с SDK TestHost | Синтетический хост не проверяет настоящие grants, оборудование или лицензию |
| Собрать BTP | Неподписанный static Linux-пакет для linux-x86_64-ubuntu24 | Пакет не устанавливается автоматически и не становится официальным |
Зависимости удалённой сборки
Сборочная среда использует публичный SDK 1.2.1 и зафиксированный набор vendored-зависимостей. Прямые зависимости заготовки: bluetraktor-plugin-sdk, serde с derive, serde_json и tokio; в тестах также toml и tokio/test-util. Транзитивные зависимости не скачиваются для каждого задания. Перед проверкой среда создаёт Cargo.lock через cargo generate-lockfile --offline только из подготовленного набора, затем компилирует с --frozen.
В Cargo.toml сохраняйте package.name = community-starter и путь SDK ../crates/bluetraktor-plugin-sdk. Собственное имя продукта задаётся plugin.id в manifest, а не переименованием исполняемого файла заготовки. Версию плагина можно менять, но она должна совпадать в Cargo.toml и package/plugin.toml. Новые crates, неподдержанные версии и git-зависимости требуют локальной сборки либо отдельного обновления поддержанного набора.
«Проверить» компилирует все цели, включая тесты, для x86_64-unknown-linux-musl, но не выполняет их. «Тесты» запускает тесты вашего проекта на x86_64-unknown-linux-gnu; обе команды включают bluetraktor-plugin-sdk/test-host. Это не запуск всех тестов библиотеки SDK: добавьте собственные проверки, потому что проект может содержать ноль тестов.
Ниже показаны основные команды внутри подготовленной среды студии, не универсальная инструкция для запуска на macOS. «Собрать BTP» отдельно создаёт static musl-пакет. Успешные GNU-тесты не доказывают работу этого бинарника на целевой установке. Не рассчитывайте на доступ к HTTP, MQTT, файлам сервера или реальному менеджеру во время теста.
Студия не является универсальным облачным компьютером. Длительность, память, процессы, журнал и размер артефакта ограничены. Превышение лимита завершает задание ошибкой, а не запускает бесконечные повторы. Для другого target или собственного окружения используйте экспорт исходников.
cargo generate-lockfile --offline --manifest-path starter/Cargo.toml
cargo check --frozen --jobs 1 --manifest-path starter/Cargo.toml --target x86_64-unknown-linux-musl --all-targets --features bluetraktor-plugin-sdk/test-host
cargo test --frozen --jobs 1 --manifest-path starter/Cargo.toml --target x86_64-unknown-linux-gnu --all-targets --features bluetraktor-plugin-sdk/test-hostСкачать и собрать BTP
Для первой сборки нужны Rust 1.91+, Python 3.11+, zstd и выбранная среда Linux-сборки. По умолчанию build.py использует cross и локальный Docker. SOURCE-MANIFEST.json в экспорте содержит хеши именно этой выгруженной версии и признак производного проекта; это не подпись доверенного издателя.
- Нажмите «Скачать исходники с SDK». Получится ZIP с текущими файлами плагина, публичным SDK, lockfile и локальными инструментами сборки. Это не готовый BTP.
- Распакуйте ZIP в отдельный каталог. Сохраняйте взаимное расположение starter/, crates/, Cargo.toml и build.py.
- Запустите проверки из корня распакованного проекта. Работайте только с доверенными исходниками: Cargo и тесты исполняют код на вашей машине.
- Выберите точный platform ID целевой установки. Для сервера Ubuntu 24 x86_64 используйте linux-x86_64-ubuntu24; для другой системы смотрите список поддержанных платформ.
- После сборки проверьте BTP и загрузите его на отдельную тестовую установку. Установка, лицензия, grants и запуск экземпляра требуют самостоятельного подтверждения администратора.
cargo test --workspace --locked
python3 -m unittest test_build.py test_btp.py
python3 btp.py doctor
python3 build.py --platform linux-x86_64-ubuntu24
python3 btp.py inspect dist/io.example.temperature-0.1.0-linux-x86_64-ubuntu24.btpКопия, удаление и приватность
- Значок копирования создаёт отдельный проект с текущими исходниками. Оригинал сохраняется, даже если в нём возник конфликт.
- Корзина в верхней панели удаляет весь проект после подтверждения. Корзина над кодом удаляет только текущий файл.
- Удаление также проверяет версию: если проект изменился в другой вкладке, сначала загрузите актуальное состояние.
- Проекты не попадают в общий магазин автоматически. Просмотр SDK, экспорт ZIP и собственная подпись не предоставляют право добавлять системные виджеты или разделы.
- При удалении аккаунта его проекты удаляются из активного хранилища сайта. Срок хранения резервных копий зависит от политики владельца сервиса.
Пока сайт доступен по HTTP, соединение с ним не зашифровано. Не размещайте секреты и конфиденциальный рабочий код. Для эксплуатации с такими данными необходим HTTPS и доверенный сервер.