From e3b92c83bc67bf22819bc25a8e464b56e81baf46 Mon Sep 17 00:00:00 2001 From: Florian Krebs Date: Sat, 2 May 2026 16:35:39 +0200 Subject: [PATCH] feat(dashboard-zuhause): add Whirlpool tab (extended) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Volle Whirlpool-Steuerung im Tab — bewusst doppelt zum dashboard_spa, für schnellen Zugriff vom Tablet. 5 Sections: - Klima & Status: climate.spa_thermostat + Heater/Pumpe/Filter/Ozon/Heizrate - Wasserchemie (Ondilo ICO): · Chips pH/ORP/Temp/Akku mit Color-Coding · pH 24h Chart mit Annotation 7.0-7.6 (Ideal grün) · ORP 24h Chart mit Annotation 600-800 mV (Ideal grün) - Steuerung: Master/Düsen/Licht-Switches, Heizmodus/Temp-Range, 2× Filterzeit/-dauer - Energie: Leistung-Chip, Energie kumuliert, Heater-kWh, 24h Apex - Pflege & Wartung: 3× input_datetime mit 'vor X Tagen' Template, Color: rot wenn überfällig (Wasserpflege >7d, Kartusche >30d, Wasserwechsel >90d) + conditional Störungsmeldung-Card Aktuelle Werte: pH 6.22 (zu niedrig!), ORP 157 mV (zu niedrig!) — Wasserwerte brauchen Anpassung. --- .storage/lovelace.lovelace | 424 +++++++++++++++++++++++++++++++++++++ 1 file changed, 424 insertions(+) diff --git a/.storage/lovelace.lovelace b/.storage/lovelace.lovelace index 34069b5..c49fca0 100644 --- a/.storage/lovelace.lovelace +++ b/.storage/lovelace.lovelace @@ -1301,6 +1301,430 @@ } ] }, + { + "title": "Whirlpool", + "path": "whirlpool", + "icon": "mdi:hot-tub", + "type": "sections", + "max_columns": 2, + "sections": [ + { + "type": "grid", + "title": "Klima & Status", + "cards": [ + { + "type": "custom:mushroom-climate-card", + "entity": "climate.spa_thermostat", + "show_temperature_control": true, + "fill_container": true + }, + { + "type": "custom:mushroom-chips-card", + "alignment": "justify", + "chips": [ + { + "type": "template", + "icon": "mdi:fire", + "icon_color": "{% if is_state('sensor.spa_heater','ON') %}red{% else %}grey{% endif %}", + "content": "Heater {{ states('sensor.spa_heater') }}" + }, + { + "type": "template", + "icon": "mdi:pump", + "icon_color": "{% if is_state('sensor.spa_circulation_pump','HIGH') %}blue{% elif is_state('sensor.spa_circulation_pump','LOW') %}cyan{% else %}grey{% endif %}", + "content": "Umwälz {{ states('sensor.spa_circulation_pump') }}" + }, + { + "type": "template", + "icon": "mdi:filter", + "icon_color": "{% if is_state('sensor.spa_filter_1','ON') %}green{% else %}grey{% endif %}", + "content": "Filter1 {{ states('sensor.spa_filter_1') }}" + }, + { + "type": "template", + "icon": "mdi:filter-outline", + "icon_color": "{% if is_state('sensor.spa_filter_2','ON') %}green{% else %}grey{% endif %}", + "content": "Filter2 {{ states('sensor.spa_filter_2') }}" + }, + { + "type": "template", + "icon": "mdi:flash", + "icon_color": "{% if is_state('sensor.spa_ozone','ON') %}cyan{% else %}grey{% endif %}", + "content": "Ozon" + }, + { + "type": "template", + "icon": "mdi:trending-up", + "icon_color": "amber", + "content": "{{ states('sensor.whirlpool_heizrate') | float(0) | round(2) }} °C/h" + } + ] + } + ] + }, + { + "type": "grid", + "title": "Wasserchemie (Ondilo ICO)", + "cards": [ + { + "type": "custom:mushroom-chips-card", + "alignment": "justify", + "chips": [ + { + "type": "template", + "icon": "mdi:ph", + "icon_color": "{% set v = states('sensor.whirlpool_ph') | float(0) %}{% if v < 6.8 or v > 7.8 %}red{% elif v < 7.0 or v > 7.6 %}orange{% else %}green{% endif %}", + "content": "pH {{ states('sensor.whirlpool_ph') }}" + }, + { + "type": "template", + "icon": "mdi:flash-triangle", + "icon_color": "{% set v = states('sensor.whirlpool_oxydo_reduktionspotenzial') | float(0) %}{% if v < 500 %}red{% elif v < 600 %}orange{% elif v <= 800 %}green{% else %}orange{% endif %}", + "content": "ORP {{ states('sensor.whirlpool_oxydo_reduktionspotenzial') }} mV" + }, + { + "type": "template", + "icon": "mdi:thermometer-water", + "icon_color": "blue", + "content": "{{ states('sensor.whirlpool_temperatur') }} °C" + }, + { + "type": "template", + "icon": "mdi:battery", + "icon_color": "{% set v = states('sensor.whirlpool_batterie') | float(0) %}{% if v < 20 %}red{% elif v < 40 %}orange{% else %}green{% endif %}", + "content": "{{ states('sensor.whirlpool_batterie') }}%" + } + ] + }, + { + "type": "custom:apexcharts-card", + "header": { + "show": true, + "title": "pH (Ideal: 7.0–7.6)", + "show_states": true + }, + "graph_span": "24h", + "yaxis": [ + { + "min": 6, + "max": 8, + "decimals": 2, + "apex_config": { + "tickAmount": 4 + } + } + ], + "apex_config": { + "annotations": { + "yaxis": [ + { + "y": 7.0, + "y2": 7.6, + "borderColor": "#00e396", + "fillColor": "#00e396", + "opacity": 0.15, + "label": { + "text": "Ideal", + "style": { + "color": "#fff", + "background": "#00e396" + } + } + } + ] + } + }, + "series": [ + { + "entity": "sensor.whirlpool_ph", + "type": "line", + "stroke_width": 2, + "group_by": { + "func": "avg", + "duration": "10m" + } + } + ] + }, + { + "type": "custom:apexcharts-card", + "header": { + "show": true, + "title": "ORP (Ideal: 600–800 mV)", + "show_states": true + }, + "graph_span": "24h", + "yaxis": [ + { + "min": 0, + "max": 1000, + "decimals": 0, + "apex_config": { + "tickAmount": 5 + } + } + ], + "apex_config": { + "annotations": { + "yaxis": [ + { + "y": 600, + "y2": 800, + "borderColor": "#00e396", + "fillColor": "#00e396", + "opacity": 0.15, + "label": { + "text": "Ideal", + "style": { + "color": "#fff", + "background": "#00e396" + } + } + } + ] + } + }, + "series": [ + { + "entity": "sensor.whirlpool_oxydo_reduktionspotenzial", + "type": "line", + "stroke_width": 2, + "group_by": { + "func": "avg", + "duration": "10m" + } + } + ] + } + ] + }, + { + "type": "grid", + "title": "Steuerung", + "cards": [ + { + "type": "horizontal-stack", + "cards": [ + { + "type": "custom:mushroom-entity-card", + "entity": "switch.whirlpool", + "name": "Master", + "icon": "mdi:hot-tub", + "icon_color": "{% if is_state('switch.whirlpool','on') %}cyan{% else %}grey{% endif %}", + "tap_action": { + "action": "toggle" + }, + "fill_container": true + }, + { + "type": "custom:mushroom-entity-card", + "entity": "switch.spa_pump", + "name": "Düsen", + "icon": "mdi:fan", + "icon_color": "{% if is_state('switch.spa_pump','on') %}blue{% else %}grey{% endif %}", + "tap_action": { + "action": "toggle" + }, + "fill_container": true + }, + { + "type": "custom:mushroom-entity-card", + "entity": "switch.spa_light", + "name": "Licht", + "icon": "mdi:lightbulb", + "icon_color": "{% if is_state('switch.spa_light','on') %}amber{% else %}grey{% endif %}", + "tap_action": { + "action": "toggle" + }, + "fill_container": true + } + ] + }, + { + "type": "horizontal-stack", + "cards": [ + { + "type": "custom:mushroom-select-card", + "entity": "select.spa_heater_mode", + "name": "Heizmodus", + "icon": "mdi:fire", + "fill_container": true + }, + { + "type": "custom:mushroom-select-card", + "entity": "select.spa_temperature_range", + "name": "Temp-Bereich", + "icon": "mdi:thermometer-lines", + "fill_container": true + } + ] + }, + { + "type": "horizontal-stack", + "cards": [ + { + "type": "custom:mushroom-select-card", + "entity": "select.spa_filter_time_1", + "name": "Filter 1 Start", + "icon": "mdi:filter", + "fill_container": true + }, + { + "type": "custom:mushroom-select-card", + "entity": "select.spa_filter_duration_1", + "name": "Filter 1 Dauer", + "icon": "mdi:timer-sand", + "fill_container": true + } + ] + }, + { + "type": "horizontal-stack", + "cards": [ + { + "type": "custom:mushroom-select-card", + "entity": "select.spa_filter_time_2", + "name": "Filter 2 Start", + "icon": "mdi:filter-outline", + "fill_container": true + }, + { + "type": "custom:mushroom-select-card", + "entity": "select.spa_filter_duration_2", + "name": "Filter 2 Dauer", + "icon": "mdi:timer-sand", + "fill_container": true + } + ] + }, + { + "type": "custom:mushroom-entity-card", + "entity": "switch.whirlpool_filterzyklus_2_aktivieren", + "name": "Filterzyklus 2 aktiv?", + "tap_action": { + "action": "toggle" + } + } + ] + }, + { + "type": "grid", + "title": "Energie", + "cards": [ + { + "type": "custom:mushroom-chips-card", + "alignment": "justify", + "chips": [ + { + "type": "template", + "icon": "mdi:flash", + "icon_color": "amber", + "content": "{{ states('sensor.whirlpool_leistung') | float(0) | round(0) }} W" + }, + { + "type": "template", + "icon": "mdi:counter", + "icon_color": "purple", + "content": "{{ states('sensor.whirlpool_energie') | float(0) | round(0) }} kWh ges." + }, + { + "type": "template", + "icon": "mdi:fire", + "icon_color": "red", + "content": "{{ states('sensor.spa_heater_energy') | float(0) | round(0) }} kWh Heizer" + } + ] + }, + { + "type": "custom:apexcharts-card", + "header": { + "show": true, + "title": "Leistung 24h", + "show_states": true + }, + "graph_span": "24h", + "yaxis": [ + { + "min": 0, + "decimals": 0, + "apex_config": { + "tickAmount": 5 + } + } + ], + "series": [ + { + "entity": "sensor.whirlpool_leistung", + "type": "area", + "stroke_width": 2, + "group_by": { + "func": "avg", + "duration": "5m" + } + } + ] + } + ] + }, + { + "type": "grid", + "title": "Pflege & Wartung", + "cards": [ + { + "type": "custom:mushroom-template-card", + "primary": "Letzte Wasserpflege", + "secondary": "{% set d = states('input_datetime.whirlpool_letzte_wasserpflege') %}{% set days = (now() - strptime(d,'%Y-%m-%d') | as_local).days %}vor {{ days }} Tagen ({{ d }})", + "icon": "mdi:water-pump", + "icon_color": "{% set d = states('input_datetime.whirlpool_letzte_wasserpflege') %}{% set days = (now() - strptime(d,'%Y-%m-%d') | as_local).days %}{% if days > 7 %}red{% elif days > 5 %}orange{% else %}green{% endif %}", + "tap_action": { + "action": "more-info", + "entity": "input_datetime.whirlpool_letzte_wasserpflege" + } + }, + { + "type": "custom:mushroom-template-card", + "primary": "Letzter Kartuschenwechsel", + "secondary": "{% set d = states('input_datetime.whirlpool_letzter_kartuschenwechsel') %}{% set days = (now() - strptime(d,'%Y-%m-%d') | as_local).days %}vor {{ days }} Tagen ({{ d }})", + "icon": "mdi:filter", + "icon_color": "{% set d = states('input_datetime.whirlpool_letzter_kartuschenwechsel') %}{% set days = (now() - strptime(d,'%Y-%m-%d') | as_local).days %}{% if days > 30 %}red{% elif days > 25 %}orange{% else %}green{% endif %}", + "tap_action": { + "action": "more-info", + "entity": "input_datetime.whirlpool_letzter_kartuschenwechsel" + } + }, + { + "type": "custom:mushroom-template-card", + "primary": "Letzter Wasserwechsel", + "secondary": "{% set d = states('input_datetime.whirlpool_letzter_wasserwechsel') %}{% set days = (now() - strptime(d,'%Y-%m-%d') | as_local).days %}vor {{ days }} Tagen ({{ d }})", + "icon": "mdi:waves", + "icon_color": "{% set d = states('input_datetime.whirlpool_letzter_wasserwechsel') %}{% set days = (now() - strptime(d,'%Y-%m-%d') | as_local).days %}{% if days > 90 %}red{% elif days > 75 %}orange{% else %}green{% endif %}", + "tap_action": { + "action": "more-info", + "entity": "input_datetime.whirlpool_letzter_wasserwechsel" + } + }, + { + "type": "conditional", + "conditions": [ + { + "condition": "state", + "entity": "sensor.spa_fault_message", + "state_not": "" + } + ], + "card": { + "type": "custom:mushroom-template-card", + "primary": "⚠️ Störung", + "secondary": "{{ states('sensor.spa_fault_message') }}", + "icon": "mdi:alert", + "icon_color": "red", + "fill_container": true + } + } + ] + } + ] + }, { "title": "Home", "type": "sections",