42 KiB
Исчерпывающее руководство по настройке системы полива в Home Assistant
Это руководство шаг за шагом проведёт вас через установку и настройку многоканальной системы полива на базе lighthub, интегрированной с Home Assistant через MQTT. В результате вы получите красивую и функциональную панель управления, которая включает:
- визуализацию уровня воды в баке (пусто / наполовину / полный),
- индикацию работы водопровода, дренажного и основного насосов,
- управление тремя зонами полива с заданием времени и прогресс-баром,
- интерактивную корректировку выполненного времени через проценты,
- историю ключевых параметров по клику на иконки.
1. Предварительные требования
- Установленный и настроенный Home Assistant (любая версия, поддерживающая Lovelace).
- Настроенный MQTT-брокер (например, Mosquitto) и интеграция MQTT в Home Assistant.
- HACS (Home Assistant Community Store) – для установки кастомных карт.
Примечание: Конфигурация MQTT‑датчиков и устройств уже готова и будет приведена ниже. Предполагается, что ваш контроллер lighthub уже отправляет данные в соответствующие топики.
2. Установка кастомных карт через HACS
Для корректной работы панели необходимо установить следующие карты. Все они доступны в HACS.
- Откройте HACS → Frontend → Explore & Download Repositories.
- Поочерёдно найдите и установите каждую из перечисленных ниже карт.
- После установки обновите страницу браузера (или перезагрузите интерфейс 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 |
Ползунок для настройки времени в more‑info окнах (не обязателен, но используется в стандартном окне number) |
| Card Mod | thomasloven/lovelace-card-mod |
Позволяет добавлять произвольные CSS‑стили к карточкам |
Важно: Если какая‑то карта не отображается в HACS, добавьте её вручную через HACS → ⋮ → Пользовательские репозитории. В поле URL вставьте ссылку на GitHub‑репозиторий, категорию выберите Lovelace.
3. Настройка MQTT‑сущностей
Вся логика обмена данными с контроллером lighthub заложена в MQTT‑конфигурации. Скопируйте приведённый ниже блок в файл configuration.yaml (или в отдельный файл, подключённый через mqtt: !include mqtt.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/$rVIN"
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:, объедините её с этим содержимым, сохранив правильные отступы):
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. Создание новой панели
- Перейдите в Настройки → Панели (Dashboards).
- Нажмите Создать панель (Add Dashboard).
- Название:
💧 Полив - Режим панели: Панель (одна карточка) – Panel (1 card).
- Название:
- Нажмите Создать.
5.2. Переход в редактор YAML
Сразу после создания панель откроется в графическом редакторе.
Нажмите на три точки ⋮ в правом верхнем углу и выберите Редактор YAML.
5.3. Вставка финального YAML
Удалите всё содержимое (обычно там type: panel\npath: ""\ncards: []) и вставьте следующий код:
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. Как пользоваться панелью
- Общее состояние: Отображает статус системы и режим (заморозка/разрешено/запрещено). Ошибка не показывается, но иконка станет красной при неисправности.
- Бак: Иконка батарейки меняет цвет и текст в зависимости от уровня воды (пусто/наполовину/полный). Нажатие открывает историю уровня.
- Водопровод и насосы: Показывают текущий статус (Выкл/Вкл/Качает) с цветовой индикацией. Клик – история соответствующего датчика.
- Управление циклом: Общий переключатель «Полив», кнопки запуска всех зон, заморозки, запрета, осушения бака. Работают как обычные MQTT‑команды.
- Зоны полива:
- Включение зоны – крайний левый переключатель (тумблер).
- Время – поле с кнопками +/- для задания уставки полива в секундах.
- Если время > 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. Вы можете управлять поливом с мобильного телефона, отслеживать историю и быть уверенными, что всё под контролем!

