core - freese precedence over dizable, sprinkler - ON then DRY, HA docs

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-05-25 12:14:43 +03:00
parent 84ce56fdde
commit 565195d60a
5 changed files with 897 additions and 9 deletions

View File

@@ -0,0 +1,894 @@
# Исчерпывающее руководство по настройке системы полива в Home Assistant
Это руководство шаг за шагом проведёт вас через установку и настройку многоканальной системы полива на базе [lighthub](https://github.com/anklimov/lighthub), интегрированной с Home Assistant через MQTT. В результате вы получите красивую и функциональную панель управления, которая включает:
- визуализацию уровня воды в баке (пусто / наполовину / полный),
- индикацию работы водопровода, дренажного и основного насосов,
- управление тремя зонами полива с заданием времени и прогресс-баром,
- интерактивную корректировку выполненного времени через проценты,
- историю ключевых параметров по клику на иконки.
---
## 1. Предварительные требования
- Установленный и настроенный [Home Assistant](https://www.home-assistant.io/) (любая версия, поддерживающая Lovelace).
- Настроенный MQTT-брокер (например, Mosquitto) и интеграция MQTT в Home Assistant.
- [HACS](https://hacs.xyz/) (Home Assistant Community Store) для установки кастомных карт.
> **Примечание:** Конфигурация MQTTдатчиков и устройств уже готова и будет приведена ниже. Предполагается, что ваш контроллер lighthub уже отправляет данные в соответствующие топики.
---
## 2. Установка кастомных карт через HACS
Для корректной работы панели необходимо установить следующие карты. Все они доступны в HACS.
1. Откройте **HACS****Frontend****Explore & Download Repositories**.
2. Поочерёдно найдите и установите каждую из перечисленных ниже карт.
3. После установки **обновите страницу** браузера (или перезагрузите интерфейс Home Assistant).
### Список обязательных карт
| Название | Репозиторий (для ручного добавления, если не находится) | Назначение |
|------------------------------|----------------------------------------------------------|------------|
| **Vertical Stack In Card** | `ofekashery/vertical-stack-in-card` | Объединение нескольких карточек в одну с общим фоном |
| **Button Card** | `custom-cards/button-card` | Гибкая карточка с динамическими иконками, анимацией и состояниями |
| **Bar Card** | `spacerokk/bar-card` (активный форк) | Прогресс-бар для отображения выполнения полива |
| **Mushroom Cards** | `piitaya/lovelace-mushroom` | Компактные и стильные карточки для датчиков и переключателей |
| **Slider Entity Row** | `thomasloven/lovelace-slider-entity-row` | Ползунок для настройки времени в moreinfo окнах (не обязателен, но используется в стандартном окне `number`) |
| **Card Mod** | `thomasloven/lovelace-card-mod` | Позволяет добавлять произвольные CSSстили к карточкам |
> **Важно:** Если какая‑то карта не отображается в HACS, добавьте её вручную через **HACS → ⋮ → Пользовательские репозитории**. В поле URL вставьте ссылку на GitHubрепозиторий, категорию выберите **Lovelace**.
---
## 3. Настройка MQTTсущностей
Вся логика обмена данными с контроллером lighthub заложена в MQTTконфигурации. Скопируйте приведённый ниже блок в файл `configuration.yaml` (или в отдельный файл, подключённый через `mqtt: !include mqtt.yaml`).
```yaml
# Пример размещения в configuration.yaml
mqtt:
switch:
- name: "Полив"
state_topic: "edem/s_out/sprinkler/cmd"
command_topic: "edem/air/sprinkler/cmd"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив север"
state_topic: "edem/s_out/sprinkler/nord/cmd"
command_topic: "edem/air/sprinkler/nord/cmd"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив юг"
state_topic: "edem/s_out/sprinkler/south/cmd"
command_topic: "edem/air/sprinkler/south/cmd"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив капельный"
state_topic: "edem/s_out/sprinkler/trees/cmd"
command_topic: "edem/air/sprinkler/trees/cmd"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив розетки"
state_topic: "edem/s_out/sprinkler/outlets/cmd"
command_topic: "edem/air/sprinkler/outlets/cmd"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
button:
- name: "Полив сброс"
command_topic: "edem/air/sprinkler/cmd"
payload_press: "RESET"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив блокировка"
command_topic: "edem/air/sprinkler/cmd"
payload_press: "FREEZE"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив разблокировка"
command_topic: "edem/air/sprinkler/cmd"
payload_press: "UNFREEZE"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив разрешить"
command_topic: "edem/air/sprinkler/cmd"
payload_press: "ENABLE"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив запретить"
command_topic: "edem/air/sprinkler/cmd"
payload_press: "DISABLE"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив осушение бака"
command_topic: "edem/air/sprinkler/cmd"
payload_press: "DRY"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
number:
- name: "Полив юг"
state_topic: "edem/s_out/sprinkler/south/set"
command_topic: "edem/air/sprinkler/south/set"
min: 0
max: 6000
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив север"
state_topic: "edem/s_out/sprinkler/nord/set"
command_topic: "edem/air/sprinkler/nord/set"
min: 0
max: 6000
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив капельный"
state_topic: "edem/s_out/sprinkler/trees/set"
command_topic: "edem/air/sprinkler/trees/set"
min: 0
max: 6000
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив юг выполнено"
state_topic: "edem/s_out/sprinkler/south/val"
command_topic: "edem/air/sprinkler/south/val"
min: 0
max: 60000
mode: slider
icon: "mdi:timer-sand"
unit_of_measurement: 'sec'
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив север выполнено"
state_topic: "edem/s_out/sprinkler/nord/val"
command_topic: "edem/air/sprinkler/nord/val"
min: 0
max: 60000
mode: slider
icon: "mdi:timer-sand"
unit_of_measurement: 'sec'
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив капельный выполнено"
state_topic: "edem/s_out/sprinkler/trees/val"
command_topic: "edem/air/sprinkler/trees/val"
min: 0
max: 60000
mode: slider
icon: "mdi:timer-sand"
unit_of_measurement: 'sec'
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
sensor:
- name: "Полив бак Макс"
state_topic: "edem/s_out/sprinkler/$wMax"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив бак Мin"
state_topic: "edem/s_out/sprinkler/$wMin"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив водопровод"
state_topic: "edem/s_out/sprinkler/$vIN"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив дренаж вкл"
state_topic: "edem/s_out/sprinkler/$rDren"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив дренаж качает"
state_topic: "edem/s_out/sprinkler/$fbDren"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив насос вкл"
state_topic: "edem/s_out/sprinkler/$rPump"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив насос качает"
state_topic: "edem/s_out/sprinkler/$fbPump"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив состояние"
state_topic: "edem/s_out/sprinkler/$state"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив ошибка"
state_topic: "edem/s_out/sprinkler/$fault"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Поливаем юг"
state_topic: "edem/s_out/sprinkler/south/$state"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Поливаем север"
state_topic: "edem/s_out/sprinkler/nord/$state"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Поливаем капельно"
state_topic: "edem/s_out/sprinkler/trees/$state"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив розетка статус"
state_topic: "edem/s_out/sprinkler/outlets/$state"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
- name: "Полив блокировки"
state_topic: "edem/s_out/sprinkler/ctrl"
availability_topic: "edem/air/$state"
payload_available: "ready"
payload_not_available: "disconnected"
```
> **Пояснение:**
> - `switch` переключатели для запуска/остановки зон и общий переключатель.
> - `button` кнопки для сброса, блокировки, разрешения и осушения бака.
> - `number` задание времени полива (уставки) и выполненное время (с возможностью ручной корректировки).
> - `sensor` датчики состояния поплавков (`$wMax`, `$wMin`), водопровода, насосов, статуса полива, ошибок и т.д.
После добавления конфигурации **перезагрузите YAML** (Настройки → Сервер → Перезагрузить конфигурацию YAML).
---
## 4. Настройка templateсущностей
Для работы панели необходимы два типа вычислимых объектов:
- **Уровень бака в процентах** (на основе поплавков).
- **Прогресс полива в процентах** для каждой зоны (с возможностью двусторонней синхронизации: проценты ↔ секунды).
Добавьте следующий блок в `configuration.yaml` (если у вас уже есть секция `template:`, объедините её с этим содержимым, сохранив правильные отступы):
```yaml
template:
# Сенсор уровня бака
- sensor:
- name: "Полив бак уровень"
state: >
{% if states('sensor.poliv_bak_maks') == 'ON' %}
100
{% elif states('sensor.poliv_bak_min') == 'ON' %}
50
{% else %}
0
{% endif %}
# Числовые шаблоны прогресса (проценты)
- number:
- name: "Полив юг прогресс"
state: >
{% set zadanie = states('number.poliv_iug') | float(0) %}
{% set vypolneno = states('number.poliv_iug_vypolneno') | float(0) %}
{{ ((vypolneno / zadanie * 100) | round(0)) if zadanie > 0 else 0 }}
set_value:
- service: number.set_value
target:
entity_id: number.poliv_iug_vypolneno
data:
value: >
{% set zadanie = states('number.poliv_iug') | float(0) %}
{{ ((value | float(0)) * zadanie / 100) | round(0) }}
min: 0
max: 100
step: 1
unit_of_measurement: "%"
icon: mdi:progress-clock
- name: "Полив север прогресс"
state: >
{% set zadanie = states('number.poliv_sever') | float(0) %}
{% set vypolneno = states('number.poliv_sever_vypolneno') | float(0) %}
{{ ((vypolneno / zadanie * 100) | round(0)) if zadanie > 0 else 0 }}
set_value:
- service: number.set_value
target:
entity_id: number.poliv_sever_vypolneno
data:
value: >
{% set zadanie = states('number.poliv_sever') | float(0) %}
{{ ((value | float(0)) * zadanie / 100) | round(0) }}
min: 0
max: 100
step: 1
unit_of_measurement: "%"
icon: mdi:progress-clock
- name: "Полив капельный прогресс"
state: >
{% set zadanie = states('number.poliv_kapelnyi') | float(0) %}
{% set vypolneno = states('number.poliv_kapelnyi_vypolneno') | float(0) %}
{{ ((vypolneno / zadanie * 100) | round(0)) if zadanie > 0 else 0 }}
set_value:
- service: number.set_value
target:
entity_id: number.poliv_kapelnyi_vypolneno
data:
value: >
{% set zadanie = states('number.poliv_kapelnyi') | float(0) %}
{{ ((value | float(0)) * zadanie / 100) | round(0) }}
min: 0
max: 100
step: 1
unit_of_measurement: "%"
icon: mdi:progress-clock
```
**Как это работает:**
- `state` динамически вычисляет процент выполнения на основе заданного времени (`number.poliv_...`) и выполненного (`number.poliv_..._vypolneno`).
- `set_value` при ручном изменении процента (через ползунок или ввод) пересчитывает его в секунды и отправляет команду в контроллер через `number.set_value` для выполненного времени. Таким образом, можно вручную скорректировать прогресс, и значение сразу уйдёт в MQTT.
- Бак определяется по поплавкам: если активен `$wMax` → 100%, если только `$wMin` → 50%, иначе 0%.
Снова **перезагрузите YAMLконфигурацию**.
---
## 5. Создание панели управления (Dashboard)
### 5.1. Создание новой панели
1. Перейдите в **Настройки****Панели** (Dashboards).
2. Нажмите **Создать панель** (Add Dashboard).
- Название: `💧 Полив`
- Режим панели: **Панель (одна карточка)** *Panel (1 card)*.
3. Нажмите **Создать**.
### 5.2. Переход в редактор YAML
Сразу после создания панель откроется в графическом редакторе.
Нажмите на три точки **⋮** в правом верхнем углу и выберите **Редактор YAML**.
### 5.3. Вставка финального YAML
Удалите всё содержимое (обычно там `type: panel\npath: ""\ncards: []`) и вставьте следующий код:
```yaml
views:
- type: panel
path: ''
cards:
- type: custom:vertical-stack-in-card
title: 💧 Система полива
cards:
# ── Общее состояние ──
- type: horizontal-stack
cards:
- type: custom:mushroom-entity-card
entity: sensor.poliv_sostoianie
name: Статус
primary_info: state
icon: mdi:state-machine
- type: custom:mushroom-entity-card
entity: sensor.poliv_blokirovki
name: Режим
primary_info: state
icon: mdi:lock
# ── Бак ──
- type: custom:mushroom-template-card
primary: Бак воды
secondary: |
{% set lvl = states('sensor.poliv_bak_uroven') %}
{% if lvl == '100' %} Полный
{% elif lvl == '50' %} Наполовину
{% else %} Пустой {% endif %}
icon: mdi:battery
icon_color: |
{% set lvl = states('sensor.poliv_bak_uroven') %}
{% if lvl == '100' %} green
{% elif lvl == '50' %} orange
{% else %} grey {% endif %}
tap_action:
action: more-info
entity: sensor.poliv_bak_uroven
card_mod:
style: |
ha-card {
--mush-icon-size: 24px;
height: 60px;
}
- type: divider
# ── Водопровод ──
- type: custom:mushroom-template-card
primary: Водопровод
secondary: |
{% if states('sensor.poliv_vodoprovod') == 'ON' %} Вкл
{% else %} Выкл {% endif %}
icon: mdi:water-pump
icon_color: |
{% if states('sensor.poliv_vodoprovod') == 'ON' %} blue
{% else %} grey {% endif %}
tap_action:
action: more-info
entity: sensor.poliv_vodoprovod
card_mod:
style: |
ha-card {
--mush-icon-size: 24px;
height: 60px;
}
# ── Насосы ──
- type: horizontal-stack
cards:
- type: custom:mushroom-template-card
primary: Дренаж
secondary: |
{% set pwr = states('sensor.poliv_drenazh_vkl') %}
{% set pump = states('sensor.poliv_drenazh_kachaet') %}
{% if pwr == 'ON' and pump == 'ON' %} Качает
{% elif pwr == 'ON' %} Вкл
{% else %} Выкл {% endif %}
icon: mdi:pump
icon_color: |
{% set pwr = states('sensor.poliv_drenazh_vkl') %}
{% set pump = states('sensor.poliv_drenazh_kachaet') %}
{% if pwr == 'ON' and pump == 'ON' %} red
{% elif pwr == 'ON' %} green
{% else %} grey {% endif %}
tap_action:
action: more-info
entity: sensor.poliv_drenazh_kachaet
card_mod:
style: |
ha-card {
--mush-icon-size: 24px;
height: 65px;
}
- type: custom:mushroom-template-card
primary: Помпа
secondary: |
{% set pwr = states('sensor.poliv_nasos_vkl') %}
{% set pump = states('sensor.poliv_nasos_kachaet') %}
{% if pwr == 'ON' and pump == 'ON' %} Качает
{% elif pwr == 'ON' %} Вкл
{% else %} Выкл {% endif %}
icon: mdi:pump
icon_color: |
{% set pwr = states('sensor.poliv_nasos_vkl') %}
{% set pump = states('sensor.poliv_nasos_kachaet') %}
{% if pwr == 'ON' and pump == 'ON' %} red
{% elif pwr == 'ON' %} green
{% else %} grey {% endif %}
tap_action:
action: more-info
entity: sensor.poliv_nasos_kachaet
card_mod:
style: |
ha-card {
--mush-icon-size: 24px;
height: 65px;
}
- type: divider
# ── Управление циклом ──
- type: entities
title: Управление циклом
show_header_toggle: false
entities:
- entity: switch.poliv
name: Полив
icon: mdi:sprinkler
- entity: switch.poliv_rozetki
name: Водяная розетка
icon: mdi:pipe-valve
- entity: button.poliv_sbros
name: Запуск всех зон
icon: mdi:play
- entity: button.poliv_blokirovka
name: Заморозить
icon: mdi:snowflake
- entity: button.poliv_razblokirovka
name: Разморозить
icon: mdi:snowflake-melt
- entity: button.poliv_zapretit
name: Запретить полив
icon: mdi:cancel
- entity: button.poliv_razreshit
name: Разрешить полив
icon: mdi:check-circle
- entity: button.poliv_osushenie_baka
name: Осушение бака
icon: mdi:hair-dryer
- type: divider
# ── Северная зона ──
- type: custom:vertical-stack-in-card
title: 🌿 Северная зона
cards:
- type: horizontal-stack
cards:
# Выключатель
- type: custom:mushroom-entity-card
entity: switch.poliv_sever
show_name: false
show_icon: false
show_state: false
layout: horizontal
# Время
- type: custom:mushroom-entity-card
entity: number.poliv_sever
name: Время
icon: mdi:timer-edit
layout: horizontal
card_mod:
style: |
ha-card {
--mush-icon-size: 24px;
height: 48px;
flex: 1 1 0;
}
- type: conditional
conditions:
- entity: number.poliv_sever
state_not: '0'
card:
type: custom:vertical-stack-in-card
title: ''
cards:
- type: horizontal-stack
cards:
- type: custom:button-card
entity: sensor.polivaem_sever
show_name: false
show_state: false
icon: mdi:sprinkler
tap_action:
action: more-info
entity: sensor.polivaem_sever
state:
- value: 'ON'
color: green
styles:
icon:
- animation: pulse 1.5s infinite
- value: 'OFF'
color: grey
styles:
icon:
- animation: none
styles:
card:
- height: 40px
- width: 40px
icon:
- width: 24px
- height: 24px
- type: custom:mushroom-template-card
primary: ''
secondary: >
Выполнено: {{ states('number.poliv_sever_vypolneno')
}} / {{ states('number.poliv_sever') }} с
icon: ''
tap_action:
action: more-info
entity: number.poliv_sever_progress
card_mod:
style: |
ha-card {
height: 40px;
margin-top: 0px;
}
- type: custom:bar-card
entities:
- entity: number.poliv_sever_progress
name: Прогресс
icon: mdi:progress-clock
max: 100
severity:
- from: 0
to: 25
color: red
- from: 26
to: 75
color: orange
- from: 76
to: 100
color: green
unit_of_measurement: '%'
- type: divider
# ── Южная зона ──
- type: custom:vertical-stack-in-card
title: 🌿 Южная зона
cards:
- type: horizontal-stack
cards:
- type: custom:mushroom-entity-card
entity: switch.poliv_iug
show_name: false
show_icon: false
show_state: false
layout: horizontal
- type: custom:mushroom-entity-card
entity: number.poliv_iug
name: Время
icon: mdi:timer-edit
layout: horizontal
card_mod:
style: |
ha-card {
--mush-icon-size: 24px;
height: 48px;
flex: 1 1 0;
}
- type: conditional
conditions:
- entity: number.poliv_iug
state_not: '0'
card:
type: custom:vertical-stack-in-card
title: ''
cards:
- type: horizontal-stack
cards:
- type: custom:button-card
entity: sensor.polivaem_iug
show_name: false
show_state: false
icon: mdi:sprinkler
tap_action:
action: more-info
entity: sensor.polivaem_iug
state:
- value: 'ON'
color: green
styles:
icon:
- animation: pulse 1.5s infinite
- value: 'OFF'
color: grey
styles:
icon:
- animation: none
styles:
card:
- height: 40px
- width: 40px
icon:
- width: 24px
- height: 24px
- type: custom:mushroom-template-card
primary: ''
secondary: >
Выполнено: {{ states('number.poliv_iug_vypolneno')
}} / {{ states('number.poliv_iug') }} с
icon: ''
tap_action:
action: more-info
entity: number.poliv_iug_progress
card_mod:
style: |
ha-card {
height: 40px;
margin-top: 0px;
}
- type: custom:bar-card
entities:
- entity: number.poliv_iug_progress
name: Прогресс
icon: mdi:progress-clock
max: 100
severity:
- from: 0
to: 25
color: red
- from: 26
to: 75
color: orange
- from: 76
to: 100
color: green
unit_of_measurement: '%'
- type: divider
# ── Капельная зона ──
- type: custom:vertical-stack-in-card
title: 🌿 Капельная зона
cards:
- type: horizontal-stack
cards:
- type: custom:mushroom-entity-card
entity: switch.poliv_kapelnyi
show_name: false
show_icon: false
show_state: false
layout: horizontal
- type: custom:mushroom-entity-card
entity: number.poliv_kapelnyi
name: Время
icon: mdi:timer-edit
layout: horizontal
card_mod:
style: |
ha-card {
--mush-icon-size: 24px;
height: 48px;
flex: 1 1 0;
}
- type: conditional
conditions:
- entity: number.poliv_kapelnyi
state_not: '0'
card:
type: custom:vertical-stack-in-card
title: ''
cards:
- type: horizontal-stack
cards:
- type: custom:button-card
entity: sensor.polivaem_kapelno
show_name: false
show_state: false
icon: mdi:watering-can
tap_action:
action: more-info
entity: sensor.polivaem_kapelno
state:
- value: 'ON'
color: green
styles:
icon:
- animation: pulse 1.5s infinite
- value: 'OFF'
color: grey
styles:
icon:
- animation: none
styles:
card:
- height: 40px
- width: 40px
icon:
- width: 24px
- height: 24px
- type: custom:mushroom-template-card
primary: ''
secondary: >
Выполнено: {{
states('number.poliv_kapelnyi_vypolneno') }} / {{
states('number.poliv_kapelnyi') }} с
icon: ''
tap_action:
action: more-info
entity: number.poliv_kapelnyi_progress
card_mod:
style: |
ha-card {
height: 40px;
margin-top: 0px;
}
- type: custom:bar-card
entities:
- entity: number.poliv_kapelnyi_progress
name: Прогресс
icon: mdi:progress-clock
max: 100
severity:
- from: 0
to: 25
color: red
- from: 26
to: 75
color: orange
- from: 76
to: 100
color: green
unit_of_measurement: '%'
```
Нажмите **Сохранить** панель готова к использованию.
---
## 6. Как пользоваться панелью
![sprinkler_1.jpeg](sprinkler_1.jpeg)
![sprinkler_2.jpeg](sprinkler_2.jpeg)
- **Общее состояние:** Отображает статус системы и режим (заморозка/разрешено/запрещено). Ошибка не показывается, но иконка станет красной при неисправности.
- **Бак:** Иконка батарейки меняет цвет и текст в зависимости от уровня воды (пусто/наполовину/полный). Нажатие открывает историю уровня.
- **Водопровод и насосы:** Показывают текущий статус (Выкл/Вкл/Качает) с цветовой индикацией. Клик история соответствующего датчика.
- **Управление циклом:** Общий переключатель «Полив», кнопки запуска всех зон, заморозки, запрета, осушения бака. Работают как обычные MQTTкоманды.
- **Зоны полива:**
1. **Включение зоны** крайний левый переключатель (тумблер).
2. **Время** поле с кнопками +/- для задания уставки полива в секундах.
3. Если время > 0, под строкой появятся:
- Индикатор полива (спринклер/лейка) цветной, с анимацией пульсации при работе. Нажатие открывает историю активности зоны.
- Строка «Выполнено: X / Y с» абсолютное значение. Нажатие открывает окно редактирования прогресса в процентах.
- Прогресс-бар визуальное отображение процента выполнения (красный → оранжевый → зелёный).
- **Корректировка прогресса:** Кликните на строку «Выполнено…» → появится слайдер 0-100%. Измените процент, и соответствующее количество секунд сразу отправится в контроллер (автоматический пересчёт).
---
## 7. Возможные проблемы и их решение
| Проблема | Вероятная причина | Решение |
|----------|-------------------|---------|
| Не отображаются прогресс‑бары | Отсутствует `bar-card` или не созданы `template number` | Проверьте HACS, установите карту. Убедитесь, что templateчисла добавлены и конфигурация перезагружена. |
| Иконка полива не меняет цвет | Неправильное имя датчика `sensor.polivaem_...` | Проверьте точное название в разделе **Состояния**. Поправьте в YAML панели. |
| Тумблер включения зоны не видим | Не установлена карта `mushroom-entity-card` или перекрыт стилями | Убедитесь, что `mushroom-cards` установлены. В нашем финальном YAML тумблер видим всегда. |
| Ошибка «expected float» при движении слайдера прогресса | Используется `slider-entity-row` в активном режиме, а динамический `max` задан некорректно | В нашем решении прогресс‑бар только визуальный (`bar-card`), ручная корректировка через `template number` с собственным `set_value`. Ошибки быть не должно. |
| Бак всегда показывает «Пустой» | Неправильно работают поплавки или датчики `$wMax`/`$wMin` не обновляются | Проверьте в MQTTтопиках фактические значения. Убедитесь, что поплавки подключены и отправляют ON/OFF. |
---
## 8. Дополнительная информация
- Все команды управления (вкл/выкл зон, сброс, заморозка и т.д.) отправляются напрямую в контроллер lighthub через MQTT.
- Система использует `availability_topic` для отслеживания связи с контроллером. При пропадании сигнала все элементы станут недоступны (серые).
- При желании можно расширить панель новыми зонами, копируя структуру существующих и добавляя соответствующие `number`, `switch` и `sensor` в MQTTконфигурацию и `template`.
---
## Приложение: полный финальный YAML панели
Код уже приведён в разделе 5.3. Используйте его как окончательную версию.
---
Теперь ваша система полива полностью интегрирована в Home Assistant. Вы можете управлять поливом с мобильного телефона, отслеживать историю и быть уверенными, что всё под контролем!

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 KiB