Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexxit/morphnumbers
Компонент Home Assistant для работы с числительными в Jinja2
https://github.com/alexxit/morphnumbers
home-assistant
Last synced: 6 days ago
JSON representation
Компонент Home Assistant для работы с числительными в Jinja2
- Host: GitHub
- URL: https://github.com/alexxit/morphnumbers
- Owner: AlexxIT
- Created: 2020-03-17T11:46:08.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-08-03T15:54:09.000Z (4 months ago)
- Last Synced: 2024-11-07T03:12:00.093Z (13 days ago)
- Topics: home-assistant
- Language: Python
- Homepage: https://t.me/AlexxIT_SmartHome
- Size: 718 KB
- Stars: 90
- Watchers: 4
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Morph Numbers для Home Assistant
[![hacs_badge](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://github.com/custom-components/hacs)
Компонент [Home Assistant](https://www.home-assistant.io/), добавляющий **Jinja2** фильтр для работы с числительными. Хорошо подходит в дополнение к моему второму компоненту [YandexStation](https://github.com/AlexxIT/YandexStation).
![template](template2.png)
## Установка
**Способ 1.** [HACS](https://hacs.xyz/)
> HACS > Интеграции > 3 точки (правый верхний угол) > Пользовательские репозитории > URL: `AlexxIT/MorphNumbers`, Категория: Интеграция > Добавить > подождать > MorphNumbers > Установить
**Способ 2.** Вручную скопируйте папку `morph_numbers` из [latest release](https://github.com/AlexxIT/MorphNumbers/releases/latest) в директорию `/config/custom_components`.
## Настройка
**Способ 1.** GUI
> Настройки > Интеграции > Добавить интеграцию > **MorphNumbers**
Если интеграции нет в списке - очистите кэш браузера.
**Способ 2.** YAML
```yaml
morph_numbers:
```## Использование
Используется как дополнительный фильтр в шаблонах.
### Согласование слов с числительными
Полезно при отправке в Телеграм
```jinja2
{{ 24|format(morph='градус', as_text=false) }} => 24 градуса
```### Преобразование чисел в текст
Полезно для TTS. Яндекс и Google допускают ошибки при произнесении числительных.
В `morph` желательно писать слово/фразу, согласованную с цифрой 1, например:
- "перезагружен за одну секунду" - `morph='секунду'`
- "одна секунда это вечность" - `morph='секунда'````jinja2
Сервер перезагружен, за {{ 31|round|format(morph='секунду') }} => Сервер перезагружен, за тридцать одну секунду{{ 31|round|format(morph='секунда') }} - это целая вечность! => тридцать одна секунда - это целая вечность!
```### Порядковые числительные
В `morph` нужно указать пример, в какую форму преобразовать числительное.
```jinja2
и снова {{ 3|format(morph='первое', as_ordinal=True) }} сентября => и снова третье сентября
```### Ручной шаблон согласования
В случае, если автоматическая морфология допускает ошибки. Укажите слова для чисел: 1, 2, 5.
```jinja2
{{ 5|format(morph=['год','года','лет']) }} => пять лет
```### Число без согласования
```jinja2
{{ 2000435|format(morph='') }} => два миллиона четыреста тридцать пять
```### Согласование без вывовда числа
```jinja2
{{ 5|format(morph='просроченная задача', as_text=None) }} => просроченных задач
```### Обратное преобразование
```jinja2
{{ "два миллиона четыреста тридцать пять"|format(morph='', reverse=true) }} => 2000435
```### Дробные числа
Согласно правилам, целая и дробная части числа согласуются со словом "часть".
```jinja2
{{ 22.2|format(morph='градус') }} => двадцать две целых и две десятых градуса
```## Шаблон из скриншота
```yaml
Старт занял {{ states('sensor.start_time')|round|format(morph='секунду') }}{{ 1|format(morph='градус') }}
{{ 1|format(morph='задача') }}
{{ 1|format(morph='дерево') }}{{ 2000435|format(morph='синее облако') }}
{{ 2|format(morph='запланированная задача', as_text=false) }}
{{ 5|format(morph='просроченная задача', as_text=false) }}{{ 123|format(morph='') }}
{{ 0|format(morph='градус') }}
{{ -2|format(morph='градус') }}{{ 5|format(morph=['год','года','лет']) }}
{{ 100|format(morph='первому', as_ordinal=True) }} игроку приготовиться
и снова {{ 3|format(morph='первое', as_ordinal=True) }} сентября{{ 5|format(morph='просроченная задача', as_text=None) }}
``````yaml
script:
morph_numbers_test:
sequence:
- service: persistent_notification.create
data_template:
message: Старт занял {{ states('sensor.start_time')|round|format(morph='секунду') }}
```