Skip to content

wb-mirta/core

Repository files navigation

Mirta Core

GitHub Workflow Status GitHub Repo Stars GitHub Last Commit NPM Downloads pkg.pr.new

Мирта - фреймворк для удобной разработки сценариев управления умными домами и другими автоматизациями с применением правил 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 - название вашего проекта, указанное на соответствующем шаге мастера настройки.

Работа с JavaScript и TypeScript

Начиная с версии 0.2.2, фреймворк Мирта предоставляет комфортный механизм постепенного перехода с JavaScript на TypeScript, сохраняя работоспособность текущего решения.

Начиная с версии 0.2.3, реализован «гибридный» режим - файлы JavaScript вовлечены в процессы сборки проекта наравне с файлами TypeScript. Поддерживается современный синтаксис (ES6+), доступны переменные окружения и оптимизация кода (tree-shaking), юнит-тесты.

Вместе с тем, к *.js файлам применяются менее строгие правила ESLint, чем к файлам *.ts, что может быть актуально в некоторых ситуациях. Доступна подсветка конструкций wb-rules и подробные всплывающие подсказки.

Наглядный пример доступен в формате видеоруководства.

📌 Подготовка рабочего пространства

Перед началом работы с новым проектом, скопируйте существующие JavaScript-файлы из папок контроллера:

  • /mnt/data/etc/wb-rulessrc/wb-rules
  • /mnt/data/etc/wb-rules-modulessrc/wb-rules-modules

Файлы с расширением .js будут передаваться на контроллер в неизменном виде (не ниже 0.2.2), либо проходить полный цикл обработки (не ниже 0.2.3), пока вы внедряете TypeScript в своём обновлённом проекте.

💥 [Breaking Change] Особенности работы с модулями правил wb-rules

Фреймворк Мирта поддерживает только современный синтаксис 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'

✨ Переход на TypeScript (опционально)

Постепенно переводите JavaScript-контент на TypeScript:

  • Меняйте расширение файлов с .js на .ts или создавайте рядом одноимённый файл с расширением .ts.
  • Пользуйтесь преимуществами строгих типов и улучшенной типизацией, а также всеми возможностями Мирты.

По мере готовности, смело удаляйте ненужные JavaScript-файлы и продолжайте разработку на современной платформе.

⚙️ Отправка обновлений на контроллер

Важно помнить, что команда wb:deploy осуществляет развертывание файлов проекта на контроллере, предварительно очищая предыдущий набор файлов. Любые файлы, которые отсутствуют в финальной папке сборки (dist/es5), будут удалены с устройства.

Способы поддержать проект

Фреймворк открыт и доступен бесплатно под любое использование, распространяется на условиях лицензии Unlicense. Поддержка сообщества оказывает значительное влияние на его развитие.

Добровольная финансовая помощь позволяет освободить время разработчика от других дел и сосредоточиться на улучшениях, способствуя постоянному росту и развитию проекта. Автор искренне благодарит каждого, кто решил принять участие.

Вы можете поддержать развитие Мирты через донат или подписку на Boosty. Платным подписчикам становится доступен закрытый чат Telegram, где можно обсудить использование фреймворка, задать вопросы по написанию правил wb-rules.

Поддержать через CloudTips

Также сказать «Спасибо» можно через сервис для приёма безналичных чаевых от Т‑Банка и CloudPayments:

Поддержать через CloudTips

История создания

Идея шаблона для быстрого старта разработки правил на TypeScript начала активно развиваться и стало понятно, что формат репозитория «всё в одном» слишком сложен для восприятия, а его модернизация без разделения на версии приводит к значительным изменениям.

Было решено оставить базовый репозиторий в качестве руководства по основам самостоятельной настройки, а весь вспомогательный код вынести в отдельные пакеты и загружать их по мере необходимости. Так создаётся минималистичный проект, который ничем не отвлекает от самого главного - процесса создания ваших собственных правил!

Мирта берёт на себя все нюансы настройки многочисленных конфигураций.

Полезные ссылки

Движок правил wb-rules 2.0:
https://github.com/wirenboard/wb-rules

Канал про автоматизации на основе оборудования Wirenboard на Дзене:
https://dzen.ru/wihome

About

🚀 Unleash the power of wb-rules with Mirta Framework

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Contributors 3

  •  
  •  
  •