Мирта - фреймворк для удобной разработки сценариев управления умными домами и другими автоматизациями с применением правил wb-rules контроллеров компании Wiren Board.
Поддерживается как JavaScript, так и TypeScript. Среди ключевых особенностей можно выделить:
- Мастер первичной настройки - задаёт ряд вопросов и генерирует стартовый проект по вашим предпочтениям;
- Снятие стандартных ограничений ECMAScript 5;
- Статический анализ кода - выявляет потенциальные проблемы и слабые места в архитектуре приложения;
- Юнит-тесты и имитация запуска на контроллере - даёт возможность быстро проверить корректность отдельных частей программы;
- Хранилище состояний - современная альтернатива классическому module.static;
- Пользовательские события - связующее звено между различными частями кода;
- Поддержка загружаемых модулей и девайсов, оформленных в виде отдельных NPM-пакетов.
В разработке специальный репозиторий для устройств, откуда можно быстро взять то или иное готовое решение.
Чтобы создавать собственные проекты с использованием фреймворка, не требуется вникать в его исходные коды. Однако, все они здесь - проект структурирован по принципу монорепозитория, с разделением на пакеты (см. каталог packages). Всё открыто для ваших идей и предложений.
Пакеты Мирты можно условно разделить на два типа (соответственно секциям файла package.json):
dependencies- код с возможностью использования на контроллере,devDependencies- инструменты этапа разработки, которые остаются на локальном компьютере.
К первому типу относятся различные готовые функции (например, реализация debounce и throttle). При импорте таких конструкций, сборщик Rollup автоматически создаст соответствующий файл в следующем расположении:
dist/wb-rules-modules/packages/package-name
Ко второму - наборы конфигураций по умолчанию, определения типов для подсветки кода, инструменты вроде Rollup, ESLint, Vitest и т.п.
Если же вы стремитесь понять глубинные принципы проекта, существует серия статей, где его прототип собирается без разделения на пакеты, вручную и с подробным объяснением каждой строки.
Модульный вариант позволяет сосредоточиться на разработке сценариев и не отвлекаться на сложные хитросплетения многочисленных конфигураций.
Ваш проект автоматизации умного дома разрабатывается и тестируется на локальном компьютере, с использованием любого удобного редактора кода (рекомендуется Visual Studio Code).
Потребуется предварительно установить на компьютер:
- Node.js в варианте LTS (не ниже 20.x.x),
- менеджер пакетов
pnpm
Подробная инструкция по установке вышеперечисленного представлена в статье на Дзене.
Контроллер Wiren Board подключается на финальном этапе, для отправки на него готового кода из папки dist/es5.
Принцип создания проекта подробно показан в обучающем видео.
В папке, где будет храниться проект, откройте командную строку и выполните
pnpm create mirtaЗапустится мастер настройки, который задаст несколько вопросов и сгенерирует код на основе ваших предпочтений - больше никаких сложных конфигураций, всё настроено заранее.
В случае, когда нужна определённая версия:
pnpm create mirta@latest # Проект актуальной версии
pnpm create mirta@0.2.3 # Проект версии 0.2.3По умолчанию команда подразумевает самую свежую из опубликованных версий, что эквивалентно тегу @latest.
После создания проекта откройте его в подходящем редакторе, например VSCode (рекомендуется):
code ./wb-rules-mirtaЗдесь wb-rules-mirta - название вашего проекта, указанное на соответствующем шаге мастера настройки.
Начиная с версии 0.2.2, фреймворк Мирта предоставляет комфортный механизм постепенного перехода с JavaScript на TypeScript, сохраняя работоспособность текущего решения.
Начиная с версии 0.2.3, реализован «гибридный» режим - файлы JavaScript вовлечены в процессы сборки проекта наравне с файлами TypeScript. Поддерживается современный синтаксис (ES6+), доступны переменные окружения и оптимизация кода (tree-shaking), юнит-тесты.
Вместе с тем, к *.js файлам применяются менее строгие правила ESLint, чем к файлам *.ts, что может быть актуально в некоторых ситуациях. Доступна подсветка конструкций wb-rules и подробные всплывающие подсказки.
Наглядный пример доступен в формате видеоруководства.
Перед началом работы с новым проектом, скопируйте существующие JavaScript-файлы из папок контроллера:
/mnt/data/etc/wb-rules→src/wb-rules/mnt/data/etc/wb-rules-modules→src/wb-rules-modules
Файлы с расширением .js будут передаваться на контроллер в неизменном виде (не ниже 0.2.2), либо проходить полный цикл обработки (не ниже 0.2.3), пока вы внедряете TypeScript в своём обновлённом проекте.
Фреймворк Мирта поддерживает только современный синтаксис ESNext. Во время сборки система автоматически преобразует ваш код в формат ES5, совместимый с контроллерами Wiren Board.
Зачем нужен переход на ESNext?
- Современные стандарты: повышают качество и читаемость кода;
- Поддержка статического анализа: помогает выявить ошибки на раннем этапе;
- Tree-Shaking: удаляет неиспользуемый код, оптимизируя итоговую сборку.
Прежде вы использовали классический синтаксис CommonJS (require() и exports). Необходимо пересмотреть свой код и заменить эти конструкции на современные аналоги:
- Используйте
importвместоrequire(). - Используйте
exportвместоexports.
Именованный экспорт в файле модуля:
export function hello(text) {
log('Hello from module, {}', text)
}
export const answer = 42Файл сценария, в который подключается модуль:
import { hello, answer } from 'myModule'
hello('world')
log('The answer is {}', answer)Используйте исключительно именованный экспорт - в настоящее время контроллеры Wiren Board не поддерживают код, генерируемый экспортом по умолчанию (export default):
// В файле модуля: НЕ поддерживается!
export default function(text) {
log('Hello from module, {}', text)
}
// В файле сценария: НЕ сработает!
import hello from 'myModule'Постепенно переводите JavaScript-контент на TypeScript:
- Меняйте расширение файлов с
.jsна.tsили создавайте рядом одноимённый файл с расширением.ts. - Пользуйтесь преимуществами строгих типов и улучшенной типизацией, а также всеми возможностями Мирты.
По мере готовности, смело удаляйте ненужные JavaScript-файлы и продолжайте разработку на современной платформе.
Важно помнить, что команда wb:deploy осуществляет развертывание файлов проекта на контроллере, предварительно очищая предыдущий набор файлов. Любые файлы, которые отсутствуют в финальной папке сборки (dist/es5), будут удалены с устройства.
Фреймворк открыт и доступен бесплатно под любое использование, распространяется на условиях лицензии Unlicense. Поддержка сообщества оказывает значительное влияние на его развитие.
Добровольная финансовая помощь позволяет освободить время разработчика от других дел и сосредоточиться на улучшениях, способствуя постоянному росту и развитию проекта. Автор искренне благодарит каждого, кто решил принять участие.
Вы можете поддержать развитие Мирты через донат или подписку на Boosty. Платным подписчикам становится доступен закрытый чат Telegram, где можно обсудить использование фреймворка, задать вопросы по написанию правил wb-rules.
Также сказать «Спасибо» можно через сервис для приёма безналичных чаевых от Т‑Банка и CloudPayments:
Идея шаблона для быстрого старта разработки правил на TypeScript начала активно развиваться и стало понятно, что формат репозитория «всё в одном» слишком сложен для восприятия, а его модернизация без разделения на версии приводит к значительным изменениям.
Было решено оставить базовый репозиторий в качестве руководства по основам самостоятельной настройки, а весь вспомогательный код вынести в отдельные пакеты и загружать их по мере необходимости. Так создаётся минималистичный проект, который ничем не отвлекает от самого главного - процесса создания ваших собственных правил!
Мирта берёт на себя все нюансы настройки многочисленных конфигураций.
Движок правил wb-rules 2.0:
https://github.com/wirenboard/wb-rules
Канал про автоматизации на основе оборудования Wirenboard на Дзене:
https://dzen.ru/wihome