feat(dashboard-zuhause): add Sauger tab

Roborock Qrevo Curv Tab mit max_columns: 1 (Map ist breit). 4 Sections:

- Status & Steuerung: mushroom-vacuum-card mit Commands
  + Chips: Akku/Status/Wasserkasten/Mopp/Wasser-OK/Fehler
- Karte: xiaomi-vacuum-map-card aus alter Home-Section übernommen
  (Predefined-Selections für 13 Räume mit Outline-Koordinaten)
- Verbrauchsmaterial: 5 Cards (Hauptbürste/Seitenbürste/Filter/Sensoren/Dock-Schmutzfänger)
  Color-Coded: rot bei <20-50h verbleibend
- Statistik: Reinigungs-Counter, Gesamt-Bereich, letzte Reinigung mit Datum/Bereich
This commit is contained in:
2026-05-02 16:41:49 +02:00
parent e3b92c83bc
commit ff558cd2c1
+651
View File
@@ -1725,6 +1725,657 @@
}
]
},
{
"title": "Sauger",
"path": "sauger",
"icon": "mdi:robot-vacuum",
"type": "sections",
"max_columns": 1,
"sections": [
{
"type": "grid",
"title": "Status & Steuerung",
"cards": [
{
"type": "custom:mushroom-vacuum-card",
"entity": "vacuum.roborock_qrevo_curv",
"icon_animation": true,
"commands": [
"start_pause",
"stop",
"return_home",
"locate"
],
"fill_container": true
},
{
"type": "custom:mushroom-chips-card",
"alignment": "justify",
"chips": [
{
"type": "template",
"icon": "mdi:battery",
"icon_color": "{% set v = states('sensor.roborock_qrevo_curv_batterie') | float(0) %}{% if v < 20 %}red{% elif v < 50 %}orange{% else %}green{% endif %}",
"content": "{{ states('sensor.roborock_qrevo_curv_batterie') }}%"
},
{
"type": "template",
"icon": "mdi:robot-vacuum-variant",
"icon_color": "{% set s = states('sensor.roborock_qrevo_curv_status') %}{% if s == 'cleaning' or s == 'returning' %}blue{% elif s == 'charging' %}green{% elif s == 'error' %}red{% else %}grey{% endif %}",
"content": "{{ states('sensor.roborock_qrevo_curv_status') }}"
},
{
"type": "template",
"icon": "mdi:water",
"icon_color": "{% if is_state('binary_sensor.roborock_qrevo_curv_wasserkasten_angebracht','on') %}cyan{% else %}grey{% endif %}",
"content": "Wasserkasten"
},
{
"type": "template",
"icon": "mdi:cushion",
"icon_color": "{% if is_state('binary_sensor.roborock_qrevo_curv_mopp_angebracht','on') %}cyan{% else %}grey{% endif %}",
"content": "Mopp"
},
{
"type": "template",
"icon": "mdi:water-alert",
"icon_color": "{% if is_state('binary_sensor.roborock_qrevo_curv_wasserknappheit','on') %}red{% else %}green{% endif %}",
"content": "Wasser OK"
},
{
"type": "template",
"icon": "mdi:alert-circle-outline",
"icon_color": "{% if states('sensor.roborock_qrevo_curv_staubsauger_fehler') != 'none' %}red{% else %}green{% endif %}",
"content": "{{ states('sensor.roborock_qrevo_curv_staubsauger_fehler') }}"
}
]
}
]
},
{
"type": "grid",
"title": "Karte",
"cards": [
{
"type": "custom:xiaomi-vacuum-map-card",
"vacuum_platform": "Roborock",
"title": "Roborock Qrevo Curv",
"entity": "vacuum.roborock_qrevo_curv",
"map_source": {
"camera": "image.roborock_qrevo_curv_zuhause_custom"
},
"calibration_source": {
"camera": true
},
"map_locked": true,
"map_modes": [
{
"template": "vacuum_clean_segment",
"predefined_selections": [
{
"id": "1",
"icon": {
"name": "mdi:broom",
"x": 25525,
"y": 30900
},
"label": {
"text": "Gang",
"x": 25525,
"y": 30900,
"offset_y": 35
},
"outline": [
[
24400,
28400
],
[
26650,
28400
],
[
26650,
33400
],
[
24400,
33400
]
]
},
{
"id": "2",
"icon": {
"name": "mdi:broom",
"x": 23700,
"y": 22450
},
"label": {
"text": "WC",
"x": 23700,
"y": 22450,
"offset_y": 35
},
"outline": [
[
22050,
21700
],
[
25350,
21700
],
[
25350,
23200
],
[
22050,
23200
]
]
},
{
"id": "3",
"icon": {
"name": "mdi:broom",
"x": 24300,
"y": 25700
},
"label": {
"text": "Speis",
"x": 24300,
"y": 25700,
"offset_y": 35
},
"outline": [
[
23350,
24800
],
[
25250,
24800
],
[
25250,
26600
],
[
23350,
26600
]
]
},
{
"id": "4",
"icon": {
"name": "mdi:broom",
"x": 23300,
"y": 28675
},
"label": {
"text": "Büro",
"x": 23300,
"y": 28675,
"offset_y": 35
},
"outline": [
[
21650,
26950
],
[
24950,
26950
],
[
24950,
30400
],
[
21650,
30400
]
]
},
{
"id": "5",
"icon": {
"name": "mdi:broom",
"x": 28525,
"y": 30125
},
"label": {
"text": "Gästezimmer",
"x": 28525,
"y": 30125,
"offset_y": 35
},
"outline": [
[
26150,
28450
],
[
30900,
28450
],
[
30900,
31800
],
[
26150,
31800
]
]
},
{
"id": "6",
"icon": {
"name": "mdi:broom",
"x": 23425,
"y": 31200
},
"label": {
"text": "Badezimmer",
"x": 23425,
"y": 31200,
"offset_y": 35
},
"outline": [
[
21650,
29600
],
[
25200,
29600
],
[
25200,
32800
],
[
21650,
32800
]
]
},
{
"id": "7",
"icon": {
"name": "mdi:broom",
"x": 28250,
"y": 33675
},
"label": {
"text": "Schlafzimmer",
"x": 28250,
"y": 33675,
"offset_y": 35
},
"outline": [
[
26200,
31600
],
[
30300,
31600
],
[
30300,
35750
],
[
26200,
35750
]
]
},
{
"id": "8",
"icon": {
"name": "mdi:broom",
"x": 23950,
"y": 34400
},
"label": {
"text": "Kinderzimmer",
"x": 23950,
"y": 34400,
"offset_y": 35
},
"outline": [
[
21700,
33050
],
[
26200,
33050
],
[
26200,
35750
],
[
21700,
35750
]
]
},
{
"id": "9",
"icon": {
"name": "mdi:broom",
"x": 23425,
"y": 20500
},
"label": {
"text": "Technikraum",
"x": 23425,
"y": 20500,
"offset_y": 35
},
"outline": [
[
21950,
19450
],
[
24900,
19450
],
[
24900,
21550
],
[
21950,
21550
]
]
},
{
"id": "10",
"icon": {
"name": "mdi:broom",
"x": 22325,
"y": 23975
},
"label": {
"text": "Garderobe",
"x": 22325,
"y": 23975,
"offset_y": 35
},
"outline": [
[
19850,
21400
],
[
24800,
21400
],
[
24800,
26550
],
[
19850,
26550
]
]
},
{
"id": "11",
"icon": {
"name": "mdi:broom",
"x": 28475,
"y": 26100
},
"label": {
"text": "Wohnzimmer",
"x": 28475,
"y": 26100,
"offset_y": 35
},
"outline": [
[
24800,
23400
],
[
32150,
23400
],
[
32150,
28800
],
[
24800,
28800
]
]
},
{
"id": "12",
"icon": {
"name": "mdi:broom",
"x": 29700,
"y": 21400
},
"label": {
"text": "Esszimmer",
"x": 29700,
"y": 21400,
"offset_y": 35
},
"outline": [
[
27950,
19250
],
[
31450,
19250
],
[
31450,
23550
],
[
27950,
23550
]
]
},
{
"id": "13",
"icon": {
"name": "mdi:broom",
"x": 31575,
"y": 33750
},
"label": {
"text": "Room 13",
"x": 31575,
"y": 33750,
"offset_y": 35
},
"outline": [
[
30250,
31750
],
[
32900,
31750
],
[
32900,
35750
],
[
30250,
35750
]
]
},
{
"id": "14",
"icon": {
"name": "mdi:broom",
"x": 26750,
"y": 21275
},
"label": {
"text": "Küche",
"x": 26750,
"y": 21275,
"offset_y": 35
},
"outline": [
[
24950,
19100
],
[
28550,
19100
],
[
28550,
23450
],
[
24950,
23450
]
]
}
]
},
{
"template": "vacuum_goto"
}
]
}
]
},
{
"type": "grid",
"title": "Verbrauchsmaterial",
"cards": [
{
"type": "horizontal-stack",
"cards": [
{
"type": "custom:mushroom-template-card",
"primary": "Hauptbürste",
"secondary": "{{ states('sensor.roborock_qrevo_curv_verbleibende_zeit_der_hauptburste') | float(0) | round(0) }} h",
"icon": "mdi:broom",
"icon_color": "{% set v = states('sensor.roborock_qrevo_curv_verbleibende_zeit_der_hauptburste') | float(0) %}{% if v < 50 %}red{% elif v < 100 %}orange{% else %}green{% endif %}",
"fill_container": true
},
{
"type": "custom:mushroom-template-card",
"primary": "Seitenbürste",
"secondary": "{{ states('sensor.roborock_qrevo_curv_verbleibende_zeit_der_seitenburste') | float(0) | round(0) }} h",
"icon": "mdi:dots-circle",
"icon_color": "{% set v = states('sensor.roborock_qrevo_curv_verbleibende_zeit_der_seitenburste') | float(0) %}{% if v < 50 %}red{% elif v < 100 %}orange{% else %}green{% endif %}",
"fill_container": true
}
]
},
{
"type": "horizontal-stack",
"cards": [
{
"type": "custom:mushroom-template-card",
"primary": "Filter",
"secondary": "{{ states('sensor.roborock_qrevo_curv_verbleibende_filterzeit') | float(0) | round(0) }} h",
"icon": "mdi:air-filter",
"icon_color": "{% set v = states('sensor.roborock_qrevo_curv_verbleibende_filterzeit') | float(0) %}{% if v < 30 %}red{% elif v < 60 %}orange{% else %}green{% endif %}",
"fill_container": true
},
{
"type": "custom:mushroom-template-card",
"primary": "Sensoren",
"secondary": "{{ states('sensor.roborock_qrevo_curv_verbleibende_sensorzeit') | float(0) | round(1) }} h",
"icon": "mdi:eye",
"icon_color": "{% set v = states('sensor.roborock_qrevo_curv_verbleibende_sensorzeit') | float(0) %}{% if v < 5 %}red{% elif v < 15 %}orange{% else %}green{% endif %}",
"fill_container": true
}
]
},
{
"type": "custom:mushroom-template-card",
"primary": "Dock-Schmutzfänger",
"secondary": "{{ states('sensor.roborock_qrevo_curv_dock_schmutzfanger_verbleibend') }} %",
"icon": "mdi:trash-can",
"icon_color": "{% set v = states('sensor.roborock_qrevo_curv_dock_schmutzfanger_verbleibend') | float(0) %}{% if v < 20 %}red{% elif v < 50 %}orange{% else %}green{% endif %}",
"fill_container": true
}
]
},
{
"type": "grid",
"title": "Statistik",
"cards": [
{
"type": "custom:mushroom-chips-card",
"alignment": "justify",
"chips": [
{
"type": "template",
"icon": "mdi:counter",
"icon_color": "purple",
"content": "{{ states('sensor.roborock_qrevo_curv_gesamtzahl_reinigungen') }} ges."
},
{
"type": "template",
"icon": "mdi:floor-plan",
"icon_color": "blue",
"content": "{{ states('sensor.roborock_qrevo_curv_gesamter_reinigungsbereich') | float(0) | round(0) }} m² ges."
},
{
"type": "template",
"icon": "mdi:timer-outline",
"icon_color": "amber",
"content": "{{ states('sensor.roborock_qrevo_curv_gesamtreinigungszeit') | float(0) | round(0) }} h ges."
}
]
},
{
"type": "horizontal-stack",
"cards": [
{
"type": "custom:mushroom-template-card",
"primary": "Letzte Reinigung",
"secondary": "{% set s = states('sensor.roborock_qrevo_curv_letzter_reinigungsbeginn') %}{% if s != 'unknown' %}{{ as_timestamp(s) | timestamp_custom('%d.%m. %H:%M') }}{% endif %}",
"icon": "mdi:clock-start",
"fill_container": true
},
{
"type": "custom:mushroom-template-card",
"primary": "Bereich (letzt.)",
"secondary": "{{ states('sensor.roborock_qrevo_curv_reinigungsbereich') }} m² · {{ states('sensor.roborock_qrevo_curv_reinigungszeit') | float(0) | round(0) }} min",
"icon": "mdi:floor-plan",
"fill_container": true
}
]
}
]
}
]
},
{
"title": "Home",
"type": "sections",