From ff558cd2c15418555c6fd41845b72ed39afbc79a Mon Sep 17 00:00:00 2001 From: Florian Krebs Date: Sat, 2 May 2026 16:41:49 +0200 Subject: [PATCH] feat(dashboard-zuhause): add Sauger tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .storage/lovelace.lovelace | 651 +++++++++++++++++++++++++++++++++++++ 1 file changed, 651 insertions(+) diff --git a/.storage/lovelace.lovelace b/.storage/lovelace.lovelace index c49fca0..9888905 100644 --- a/.storage/lovelace.lovelace +++ b/.storage/lovelace.lovelace @@ -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",