Парсинг спецификации устройств Xiaomi для локализации в Home Assistant
Страница проекта на GitHub: https://github.com/vasiliykireev/multi_lang-for-miot-home-assistant-integration
При использовании официальной интеграции устройств Xiaomi в Home Assistant есть проблемы с локализацией. Значения списка не переводятся на русский язык — особенно, если устройства только для китайского региона.
Информация из документации Xiaomi
В документации по интеграции есть поддержка нескольких языков: https://github.com/XiaoMi/ha_xiaomi_home/?tab=readme-ov-file#multiple-language-support
При отображении имени сущности Home Assistant Xiaomi Home загружает многоязычный файл, настроенный поставщиком устройства из облака MIoT, который содержит переводы для экземпляров устройства MIoT-Spec-V2. multi_lang.jsonЭто локально поддерживаемый многоязычный словарь, который имеет более высокий приоритет, чем многоязычный файл, полученный из облака, и может использоваться для дополнения или изменения многоязычного перевода устройств.
Формат multi_lang.json следующий.
{
"<MIoT-Spec-V2 device instance>": {
"<language code>": {
"<instance code>": <translation: str>
}
}
}
Ключом multi_lang.json словаря является urn без поля «версия» экземпляра устройства MIoT-Spec-V2.
Код языка — zh-Hans, zh-Hant, en, es, ru, fr, de или ja, что соответствует 8 выбираемым языкам, упомянутым выше.
Код экземпляра — это код экземпляра MIoT-Spec-V2, который имеет следующий формат:
service:<siid> # service
service:<siid>:property:<piid> # property
service:<siid>:property:<piid>:valuelist:<index> # The index of a value in the value-list of a property
service:<siid>:event:<eiid> # event
service:<siid>:action:<aiid> # action
siid, piid, eiid, aiid и value — все это десятичные трехзначные целые числа. Пример:
{
"urn:miot-spec-v2:device:health-pot:0000A051:chunmi-a1": {
"zh-Hant": {
"service:002": "養生壺",
"service:002:property:001": "工作狀態",
"service:002:property:001:valuelist:000": "待機中",
"service:002:action:002": "停止烹飪",
"service:005:event:001": "烹飪完成"
}
}
}
Где взять URN и как запросить информацию об устройстве Xiaomi
URN устройств Xiaomi можно найти на странице: http://miot-spec.org/miot-spec-v2/instances?status=all
Через этот сайт также можно получить техническую информацию об устройстве.
Вайб-кодинг
Основная задача — получить основу multi_lang.json с помощью вайб-кодинга
Я написал задание для скрипта на Python в файле requirements.txt.
C помощью Visual Studio Code и CoPilot был создан скрипт properties.py, который обрабатывает URN устройства Xiaomi и сохраняет основу lang-файла.
Также CoPilot составил основу файла с описанием проекта README.md и итоговый файл всех реализованных требований implementation.txt.
Реализацией очень доволен. Вайб-кодинг решил мою прикладную задачу и составил документацию, чтобы это решение могли использовать другие люди.
Результаты
Основа для добавлении локализации для устройств Xiaomi в multi_lang.json — готова. Дальше можно перевести все функции устройства на русский язык с помощью нейросетей или вручную.
Вот промт, который я использовал для перевода:
Действуй, как эксперт в бытовой технике и электронике, а также в умном доме. Мне нужно составить lang-файл на русском языке для
НАЗВАНИЕ ПРИБОРА
Xiaomi в умном доме. Из спецификации я составил основу lang-файла.
Нужно перевести на русский язык все нетехнические значения. Определить их можно следующим образом: они начинаются с заглавной буквы и могут содержать пробелы.
Технические значения, наоборот, переводить не нужно. Технические значения начинаются со строчной буквы и содержат дефис (-).
Хорошо подумай, прежде чем перевести то или иное значение. Приведи аргументы, почему ты остановился на том или ином переводе.