Created
May 2, 2026 07:51
-
-
Save dantz/13e7dd7c873dc40ea4ec7a4e7f94244d to your computer and use it in GitHub Desktop.
Das Küchendashboard, wie es in meinem Video unter https://youtu.be/YBZ8nEqh4RU zu sehen ist.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| kiosk_mode: | |
| hide_header: true | |
| hide_sidebar: true | |
| views: | |
| - type: sections | |
| sections: | |
| - type: grid | |
| cards: | |
| - type: conditional | |
| conditions: | |
| - entity: sensor.stadt_xy_current_warning_level | |
| state_not: '0' | |
| grid_options: | |
| columns: full | |
| card: | |
| type: markdown | |
| title: Wetterwarnungen | |
| content: > | |
| {% set sensor = 'sensor.stadt_xy_current_warning_level' %} {% | |
| set count = state_attr(sensor, 'warning_count') | int(0) %} {% | |
| if count == 0 %} ✅ Keine aktiven Warnungen. {% else %} {% for i | |
| in range(1, count + 1) %} {% set headline = state_attr(sensor, | |
| 'warning_' ~ i ~ '_headline') %} {% set start = | |
| state_attr(sensor, 'warning_' ~ i ~ '_start') %} {% set end = | |
| state_attr(sensor, 'warning_' ~ i ~ '_end') %} {% set level = | |
| state_attr(sensor, 'warning_' ~ i ~ '_level') | int(0) %} {% set | |
| start_ts = as_timestamp(start) %} {% set end_ts = | |
| as_timestamp(end) %} {% set today = now().date() %} {% macro | |
| rel_date(ts) %} {% set d = ts | timestamp_custom('%Y-%m-%d') | | |
| as_datetime | as_local %} {% if d.date() == today %}Heute{% elif | |
| d.date() == today + timedelta(days=1) %}Morgen{% elif d.date() | |
| == today - timedelta(days=1) %}Gestern{% else %}{{ ts | | |
| timestamp_custom('%d.%m.') }}{% endif %} {% endmacro %} {% if | |
| level >= 3 %}🔴{% elif level == 2 %}🟠{% else %}🟡{% endif %} | |
| **{{ headline | replace('Amtliche ', '') }}** | |
| {{ rel_date(start_ts) | trim }} {{ start_ts | | |
| timestamp_custom('%H:%M') }} – {{ rel_date(end_ts) | trim }} {{ | |
| end_ts | timestamp_custom('%H:%M') }} Uhr {% if not loop.last %} | |
| {% endif %} | |
| {% endfor %} {% endif %} | |
| grid_options: | |
| columns: full | |
| text_only: true | |
| - type: custom:apexcharts-card | |
| grid_options: | |
| columns: full | |
| header: | |
| show: true | |
| title: Strompreise & PV-Prognose | |
| graph_span: 48h | |
| apex_config: | |
| chart: | |
| height: 250px | |
| legend: | |
| show: false | |
| plotOptions: | |
| bar: | |
| columnWidth: 100% | |
| span: | |
| start: day | |
| now: | |
| show: true | |
| label: Jetzt | |
| yaxis: | |
| - id: price | |
| decimals: 1 | |
| min: 0 | |
| apex_config: | |
| title: | |
| text: ct/kWh | |
| - id: pv | |
| opposite: true | |
| decimals: 0 | |
| apex_config: | |
| title: | |
| text: Watt | |
| series: | |
| - entity: sensor.epex_spot_data_total_price | |
| name: Strompreis | |
| type: area | |
| yaxis_id: price | |
| color: '#64B5F6' | |
| curve: stepline | |
| stroke_width: 1 | |
| opacity: 0.4 | |
| extend_to: false | |
| data_generator: | | |
| return entity.attributes.data.map((entry) => { | |
| return [new Date(entry.start_time), entry.price_per_kwh * 100]; | |
| }); | |
| - entity: sensor.dach_energy_production_today | |
| name: PV Heute | |
| type: line | |
| curve: smooth | |
| yaxis_id: pv | |
| color: orange | |
| stroke_width: 2 | |
| data_generator: | | |
| const watts = entity.attributes.watts; | |
| return Object.entries(watts).map(([time, watt]) => { | |
| return [new Date(time).getTime(), watt]; | |
| }); | |
| - entity: sensor.dach_energy_production_tomorrow | |
| name: PV Morgen | |
| type: line | |
| curve: smooth | |
| yaxis_id: pv | |
| color: orange | |
| opacity: 0.5 | |
| stroke_width: 2 | |
| stroke_dash: 4 | |
| data_generator: | | |
| const watts = entity.attributes.watts; | |
| return Object.entries(watts).map(([time, watt]) => { | |
| return [new Date(time).getTime(), watt]; | |
| }); | |
| - entity: sensor.s10e_pro_compact_solar_production | |
| name: PV Ist | |
| type: area | |
| yaxis_id: pv | |
| color: green | |
| stroke_width: 2 | |
| transform: return x * 1000; | |
| opacity: 0.15 | |
| curve: smooth | |
| extend_to: false | |
| - type: custom:mushroom-template-card | |
| primary: '{{ states(''sensor.wetter_lokal_temperatur'') }}°' | |
| secondary: >- | |
| 📈{{ states('sensor.hochsttemperatur_heute') }}° 📉{{ | |
| states('sensor.tiefsttemperatur_nacht') }}° | |
| icon: | | |
| {% set c = states('sensor.wetter_lokal_wetterzustand') %} | |
| {% set map = { | |
| 'sunny':'mdi:weather-sunny', | |
| 'clear-night':'mdi:weather-night', | |
| 'partlycloudy':'mdi:weather-partly-cloudy', | |
| 'cloudy':'mdi:weather-cloudy', | |
| 'rainy':'mdi:weather-rainy', | |
| 'pouring':'mdi:weather-pouring', | |
| 'snowy':'mdi:weather-snowy', | |
| 'snowy-rainy':'mdi:weather-snowy-rainy', | |
| 'lightning':'mdi:weather-lightning', | |
| 'lightning-rainy':'mdi:weather-lightning-rainy', | |
| 'fog':'mdi:weather-fog', | |
| 'windy':'mdi:weather-windy', | |
| 'hail':'mdi:weather-hail' | |
| } %} | |
| {{ map.get(c, 'mdi:weather-cloudy') }} | |
| icon_color: | | |
| {% set c = states('sensor.wetter_lokal_wetterzustand') %} | |
| {% if c == 'sunny' %} orange | |
| {% elif c in ['rainy','pouring'] %} blue | |
| {% elif c in ['lightning','lightning-rainy'] %} deep-purple | |
| {% elif c in ['snowy','snowy-rainy','hail'] %} light-blue | |
| {% else %} grey | |
| {% endif %} | |
| grid_options: | |
| columns: 4 | |
| rows: 1 | |
| - type: custom:mushroom-entity-card | |
| entity: sensor.uv_index_heute | |
| name: UV-Index | |
| icon: mdi:sun-wireless | |
| grid_options: | |
| columns: 4 | |
| rows: auto | |
| icon_color: amber | |
| - type: custom:mushroom-template-card | |
| primary: >- | |
| Batterie {{ states('sensor.s10e_pro_compact_state_of_charge') | | |
| int }}% | |
| secondary: > | |
| {% set soc = states('sensor.s10e_pro_compact_state_of_charge') | | |
| int %} {% set charge = | |
| states('sensor.s10e_pro_compact_battery_charge') | int %} {% set | |
| discharge = states('sensor.s10e_pro_compact_battery_discharge') | | |
| int %} {% if charge > 0 %} ↑ {{ charge }} KW laden {% elif | |
| discharge > 0 %} ↓ {{ discharge }} KW entladen {% else %} {{ soc | |
| }} % – Standby {% endif %} | |
| icon: > | |
| {% set soc = states('sensor.s10e_pro_compact_state_of_charge') | | |
| int %} {% set charge = | |
| states('sensor.s10e_pro_compact_battery_charge') | int %} {% if | |
| charge > 0 %} mdi:battery-charging {% elif soc >= 90 %} | |
| mdi:battery {% elif soc >= 70 %} mdi:battery-80 {% elif soc >= 50 | |
| %} mdi:battery-60 {% elif soc >= 30 %} mdi:battery-40 {% elif soc | |
| >= 10 %} mdi:battery-20 {% else %} mdi:battery-alert {% endif %} | |
| tap_action: | |
| action: more-info | |
| color: > | |
| {% set soc = states('sensor.s10e_pro_compact_state_of_charge') | | |
| int %} {% set charge = | |
| states('sensor.s10e_pro_compact_battery_charge') | int %} {% if | |
| charge > 0 %} green {% elif soc >= 50 %} green {% elif soc >= 20 | |
| %} orange {% else %} red {% endif %} | |
| features_position: bottom | |
| grid_options: | |
| columns: 4 | |
| rows: 1 | |
| - type: custom:mushroom-entity-card | |
| grid_options: | |
| rows: 1 | |
| columns: 4 | |
| entity: sensor.dach_energy_production_today | |
| name: Heute | |
| icon: mdi:solar-power-variant | |
| icon_color: amber | |
| vertical: false | |
| features_position: bottom | |
| - type: custom:mushroom-entity-card | |
| grid_options: | |
| rows: 1 | |
| columns: 4 | |
| entity: sensor.dach_energy_production_tomorrow | |
| name: Morgen | |
| icon: mdi:solar-power-variant | |
| icon_color: amber | |
| vertical: false | |
| features_position: bottom | |
| - type: custom:mushroom-entity-card | |
| grid_options: | |
| rows: 1 | |
| columns: 4 | |
| entity: sensor.dach_energy_production_d2 | |
| name: Übermorgen | |
| icon: mdi:solar-power-variant | |
| icon_color: amber | |
| column_span: 2 | |
| - type: grid | |
| cards: | |
| - name: Familienkalender | |
| cardHeight: 100% | |
| maxDaysToShow: 3 | |
| maxEventCount: 0 | |
| showLoader: true | |
| showLocation: true | |
| showMonth: false | |
| fullTextTime: true | |
| showCurrentEventLine: false | |
| showDate: false | |
| dateFormat: LL | |
| startDaysAhead: 0 | |
| showLastCalendarWeek: false | |
| sortBy: start | |
| allDayBottom: false | |
| disableEventLink: false | |
| disableLocationLink: false | |
| disableCalLocationLink: false | |
| disableCalMonthLink: false | |
| linkTarget: _blank | |
| showDeclined: true | |
| showPrivate: true | |
| showHiddenText: true | |
| showCalendarName: false | |
| nameColor: var(--primary-text-color) | |
| descColor: var(--primary-text-color) | |
| descSize: 80 | |
| showNoEventsForToday: false | |
| showNoEventDays: false | |
| hideCardIfNoEvents: false | |
| showHours: true | |
| showEndTime: true | |
| showRelativeTime: false | |
| eventTitleColor: var(--primary-text-color) | |
| locationIconColor: rgb(--primary-text-color) | |
| locationTextSize: 90 | |
| hideFinishedEvents: true | |
| dimFinishedEvents: true | |
| finishedEventOpacity: 0.6 | |
| finishedEventFilter: grayscale(80%) | |
| eventBarColor: var(--primary-color) | |
| eventCalNameColor: var(--primary-text-color) | |
| eventCalNameSize: 90 | |
| showProgressBar: false | |
| showFullDayProgress: false | |
| progressBarColor: var(--primary-color) | |
| progressBarBackgroundColor: '#555' | |
| enableModeChange: false | |
| defaultMode: Event | |
| calGridColor: rgba(86, 86, 86, .35) | |
| calDayColor: var(--primary-text-color) | |
| calWeekDayColor: var(--primary-text-color) | |
| calDateColor: var(--primary-text-color) | |
| defaultCalColor: var(--primary-text-color) | |
| calEventBackgroundColor: rgba(86, 100, 86, .35) | |
| calActiveEventBackgroundColor: rgba(86, 128, 86, .35) | |
| calEventTime: false | |
| firstDayOfWeek: 1 | |
| refreshInterval: 60 | |
| showEventIcon: false | |
| eventDateFormat: dd D | |
| hideDuplicates: false | |
| showMultiDay: true | |
| showMultiDayEventParts: false | |
| showWeekNumber: false | |
| showDescription: false | |
| showEventDate: true | |
| showDatePerEvent: false | |
| showAllDayHours: true | |
| showAllDayEvents: true | |
| offsetHeaderDate: false | |
| titleLength: 0 | |
| descLength: 0 | |
| plannerDaysToShow: 7 | |
| plannerRollingWeek: false | |
| tap_action: | |
| action: more-info | |
| hold_action: | |
| action: none | |
| double_tap_action: | |
| action: none | |
| type: custom:atomic-calendar-revive | |
| entities: | |
| - calendar.familie | |
| cardType: list | |
| calShowDescription: false | |
| compactMode: false | |
| hoursOnSameLine: true | |
| - type: grid | |
| cards: | |
| - type: custom:auto-entities | |
| card: | |
| type: horizontal-stack | |
| card_param: cards | |
| filter: | |
| include: | |
| - entity_id: sensor.biomull_tage | |
| options: | |
| type: custom:mushroom-template-card | |
| primary: Biomüll | |
| secondary: '{{ states(''sensor.biomull'') }}' | |
| icon: mdi:leaf | |
| icon_color: brown | |
| layout: vertical | |
| - entity_id: sensor.altpapier_tage | |
| options: | |
| type: custom:mushroom-template-card | |
| primary: Papier | |
| secondary: '{{ states(''sensor.altpapier'') }}' | |
| icon: mdi:newspaper | |
| icon_color: blue | |
| layout: vertical | |
| - entity_id: sensor.gelber_sack_tage | |
| options: | |
| type: custom:mushroom-template-card | |
| primary: Gelber Sack | |
| secondary: '{{ states(''sensor.gelber_sack'') }}' | |
| icon: mdi:recycle | |
| icon_color: yellow | |
| layout: vertical | |
| - entity_id: sensor.restmull_tage | |
| options: | |
| type: custom:mushroom-template-card | |
| primary: Restmüll | |
| secondary: '{{ states(''sensor.restmull'') }}' | |
| icon: mdi:trash-can | |
| icon_color: grey | |
| layout: vertical | |
| sort: | |
| method: state | |
| numeric: true | |
| - type: custom:mushroom-template-card | |
| entity: sensor.waschmaschine_operation_state | |
| primary: Waschmaschine | |
| secondary: > | |
| {% set progress = states('sensor.waschmaschine_program_progress') | |
| | int(0) %} {% set finish = | |
| states('sensor.waschmaschine_program_finish_time') %} {{ progress | |
| }}% – Fertig um {{ as_timestamp(finish) | | |
| timestamp_custom('%H:%M') }} | |
| icon: mdi:washing-machine | |
| icon_color: blue | |
| tap_action: | |
| action: more-info | |
| visibility: | |
| - condition: state | |
| entity: sensor.waschmaschine_operation_state | |
| state_not: inactive | |
| card_mod: | |
| style: | | |
| ha-state-icon { | |
| {% if is_state('sensor.waschmaschine_operation_state', 'run') %} | |
| animation: washing 2s ease-in-out infinite !important; | |
| {% else %} | |
| animation: none !important; | |
| {% endif %} | |
| } | |
| @keyframes washing { | |
| 0% { transform: rotate(0deg); } | |
| 25% { transform: rotate(20deg); } | |
| 75% { transform: rotate(-20deg); } | |
| 100% { transform: rotate(0deg); } | |
| } | |
| - type: custom:mushroom-template-card | |
| entity: sensor.trockner_operation_state | |
| primary: Trockner | |
| secondary: > | |
| {% set progress = states('sensor.trockner_program_progress') | | |
| int(0) %} {% set finish = | |
| states('sensor.trockner_program_finish_time') %} {{ progress }}% – | |
| Fertig um {{ as_timestamp(finish) | timestamp_custom('%H:%M') }} | |
| icon: mdi:tumble-dryer | |
| icon_color: orange | |
| tap_action: | |
| action: more-info | |
| visibility: | |
| - condition: state | |
| entity: sensor.trockner_operation_state | |
| state_not: inactive | |
| card_mod: | |
| style: | | |
| ha-state-icon { | |
| {% if is_state('sensor.trockner_operation_state', 'run') %} | |
| animation: drying 3s linear infinite !important; | |
| {% else %} | |
| animation: none !important; | |
| {% endif %} | |
| } | |
| @keyframes drying { | |
| 0% { transform: rotate(0deg); } | |
| 100% { transform: rotate(360deg); } | |
| } | |
| - type: custom:mushroom-template-card | |
| entity: sensor.spulmaschine_operation_state | |
| primary: Spülmaschine | |
| secondary: > | |
| {% set progress = states('sensor.spulmaschine_program_progress') | | |
| int(0) %} {% set finish = | |
| states('sensor.spulmaschine_program_finish_time') %} {{ progress | |
| }}% – Fertig um {{ as_timestamp(finish) | | |
| timestamp_custom('%H:%M') }} | |
| icon: mdi:dishwasher | |
| tap_action: | |
| action: more-info | |
| visibility: | |
| - condition: state | |
| entity: sensor.spulmaschine_operation_state | |
| state_not: inactive | |
| - condition: state | |
| entity: sensor.spulmaschine_operation_state | |
| state_not: ready | |
| color: cyan | |
| features_position: bottom | |
| card_mod: | |
| style: | | |
| ha-state-icon { | |
| {% if is_state('sensor.spulmaschine_operation_state', 'run') %} | |
| animation: washing 3s ease-in-out infinite !important; | |
| {% else %} | |
| animation: none !important; | |
| {% endif %} | |
| } | |
| @keyframes washing { | |
| 0% { transform: translateX(0px); } | |
| 25% { transform: translateX(3px); } | |
| 75% { transform: translateX(-3px); } | |
| 100% { transform: translateX(0px); } | |
| } | |
| - type: custom:mushroom-template-card | |
| grid_options: | |
| rows: 1 | |
| columns: 6 | |
| entity: sensor.auto_battery_level | |
| primary: Auto | |
| secondary: >- | |
| {{ states('sensor.auto_battery_level') }}% {% if | |
| is_state('binary_sensor.auto_charge_cable', 'on') %} 🔌 {% endif | |
| %} | |
| icon: mdi:car | |
| icon_color: red | |
| - type: custom:mushroom-template-card | |
| primary: Wallbox | |
| secondary: | | |
| {% if is_state('binary_sensor.wall_charging', 'on') %} | |
| {% if is_state('binary_sensor.wall_sun_mode', 'on') %} | |
| ☀️ Solarladen – {{ states('sensor.s10e_pro_compact_wallbox_consumption') | int }} KW | |
| {% else %} | |
| ⚡ Laden – {{ states('sensor.s10e_pro_compact_wallbox_consumption') | int }} KW | |
| {% endif %} | |
| {% elif is_state('binary_sensor.wall_plug', 'on') %} | |
| Verbunden – nicht laden | |
| {% else %} | |
| Nicht verbunden | |
| {% endif %} | |
| icon: mdi:ev-station | |
| tap_action: | |
| action: more-info | |
| visibility: | |
| - condition: state | |
| entity: binary_sensor.wall_plug | |
| state: 'on' | |
| color: > | |
| {% if is_state('binary_sensor.wall_charging', 'on') %} | |
| {% if is_state('binary_sensor.wall_sun_mode', 'on') %} yellow | |
| {% else %} green | |
| {% endif %} | |
| {% elif is_state('binary_sensor.wall_plug', 'on') %} blue {% else | |
| %} grey {% endif %} | |
| features_position: bottom | |
| card_mod: | |
| style: | | |
| ha-state-icon { | |
| {% if is_state('binary_sensor.wall_charging', 'on') %} | |
| animation: charging 1.5s ease-in-out infinite !important; | |
| {% else %} | |
| animation: none !important; | |
| {% endif %} | |
| } | |
| @keyframes charging { | |
| 0% { transform: translateY(0px); } | |
| 50% { transform: translateY(-4px); } | |
| 100% { transform: translateY(0px); } | |
| } | |
| - type: tile | |
| entity: switch.wall_sun_mode | |
| name: Sonnenmodus | |
| - type: tile | |
| entity: counter.juit | |
| vertical: false | |
| features_position: bottom | |
| - type: markdown | |
| content: > | |
| {% set pollen = [ | |
| ('🌳 Erle', 'erle'), | |
| ('🌳 Birke', 'birke'), | |
| ('🌳 Hasel', 'hasel'), | |
| ('🌾 Gräser', 'graeser') | |
| ] %} {% set active = namespace(count=0) %} {% for name, typ in | |
| pollen %} {% set sensor = 'sensor.pollenflug_' ~ typ ~ '_XX' %} {% | |
| set val = states(sensor) | float(0) %} {% if val > 0 %} {% set | |
| active.count = active.count + 1 %} {% if val <= 0.5 %}🟢{% elif | |
| val <= 1.5 %}🟡{% elif val <= 2.5 %}🟠{% else %}🔴{% endif %} **{{ | |
| name }}** – {{ state_attr(sensor, 'state_today_desc') }} | |
| _Morgen: {{ state_attr(sensor, 'state_tomorrow_desc') }}_ | |
| {% endif %} {% endfor %} {% if active.count == 0 %}✅ Keine | |
| Pollenbelastung{% endif %} | |
| max_columns: 2 | |
| cards: [] | |
| visible: | |
| - user: USER_ID_1 | |
| - user: USER_ID_2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
das, was die anderen sagen.