feat(dashboard-zuhause): add Whirlpool tab (extended)

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.
This commit is contained in:
2026-05-02 16:35:39 +02:00
parent 01bfd89995
commit e3b92c83bc
+424
View File
@@ -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.07.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: 600800 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",