feat(dashboard-zuhause): add Klima tab

5 Sections:
- Heizung NIBE: climate.climate_system_s1 + Vorlauf/Rücklauf/Außen/WW Chips
  + Raum-Sollwert (number) + WW-Bedarf/Boost (select) + Lüftung (select)
- Whirlpool: climate.spa_thermostat (Tap → dashboard_spa)
- Befeuchter: humidifier.evaporative_humidifier_05de + Wasserstand
- Luftqualität: eCO₂ Chips pro Raum (color-coded: grün <1000, orange 1000-1500, rot >1500)
  + apexcharts 24h Multi-Line mit Annotations (1000/1500 Schwellen)
- Temperatur-Verlauf: apexcharts 24h pro Raum

Hinweis: Gästezimmer eCO₂=1520, AQI=102 — auffällig hoch.
Lüftungsmodus aktuell 'Normal (36%)'.
This commit is contained in:
2026-05-02 16:25:55 +02:00
parent d4eff55d30
commit 984cbdd058
+391
View File
@@ -930,6 +930,397 @@
} }
] ]
}, },
{
"title": "Klima",
"path": "klima",
"icon": "mdi:thermometer",
"type": "sections",
"max_columns": 2,
"sections": [
{
"type": "grid",
"title": "Heizung NIBE",
"cards": [
{
"type": "custom:mushroom-climate-card",
"entity": "climate.climate_system_s1",
"show_temperature_control": true,
"hvac_modes": [
"auto",
"heat",
"cool",
"off"
],
"fill_container": true
},
{
"type": "custom:mushroom-chips-card",
"alignment": "justify",
"chips": [
{
"type": "template",
"icon": "mdi:home-thermometer",
"icon_color": "blue",
"content": "Vorlauf {{ states('sensor.nibe_s1255_6_e_em_3x400v_supply_line_bt2') | float(0) | round(1) }}°C"
},
{
"type": "template",
"icon": "mdi:thermometer-water",
"icon_color": "indigo",
"content": "Rücklauf {{ states('sensor.nibe_s1255_6_e_em_3x400v_return_line_bt3') | float(0) | round(1) }}°C"
},
{
"type": "template",
"icon": "mdi:weather-sunny",
"icon_color": "amber",
"content": "Außen {{ states('sensor.nibe_s1255_6_e_em_3x400v_current_outdoor_temperature_bt1') | float(0) | round(1) }}°C"
},
{
"type": "template",
"icon": "mdi:water-thermometer",
"icon_color": "red",
"content": "WW {{ states('sensor.nibe_s1255_6_e_em_3x400v_hot_water_top_bt7') | float(0) | round(0) }}°C"
}
]
},
{
"type": "horizontal-stack",
"cards": [
{
"type": "custom:mushroom-number-card",
"entity": "number.nibe_s1255_6_e_em_3x400v_raumfuhler_sollwert_klimatisierungssyste",
"name": "Raum-Sollwert",
"icon": "mdi:thermostat",
"fill_container": true
},
{
"type": "custom:mushroom-select-card",
"entity": "select.nibe_s1255_6_e_em_3x400v_hot_water_amount",
"name": "WW-Bedarf",
"icon": "mdi:water-boiler",
"fill_container": true
}
]
},
{
"type": "horizontal-stack",
"cards": [
{
"type": "custom:mushroom-select-card",
"entity": "select.nibe_s1255_6_e_em_3x400v_ventilation_mode",
"name": "Lüftung",
"icon": "mdi:fan",
"fill_container": true
},
{
"type": "custom:mushroom-select-card",
"entity": "select.nibe_s1255_6_e_em_3x400v_hot_water_boost",
"name": "WW-Boost",
"icon": "mdi:fire",
"fill_container": true
}
]
}
]
},
{
"type": "grid",
"title": "Whirlpool",
"cards": [
{
"type": "custom:mushroom-climate-card",
"entity": "climate.spa_thermostat",
"show_temperature_control": true,
"fill_container": true,
"tap_action": {
"action": "navigate",
"navigation_path": "/dashboard-spa"
}
}
]
},
{
"type": "grid",
"title": "Befeuchter",
"cards": [
{
"type": "custom:mushroom-humidifier-card",
"entity": "humidifier.evaporative_humidifier_05de",
"show_target_humidity_control": true,
"fill_container": true
},
{
"type": "custom:mushroom-chips-card",
"alignment": "justify",
"chips": [
{
"type": "template",
"icon": "mdi:water",
"icon_color": "blue",
"content": "Wasser: {{ states('sensor.evaporative_humidifier_05de_wasserstand') }}"
}
]
}
]
},
{
"type": "grid",
"title": "Luftqualität pro Raum",
"cards": [
{
"type": "custom:mushroom-chips-card",
"alignment": "justify",
"chips": [
{
"type": "template",
"icon": "mdi:molecule-co2",
"icon_color": "{% set v = states('sensor.buro_rauchmelder_eco2') | float(0) %}{% if v > 1500 %}red{% elif v > 1000 %}orange{% else %}green{% endif %}",
"content": "Büro {{ states('sensor.buro_rauchmelder_eco2') }}",
"tap_action": {
"action": "more-info",
"entity": "sensor.buro_rauchmelder_eco2"
}
},
{
"type": "template",
"icon": "mdi:molecule-co2",
"icon_color": "{% set v = states('sensor.kinderzimmer_rauchmelder_eco2') | float(0) %}{% if v > 1500 %}red{% elif v > 1000 %}orange{% else %}green{% endif %}",
"content": "Kinderz. {{ states('sensor.kinderzimmer_rauchmelder_eco2') }}"
},
{
"type": "template",
"icon": "mdi:molecule-co2",
"icon_color": "{% set v = states('sensor.schlafzimmer_rauchmelder_eco2') | float(0) %}{% if v > 1500 %}red{% elif v > 1000 %}orange{% else %}green{% endif %}",
"content": "Schlafz. {{ states('sensor.schlafzimmer_rauchmelder_eco2') }}"
},
{
"type": "template",
"icon": "mdi:molecule-co2",
"icon_color": "{% set v = states('sensor.gastezimmer_rauchmelder_eco2') | float(0) %}{% if v > 1500 %}red{% elif v > 1000 %}orange{% else %}green{% endif %}",
"content": "Gäst. {{ states('sensor.gastezimmer_rauchmelder_eco2') }}"
},
{
"type": "template",
"icon": "mdi:molecule-co2",
"icon_color": "{% set v = states('sensor.technikraum_rauchmelder_eco2') | float(0) %}{% if v > 1500 %}red{% elif v > 1000 %}orange{% else %}green{% endif %}",
"content": "Technik {{ states('sensor.technikraum_rauchmelder_eco2') }}"
},
{
"type": "template",
"icon": "mdi:molecule-co2",
"icon_color": "{% set v = states('sensor.wohnbereich_rauchmelder_eco2') | float(0) %}{% if v > 1500 %}red{% elif v > 1000 %}orange{% else %}green{% endif %}",
"content": "Wohnz. {{ states('sensor.wohnbereich_rauchmelder_eco2') }}"
}
]
},
{
"type": "custom:apexcharts-card",
"header": {
"show": true,
"title": "eCO₂ 24h pro Raum",
"show_states": false
},
"graph_span": "24h",
"yaxis": [
{
"min": 400,
"max": 2000,
"decimals": 0,
"apex_config": {
"tickAmount": 4
}
}
],
"apex_config": {
"annotations": {
"yaxis": [
{
"y": 1500,
"borderColor": "#ff6b6b",
"label": {
"text": "Hoch (1500)",
"style": {
"color": "#fff",
"background": "#ff6b6b"
}
}
},
{
"y": 1000,
"borderColor": "#ffb84d",
"label": {
"text": "Mittel (1000)",
"style": {
"color": "#000",
"background": "#ffb84d"
}
}
}
]
}
},
"series": [
{
"entity": "sensor.buro_rauchmelder_eco2",
"name": "Büro",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "10m"
}
},
{
"entity": "sensor.kinderzimmer_rauchmelder_eco2",
"name": "Kinder",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "10m"
}
},
{
"entity": "sensor.schlafzimmer_rauchmelder_eco2",
"name": "Schlaf",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "10m"
}
},
{
"entity": "sensor.gastezimmer_rauchmelder_eco2",
"name": "Gäste",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "10m"
}
},
{
"entity": "sensor.technikraum_rauchmelder_eco2",
"name": "Technik",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "10m"
}
},
{
"entity": "sensor.wohnbereich_rauchmelder_eco2",
"name": "Wohnz.",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "10m"
}
}
]
}
]
},
{
"type": "grid",
"title": "Temperatur-Verlauf 24h",
"cards": [
{
"type": "custom:apexcharts-card",
"header": {
"show": true,
"title": "Temperatur pro Raum",
"show_states": false
},
"graph_span": "24h",
"yaxis": [
{
"decimals": 1,
"apex_config": {
"tickAmount": 5
}
}
],
"series": [
{
"entity": "sensor.wohnzimmer_rauchmelder_temperature",
"name": "Wohnzimmer",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "15m"
}
},
{
"entity": "sensor.schlafzimmer_rauchmelder_temperature",
"name": "Schlafzimmer",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "15m"
}
},
{
"entity": "sensor.kinderzimmer_rauchmelder_temperature",
"name": "Kinderzimmer",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "15m"
}
},
{
"entity": "sensor.buro_rauchmelder_temperature",
"name": "Büro",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "15m"
}
},
{
"entity": "sensor.gastezimmer_rauchmelder_temperature",
"name": "Gästezimmer",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "15m"
}
},
{
"entity": "sensor.badezimmer_feuchtemesser_temperature",
"name": "Badezimmer",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "15m"
}
},
{
"entity": "sensor.technikraum_rauchmelder_temperature",
"name": "Technikraum",
"type": "line",
"stroke_width": 2,
"group_by": {
"func": "avg",
"duration": "15m"
}
}
]
}
]
}
]
},
{ {
"title": "Home", "title": "Home",
"type": "sections", "type": "sections",