{"id":31044852,"url":"https://github.com/wb-mirta/core","last_synced_at":"2026-02-22T01:39:44.737Z","repository":{"id":308325913,"uuid":"1027285954","full_name":"wb-mirta/core","owner":"wb-mirta","description":"🚀 Unleash the power of wb-rules with Mirta Framework","archived":false,"fork":false,"pushed_at":"2026-02-17T07:15:29.000Z","size":1130,"stargazers_count":19,"open_issues_count":5,"forks_count":2,"subscribers_count":1,"default_branch":"latest","last_synced_at":"2026-02-17T12:42:27.793Z","etag":null,"topics":["home-automation","iot","mqtt","smart-home","wb-rules","wirenboard"],"latest_commit_sha":null,"homepage":"https://boosty.to/wihome","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wb-mirta.png","metadata":{"files":{"readme":".github/README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":["https://boosty.to/wihome/donate","https://pay.cloudtips.ru/p/58512cca"]}},"created_at":"2025-07-27T17:48:43.000Z","updated_at":"2026-02-17T07:11:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"3d3f65c3-4df0-43be-adcc-6426e6dbe3f9","html_url":"https://github.com/wb-mirta/core","commit_stats":null,"previous_names":["wb-mirta/core"],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/wb-mirta/core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb-mirta%2Fcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb-mirta%2Fcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb-mirta%2Fcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb-mirta%2Fcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wb-mirta","download_url":"https://codeload.github.com/wb-mirta/core/tar.gz/refs/heads/latest","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb-mirta%2Fcore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29703227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T23:35:04.139Z","status":"ssl_error","status_checked_at":"2026-02-21T23:35:03.832Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["home-automation","iot","mqtt","smart-home","wb-rules","wirenboard"],"created_at":"2025-09-14T16:52:15.951Z","updated_at":"2026-02-22T01:39:44.722Z","avatar_url":"https://github.com/wb-mirta.png","language":"TypeScript","funding_links":["https://boosty.to/wihome/donate","https://pay.cloudtips.ru/p/58512cca"],"categories":[],"sub_categories":[],"readme":"# Mirta Core\n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/wb-mirta/core/build.yml?branch=latest\u0026logo=github\u0026style=flat-square)](https://github.com/wb-mirta/core/actions/workflows/build.yml)\n[![GitHub Repo Stars](https://img.shields.io/github/stars/wb-mirta/core?color=594ae2\u0026style=flat-square\u0026logo=github)](https://github.com/wb-mirta/core/stargazers)\n[![GitHub Last Commit](https://img.shields.io/github/last-commit/wb-mirta/core?color=594ae2\u0026style=flat-square\u0026logo=github)](https://github.com/wb-mirta/core)\n[![NPM Downloads](https://img.shields.io/npm/dm/mirta?style=flat-square\u0026logo=npm)](https://npmjs.com/package/mirta)\n[![pkg.pr.new](https://pkg.pr.new/badge/wb-mirta/core?style=flat-square\u0026color=555)](https://pkg.pr.new/~/wb-mirta/core)\n\nСоздавайте автоматизации без лишних сложностей — с подсказками, автодополнением, юнит-тестами и современным синтаксисом. Здесь можно запрограммировать умный дом на JavaScript и TypeScript.\n\nПеред началом ознакомьтесь с [основами правил wb-rules](https://github.com/wirenboard/wb-rules#readme).\n\n**Оглавление**\n- [Что такое Мирта?](#что-такое-мирта)\n- [Ключевые возможности](#ключевые-возможности)\n- [Перед началом](#перед-началом)\n- [Быстрый старт](#быстрый-старт)\n- [Работа с JS и TS](#работа-с-javascript-и-typescript)\n- [Миграция на TypeScript](#миграция-на-typescript)\n- [Подготовка рабочего пространства](#подготовка-рабочего-пространства)\n- [Современный синтаксис](#современный-синтаксис)\n- [Поддержка проекта](#поддержка-проекта)\n- [Исходный код фреймворка](#исходный-код-фреймворка)\n- [История создания](#история-создания)\n- [Полезные ссылки](#полезные-ссылки)\n\n## Что такое Мирта?\n\n**Мирта** — это **готовая среда разработки** для создания сценариев автоматизации на контроллерах [компании Wiren Board](https://wirenboard.com/) с использованием правил `wb-rules`.\n\nСистема позволяет стандартизировать разработку, снизить сложность и сэкономить ресурсы.\n\n\u003e Вы пишете [те же правила](https://github.com/wirenboard/wb-rules#readme), что и раньше.  \n\u003e Только теперь — с комфортом и полным контролем над кодом.\n\nЦель данного фреймворка — **не добавить ещё один слой для изучения**, а **убрать всю рутину**:\n- Настройка TypeScript, ESLint, Rollup — уже сделана\n- Подсветка конструкций wb-rules, автодополнение, проверка ошибок — работают «из коробки» *\n- Юнит-тесты и имитация контроллера — доступны сразу *\n\nВы можете начать с JavaScript и постепенно переходить на TypeScript.  \n\n\nЗдесь поддерживаются `let` и `const`, а также функции-стрелки — это когда пишут `let sum = (a, b) =\u003e a + b`.\n\n\\* При установке рекомендованных системой плагинов ESLint и Vitest для VSCode.\n\n## Ключевые возможности\n\n- **Мастер настройки** — задаёт вопросы и формирует проект по вашим предпочтениям\n- **Гибридный режим JS/TS** — поддержка `.js` и `.ts` в одном проекте\n- **ESNext → ES5** — пишите на современном JavaScript / TypeScript, получайте совместимый код\n- **Tree-shaking** — незадействованный код удаляется после сборки и не попадает на контроллер\n- **Переменные окружения** — отделяйте чувствительную информацию от кода\n- **Пользовательские события** — гибкая связь между различными частями кода\n- **Хранилище состояний** — современная альтернатива `module.static` и `global`\n- **Юнит-тесты и моки** — проверяйте логику без контроллера\n- **Поддержка NPM** — быстро и легко подключайте модули wb-rules к проекту, публикуйте собственные\n- **Готовые CI-воркфлоу для GitHub** — тесты и сборка запускаются автоматически при коммите\n\n## Перед началом\n\nВаш проект автоматизации умного дома разрабатывается и тестируется на локальном компьютере, с использованием любого подходящего редактора кода (рекомендуется [Visual Studio Code](https://code.visualstudio.com/download)).\n\nРабота с Миртой возможна на Windows, Linux и macOS.\n\nПотребуется предварительно установить на компьютер:\n- [Node.js](https://nodejs.org/en/download) в варианте LTS (не ниже 24.12.0),\n- менеджер пакетов `pnpm`\n\nПодробная инструкция по установке вышеперечисленного представлена [в статье](https://dzen.ru/a/aIiGBETD13y-r0V0) на Дзене.\n\nКонтроллер Wiren Board подключается на финальном этапе, для отправки на него готового кода из папки `dist/es5`.  \nБлагодаря тому, что код пишется в соответствии с самым современным стандартом ESNext, в будущем возможен бесшовный переход на обновлённый движок, работающий на чистом NodeJs.\n\n## Быстрый старт\n\nПринцип создания проекта подробно показан [в обучающем видео](https://dzen.ru/video/watch/68896f973774640db979065b).\n\nВ папке, где будет храниться проект, откройте командную строку и выполните\n\n```bash\npnpm create mirta\n```\nМастер задаст несколько вопросов и создаст проект с нужной конфигурацией.\n\nЕсли нужна определённая версия Мирты, укажите её явным образом:\n```bash\npnpm create mirta@latest # Актуальная\npnpm create mirta@0.4.11 # Фиксированная\n```\n\nОткройте проект:\n```bash\ncode ./wb-rules-mirta # Замените на название вашего проекта\n```\n\nЗапустите сборку из терминала VSCode:\n```bash\npnpm build\n```\n\nПроверьте, что произойдёт при первом деплое:\n```bash\npnpm wb:deploy --dry-run\n```\n\nЕсли всё в порядке, отправьте изменения на контроллер:\n```bash\npnpm wb:deploy\n```\n\n## Работа с JavaScript и TypeScript\n\nМирта поддерживает гибридный режим: файлы `.js` и `.ts` обрабатываются одинаково:\n- Современный синтаксис ESNext\n- Переменные окружения\n- Tree-Shaking\n- Юнит-тесты\n\n\u003e 💡 Подсказки и автодополнение работают даже в .js-файлах — благодаря JSDoc и типам из `@mirta/globals`.\n\n## Миграция на TypeScript\n\nПостепенно переводите код JavaScript на TypeScript:\n\n- Меняйте расширение файлов с `.js` на `.ts` или создавайте рядом одноимённый файл с расширением `.ts`.\n- Пользуйтесь преимуществами строгих типов и улучшенной типизацией, а также всеми возможностями Мирты.\n\nПо мере готовности, удаляйте ставшие ненужные файлы JavaScript и продолжайте разработку на современной платформе.\n\nНаглядный пример доступен в формате [видеоруководства](https://dzen.ru/video/watch/68b39c150c5cde33febb375c).\n\n## Подготовка рабочего пространства\n\nЕсли у вас уже есть скрипты и модули — обязательно скопируйте их в проект с контроллера:\n\n```\n/mnt/data/etc/wb-rules         → src/wb-rules\n/mnt/data/etc/wb-rules-modules → src/wb-rules-modules\n```\n\nПри передаче готового кода на контроллер выполняется очистка целевых директорий.  \nПодробнее — [в статье о деплое](https://dzen.ru/a/aWzbtighulUT7AQA)\n\n## Современный синтаксис\n\nФреймворк Мирта поддерживает только современный синтаксис ESNext.  \nВо время сборки система автоматически преобразует ваш код в формат ES5, совместимый с контроллерами Wiren Board.\n\nЗачем нужен переход на ESNext?\n\n- Современные стандарты: повышают качество и читаемость кода\n- Поддержка статического анализа: помогает выявить ошибки на раннем этапе\n- Tree-Shaking: удаляет неиспользуемый код, оптимизируя итоговую сборку\n\nПрежде вы использовали классический синтаксис CommonJS (импорт через `require` и экспорт через объект `exports`). Необходимо пересмотреть свой код и заменить эти конструкции на современные аналоги:\n\n- Используйте `import` вместо `require`\n- Используйте `export` вместо `exports`\n\nКорректный экспорт в файле модуля:\n\n```js\n// src/wb-rules-modules/my-module.js\nexport function hello(text) {\n  log('Hello from module, {}', text)\n}\n\nexport const answer = 42\n```\nИмпорт в файле сценария, куда подключается модуль:\n\n```js\n// src/wb-rules/my-script.js\nimport { hello, answer } from '#wbm/my-module'\n\nhello('world')\nlog('The answer is {}', answer)\n```\n⚠️ **Внимание!** Используйте исключительно именованный экспорт — в настоящее время контроллеры Wiren Board не поддерживают код, генерируемый экспортом по умолчанию (`export default`):\n\n```js\n// В файле модуля: НЕ поддерживается!\nexport default function(text) {\n  log('Hello from module, {}', text)\n}\n\n// В файле сценария: НЕ сработает!\nimport hello from '#wbm/my-module'\n```\n\n## Поддержка проекта\n\nМирта — это **открытый проект**, распространяемый по лицензии [Unlicense](https://github.com/wb-mirta/core?tab=Unlicense-1-ov-file).  \nФреймворк существует благодаря энтузиазму автора и поддержке сообщества.\n\nВаша помощь — это не просто донат. Это **вклад в развитие инструмента**, которым пользуются многие разработчики.\n\n🔹 **Платные подписчики** получают доступ к закрытому чату **Mirta Guild** в Telegram — месту, где обсуждают сложные сценарии, делятся идеями и помогают друг другу.  \n🔹 **Каждый донат** позволяет автору осредоточиться на улучшениях, новых возможностях, проработке интеграций и документации.\n\nВместе мы делаем автоматизации проще — для всех.\n\n[![Поддержать через Boosty](https://img.shields.io/badge/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D1%82%D1%8C-Boosty-F15F2C?style=for-the-badge\n)](https://boosty.to/wihome)\n\nТакже сказать «Спасибо» можно через сервис для приёма безналичных чаевых от Т‑Банка и CloudPayments:\n\n[![Поддержать через CloudTips](https://img.shields.io/badge/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D1%82%D1%8C-Cloud_Tips-blue?style=for-the-badge\n)](https://pay.cloudtips.ru/p/58512cca)\n\n## Исходный код фреймворка\n\nЧтобы создавать проекты с использованием фреймворка, не требуется вникать в его исходные коды. Однако, все они здесь - проект структурирован по принципу монорепозитория, с разделением на пакеты (см. каталог `packages`). Всё открыто для ваших идей и предложений.\n\nПакеты Мирты можно условно разделить на два типа (соответственно секциям файла `package.json`):\n- `dependencies` - код с возможностью использования на контроллере,\n- `devDependencies` - инструменты этапа разработки, которые остаются на локальном компьютере.\n\nК первому типу относятся различные готовые функции (например, реализация debounce и throttle).\nПри импорте таких конструкций, сборщик Rollup автоматически создаст соответствующий файл в следующем расположении:\n\n```\ndist/es5/wb-rules-modules/packages/package-name\n```\nКо второму - наборы конфигураций по умолчанию, определения типов для подсветки кода, инструменты вроде Rollup, ESLint, Vitest и т.п.\n\nЕсли же вы стремитесь понять глубинные принципы проекта, существует [серия статей](https://dzen.ru/suite/5a7ecf61-ac80-4d7d-abe2-ecebd73b6ef4), где его ранний прототип собирается без разделения на пакеты, вручную и с подробным объяснением каждой строки.\n\nМодульный вариант фреймворка позволяет сосредоточиться на разработке сценариев и не отвлекаться на сложные хитросплетения многочисленных конфигураций.\n\n## История создания\n\nИдея [шаблона для быстрого старта](https://github.com/wihome-dev/wb-rules-typescript) разработки правил на TypeScript начала активно развиваться и стало понятно, что формат репозитория «всё в одном» слишком сложен для восприятия, а его модернизация без версионирования приводит к значительным изменениям.\n\nБыло решено оставить базовый репозиторий в качестве руководства по основам самостоятельной настройки, а весь вспомогательный код вынести в отдельные пакеты и загружать их по мере необходимости. Такой подход позволяет сосредоточиться на разработке сценариев, не тратя время на настройку окружения.\n\n## Полезные ссылки\n\n- [wb-rules 2.0](https://github.com/wirenboard/wb-rules) — движок правил\n- [Блог на Boosty](https://boosty.to/wihome) — разработка Мирты, ранний доступ\n- [Канал на Дзене](https://dzen.ru/wihome) — видео и статьи про автоматизации\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwb-mirta%2Fcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwb-mirta%2Fcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwb-mirta%2Fcore/lists"}