Files
lighthub/documentation/Sprinkler_HomeAssistant.md

42 KiB
Raw Blame History

Исчерпывающее руководство по настройке системы полива в 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.

  1. Откройте HACSFrontendExplore & 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).

# Пример размещения в 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:, объедините её с этим содержимым, сохранив правильные отступы):

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: []) и вставьте следующий код:

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_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. Вы можете управлять поливом с мобильного телефона, отслеживать историю и быть уверенными, что всё под контролем!