Владелец задачи: golnet, Moscow - Russia
Текущий статус:
Поддержка
Страница дополнения
Модуль MCP XiaoZhi - это интеллектуальный интерфейс управления устройствами, обеспечивающий голосовое управление и автоматизацию домашних систем с помощью китайской колонки или приложении на Android. Модуль позволяет управлять различными типами устройств (свет, розетки, термостаты, ворота, шторы и др.) с помощью голосовых команд на русском языке. Поддерживает интеграцию с MajorDoMo, предоставляет функции распознавания речи, синтеза речи (TTS), управления устройствами по алиасам, комнатам и типам. Обеспечивает удобное управление умным домом с помощью голосовых команд вида "включи свет в гостиной", "покажи температуру в бане", "открой ворота".
Версия 2.01.28: сообщения колонке отдаются с указанием колонки-источника
Версия 2.01.28: сообщения колонке отдаются с указанием колонки-источника
mcp_speaker_queue.SOURCE_ID: колонка, с которой передали команду; в ответе инструмента колонка получает директиву произнести текст и назвать комнату-источник.
Новый инструмент speaker_messages: переданные колонке сообщения по фразе «есть сообщения» (с источником), пустая очередь — «новых сообщений нет».
Инструкции сервера (initialize): при активации колонки — скрытый вызов where_am_i с device_id; сообщения произносятся после ответа пользователю.
device_id добавлен в схему и описания всех инструментов: одну сессию обслуживают все колонки XiaoZhi.
Уборка журнала очереди: раз в час удаляются доставленные старше суток.
Справка: убрана техническая информация
Справка: убрана техническая информация
Удалены пункты про логи (строка старта моста с версией и датами файлов, диагностика выбора датчика). Убраны внутренние пути (lib/requirements.txt, python3/pip3, lib/.venv, .venv/bin), название таблицы devices и служебное значении типа button. Блок «Сервис» описан как запуск/остановка/перезапуск модуля.
https://github.com/golnet1/majordomo-mcp/commit/6f...
Версия 2.01.27
Версия 2.01.27
Поднята версия модуля и ревизия Python-кода перед работой над автоперезапуском моста.
https://github.com/golnet1/majordomo-mcp/commit/4a...
Диагностика: дублируем версию модуля в /tmp/mcp_xiaozhi_startup.log
Диагностика: дублируем версию модуля в /tmp/mcp_xiaozhi_startup.log
Чтобы по логу точно увидеть версию модуля при старте моста — дополнительно пишем её в отдельный файл.
https://github.com/golnet1/majordomo-mcp/commit/05...
Датчики: комната из вопроса учитывается при выборе датчика (#43)
Датчики: комната из вопроса учитывается при выборе датчика (#43)
Раньше get_sensor_value искал датчик только по алиасу устройства и по комнате
колонки. Если в вопросе названа комната («какая температура в спальне»), а
синонима на неё у устройства нет, то при нескольких датчиках этой величины дома
модуль отвечал «датчик не найден» — хотя датчик в этой комнате есть.
Проверено на тестовом сервере: «температура в парилке», «в коридоре», «в
погрибе» определяются верно; для несуществующих комнат («спальня», «банька»)
ответ остаётся «датчик не найден».
https://github.com/golnet1/majordomo-mcp/commit/51...
Справка по колонкам, пример ID и мелкие правки (#42)
Справка по колонкам, пример ID и мелкие правки (#42)
Улучшен поиск алиасов сенсоров (нормализация, по токенам)
Улучшен поиск алиасов сенсоров (нормализация, по токенам)
https://github.com/golnet1/majordomo-mcp/commit/f8...
Справка: уточнён текст про колонку и комнаты
Справка: уточнён текст про колонку и комнаты
https://github.com/golnet1/majordomo-mcp/commit/18...
Справка: отдельный раздел «Колонка (XiaoZhi) и комнаты», без упоминан…
Справка: отдельный раздел «Колонка (XiaoZhi) и комнаты», без упоминания {{device_id}} (#38)
https://github.com/golnet1/majordomo-mcp/commit/c4...
Колонка: поле ID устройства вместо MAC и определение колонки голосом …
Колонка: поле ID устройства вместо MAC и определение колонки голосом (#36)
Колонка: инструмент where_am_i и устойчивое определение комнаты по MA…
Колонка: инструмент where_am_i и устойчивое определение комнаты по MAC (#35)
добавлен MCP-инструмент where_am_i (room по device_id колонки), чтобы колонка могла ответить, в какой комнате она находится;
resolve_room_by_device_id: после точного совпадения MAC ищет по вхождению — прошивка колонки может присылать device_id с добавками;
chore(mcp): версия 2.01.14 в окне «О модуле» (#31)
chore(mcp): версия 2.01.14 в окне «О модуле» (#31)
VERSION 2.01.13 -> 2.01.14 (дата без изменений).
https://github.com/golnet1/majordomo-mcp/commit/23...
fix(mcp): комната колонки определяется по MAC даже без управляющих tr…
fix(mcp): комната колонки определяется по MAC даже без управляющих trait'ов (#26)
У устройства типа «Колонка (XiaoZhi)» (audio.speaker) нет управляющих
trait'ов — linked_object/linked_property пустые. Из-за этого
load_devices_from_db() отбрасывал колонку из списка устройств, и
resolve_room_by_device_id() не мог найти её MAC. В результате команды с
колонки выполнялись без знания комнаты, а ассистент каждый раз уточнял
комнату, хотя MAC и Местоположение у колонки заданы.
Что сделано:
Проверено на сервере: resolve_room_by_device_id('10:b4:1d:c7:18:60') →
'Комната отдыха'.
https://github.com/golnet1/majordomo-mcp/commit/37...
fix(mcp): блок «Сервис» — собственная разметка MCP, всё в одну строку…
fix(mcp): блок «Сервис» — собственная разметка MCP, всё в одну строку (#25)
Блок статуса службы больше не отдаётся модулем xray
([#module name="xray" action="service" cycle="mcp"#]). Разметка и JS перенесены
в templates/mcp/action_admin.html и работают как обычный код модуля MCP.
Причина: на узкой ширине колонки col-md-* из xray «складывались» в столбик,
из-за чего блок «Сервис» переносился. Теперь:
Статус/restart/stop по-прежнему берутся с ajax-эндпоинта xray
(глобалы cycle_mcpRun / cycle_mcpControl) — поведение не изменилось.
https://github.com/golnet1/majordomo-mcp/commit/ce...
fix(mcp): движок таблиц сцен/планировщика выбирается по факту (устран…
fix(mcp): движок таблиц сцен/планировщика выбирается по факту (устранена ошибка 1286) (#24)
DDL таблиц mcp_scenes и mcp_schedule жёстко задавал ENGINE=InnoDB, из-за
чего на СУБД с отключённым InnoDB (SHOW ENGINES -> Support=NO, движок по
умолчанию MyISAM) создание таблиц падало с ошибкой
"1286: Unknown storage engine 'InnoDB'".
Теперь движок выбирается по доступности: при поддержке InnoDB используется
InnoDB, иначе движок не указывается и сервер берёт свой по умолчанию.
utf8mb4 сохраняется в обоих случаях.
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/b2...
docs(mcp): обновлена помощь, синхронизация, поле МАК (#23)
docs(mcp): обновлена помощь, синхронизация, поле МАК (#23)
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/a3...
feat(mcp): опция «Реверс» вместо «Разделение кнопки» (инверсия Вкл/Вы…
feat(mcp): опция «Реверс» вместо «Разделение кнопки» (инверсия Вкл/Выкл и Открыть/Закрыть)
https://github.com/golnet1/majordomo-mcp/commit/66...
feat(mcp): синхронизация устройств из MajorDoMo (#20)
feat(mcp): синхронизация устройств из MajorDoMo (#20)
Кнопка «Синхронизировать» импортирует все устройства из штатной таблицы devices: тип и умения выводятся из devices.TYPE (relay/dimmer/rgb/sensor_*/motion/openable/thermostat/vacuum), свойство подбирается по фактически существующим свойствам объекта. Существующие устройства по LINKED_OBJECT не дублируются. Кнопки (button) пропускаются. Сборка CONFIG вынесена в общий метод buildDeviceConfig.
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/de...
fix(mcp): propertySetHandle не падает на несуществующих колонках (#19)
fix(mcp): propertySetHandle не падает на несуществующих колонках (#19)
В mcp_devices нет колонок LINKED_OBJECT/LINKED_PROPERTY — связка
«устройство → метрика» хранится в TRAITS (JSON). Прежний запрос к этим
колонкам падал с «Unknown column», а ядро MajorDoMo
(lib/mysql.class.php::Error) на любую такую ошибку удаляет
cms/modules_installed/control_modules.installed. Из-за этого на следующем
запросе заново устанавливались ВСЕ модули (перезапуск сервисов, пересборка
venv) — веб-интерфейс подвисал на минуты. Теперь сверяемся с TRAITS.
https://github.com/golnet1/majordomo-mcp/commit/e5...
docs(mcp): устройства ищутся по псевдониму (синониму), а не по назван…
docs(mcp): устройства ищутся по псевдониму (синониму), а не по названию (#17)
Уточнены формулировки в докстрингах инструментов и в справке:
резолвер устройств и сцен строит индекс только из поля «Синонимы»
(load_aliases_from_db), поле «Название» в голосовом поиске не участвует.
https://github.com/golnet1/majordomo-mcp/commit/05...
feat(mcp): тип «Колонка (XiaoZhi)», привязка к комнате по MAC и перед…
feat(mcp): тип «Колонка (XiaoZhi)», привязка к комнате по MAC и передача фразы на колонку (#15)
fix(ui): «Синонимы (через <,> или <;>)» в формах устройства (#14)
fix(ui): «Синонимы (через <,> или <;>)» в формах устройства (#14)
В формах «Добавить устройство» и «Редактировать устройство» подпись поля
строилась из макроса ядра <#LANG_ALT_TITLES#>, который выводит
«Синонимы (через запятую)» и не упоминает точку с запятой. Заменено на явный
текст, который честно указывает оба разделителя псевдонимов — запятую и точку
с запятой (резолвер разбирает поле ALIACE по [,;]).
Файлы:
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/6e...
fix(mcp): псевдоним важнее типа, честная яркость, оформление кнопки P…
fix(mcp): псевдоним важнее типа, честная яркость, оформление кнопки Python, справка (#13)
Голосовое управление:
Настройки:
Справка:
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/6f...
feat(settings): кнопка автоисправления версии Python и зависимостей (…
feat(settings): кнопка автоисправления версии Python и зависимостей (#11)
В общих настройках включён чекбокс «Проверка версии Python и зависимостей» —
теперь, когда проверка нашла несоответствия (нет venv/python/pip, версия
Python ниже 3.10, отсутствуют или устарели пакеты из requirements.txt), под
формой настроек появляется кнопка «Исправить версию Python и зависимости».
Что делает fixPythonEnvironment():
Безопасность:
Проверка: песочничный тест извлекает эти методы из mcp.class.php и гоняет их
на временных venv реального сервера — 13/13 (интерпретатор, страховка удаления,
битое окружение -> пересоздание, установка и импорт зависимостей, повторный
запуск без пересоздания). php -l чисто.
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/f8...
fix(mcp): белый экран при добавлении задания + порядок кнопок (#8)
fix(mcp): белый экран при добавлении задания + порядок кнопок (#8)
1) schedule_edit.html: сравнения в шаблоне записаны как [#if X=1#] без кавычек,
парсер MajorDoMo превращал это в присваивание (=1) -> fatal error -> белый экран
при добавлении/редактировании задания. Исправлено на [#if X="1"#] (как в ядре).
2) action_admin.html: кнопка "Сцены" теперь идёт перед кнопкой "Планировщик".
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/76...
Голосовое управление: резолвер, комнаты/типы/масштаб, яркость, сцены …
Голосовое управление: резолвер, комнаты/типы/масштаб, яркость, сцены (#4)
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/e7...
Fix MCP bridge: self-heal mcp_config.json, log stderr on Windows, saf…
Fix MCP bridge: self-heal mcp_config.json, log stderr on Windows, safe fallback (#3)
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/0e...
Fix device resolution: type matching, preferred categories, alias fal…
Fix device resolution: type matching, preferred categories, alias fallback (#2)
Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/ed...
Консолидация модуля mcp + завершение поддержки Windows (#1)
Консолидация модуля mcp + завершение поддержки Windows (#1)
Sync module with local working branch
lib/smoke_check.py: add MajorDoMo API smoke-check utility
Windows:
Linux (port of production fixes):
cycle_mcp.php: wait for MySQL availability on start (max_connections),
add cross-platform single-instance PID lock
Вы можете помочь в развитии проекта, сообщив об ошибках, поделившись своими идеями или проголосовав за уже добавленные. В случае добавления ошибок, обязательно указывайте детали окружения (ОС, версия ПО и т.п.), сообщения об ошибках без деталей будут игнорироваться.
| Дополнение OpenCode |
| Дополнение DashBoard Pro |
| Дополнение Piper TTS |
| Дополнение PHP Manager |
| Дополнение Котел Stout Plus |