{ "version": 1, "minor_version": 1, "key": "lovelace.dashboard_spa", "data": { "config": { "views": [ { "title": "Whirlpool", "type": "sections", "max_columns": 2, "path": "whirlpool", "icon": "mdi:hot-tub", "sections": [ { "type": "grid", "cards": [ { "type": "heading", "heading": "Status & Steuerung" }, { "type": "custom:mushroom-chips-card", "chips": [ { "type": "template", "icon": "mdi:ph", "content": "{{ states('sensor.whirlpool_ph') | float | round(1) }}", "icon_color": "blue" }, { "type": "template", "icon": "mdi:water-percent", "content": "{{ states('sensor.whirlpool_oxydo_reduktionspotenzial') | int }} mV", "icon_color": "purple" }, { "type": "template", "icon": "mdi:flash", "content": "{{ states('sensor.whirlpool_leistung') | int(0) }} W", "icon_color": "amber" }, { "type": "entity", "entity": "binary_sensor.isonline_2", "icon": "mdi:wifi" } ], "alignment": "center" }, { "type": "custom:mushroom-template-card", "primary": "{% set ph = states('sensor.whirlpool_ph') | float(0) %} {% set orp = states('sensor.whirlpool_oxydo_reduktionspotenzial') | float(0) %} {% set online = is_state('binary_sensor.isonline_2', 'on') %} {% if not online %} Offline ⚠️ {% elif ph >= 7.0 and ph <= 7.6 and orp >= 550 and orp < 650 %} Badespaß bereit! 🛁 {% else %} Wasser prüfen! ⚠️ {% endif %}", "secondary": "{% set temp = states('sensor.spa_current_temperature') | float | round(1) %} {% set ziel = states('sensor.spa_desired_temperature') | float | round(1) %} {% set rate = states('sensor.whirlpool_heizrate') | float(0) | round(2) %} {{ temp }}°C → Ziel {{ ziel }}°C {%- if rate > 0 %} ↑ {{ rate }} °C/min {%- elif rate < 0 %} ↓ {{ rate | abs }} °C/min {%- endif %}", "icon": "mdi:hot-tub", "icon_color": "{% set ph = states('sensor.whirlpool_ph') | float(0) %} {% set orp = states('sensor.whirlpool_oxydo_reduktionspotenzial') | float(0) %} {% if not is_state('binary_sensor.isonline_2', 'on') %} grey {% elif ph >= 7.0 and ph <= 7.6 and orp <= 650 %} green {% elif (ph < 6.8 or ph > 7.9) or orp < 550 %} red {% else %} orange {% endif %}", "vertical": true, "grid_options": { "columns": 12, "rows": 2 } }, { "type": "custom:mushroom-climate-card", "entity": "climate.spa_thermostat", "name": "Temperatur", "show_temperature_control": true, "fill_container": false, "tap_action": { "action": "more-info" }, "layout": "horizontal" }, { "type": "horizontal-stack", "cards": [ { "type": "custom:mushroom-entity-card", "entity": "switch.spa_pump", "name": "Düsen", "icon": "mdi:pump" }, { "type": "custom:mushroom-entity-card", "entity": "switch.spa_light", "name": "Licht", "icon": "mdi:lightbulb-on" } ] }, { "type": "horizontal-stack", "cards": [ { "type": "custom:mushroom-entity-card", "entity": "sensor.spa_filter_1", "name": "Filter 1" }, { "type": "custom:mushroom-entity-card", "entity": "sensor.spa_ozone", "name": "UVC/Ozon" }, { "type": "custom:mushroom-entity-card", "entity": "sensor.spa_circulation_pump", "name": "Zirkulation" } ] }, { "type": "heading", "heading": "Zeitpläne & Wartung" }, { "type": "custom:scheduler-card", "include": [ "climate.spa_thermostat", "switch.spa_pump" ], "title": "Whirlpool Automatik" }, { "type": "heading", "heading": "Ambiente" }, { "type": "custom:mushroom-light-card", "entity": "light.ruheplatz_lichterkette", "name": "Lichterkette", "show_brightness_control": true }, { "type": "custom:mushroom-light-card", "entity": "light.ruheplatz_wegbeleuchtung", "name": "Wegbeleuchtung", "show_brightness_control": true }, { "type": "markdown", "content": "ICO Kalibrierung: 08.05.2026" } ] }, { "type": "grid", "cards": [ { "type": "heading", "heading": "Wasseranalyse & Trends" }, { "type": "custom:apexcharts-card", "graph_span": "24h", "header": { "show": true, "show_states": true, "colorize_states": true }, "yaxis": [ { "id": "ph", "min": 6.5, "max": 8.5, "decimals": 1, "apex_config": { "tickAmount": 3 }, "align_to": 1 }, { "id": "orp", "min": 400, "max": 700, "opposite": true, "decimals": 0, "apex_config": { "tickAmount": 3 }, "align_to": 100 } ], "series": [ { "entity": "sensor.whirlpool_ph", "name": "pH", "yaxis_id": "ph", "color": "#2196f3" }, { "entity": "sensor.whirlpool_oxydo_reduktionspotenzial", "name": "ORP", "yaxis_id": "orp", "color": "#9c27b0" } ], "apex_config": { "stroke": { "curve": "smooth" }, "annotations": { "yaxis": [ { "y": 7, "y2": 7.6, "borderColor": "#2196f3", "fillColor": "#2196f3", "opacity": 0.12, "label": { "text": "pH", "style": { "background": "#2196f3", "color": "#fff" } } }, { "y": 650, "y2": 550, "yAxisIndex": 1, "borderColor": "#9c27b0", "fillColor": "#9c27b0", "opacity": 0.12, "label": { "text": "ORP", "style": { "background": "#9c27b0", "color": "#fff" } } } ] } } }, { "type": "heading", "heading": "Pflege-Protokoll" }, { "type": "custom:mushroom-template-card", "primary": "{% set last = states('input_datetime.whirlpool_letzte_wasserpflege') %} {% if last in ['unknown', ''] %} Datum setzen {% else %} Letzte Pflege: vor {{ ((now().date() - strptime(last[:10], '%Y-%m-%d').date()).days) }} Tagen {% endif %}", "secondary": "{% set ph = states('sensor.whirlpool_ph') | float(7.2) %} {% set orp = states('sensor.whirlpool_oxydo_reduktionspotenzial') | float(700) %} 🧪 pH: {{ '✓' if 7.0 <= ph <= 7.6 else '⚠️ ' ~ ph | round(1) }} 💊 Brom: {{ '✓' if orp < 650 and orp >= 550 else '⚠️ ' ~ orp | round(0) ~ ' mV' }}", "icon": "mdi:water-check", "multiline_secondary": true, "icon_color": "{% set ph = states('sensor.whirlpool_ph') | float(7.2) %} {% if 7.0 <= ph <= 7.6 %} green {% else %} orange {% endif %}", "fill_container": true, "grid_options": { "columns": 12, "rows": 2 } }, { "type": "horizontal-stack", "cards": [ { "type": "custom:mushroom-entity-card", "entity": "input_datetime.whirlpool_letzte_wasserpflege", "name": "Pflege erledigt", "icon": "mdi:calendar-check" } ] }, { "type": "heading", "heading": "Dosierung (1.000L)" }, { "type": "custom:mushroom-template-card", "primary": "Aktueller Dosiervorschlag", "secondary": "{% set ph = states('sensor.whirlpool_ph') | float(7.2) %} {% if ph > 7.6 %}\n 🧪 pH: {{ ((ph - 7.4) / 0.1 * 10) | round(0) }}g pH-Minus\n{% elif ph < 7.0 %}\n 🧪 pH: {{ ((7.2 - ph) / 0.1 * 10) | round(0) }}g pH-Plus\n{% else %}\n 🧪 pH: OK ✓\n{% endif %}\n💊 Brom: {{ '3-4 Tabs nachlegen' if states('sensor.whirlpool_oxydo_reduktionspotenzial')|float < 600 else 'OK ✓' }}", "icon": "mdi:flask-plus", "icon_color": "orange", "multiline_secondary": true, "fill_container": true, "grid_options": { "columns": 12, "rows": 2 } }, { "type": "custom:mushroom-template-card", "primary": "Samstag Vormittag: Routine", "secondary": "① 1 Beutel Wasserrein (Granulat)\n② 10ml Kristall-Klar (Flüssig)\n③ Brom-Tabletten prüfen (3-4 Stk)\n④ TA-Wert prüfen (Alka-Plus?)\n", "icon": "mdi:calendar-star", "icon_color": "teal", "multiline_secondary": true, "fill_container": true, "grid_options": { "columns": 12, "rows": 3 } }, { "type": "custom:mushroom-template-card", "primary": "Neu-Befüllung / Erstbefüllung", "secondary": "① 25ml Kalkex (Flüssig)\n② pH auf 7,2 einstellen\n③ 1 Beutel Wasserrein (Schock)\n④ 4 Brom-Tabletten (Schwimmer)\n", "icon": "mdi:waves", "icon_color": "blue", "multiline_secondary": true, "fill_container": true, "grid_options": { "columns": 12, "rows": 2 } }, { "type": "horizontal-stack", "cards": [ { "type": "custom:mushroom-entity-card", "entity": "input_datetime.whirlpool_letzter_kartuschenwechsel", "name": "Filterwechsel", "icon": "mdi:filter-cog" } ] }, { "type": "horizontal-stack", "cards": [ { "type": "custom:mushroom-entity-card", "entity": "input_datetime.whirlpool_letzter_wasserwechsel", "name": "Wasserwechsel", "icon": "mdi:water-sync" } ] } ] }, { "type": "grid", "cards": [] } ], "cards": [] } ] } } }