├── ui_lovelace_minimalist ├── dashboard │ ├── popup │ │ ├── energy.yaml │ │ ├── wifi.yaml │ │ ├── proxmox.yaml │ │ ├── kamera.yaml │ │ └── house.yaml │ ├── adaptive-dash │ │ ├── adaptive-ui.yaml │ │ ├── views │ │ │ ├── livingroom.yaml │ │ │ └── main.yaml │ │ └── popup │ │ │ └── popup.yaml │ ├── views │ │ ├── energy.yaml │ │ ├── test.yaml │ │ └── climate.yaml │ └── ui-lovelace.yaml ├── custom_actions │ └── custom_actions.yaml └── custom_cards │ ├── custom_card_atomic_calendar │ └── custom_card_atomic_calendar.yaml │ ├── custom_card_nik_clock │ └── custom_card_nik_clock.yaml │ ├── custom_card_camera │ └── custom_card_camera.yaml │ ├── custom_card_se7enair_washingmachine │ └── custom_card_se7enair_washingmachine.yaml │ ├── custom_card_eraycetinay_lock │ └── custom_card_eraycetinay_lock.yaml │ ├── custom_card_se7enair_trash │ └── custom_card_se7enair_trash.yaml │ └── custom_card_se7enair_welcome │ └── custom_card_se7enair_welcome.yaml ├── README.md ├── sensors └── abfall_morgen.yaml └── scripts.yaml /ui_lovelace_minimalist/dashboard/popup/energy.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # minimalist-dashboard 2 | ![Auswahl_002](https://user-images.githubusercontent.com/1680106/195171308-572c2009-0b83-459c-b14a-8745402deb37.png) 3 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/popup/wifi.yaml: -------------------------------------------------------------------------------- 1 | action: fire-dom-event 2 | browser_mod: 3 | service: browser_mod.popup 4 | data: 5 | title: Gäste Wifi 6 | # size: fullscreen 7 | # style: 8 | # .: | 9 | # :host .content { 10 | # width: 1150px; 11 | # } 12 | content: 13 | type: picture 14 | image: /local/wifi.png 15 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/popup/proxmox.yaml: -------------------------------------------------------------------------------- 1 | action: fire-dom-event 2 | browser_mod: 3 | service: browser_mod.popup 4 | data: 5 | title: Proxmox 6 | size: wide 7 | style: 8 | .: | 9 | :host .content { 10 | width: 1150px; 11 | } 12 | content: 13 | type: iframe 14 | url: >- 15 | http://192.168.178.107:3000/d/IfgdXjtnk/proxmox-flux?orgId=1&theme=light&kiosk=tv 16 | aspect_ratio: 100% -------------------------------------------------------------------------------- /ui_lovelace_minimalist/custom_actions/custom_actions.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | ulm_custom_actions: 3 | variables: 4 | ulm_card_tap_action: "toggle" 5 | ulm_card_hold_action: "popup" 6 | ulm_card_double_tap_action: "adaptive" 7 | ulm_icon_tap_action: "toggle" 8 | ulm_icon_hold_action: "popup" 9 | ulm_icon_double_tap_action: "adaptive" 10 | ulm_name_tap_action: "toggle" 11 | ulm_name_hold_action: "popup" 12 | ulm_name_double_tap_action: "adaptive" 13 | -------------------------------------------------------------------------------- /sensors/abfall_morgen.yaml: -------------------------------------------------------------------------------- 1 | - platform: template 2 | sensors: 3 | abfall_morgen: 4 | friendly_name: abfall_morgen 5 | value_template: > 6 | {% set midnight = now().replace(hour=0, minute=0, second=0, microsecond=0).timestamp() %} 7 | {% set event = state_attr('calendar.abfallkalender', 'start_time') | as_timestamp %} 8 | {% set delta = ((event - midnight) // 86400) | int(0) %} 9 | {% if delta == 0 %} 10 | Heute 11 | {% elif delta == 1 %} 12 | Morgen 13 | {% elif delta == 2 %} 14 | Übermorgen 15 | {% else %} 16 | In {{ delta }} Tagen 17 | {% endif %} 18 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/popup/kamera.yaml: -------------------------------------------------------------------------------- 1 | action: fire-dom-event 2 | browser_mod: 3 | service: browser_mod.popup 4 | data: 5 | title: Hof 6 | content: 7 | style: 8 | .: | 9 | :host .content { 10 | width: 1150px; 11 | } 12 | type: custom:frigate-card 13 | event_viewer: 14 | controls: 15 | next_previous: 16 | style: thumbnails 17 | menu: 18 | mode: hidden-top 19 | buttons: 20 | frigate: true 21 | view: 22 | default: live 23 | cameras: 24 | - camera_entity: camera.hof 25 | label: person 26 | zone: einfahrt 27 | live_provider: frigate-jsmpeg 28 | live: 29 | preload: true -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/adaptive-dash/adaptive-ui.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | button_card_templates: !include_dir_merge_named "../../../custom_components/ui_lovelace_minimalist/__ui_minimalist__/ulm_templates/" 3 | 4 | title: "UI Lovelace Minimalist" 5 | theme: "minimalist-desktop" 6 | background: "var(--background-image)" 7 | views: 8 | - type: "custom:grid-layout" 9 | title: "home" 10 | icon: "mdi:home" 11 | path: "0" 12 | layout: 13 | grid-template-columns: "1fr 1fr" 14 | grid-template-rows: "min-content" 15 | grid-template-areas: | 16 | "main popup" 17 | mediaquery: 18 | "(max-width: 1100px), (orientation: portrait)": 19 | grid-template-columns: "100%" 20 | grid-template-areas: "main" 21 | cards: 22 | - !include "views/main.yaml" 23 | - !include "popup/popup.yaml" 24 | 25 | - type: "custom:grid-layout" 26 | title: "Livingroom" 27 | icon: "mdi:sofa" 28 | path: "Livingroom" 29 | layout: 30 | grid-template-columns: "1fr 1fr" 31 | grid-template-rows: "min-content" 32 | grid-template-areas: | 33 | "livingroom popup" 34 | mediaquery: 35 | "(max-width: 1100px), (orientation: portrait)": 36 | grid-template-columns: "100%" 37 | grid-template-areas: "livingroom" 38 | cards: 39 | - !include "views/livingroom.yaml" 40 | - !include "popup/popup.yaml" 41 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/views/energy.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | button_card_templates: !include_dir_merge_named "../../../custom_components/ui_lovelace_minimalist/__ui_minimalist__/ulm_templates/" 3 | 4 | kiosk_mode: 5 | hide_header: true 6 | hide_sidebar: true 7 | mobile_settings: 8 | hide_sidebar: false 9 | ignore_entity_settings: true 10 | custom_width: 768 11 | 12 | title: "Energy" 13 | theme: "minimalist-desktop" 14 | # views: !include_dir_merge_list "views/" 15 | views: 16 | - title: "Energy" 17 | path: 0 18 | icon: "mdi:fire" 19 | type: custom:grid-layout 20 | layout: 21 | grid-template-columns: 0.5em 3em repeat(2, 3fr) 0.5em 22 | grid-template-rows: 0.1fr 1fr 1fr 1em 23 | grid-gap: 0.7em 24 | grid-template-areas: | 25 | ". back . selection ." 26 | ". graph graph graph ." 27 | ". table table table ." 28 | ". footer footer footer ." 29 | 30 | cards: 31 | - type: custom:button-card 32 | view_layout: 33 | grid-area: back 34 | template: chip_back 35 | variables: 36 | ulm_chip_back_path: /ui-lovelace-minimalist/ 37 | - type: energy-sources-table 38 | view_layout: 39 | grid-area: table 40 | - type: energy-gas-graph 41 | view_layout: 42 | grid-area: graph 43 | - type: energy-date-selection 44 | view_layout: 45 | grid-area: selection -------------------------------------------------------------------------------- /ui_lovelace_minimalist/custom_cards/custom_card_atomic_calendar/custom_card_atomic_calendar.yaml: -------------------------------------------------------------------------------- 1 | custom_card_atomic_calendar: 2 | # template: 3 | # - "ulm_language_variables" 4 | custom_fields: 5 | calendar: 6 | card: 7 | type: custom:atomic-calendar-revive 8 | enableModeChange: true 9 | firstDayOfWeek: 1 10 | maxDaysToShow: 100 11 | entities: 12 | - entity: !secret calendar_entity_primary 13 | - entity: !secret calendar_entity_family 14 | showCurrentEventLine: false 15 | showMonth: false 16 | showWeekDay: true 17 | showNoEventsForToday: true 18 | showEventIcon: false 19 | calShowDescription: true 20 | showLastCalendarWeek: false 21 | dimFinishedEvents: true 22 | showRelativeTime: false 23 | eventCalNameColor: rgba(86, 100, 86, .35) 24 | calWeekDayColor: rgba(86, 100, 86, .35) 25 | showLocation: false 26 | untilText: bis 27 | noEventsForNextDaysText: keine Termine in den nächsten Tagen 28 | showProgressBar: false 29 | showDescription: true 30 | noEventText: keine Termine heute 31 | showFullDayProgress: true 32 | disableCalEventLink: false 33 | disableCalLocationLink: false 34 | disableCalLink: false 35 | showDate: false 36 | sortByStartTime: true 37 | cardHeight: 100% 38 | refreshInterval: 60 -------------------------------------------------------------------------------- /ui_lovelace_minimalist/custom_cards/custom_card_nik_clock/custom_card_nik_clock.yaml: -------------------------------------------------------------------------------- 1 | custom_card_nik_clock: 2 | triggers_update: "all" 3 | variables: 4 | ulm_custom_card_nik_clock_switch: 5 | ulm_custom_card_nik_clock_switch_enable: false 6 | ulm_language: > 7 | [[[ 8 | return hass["language"]; 9 | ]]] 10 | show_icon: false 11 | show_name: true 12 | show_state: false 13 | show_label: true 14 | name: > 15 | [[[ 16 | const time = new Date(); 17 | let hour = time.getHours(); 18 | let minute = (time.getMinutes()<10?'0':'') + time.getMinutes() 19 | return hour + ":" + minute; 20 | ]]] 21 | layout: "vertical" 22 | label: > 23 | [[[ 24 | const event = new Date(); 25 | const options = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }; 26 | var locale = variables.ulm_language; 27 | let formatted_date = event.toLocaleDateString(locale, options); 28 | return formatted_date; 29 | ]]] 30 | tap_action: 31 | action: > 32 | [[[ 33 | if (variables.ulm_custom_card_nik_clock_switch_enable){ 34 | return 'call-service' 35 | } 36 | else{ 37 | return 'none' 38 | } 39 | ]]] 40 | service: "input_boolean.toggle" 41 | service_data: 42 | entity_id: "[[[ return variables.ulm_custom_card_nik_clock_switch ]]]" 43 | styles: 44 | card: 45 | - background-color: "transparent" 46 | - height: "100px" 47 | - box-shadow: "none" 48 | name: 49 | - font-size: "290%" 50 | - font-weight: "bold" 51 | - justify-self: "center" 52 | label: 53 | - justify-self: "center" 54 | - font-size: "110%" -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/adaptive-dash/views/livingroom.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: "custom:layout-card" 3 | layout_type: "custom:grid-layout" 4 | layout: 5 | grid-template-rows: "min-content" 6 | grid-template-columns: "1fr 1fr 1fr" 7 | grid-template-areas: > 8 | "title1 title1 title1" 9 | "card1 card1 card1" 10 | "card2 card3 card4" 11 | "card5 card6 ." 12 | "card7 card8 card9" 13 | "card10 card11 card12" 14 | "card13 card14 card15" 15 | "card16 card17 card18" 16 | mediaquery: 17 | # Mobile 18 | "(max-width: 800px)": 19 | grid-template-columns: "1fr 1fr" 20 | grid-template-areas: | 21 | "title1 title1" 22 | "card1 card1" 23 | "card2 card3" 24 | "card4 card5" 25 | "card6 card7" 26 | "card8 card9" 27 | "card10 card11" 28 | "card12 card13" 29 | "card14 card15" 30 | "card16 card17" 31 | "card18 card19" 32 | view_layout: 33 | grid-area: "livingroom" 34 | cards: 35 | - view_layout: 36 | grid-area: "title1" 37 | type: "custom:button-card" 38 | template: "card_title" 39 | name: "Some title" 40 | label: "grid-area: title1" 41 | 42 | - view_layout: 43 | grid-area: "title2" 44 | type: "custom:button-card" 45 | template: "card_title" 46 | name: "Some title" 47 | label: "grid-area: title2" 48 | 49 | - view_layout: 50 | grid-area: "card1" 51 | type: "custom:button-card" 52 | template: "card_title" 53 | name: "Put here your
first card" 54 | label: "grid-area: card1" 55 | 56 | - view_layout: 57 | grid-area: "card2" 58 | type: "custom:button-card" 59 | template: "card_title" 60 | name: "Put here your
second card" 61 | label: "grid-area: card2" 62 | 63 | - view_layout: 64 | grid-area: "card3" 65 | type: "custom:button-card" 66 | template: "card_title" 67 | name: "Put here your
third card" 68 | label: "grid-area: card3" 69 | 70 | - view_layout: 71 | grid-area: "card4" 72 | type: "custom:button-card" 73 | template: "card_title" 74 | name: "Put here your
fourth card" 75 | label: "grid-area: card4" 76 | 77 | - view_layout: 78 | grid-area: "card5" 79 | type: "custom:button-card" 80 | template: "card_title" 81 | name: "Put here your
fifth card" 82 | label: "grid-area: card5" 83 | 84 | - view_layout: 85 | grid-area: "card6" 86 | type: "custom:button-card" 87 | template: "card_title" 88 | name: "Put here your
sixth card" 89 | label: "grid-area: card6" 90 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/custom_cards/custom_card_camera/custom_card_camera.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | custom_card_camera: 3 | template: 4 | - "blue_no_state" 5 | show_name: false 6 | show_label: false 7 | styles: 8 | card: 9 | - border-radius: "20px" 10 | - box-shadow: "var(--box-shadow)" 11 | - padding: |- 12 | [[[ 13 | if(variables.ulm_custom_card_camera_title) 14 | return "12px"; 15 | else 16 | return "0px"; 17 | ]]] 18 | img_cell: 19 | - border-radius: "50%" 20 | - place-self: "center" 21 | - width: "42px" 22 | - height: "42px" 23 | grid: 24 | - grid-template-areas: "'i item1' 'i item1' 'item2 item2'" 25 | - grid-template-columns: "min-content auto" 26 | - grid-template-rows: "min-content min-content min-content" 27 | - row-gap: |- 28 | [[[ 29 | if(variables.ulm_custom_card_camera_title) 30 | return "12px"; 31 | else 32 | return "0px"; 33 | ]]] 34 | custom_fields: 35 | item1: 36 | card: 37 | type: "custom:button-card" 38 | show_name: "[[[ return variables.ulm_custom_card_camera_title; ]]]" 39 | show_label: "[[[ return variables.ulm_custom_card_camera_title; ]]]" 40 | show_icon: "[[[ return variables.ulm_custom_card_camera_title; ]]]" 41 | name: "[[[ return variables.ulm_custom_card_camera_name; ]]]" 42 | label: "[[[ return variables.ulm_custom_card_camera_label; ]]]" 43 | styles: 44 | card: 45 | - box-shadow: "none" 46 | - padding: "0" 47 | name: 48 | - align-self: "end" 49 | - justify-self: "start" 50 | - font-weight: "bold" 51 | - font-size: "14px" 52 | - margin-left: "12px" 53 | - filter: "opacity(100%)" 54 | label: 55 | - justify-self: "start" 56 | - align-self: "start" 57 | - font-weight: "bolder" 58 | - font-size: "12px" 59 | - filter: "opacity(40%)" 60 | - margin-left: "12px" 61 | grid: 62 | - grid-template-areas: "'n' 'l'" 63 | - grid-template-columns: "auto" 64 | - grid-template-rows: "min-content min-content" 65 | item2: 66 | card: 67 | type: "picture-entity" 68 | camera_image: "[[[ return entity.entity_id ]]]" 69 | camera_view: "live" 70 | entity: "[[[ return entity.entity_id ]]]" 71 | show_name: false 72 | show_state: false 73 | tap_action: 74 | action: "more-info" -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/views/test.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | button_card_templates: !include_dir_merge_named "../../../custom_components/ui_lovelace_minimalist/__ui_minimalist__/ulm_templates/" 3 | 4 | kiosk_mode: 5 | hide_header: true 6 | hide_sidebar: true 7 | mobile_settings: 8 | hide_sidebar: false 9 | ignore_entity_settings: true 10 | custom_width: 768 11 | 12 | title: "Test" 13 | theme: "minimalist-desktop" 14 | # views: !include_dir_merge_list "views/" 15 | views: 16 | - title: "Climate" 17 | path: 0 18 | icon: "mdi:test-tube" 19 | type: custom:grid-layout 20 | layout: 21 | grid-template-columns: 3em 1fr 0.5em 22 | grid-template-rows: 3em 8em 15em 3em 23 | grid-gap: 0.7em 24 | grid-template-areas: | 25 | ". . ." 26 | "back ein ." 27 | ". aus ." 28 | ". . ." 29 | 30 | 31 | cards: 32 | - type: custom:button-card 33 | view_layout: 34 | grid-area: back 35 | template: chip_back 36 | variables: 37 | ulm_chip_back_path: /ui-lovelace-minimalist/ 38 | # On 39 | - type: vertical-stack 40 | view_layout: 41 | grid-area: ein 42 | cards: 43 | - type: 'custom:button-card' 44 | template: card_title 45 | name: Eingeschaltete Lichter 46 | - type: custom:auto-entities 47 | card: 48 | type: grid 49 | square: false 50 | columns: 6 51 | card_param: cards 52 | filter: 53 | include: 54 | - domain: light 55 | state: "on" 56 | options: 57 | type: 'custom:button-card' 58 | template: card_light 59 | variables: 60 | ulm_card_light_enable_slider: false 61 | ulm_card_light_enable_color: false 62 | exclude: 63 | - entity_id: "*dashboard*" 64 | # Off 65 | - type: vertical-stack 66 | view_layout: 67 | grid-area: aus 68 | cards: 69 | - type: 'custom:button-card' 70 | template: card_title 71 | name: Alle Lichter 72 | - type: custom:auto-entities 73 | card: 74 | type: grid 75 | square: false 76 | columns: 6 77 | card_param: cards 78 | filter: 79 | include: 80 | - domain: light 81 | state: "off" 82 | options: 83 | type: 'custom:button-card' 84 | template: card_light 85 | variables: 86 | ulm_card_light_enable_slider: false 87 | ulm_card_light_enable_color: false 88 | exclude: 89 | - entity_id: "*dashboard*" 90 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/adaptive-dash/views/main.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: "custom:layout-card" 3 | layout_type: "custom:grid-layout" 4 | layout: 5 | # Tablet portrait 6 | grid-template-columns: "1fr 1fr 1fr 1fr 1fr 1fr" 7 | grid-template-areas: | 8 | "text text text weather weather weather" 9 | "welcome welcome welcome welcome welcome welcome" 10 | "title1 title1 title1 title1 title1 title1" 11 | "card1 card1 card2 card2 card3 card3" 12 | "title2 title2 title2 title2 title2 title2" 13 | "card4 card4 card5 card5 card6 card6" 14 | mediaquery: 15 | # Mobile 16 | "(max-width: 800px)": 17 | grid-template-columns: "1fr 1fr" 18 | grid-template-areas: | 19 | "welcome welcome" 20 | "person person" 21 | "title1 title1" 22 | "card1 card2" 23 | "card3 card4" 24 | "title2 title2" 25 | "card5 card6" 26 | "card7 card8" 27 | view_layout: 28 | grid-area: "main" 29 | cards: 30 | - view_layout: 31 | grid-area: "text" 32 | type: "custom:button-card" 33 | template: "card_title" 34 | name: "This is the adaptive
dashboard provided by
UI Minimalist" 35 | label: "Find instructions to add
cards on the wiki" 36 | 37 | - view_layout: 38 | grid-area: "weather" 39 | type: "custom:button-card" 40 | template: "card_title" 41 | name: "This could be your
weather card" 42 | label: "grid-area: weather" 43 | 44 | - view_layout: 45 | grid-area: "welcome" 46 | type: "custom:button-card" 47 | template: "card_title" 48 | name: "This could be your
welcome/scenes card" 49 | label: "grid-area: welcome" 50 | 51 | - view_layout: 52 | grid-area: "title1" 53 | type: "custom:button-card" 54 | template: "card_title" 55 | name: "Some title" 56 | label: "grid-area: title1" 57 | 58 | - view_layout: 59 | grid-area: "title2" 60 | type: "custom:button-card" 61 | template: "card_title" 62 | name: "Some title" 63 | label: "grid-area: title2" 64 | 65 | - view_layout: 66 | grid-area: "card1" 67 | type: "custom:button-card" 68 | template: "card_title" 69 | name: "Put here your
first card" 70 | label: "grid-area: card1" 71 | 72 | - view_layout: 73 | grid-area: "card2" 74 | type: "custom:button-card" 75 | template: "card_title" 76 | name: "Put here your
second card" 77 | label: "grid-area: card2" 78 | 79 | - view_layout: 80 | grid-area: "card3" 81 | type: "custom:button-card" 82 | template: "card_title" 83 | name: "Put here your
third card" 84 | label: "grid-area: card3" 85 | 86 | - view_layout: 87 | grid-area: "card4" 88 | type: "custom:button-card" 89 | template: "card_title" 90 | name: "Put here your
fourth card" 91 | label: "grid-area: card4" 92 | 93 | - view_layout: 94 | grid-area: "card5" 95 | type: "custom:button-card" 96 | template: "card_title" 97 | name: "Put here your
fifth card" 98 | label: "grid-area: card5" 99 | 100 | - view_layout: 101 | grid-area: "card6" 102 | type: "custom:button-card" 103 | template: "card_title" 104 | name: "Put here your
sixth card" 105 | label: "grid-area: card6" 106 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/custom_cards/custom_card_se7enair_washingmachine/custom_card_se7enair_washingmachine.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | ### Card Generic Swap ### 3 | custom_card_se7enair_washingmachine: 4 | template: 5 | - "icon_more_info_new" 6 | - "ulm_translation_engine" 7 | variables: 8 | ulm_card_generic_swap_icon: "[[[ return entity.attributes.icon ]]]" 9 | ulm_card_generic_swap_name: "[[[ return entity.attributes.friendly_name ]]]" 10 | ulm_outlet_power_enable_popup: false 11 | custom_fields: 12 | item1: 13 | card: 14 | type: "custom:button-card" 15 | custom_fields: 16 | item1: 17 | card: 18 | type: "custom:button-card" 19 | state: 20 | - value: "Läuft" 21 | styles: 22 | card: [background-color: "rgba(245, 200, 110, 0.8)"] 23 | icon: 24 | - color: white 25 | - animation: blink 3s ease infinite 26 | - value: "Finishing" 27 | styles: 28 | card: [background-color: "rgba(229, 154, 24, 0.8)"] 29 | - value: "Fertig" 30 | icon: mdi:alert 31 | styles: 32 | icon: 33 | - color: white 34 | card: 35 | - background-color: "rgba(0, 136, 0, 0.7)" 36 | - animation: blink 3s ease infinite 37 | tap_action: 38 | action: call-service 39 | service: input_select.select_option 40 | service_data: 41 | entity_id: "[[[ return entity.entity_id ]]]" 42 | option: Idle 43 | entity: "[[[ return entity.entity_id ]]]" 44 | icon: "[[[ return variables.ulm_card_generic_swap_icon; ]]]" 45 | styles: 46 | icon: 47 | - color: "rgba(var(--color-theme),0.3)" 48 | variables: > 49 | [[[ 50 | let vars = variables; 51 | 52 | if(variables.ulm_outlet_power_enable_popup) { 53 | vars.ulm_custom_popup = { 54 | 'template': 'popup_power_outlet_stats', 55 | 'popup_variables': { 56 | 'ulm_popup_power_outlet_sensor1': variables.ulm_popup_power_outlet_sensor1, 57 | 'ulm_popup_power_outlet_sensor2': variables.ulm_popup_power_outlet_sensor2, 58 | 'ulm_popup_power_outlet_graph_sensor': variables.ulm_popup_power_outlet_graph_sensor 59 | } 60 | }; 61 | } 62 | return vars; 63 | ]]] 64 | item2: 65 | card: 66 | type: "custom:button-card" 67 | entity: "[[[ return entity.entity_id ]]]" 68 | label: "[[[ return variables.ulm_translation_state_unit ]]]" 69 | name: "[[[ return variables.ulm_card_generic_swap_name ]]]" 70 | variables: > 71 | [[[ 72 | let vars = variables; 73 | 74 | if(variables.ulm_outlet_power_enable_popup) { 75 | vars.ulm_custom_popup = { 76 | 'template': 'popup_power_outlet_stats', 77 | 'popup_variables': { 78 | 'ulm_popup_power_outlet_sensor1': variables.ulm_popup_power_outlet_sensor1, 79 | 'ulm_popup_power_outlet_sensor2': variables.ulm_popup_power_outlet_sensor2, 80 | 'ulm_popup_power_outlet_graph_sensor': variables.ulm_popup_power_outlet_graph_sensor 81 | } 82 | }; 83 | } 84 | return vars; 85 | ]]] 86 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/popup/house.yaml: -------------------------------------------------------------------------------- 1 | action: fire-dom-event 2 | browser_mod: 3 | service: browser_mod.popup 4 | data: 5 | title: Smarthome 6 | hide_header: false 7 | style: 8 | .: | 9 | :host .content { 10 | width: calc(385px + 385px + 385px); 11 | max-width: 90vw; 12 | height: 569px; 13 | } 14 | card: 15 | type: custom:layout-card 16 | layout_type: custom:grid-layout 17 | layout: 18 | grid-template-columns: repeat(3, 1fr) 19 | grid-template-rows: 1fr 20 | grid-template-areas: | 21 | "house heating batteries" 22 | mediaquery: 23 | #phone 24 | "(max-width: 800px)": 25 | grid-template-columns: 1fr 26 | grid-template-rows: repeat(3, 1fr) 27 | grid-template-areas: | 28 | "house" 29 | "heating" 30 | "batteries" 31 | cards: 32 | 33 | ################### 34 | # HAUS # 35 | ################### 36 | - type: entities 37 | view_layout: 38 | grid_area: house 39 | title: Haus 40 | style: &border | 41 | ha-card { 42 | border-radius: 0; 43 | animation: ha-card 1s forwards; 44 | } 45 | 46 | @keyframes ha-card { 47 | 0%, 100% { 48 | border-right: 1.5px solid rgba(0, 0, 0, 0.2); 49 | } 50 | } 51 | 52 | /* phone */ 53 | @media screen and (max-width: 800px) { 54 | ha-card { 55 | border-bottom: 1.5px solid rgba(0, 0, 0, 0.2); 56 | padding-right: 0; 57 | animation: none; 58 | } 59 | } 60 | entities: 61 | - type: custom:hui-element 62 | card_type: glance 63 | entities: 64 | - entity: person.christoph 65 | - entity: person.franziska 66 | - entity: group.haus 67 | - entity: input_boolean.alarmanlage 68 | - entity: input_boolean.absent_long 69 | - entity: binary_sensor.flur_rauchmelder_eg_alarm 70 | name: Schlafzimmer Rauchmelder 71 | - entity: binary_sensor.flur_rauchmelder_dg_alarm 72 | name: DG/Flur Rauchmelder 73 | - entity: binary_sensor.schlafzimmer_rauchmelder_alarm 74 | name: EG/Flur Rauchmelder 75 | 76 | ################## 77 | # Heizung # 78 | ################## 79 | - type: entities 80 | view_layout: 81 | grid-area: heating 82 | title: Heizung 83 | style: *border 84 | entities: 85 | - entity: input_boolean.heizung 86 | - entity: input_boolean.unplanmaessig_zuhause 87 | - entity: group.ferien_und_feiertage 88 | name: Ferien, Feiertage, Homeoffice 89 | - entity: input_boolean.homeoffice 90 | - entity: input_boolean.partymodus 91 | - entity: sensor.openweathermap_temperature 92 | name: Außentemperatur 93 | - entity: schedy_room.schedy_heating_schlafzimmer 94 | icon: mdi:thermometer-lines 95 | name: Schlafzimmer 96 | - entity: schedy_room.schedy_heating_wohnesszimmer 97 | icon: mdi:thermometer-lines 98 | name: Wohn und Esszimmer 99 | - entity: schedy_room.schedy_heating_buero 100 | icon: mdi:thermometer-lines 101 | name: Büro 102 | - entity: schedy_room.schedy_heating_bad 103 | icon: mdi:thermometer-lines 104 | name: Bad 105 | 106 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/custom_cards/custom_card_eraycetinay_lock/custom_card_eraycetinay_lock.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | custom_card_eraycetinay_lock: 3 | template: 4 | - "icon_info_bg" 5 | - "ulm_translation_engine" 6 | - "custom_card_eraycetinay_lock_language_variables" 7 | variables: 8 | ulm_custom_card_eraycetinay_lock_battery_warning: 20 9 | ulm_custom_card_eraycetinay_lock_battery_warning_low: 5 10 | tap_action: 11 | action: | 12 | [[[ 13 | return variables.ulm_custom_card_eraycetinay_lock_tap_control ? "call-service" : "more-info"; 14 | ]]] 15 | # only related with call-service action 16 | service: | 17 | [[[ 18 | if(variables.ulm_custom_card_eraycetinay_lock_tap_control){ 19 | if(variables.ulm_custom_card_eraycetinay_lock_open){ 20 | return "lock.open"; 21 | } else { 22 | if (entity.state == "locked"){ 23 | return "lock.unlock"; 24 | } else if (entity.state == "unlocked"){ 25 | return "lock.lock"; 26 | } 27 | } 28 | } 29 | ]]] 30 | # only related with call-service action 31 | service_data: 32 | entity_id: | 33 | [[[ return entity.entity_id; ]]] 34 | show_label: true 35 | show_name: true 36 | triggers_update: 37 | - "[[[ return entity.entity_id; ]]]" 38 | label: "[[[ return variables.ulm_translation_state ]]]" 39 | state: 40 | - operator: "template" 41 | value: | 42 | [[[ return entity.state == ("unlocked" || "open"); ]]] 43 | styles: 44 | icon: 45 | - color: "rgba(var(--color-yellow),1)" 46 | img_cell: 47 | - background-color: "rgba(var(--color-yellow), 0.2)" 48 | - operator: "template" 49 | value: | 50 | [[[ return entity.state == "locked"; ]]] 51 | styles: 52 | icon: 53 | - color: "rgba(var(--color-green),1)" 54 | img_cell: 55 | - background-color: "rgba(var(--color-green), 0.2)" 56 | styles: 57 | icon: 58 | - color: "rgba(var(--color-theme),0.2)" 59 | img_cell: 60 | - background-color: "rgba(var(--color-theme),0.05)" 61 | - border-radius: "50%" 62 | - place-self: "center" 63 | - width: "42px" 64 | - height: "42px" 65 | grid: 66 | - position: "relative" 67 | custom_fields: 68 | notification_locked_and_opened: 69 | - border-radius: "50%" 70 | - position: "absolute" 71 | - left: "28px" 72 | - top: "-6px" 73 | - height: "16px" 74 | - width: "16px" 75 | - border: "2px solid var(--card-background-color)" 76 | - font-size: "12px" 77 | - line-height: "14px" 78 | - background-color: "[[[ return 'rgba(var(--color-red),1)'; ]]]" 79 | notification_battery: 80 | - border-radius: "50%" 81 | - position: "absolute" 82 | - left: "-6px" 83 | - top: "-6px" 84 | - height: "16px" 85 | - width: "16px" 86 | - border: "2px solid var(--card-background-color)" 87 | - font-size: "12px" 88 | - line-height: "14px" 89 | - background-color: | 90 | [[[ 91 | if (variables.ulm_custom_card_eraycetinay_lock_battery_level !== undefined) { 92 | if (states[variables.ulm_custom_card_eraycetinay_lock_battery_level].state <= variables.ulm_custom_card_eraycetinay_lock_battery_warning_low) { 93 | return "rgba(var(--color-red),1)"; 94 | } else if (states[variables.ulm_custom_card_eraycetinay_lock_battery_level].state <= variables.ulm_custom_card_eraycetinay_lock_battery_warning) { 95 | return "rgba(var(--color-yellow),1)"; 96 | } 97 | } 98 | ]]] 99 | custom_fields: 100 | notification_locked_and_opened: > 101 | [[[ 102 | if (variables.ulm_custom_card_eraycetinay_lock_door_open !== undefined && (entity.state === "locked" && states[variables.ulm_custom_card_eraycetinay_lock_door_open].state === "on")) { 103 | return ``; 104 | } 105 | ]]] 106 | notification_battery: > 107 | [[[ 108 | if (variables.ulm_custom_card_eraycetinay_lock_battery_level !== undefined) { 109 | if (variables.ulm_custom_card_eraycetinay_lock_battery_warning >= states[variables.ulm_custom_card_eraycetinay_lock_battery_level].state) { 110 | return ` 111 | 112 | `; 113 | } 114 | } 115 | ]]] 116 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/adaptive-dash/popup/popup.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: "custom:state-switch" 3 | view_layout: 4 | grid-area: "popup" 5 | show: 6 | # only show when screen-width is larger than 1100px 7 | mediaquery: "(min-width: 1100px)" 8 | # add your input_select 9 | entity: 10 | default: "default" 11 | transition: "slide-down" 12 | transition_time: 500 13 | # options set in the input_select 14 | states: 15 | # Devices 16 | ## Lights 17 | # light 1: 18 | # type: "custom:button-card" 19 | # template: "popup_light_brightness" 20 | # entity: 21 | # light 2: 22 | # type: "custom:button-card" 23 | # template: "popup_light_brightness" 24 | # entity: 25 | # light 3: 26 | # type: "custom:button-card" 27 | # template: "popup_light_brightness" 28 | # entity: 29 | # light 4: 30 | # type: "custom:button-card" 31 | # template: "popup_light_brightness" 32 | # entity: 33 | # light 5: 34 | # type: "custom:button-card" 35 | # template: "popup_light_brightness" 36 | # entity: 37 | # light 6: 38 | # type: "custom:button-card" 39 | # template: "popup_light_brightness" 40 | # entity: 41 | # light 7: 42 | # type: "custom:button-card" 43 | # template: "popup_light_brightness" 44 | # entity: 45 | # light 8: 46 | # type: "custom:button-card" 47 | # template: "popup_light_brightness" 48 | # entity: 49 | # light 9: 50 | # type: "custom:button-card" 51 | # template: "popup_light_brightness" 52 | # entity: 53 | # light 10: 54 | # type: "custom:button-card" 55 | # template: "popup_light_brightness" 56 | # entity: 57 | # 58 | ### Mediaplayers 59 | # mediaplayer 1: 60 | # type: "custom:button-card" 61 | # template: "popup_media_player_infos" 62 | # entity: 63 | # mediaplayer 2: 64 | # type: "custom:button-card" 65 | # template: "popup_media_player_infos" 66 | # entity: 67 | # mediaplayer 3: 68 | # type: "custom:button-card" 69 | # template: "popup_media_player_infos" 70 | # entity: 71 | # mediaplayer 4: 72 | # type: "custom:button-card" 73 | # template: "popup_media_player_infos" 74 | # entity: 75 | # mediaplayer 5: 76 | # type: "custom:button-card" 77 | # template: "popup_media_player_infos" 78 | # entity: 79 | # 80 | ### Thermostats 81 | # climate 1: 82 | # type: "custom:button-card" 83 | # template: "popup_thermostat_temperature" 84 | # entity: 85 | # climate 2: 86 | # type: "custom:button-card" 87 | # template: "popup_thermostat_temperature" 88 | # entity: 89 | # climate 3: 90 | # type: "custom:button-card" 91 | # template: "popup_thermostat_temperature" 92 | # entity: 93 | # climate 4: 94 | # type: "custom:button-card" 95 | # template: "popup_thermostat_temperature" 96 | # entity: 97 | # climate 5: 98 | # type: "custom:button-card" 99 | # template: "popup_thermostat_temperature" 100 | # entity: 101 | # 102 | ### Power 103 | # power 1: 104 | # type: "custom:button-card" 105 | # template: "popup_power_outlet_stats" 106 | # entity: 107 | # variables: 108 | # ulm_popup_power_outlet_sensor1: 109 | # ulm_popup_power_outlet_sensor2: 110 | # ulm_popup_power_outlet_graph_sensor: 111 | # power 2: 112 | # type: "custom:button-card" 113 | # template: "popup_power_outlet_stats" 114 | # entity: 115 | # variables: 116 | # ulm_popup_power_outlet_sensor1: 117 | # ulm_popup_power_outlet_sensor2: 118 | # ulm_popup_power_outlet_graph_sensor: 119 | # power 3: 120 | # type: "custom:button-card" 121 | # template: "popup_power_outlet_stats" 122 | # entity: 123 | # variables: 124 | # ulm_popup_power_outlet_sensor1: 125 | # ulm_popup_power_outlet_sensor2: 126 | # ulm_popup_power_outlet_graph_sensor: 127 | # power 4: 128 | # type: "custom:button-card" 129 | # template: "popup_power_outlet_stats" 130 | # entity: 131 | # variables: 132 | # ulm_popup_power_outlet_sensor1: 133 | # ulm_popup_power_outlet_sensor2: 134 | # ulm_popup_power_outlet_graph_sensor: 135 | # power 5: 136 | # type: "custom:button-card" 137 | # template: "popup_power_outlet_stats" 138 | # entity: 139 | # variables: 140 | # ulm_popup_power_outlet_sensor1: 141 | # ulm_popup_power_outlet_sensor2: 142 | # ulm_popup_power_outlet_graph_sensor: 143 | 144 | ## Rooms 145 | livingroom: !include "../views/livingroom.yaml" 146 | # bedroom: !include "../views/bedroom.yaml" 147 | # bathroom: !include "../views/bathroom.yaml" 148 | # garage: !include "../views/garage.yaml" 149 | # lights: !include "../views/lights.yaml" 150 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/custom_cards/custom_card_se7enair_trash/custom_card_se7enair_trash.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | ### Card Generic Swap ### 3 | custom_card_se7enair_trash: 4 | template: 5 | - "icon_more_info_new" 6 | - "ulm_translation_engine" 7 | variables: 8 | ulm_card_generic_swap_icon: "[[[ return entity.attributes.icon ]]]" 9 | ulm_card_generic_swap_name: "[[[ return entity.attributes.friendly_name ]]]" 10 | ulm_outlet_power_enable_popup: false 11 | custom_fields: 12 | item1: 13 | card: 14 | extra_styles: | 15 | @-webkit-keyframes pulsate-fwd { 16 | 0% { 17 | -webkit-transform: scale(1); 18 | transform: scale(1); 19 | } 20 | 50% { 21 | -webkit-transform: scale(1.1); 22 | transform: scale(1.1); 23 | } 24 | 100% { 25 | -webkit-transform: scale(1); 26 | transform: scale(1); 27 | } 28 | } 29 | @keyframes pulsate-fwd { 30 | 0% { 31 | -webkit-transform: scale(1); 32 | transform: scale(1); 33 | } 34 | 50% { 35 | -webkit-transform: scale(1.1); 36 | transform: scale(1.1); 37 | } 38 | 100% { 39 | -webkit-transform: scale(1); 40 | transform: scale(1); 41 | } 42 | } 43 | styles: 44 | card: 45 | - animation: > 46 | [[[ 47 | if (((states[entity.entity_id].attributes.message == 'Biotonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Restmülltonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Altpapier')) && ((states['sensor.abfall_morgen'].state == 'Morgen') || (states['sensor.abfall_morgen'].state == 'Heute'))) 48 | return 'pulsate-fwd 1s ease-in-out infinite'; 49 | else 50 | return ''; 51 | ]]] 52 | type: "custom:button-card" 53 | custom_fields: 54 | item1: 55 | card: 56 | type: "custom:button-card" 57 | entity: "[[[ return entity.entity_id ]]]" 58 | state: 59 | - operator: "template" 60 | value: | 61 | [[[ return states[entity.entity_id].attributes.message == 'Biotonne in Memmingen'; ]]] 62 | icon: mdi:recycle 63 | styles: 64 | icon: 65 | - color: "rgba(186, 146, 0, 1)" 66 | img_cell: 67 | - background-color: "rgba(186, 146, 0, 0.2)" 68 | # card: 69 | # - animation: > 70 | # [[[ 71 | # if (((states[entity.entity_id].attributes.message == 'Biotonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Restmülltonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Altpapier')) && ((states['sensor.abfall_morgen'].state == 'Morgen') || (states['sensor.abfall_morgen'].state == 'Heute'))) 72 | # return 'blink 3s ease infinite'; 73 | # else 74 | # return ''; 75 | # ]]] 76 | - operator: "template" 77 | value: | 78 | [[[ return states[entity.entity_id].attributes.message == 'Restmülltonne in Memmingen'; ]]] 79 | icon: mdi:delete 80 | styles: 81 | # card: 82 | # - animation: > 83 | # [[[ 84 | # if (((states[entity.entity_id].attributes.message == 'Biotonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Restmülltonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Altpapier')) && ((states['sensor.abfall_morgen'].state == 'Morgen') || (states['sensor.abfall_morgen'].state == 'Heute'))) 85 | # return 'blink 3s ease infinite'; 86 | # else 87 | # return ''; 88 | # ]]] 89 | icon: 90 | - color: "rgba(160, 160, 160, 1)" 91 | img_cell: 92 | - background-color: "rgba(160, 160, 160, 0.2)" 93 | - operator: "template" 94 | value: | 95 | [[[ return states[entity.entity_id].attributes.message == 'Altpapier'; ]]] 96 | icon: mdi:paper-cut-vertical 97 | styles: 98 | icon: 99 | - color: "rgba(0, 100, 200, 1)" 100 | img_cell: 101 | - background-color: "rgba(0, 100, 200, 0.2)" 102 | # card: 103 | # - animation: > 104 | # [[[ 105 | # if (((states[entity.entity_id].attributes.message == 'Biotonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Restmülltonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Altpapier')) && ((states['sensor.abfall_morgen'].state == 'Morgen') || (states['sensor.abfall_morgen'].state == 'Heute'))) 106 | # return 'blink 3s ease infinite'; 107 | # else 108 | # return ''; 109 | # ]]] 110 | styles: 111 | icon: 112 | - color: "rgba(var(--color-theme),0.3)" 113 | item2: 114 | card: 115 | type: "custom:button-card" 116 | entity: "[[[ return entity.entity_id ]]]" 117 | styles: 118 | name: 119 | - color: > 120 | [[[ 121 | if (((states[entity.entity_id].attributes.message == 'Biotonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Restmülltonne in Memmingen') || (states[entity.entity_id].attributes.message == 'Altpapier')) && ((states['sensor.abfall_morgen'].state == 'Morgen') || (states['sensor.abfall_morgen'].state == 'Heute'))) 122 | return 'rgba(33, 33, 33, 1.0)'; 123 | else 124 | return 'rgba(33, 33, 33, 0.4)'; 125 | ]]] 126 | label: > 127 | [[[ 128 | { return states['sensor.abfall_morgen'].state; } 129 | ]]] 130 | name: > 131 | [[[ 132 | if (states[entity.entity_id].attributes.message === 'Biotonne in Memmingen' ) 133 | return 'Biotonne'; 134 | if (states[entity.entity_id].attributes.message === 'Restmülltonne in Memmingen') 135 | return 'Restmüll'; 136 | else 137 | return 'Altpapier'; 138 | ]]] 139 | state_display: > 140 | [[[ 141 | { return states['sensor.abfall_morgen'].state; } 142 | ]]] 143 | -------------------------------------------------------------------------------- /scripts.yaml: -------------------------------------------------------------------------------- 1 | popup_wifi: 2 | alias: popup_wifi 3 | sequence: 4 | - service: browser_mod.popup 5 | data: 6 | card_mod: 7 | style: 8 | ha-dialog$: | 9 | div.mdc-dialog__scrim { 10 | backdrop-filter: blur(15px) !important; 11 | -webkit-backdrop-filter: blur(50px) !important; 12 | background-color: rgba(0,0,0,0.2) !important; 13 | } 14 | title: Gäste Wifi 15 | content: 16 | type: picture 17 | image: /local/wifi.png 18 | popup_light: 19 | alias: popup_light 20 | sequence: 21 | - service: browser_mod.popup 22 | data: 23 | card_mod: 24 | style: 25 | ha-dialog$: | 26 | div.mdc-dialog__scrim { 27 | backdrop-filter: blur(15px) !important; 28 | -webkit-backdrop-filter: blur(50px) !important; 29 | background-color: rgba(0,0,0,0.2) !important; 30 | } 31 | style: > 32 | --popup-max-width: 1000px; 33 | title: Lichter 34 | content: 35 | type: vertical-stack 36 | cards: 37 | # On 38 | - type: vertical-stack 39 | view_layout: 40 | grid-area: ein 41 | cards: 42 | - type: 'custom:button-card' 43 | template: card_title 44 | name: Eingeschaltete Lichter 45 | - type: custom:auto-entities 46 | card: 47 | type: grid 48 | square: false 49 | columns: 3 50 | card_param: cards 51 | filter: 52 | include: 53 | - domain: light 54 | state: "on" 55 | options: 56 | type: 'custom:button-card' 57 | template: card_light 58 | variables: 59 | ulm_card_light_enable_slider: false 60 | ulm_card_light_enable_color: false 61 | exclude: 62 | - entity_id: "*dashboard*" 63 | - entity_id: "*laptop*" 64 | sort: 65 | method: entity_id 66 | # Off 67 | - type: vertical-stack 68 | view_layout: 69 | grid-area: aus 70 | cards: 71 | - type: 'custom:button-card' 72 | template: card_title 73 | name: Alle Lichter 74 | - type: custom:auto-entities 75 | card: 76 | type: grid 77 | square: false 78 | columns: 3 79 | card_param: cards 80 | filter: 81 | include: 82 | - domain: light 83 | state: "off" 84 | options: 85 | type: 'custom:button-card' 86 | template: card_light 87 | variables: 88 | ulm_card_light_enable_slider: false 89 | ulm_card_light_enable_color: false 90 | exclude: 91 | - entity_id: "*dashboard*" 92 | sort: 93 | method: entity_id 94 | popup_battery: 95 | sequence: 96 | - service: browser_mod.popup 97 | data: 98 | card_mod: 99 | style: 100 | ha-dialog$: | 101 | div.mdc-dialog__scrim { 102 | backdrop-filter: blur(15px) !important; 103 | -webkit-backdrop-filter: blur(50px) !important; 104 | background-color: rgba(0,0,0,0.2) !important; 105 | } 106 | title: Batterien 107 | content: 108 | type: "custom:battery-state-card" 109 | card_mod: 110 | class: add-header 111 | # collapse: 10 112 | color_gradient: 113 | - "#ff0000" 114 | - "#ffff00" 115 | - "#00ff00" 116 | filter: 117 | include: # filters for auto-adding 118 | - name: entity_id 119 | value: "sensor.*_batterie" 120 | - name: entity_id 121 | value: "sensor.*_battery" 122 | sort_by_level: asc 123 | 124 | 125 | popup_house: 126 | alias: popup_house 127 | sequence: 128 | - service: browser_mod.popup 129 | data: 130 | card_mod: 131 | style: 132 | ha-dialog$: | 133 | div.mdc-dialog__scrim { 134 | backdrop-filter: blur(15px) !important; 135 | -webkit-backdrop-filter: blur(50px) !important; 136 | background-color: rgba(0,0,0,0.2) !important; 137 | } 138 | title: Haus 139 | content: 140 | type: horizontal-stack 141 | cards: 142 | - type: entities 143 | title: Haus 144 | show_header_toggle: false 145 | entities: 146 | - type: custom:hui-element 147 | card_type: glance 148 | entities: 149 | - entity: person.christoph 150 | - entity: person.franziska 151 | - entity: group.haus 152 | - entity: input_boolean.absent_long 153 | - entity: binary_sensor.flur_rauchmelder_eg_alarm 154 | name: Schlafzimmer Rauchmelder 155 | - entity: binary_sensor.flur_rauchmelder_dg_alarm 156 | name: DG/Flur Rauchmelder 157 | - entity: binary_sensor.schlafzimmer_rauchmelder_alarm 158 | name: EG/Flur Rauchmelder 159 | - type: entities 160 | title: Heizung 161 | entities: 162 | - entity: input_boolean.heizung 163 | - entity: input_boolean.unplanmaessig_zuhause 164 | - entity: group.ferien_und_feiertage 165 | name: Ferien, Feiertage, Homeoffice 166 | - entity: input_boolean.homeoffice 167 | - entity: input_boolean.partymodus 168 | - entity: sensor.openweathermap_temperature 169 | name: Außentemperatur 170 | - entity: schedy_room.schedy_heating_schlafzimmer 171 | icon: mdi:thermometer-lines 172 | name: Schlafzimmer 173 | - entity: schedy_room.schedy_heating_wohnesszimmer 174 | icon: mdi:thermometer-lines 175 | name: Wohn und Esszimmer 176 | - entity: schedy_room.schedy_heating_buero 177 | icon: mdi:thermometer-lines 178 | name: Büro 179 | - entity: schedy_room.schedy_heating_bad 180 | icon: mdi:thermometer-lines 181 | name: Bad 182 | show_header_toggle: false 183 | popup_motion: 184 | alias: popup_motion 185 | sequence: 186 | - service: browser_mod.popup 187 | data: 188 | card_mod: 189 | style: 190 | ha-dialog$: | 191 | div.mdc-dialog__scrim { 192 | backdrop-filter: blur(15px) !important; 193 | -webkit-backdrop-filter: blur(50px) !important; 194 | background-color: rgba(0,0,0,0.2) !important; 195 | } 196 | style: > 197 | --popup-max-width: 1000px; 198 | title: Bewegung 199 | content: 200 | type: vertical-stack 201 | cards: 202 | - type: vertical-stack 203 | view_layout: 204 | grid-area: flur_dg 205 | cards: 206 | - type: 'custom:button-card' 207 | template: card_title 208 | name: Flur DG 209 | - type: custom:auto-entities 210 | card: 211 | type: grid 212 | square: false 213 | columns: 4 214 | card_param: cards 215 | filter: 216 | include: 217 | - entity_id: binary_sensor.flur_bewegungsmelder_treppe_occupancy 218 | options: 219 | type: 'custom:button-card' 220 | template: card_binary_sensor 221 | variables: 222 | ulm_card_binary_sensor_alert: true 223 | ulm_show_last_changed: true 224 | - entity_id: binary_sensor.*_dg_*occupancy 225 | options: 226 | type: 'custom:button-card' 227 | template: card_binary_sensor 228 | variables: 229 | ulm_card_binary_sensor_alert: true 230 | ulm_show_last_changed: true 231 | # Flur EG 232 | - type: vertical-stack 233 | view_layout: 234 | grid-area: flur_eg 235 | cards: 236 | - type: 'custom:button-card' 237 | template: card_title 238 | name: Flur EG 239 | - type: custom:auto-entities 240 | card: 241 | type: grid 242 | square: false 243 | columns: 4 244 | card_param: cards 245 | filter: 246 | include: 247 | - entity_id: binary_sensor.flur_bewegungsmelder_windfang_occupancy 248 | options: 249 | type: 'custom:button-card' 250 | template: card_binary_sensor 251 | variables: 252 | ulm_card_binary_sensor_alert: true 253 | ulm_show_last_changed: true 254 | ulm_card_binary_sensor_name: Windfang 255 | - entity_id: binary_sensor.*_eg_*occupancy 256 | area: Flur 257 | options: 258 | type: 'custom:button-card' 259 | template: card_binary_sensor_alert 260 | variables: 261 | ulm_card_binary_sensor_alert: true 262 | ulm_show_last_changed: true 263 | # Flur UG 264 | - type: vertical-stack 265 | view_layout: 266 | grid-area: flur_ug 267 | cards: 268 | - type: 'custom:button-card' 269 | template: card_title 270 | name: Flur UG 271 | - type: custom:auto-entities 272 | card: 273 | type: grid 274 | square: false 275 | columns: 4 276 | card_param: cards 277 | filter: 278 | include: 279 | - entity_id: binary_sensor.*_ug_*occupancy 280 | area: Flur 281 | options: 282 | type: 'custom:button-card' 283 | template: card_binary_sensor 284 | variables: 285 | ulm_card_binary_sensor_alert: true 286 | ulm_show_last_changed: true 287 | # Aussen 288 | - type: vertical-stack 289 | view_layout: 290 | grid-area: aussen 291 | cards: 292 | - type: 'custom:button-card' 293 | template: card_title 294 | name: Aussen 295 | - type: custom:auto-entities 296 | card: 297 | type: grid 298 | square: false 299 | columns: 4 300 | card_param: cards 301 | filter: 302 | include: 303 | - entity_id: binary_sensor.aussen_*occupancy 304 | options: 305 | type: 'custom:button-card' 306 | template: card_binary_sensor 307 | variables: 308 | ulm_card_binary_sensor_alert: true 309 | ulm_show_last_changed: true 310 | - entity_id: binary_sensor.garage_*occupancy 311 | options: 312 | type: 'custom:button-card' 313 | template: card_binary_sensor 314 | variables: 315 | ulm_card_binary_sensor_alert: true 316 | ulm_show_last_changed: true 317 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/views/climate.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | button_card_templates: !include_dir_merge_named "../../../custom_components/ui_lovelace_minimalist/__ui_minimalist__/ulm_templates/" 3 | 4 | kiosk_mode: 5 | hide_header: true 6 | hide_sidebar: true 7 | mobile_settings: 8 | hide_sidebar: true 9 | hide_header: true 10 | ignore_entity_settings: true 11 | custom_width: 800 12 | 13 | title: "Climate" 14 | theme: "minimalist-desktop" 15 | # views: !include_dir_merge_list "views/" 16 | views: 17 | - title: "Climate" 18 | path: 0 19 | icon: "mdi:home-thermometer" 20 | type: custom:grid-layout 21 | layout: 22 | #default 23 | grid-template-columns: 3em repeat(5, 30%) 0.5em 24 | grid-template-rows: 1em 25 | grid-gap: 0.7em 26 | grid-template-areas: | 27 | ". . . . ." 28 | "back esszimmer wohnzimmer bad ." 29 | ". schlafzimmer buero kind1 ." 30 | "- holzkeller wohnkeller waschkueche ." 31 | ". . . . ." 32 | mediaquery: 33 | #phone 34 | "(max-width: 800px)": 35 | grid-template-columns: 100% 36 | grid-template-rows: 1.5em 37 | grid-gap: 0.7em 38 | grid-template-areas: | 39 | "back" 40 | "esszimmer" 41 | "wohnzimmer" 42 | "bad" 43 | "schlafzimmer" 44 | "buero" 45 | "kind1" 46 | "holzkeller" 47 | "wohnkeller" 48 | "waschkueche" 49 | 50 | cards: 51 | - type: custom:button-card 52 | view_layout: 53 | grid-area: back 54 | template: chip_back 55 | variables: 56 | ulm_chip_back_path: /ui-lovelace-minimalist/ 57 | # Esszimmer 58 | - type: vertical-stack 59 | view_layout: 60 | grid-area: esszimmer 61 | cards: 62 | - type: 'custom:button-card' 63 | template: card_title 64 | name: Esszimmer 65 | - type: horizontal-stack 66 | cards: 67 | - type: 'custom:button-card' 68 | template: card_graph 69 | entity: sensor.esszimmer_temperatursensor_temperature 70 | variables: 71 | ulm_card_graph_color: "var(--google-red)" 72 | ulm_card_graph_name: Temperatur 73 | ulm_card_graph_entity: sensor.esszimmer_temperatursensor_temperature 74 | ulm_card_graph_type: fill 75 | ulm_card_graph_hours: 24 76 | ulm_card_graph_group_by: interval 77 | - type: 'custom:button-card' 78 | template: card_graph 79 | entity: sensor.esszimmer_temperatursensor_humidity 80 | variables: 81 | ulm_card_graph_color: "var(--google-blue)" 82 | ulm_card_graph_name: Luftfeuchtigkeit 83 | ulm_card_graph_entity: sensor.esszimmer_temperatursensor_humidity 84 | ulm_card_graph_type: fill 85 | ulm_card_graph_hours: 24 86 | ulm_card_graph_group_by: interval 87 | - type: "custom:button-card" 88 | template: card_thermostat 89 | entity: climate.esszimmer_heizung 90 | variables: 91 | ulm_card_thermostat_enable_collapse: false 92 | ulm_card_thermostat_enable_controls: true 93 | ulm_card_thermostat_enable_hvac_modes: true 94 | ulm_card_thermostat_enable_popup: true 95 | 96 | # Wohnzimmer 97 | - type: vertical-stack 98 | view_layout: 99 | grid-area: wohnzimmer 100 | cards: 101 | - type: 'custom:button-card' 102 | template: card_title 103 | name: Wohnzimmer 104 | - type: horizontal-stack 105 | cards: 106 | - type: 'custom:button-card' 107 | template: card_graph 108 | entity: sensor.wohnzimmer_temperatursensor_temperature 109 | variables: 110 | ulm_card_graph_color: "var(--google-red)" 111 | ulm_card_graph_name: Temperatur 112 | ulm_card_graph_entity: sensor.wohnzimmer_temperatursensor_temperature 113 | ulm_card_graph_type: fill 114 | ulm_card_graph_hours: 24 115 | ulm_card_graph_group_by: interval 116 | - type: 'custom:button-card' 117 | template: card_graph 118 | entity: sensor.wohnzimmer_temperatursensor_humidity 119 | variables: 120 | ulm_card_graph_color: "var(--google-blue)" 121 | ulm_card_graph_name: Luftfeuchtigkeit 122 | ulm_card_graph_entity: sensor.wohnzimmer_temperatursensor_humidity 123 | ulm_card_graph_type: fill 124 | ulm_card_graph_hours: 24 125 | ulm_card_graph_group_by: interval 126 | - type: "custom:button-card" 127 | template: card_thermostat 128 | entity: climate.wohnzimmer_heizung 129 | variables: 130 | ulm_card_thermostat_enable_collapse: false 131 | ulm_card_thermostat_enable_controls: true 132 | ulm_card_thermostat_enable_hvac_modes: true 133 | ulm_card_thermostat_enable_popup: true 134 | - type: custom:button-card 135 | template: card_generic_swap 136 | entity: humidifier.wz_luftbefeuchter 137 | variables: 138 | ulm_card_generic_swap_name: Luftbefeuchter 139 | ulm_card_generic_swap_icon: mdi:air-humidifier 140 | # Bad 141 | - type: vertical-stack 142 | view_layout: 143 | grid-area: bad 144 | cards: 145 | - type: 'custom:button-card' 146 | template: card_title 147 | name: Bad 148 | - type: horizontal-stack 149 | cards: 150 | - type: 'custom:button-card' 151 | template: card_graph 152 | entity: sensor.bad_temperatursensor_temperature 153 | variables: 154 | ulm_card_graph_color: "var(--google-red)" 155 | ulm_card_graph_name: Temperatur 156 | ulm_card_graph_entity: sensor.bad_temperatursensor_temperature 157 | ulm_card_graph_type: fill 158 | ulm_card_graph_hours: 24 159 | ulm_card_graph_group_by: interval 160 | - type: 'custom:button-card' 161 | template: card_graph 162 | entity: sensor.bad_temperatursensor_humidity 163 | variables: 164 | ulm_card_graph_color: "var(--google-blue)" 165 | ulm_card_graph_name: Luftfeuchtigkeit 166 | ulm_card_graph_entity: sensor.bad_temperatursensor_humidity 167 | ulm_card_graph_type: fill 168 | ulm_card_graph_hours: 24 169 | ulm_card_graph_group_by: interval 170 | - type: "custom:button-card" 171 | template: card_thermostat 172 | entity: climate.bad_heizung 173 | variables: 174 | ulm_card_thermostat_enable_collapse: false 175 | ulm_card_thermostat_enable_controls: true 176 | ulm_card_thermostat_enable_hvac_modes: true 177 | ulm_card_thermostat_enable_popup: true 178 | # Schlafzimmer 179 | - type: vertical-stack 180 | view_layout: 181 | grid-area: schlafzimmer 182 | cards: 183 | - type: 'custom:button-card' 184 | template: card_title 185 | name: Schlafzimmer 186 | - type: "custom:button-card" 187 | template: card_thermostat 188 | entity: climate.schlafzimmer_heizung 189 | variables: 190 | ulm_card_thermostat_enable_collapse: false 191 | ulm_card_thermostat_enable_controls: true 192 | ulm_card_thermostat_enable_hvac_modes: true 193 | ulm_card_thermostat_enable_popup: true 194 | # Buero 195 | - type: vertical-stack 196 | view_layout: 197 | grid-area: buero 198 | cards: 199 | - type: 'custom:button-card' 200 | template: card_title 201 | name: Büro 202 | - type: "custom:button-card" 203 | template: card_thermostat 204 | entity: climate.buero_heizung 205 | variables: 206 | ulm_card_thermostat_enable_collapse: false 207 | ulm_card_thermostat_enable_controls: true 208 | ulm_card_thermostat_enable_hvac_modes: true 209 | ulm_card_thermostat_enable_popup: true 210 | # Kind1 211 | - type: vertical-stack 212 | view_layout: 213 | grid-area: kind1 214 | cards: 215 | - type: 'custom:button-card' 216 | template: card_title 217 | name: Kind1 218 | - type: "custom:button-card" 219 | template: card_thermostat 220 | entity: climate.kind1_heizung 221 | variables: 222 | ulm_card_thermostat_enable_collapse: false 223 | ulm_card_thermostat_enable_controls: true 224 | ulm_card_thermostat_enable_hvac_modes: true 225 | ulm_card_thermostat_enable_popup: true 226 | # Holzkeller 227 | - type: vertical-stack 228 | view_layout: 229 | grid-area: holzkeller 230 | cards: 231 | - type: 'custom:button-card' 232 | template: card_title 233 | name: Holzkeller 234 | - type: horizontal-stack 235 | cards: 236 | - type: 'custom:button-card' 237 | template: card_graph 238 | entity: sensor.holzkeller_temperatursensor_temperature 239 | variables: 240 | ulm_card_graph_color: "var(--google-red)" 241 | ulm_card_graph_name: Temperatur 242 | ulm_card_graph_entity: sensor.holzkeller_temperatursensor_temperature 243 | ulm_card_graph_type: fill 244 | ulm_card_graph_hours: 24 245 | ulm_card_graph_group_by: interval 246 | - type: 'custom:button-card' 247 | template: card_graph 248 | entity: sensor.holzkeller_temperatursensor_humidity 249 | variables: 250 | ulm_card_graph_color: "var(--google-blue)" 251 | ulm_card_graph_name: Luftfeuchtigkeit 252 | ulm_card_graph_entity: sensor.holzkeller_temperatursensor_humidity 253 | ulm_card_graph_type: fill 254 | ulm_card_graph_hours: 24 255 | ulm_card_graph_group_by: interval 256 | # Wohnkeller 257 | - type: vertical-stack 258 | view_layout: 259 | grid-area: wohnkeller 260 | cards: 261 | - type: 'custom:button-card' 262 | template: card_title 263 | name: Wohnkeller 264 | - type: horizontal-stack 265 | cards: 266 | - type: 'custom:button-card' 267 | template: card_graph 268 | entity: sensor.wohnkeller_temperatursensor_temperature 269 | variables: 270 | ulm_card_graph_color: "var(--google-red)" 271 | ulm_card_graph_name: Temperatur 272 | ulm_card_graph_entity: sensor.wohnkeller_temperatursensor_temperature 273 | ulm_card_graph_type: fill 274 | ulm_card_graph_hours: 24 275 | ulm_card_graph_group_by: interval 276 | - type: 'custom:button-card' 277 | template: card_graph 278 | entity: sensor.wohnkeller_temperatursensor_humidity 279 | variables: 280 | ulm_card_graph_color: "var(--google-blue)" 281 | ulm_card_graph_name: Luftfeuchtigkeit 282 | ulm_card_graph_entity: sensor.wohnkeller_temperatursensor_humidity 283 | ulm_card_graph_type: fill 284 | ulm_card_graph_hours: 24 285 | ulm_card_graph_group_by: interval 286 | # Waschküche 287 | - type: vertical-stack 288 | view_layout: 289 | grid-area: waschkueche 290 | cards: 291 | - type: 'custom:button-card' 292 | template: card_title 293 | name: Waschküche 294 | - type: horizontal-stack 295 | cards: 296 | - type: 'custom:button-card' 297 | template: card_graph 298 | entity: sensor.waschkueche_temperatursensor_temperature 299 | variables: 300 | ulm_card_graph_color: "var(--google-red)" 301 | ulm_card_graph_name: Temperatur 302 | ulm_card_graph_entity: sensor.waschkueche_temperatursensor_temperature 303 | ulm_card_graph_type: fill 304 | ulm_card_graph_hours: 24 305 | ulm_card_graph_group_by: interval 306 | - type: 'custom:button-card' 307 | template: card_graph 308 | entity: sensor.waschkueche_temperatursensor_humidity 309 | variables: 310 | ulm_card_graph_color: "var(--google-blue)" 311 | ulm_card_graph_name: Luftfeuchtigkeit 312 | ulm_card_graph_entity: sensor.waschkueche_temperatursensor_humidity 313 | ulm_card_graph_type: fill 314 | ulm_card_graph_hours: 24 315 | ulm_card_graph_group_by: interval -------------------------------------------------------------------------------- /ui_lovelace_minimalist/custom_cards/custom_card_se7enair_welcome/custom_card_se7enair_welcome.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | custom_card_se7enair_welcome: 3 | variables: 4 | ulm_weather: "[[[ return variables.ulm_weather]]]" 5 | ulm_language: "[[[ return hass['language']; ]]]" 6 | entity_1: 7 | entity_id: "" 8 | color: > 9 | [[[ 10 | var colors = ['yellow', 'blue', 'red', 'purple','green', 'pink']; 11 | var color = colors[Math.floor(Math.random() * colors.length)]; 12 | return color; 13 | ]]] 14 | entity_2: 15 | entity_id: "" 16 | color: > 17 | [[[ 18 | var colors = ['yellow', 'blue', 'red', 'purple','green', 'pink']; 19 | var color = colors[Math.floor(Math.random() * colors.length)]; 20 | return color; 21 | ]]] 22 | entity_3: 23 | entity_id: "" 24 | color: > 25 | [[[ 26 | var colors = ['yellow', 'blue', 'red', 'purple','green', 'pink']; 27 | var color = colors[Math.floor(Math.random() * colors.length)]; 28 | return color; 29 | ]]] 30 | entity_4: 31 | entity_id: "" 32 | color: > 33 | [[[ 34 | var colors = ['yellow', 'blue', 'red', 'purple','green', 'pink']; 35 | var color = colors[Math.floor(Math.random() * colors.length)]; 36 | return color; 37 | ]]] 38 | entity_5: 39 | entity_id: "" 40 | color: > 41 | [[[ 42 | var colors = ['yellow', 'blue', 'red', 'purple','green', 'pink']; 43 | var color = colors[Math.floor(Math.random() * colors.length)]; 44 | return color; 45 | ]]] 46 | entity_6: 47 | entity_id: "" 48 | color: > 49 | [[[ 50 | var colors = ['yellow', 'blue', 'red', 'purple','green', 'pink']; 51 | var color = colors[Math.floor(Math.random() * colors.length)]; 52 | return color; 53 | ]]] 54 | entity_7: 55 | entity_id: "" 56 | color: > 57 | [[[ 58 | var colors = ['yellow', 'blue', 'red', 'purple','green', 'pink']; 59 | var color = colors[Math.floor(Math.random() * colors.length)]; 60 | return color; 61 | ]]] 62 | template: 63 | - "ulm_language_variables" 64 | - "ulm_translation_engine" 65 | show_icon: false 66 | show_name: false 67 | show_label: true 68 | styles: 69 | grid: 70 | - grid-template-areas: > 71 | [[[ 72 | if(variables.ulm_card_welcome_scenes_collapse && states[variables.ulm_card_welcome_scenes_collapse].state == 'on'){ 73 | return "\'item1\' \'item2\' "; 74 | } else { 75 | return "\'item1\' \'item2\' \'item3\' \'item4\'"; 76 | } 77 | ]]] 78 | - grid-template-columns: "1fr" 79 | - grid-template-rows: "min-content min-content" 80 | - row-gap: "0px" 81 | card: 82 | - border-radius: "var(--border-radius)" 83 | - box-shadow: "var(--box-shadow)" 84 | - padding: "10px" 85 | custom_fields: 86 | item1: 87 | card: 88 | type: "custom:button-card" 89 | template: "custom_card_se7enair_topbar_welcome" 90 | variables: 91 | ulm_card_welcome_scenes_collapse: "[[[ return variables.ulm_card_welcome_scenes_collapse ]]]" 92 | ulm_weather: "[[[ return variables.ulm_weather]]]" 93 | ulm_language: "[[[ return variables.ulm_language ]]]" 94 | styles: 95 | card: 96 | - border-radius: "none" 97 | - box-shadow: "none" 98 | - padding: "4px" 99 | item2: 100 | card: 101 | type: "custom:button-card" 102 | show_icon: false 103 | show_label: false 104 | show_name: true 105 | show_entity_picture: false 106 | name: | 107 | [[[ 108 | var today = new Date(); 109 | var time = today.getHours() 110 | let welcome = ''; 111 | if (time >= '18'){ 112 | welcome = variables.ulm_evening; 113 | } else if (time >= '12'){ 114 | welcome = variables.ulm_afternoon; 115 | } else if (time >= '5'){ 116 | welcome = variables.ulm_morning; 117 | } else { 118 | welcome = variables.ulm_hello; 119 | } 120 | return welcome + '!'; 121 | ]]] 122 | styles: 123 | name: 124 | - align-self: "start" 125 | - justify-self: "start" 126 | - font-weight: "bold" 127 | - font-size: "24px" 128 | - margin-left: "16px" 129 | grid: 130 | - grid-template-areas: "'i n' 'i l'" 131 | - grid-template-columns: "min-content auto" 132 | - grid-template-rows: "min-content min-content" 133 | - text-align: "start" 134 | card: 135 | - box-shadow: "none" 136 | - padding-bottom: "8px" 137 | item4: 138 | card: 139 | type: "custom:button-card" 140 | template: > 141 | [[[ 142 | if(variables?.entity_1?.entity_id != ""){ 143 | return 'card_scenes_welcome' 144 | } else { 145 | return 'card_scenes_welcome_auto' 146 | } 147 | ]]] 148 | styles: 149 | card: 150 | - border-radius: "none" 151 | - box-shadow: "none" 152 | - padding: "4px" 153 | variables: 154 | entity_1: "[[[ return variables.entity_1]]]" 155 | entity_2: "[[[ return variables.entity_2]]]" 156 | entity_3: "[[[ return variables.entity_3]]]" 157 | entity_4: "[[[ return variables.entity_4]]]" 158 | entity_5: "[[[ return variables.entity_5]]]" 159 | entity_6: "[[[ return variables.entity_6]]]" 160 | entity_7: "[[[ return variables.entity_7]]]" 161 | card_title_welcome: 162 | tap_action: 163 | action: "none" 164 | show_icon: false 165 | show_label: true 166 | show_name: true 167 | styles: 168 | card: 169 | - background-color: "rgba(0,0,0,0)" 170 | - box-shadow: "none" 171 | - height: "auto" 172 | - width: "auto" 173 | - margin-top: "-10px" 174 | - margin-left: "16px" 175 | - margin-bottom: "-15px" 176 | grid: 177 | - grid-template-areas: "'n' 'l'" 178 | - grid-template-columns: "1fr" 179 | - grid-template-rows: "min-content min-content" 180 | name: 181 | - justify-self: "start" 182 | - font-weight: "bold" 183 | - font-size: "20px" 184 | label: 185 | - justify-self: "start" 186 | - font-weight: "bold" 187 | - font-size: "1rem" 188 | - opacity: "0.4" 189 | 190 | # pill 191 | card_scenes_pill_welcome: 192 | show_icon: false 193 | show_label: false 194 | show_name: false 195 | state: 196 | - operator: "template" 197 | value: > 198 | [[[ 199 | return (entity.state !== 'on' && entity.state !== 'playing' && entity.state != variables?.state) 200 | ]]] 201 | styles: 202 | card: 203 | - overflow: "visible" 204 | - box-shadow: "none" 205 | styles: 206 | grid: 207 | - grid-template-areas: "'item1' 'item2'" 208 | - grid-template-columns: "min-content" 209 | - grid-template-rows: "1fr 1fr" 210 | - row-gap: "12px" 211 | - justify-items: "center" 212 | - column-gap: "auto" 213 | card: 214 | - border-radius: "50px" 215 | - place-self: "center" 216 | - width: "52px" 217 | - height: "84px" 218 | - box-shadow: > 219 | [[[ 220 | if (hass.themes.darkMode){ 221 | return "0px 2px 4px 0px rgba(0,0,0,0.80)"; 222 | } else { 223 | return "var(--box-shadow)"; 224 | } 225 | ]]] 226 | color: "var(--google-grey)" 227 | custom_fields: 228 | item1: 229 | card: 230 | type: "custom:button-card" 231 | show_icon: true 232 | show_label: false 233 | show_name: false 234 | tap_action: 235 | action: > 236 | [[[ 237 | if(variables?.nav_path){ 238 | return "navigate" 239 | } else { 240 | return "call-service" 241 | } 242 | ]]] 243 | service: > 244 | [[[ 245 | if(entity.entity_id.startsWith("scene.")){ 246 | return "scene.turn_on" 247 | } 248 | else if(entity.entity_id.startsWith("media_player.")){ 249 | return "media_player.media_play_pause" 250 | } 251 | else if(entity.entity_id.startsWith("input_select.")){ 252 | return "input_select.select_option" 253 | } else { 254 | return "homeassistant.toggle" 255 | } 256 | ]]] 257 | navigation_path: "[[[ return variables?.nav_path; ]]]" 258 | service_data: | 259 | [[[ 260 | var obj; 261 | if( entity.entity_id.startsWith("input_select.") ) 262 | obj = { entity_id: entity.entity_id, option: variables.state }; 263 | else 264 | obj = { entity_id: entity.entity_id }; 265 | return obj; 266 | ]]] 267 | styles: 268 | grid: 269 | - grid-template-areas: "i" 270 | icon: 271 | - color: > 272 | [[[ 273 | var color = variables?.color 274 | if(hass.themes.darkMode){var color = "#FAFAFA";} 275 | return `rgba(var(--color-${color}), 1)`; 276 | ]]] 277 | - width: "20px" 278 | img_cell: 279 | - background-color: > 280 | [[[ 281 | var color = variables?.color 282 | var opacity = '0.20' 283 | if(hass.themes.darkMode){var opacity = '1'} 284 | return `rgba(var(--color-${color}), ${opacity})`; 285 | ]]] 286 | - border-radius: "50%" 287 | - width: "42px" 288 | - height: "42px" 289 | card: 290 | - box-shadow: "none" 291 | - border-radius: "50px" 292 | - padding: "5px" 293 | state: 294 | - operator: "template" 295 | value: > 296 | [[[ 297 | return (entity.state !== 'on' && entity.state !== 'playing' && entity.state != variables?.state) 298 | ]]] 299 | styles: 300 | card: 301 | - overflow: "visible" 302 | - box-shadow: > 303 | [[[ 304 | if (hass.themes.darkMode){ 305 | return "0px 2px 4px 0px rgba(0,0,0,0.80)"; 306 | } else { 307 | return "var(--box-shadow)"; 308 | } 309 | ]]] 310 | item2: 311 | card: 312 | type: "custom:button-card" 313 | show_icon: false 314 | show_label: false 315 | tap_action: 316 | action: > 317 | [[[ 318 | if(variables?.nav_path){ 319 | return "navigate" 320 | } else { 321 | return "call-service" 322 | } 323 | ]]] 324 | navigation_path: "[[[ return variables?.nav_path; ]]]" 325 | service: > 326 | [[[ 327 | if(entity.entity_id.startsWith("scene.")){ 328 | return "scene.turn_on" 329 | } 330 | else if(entity.entity_id.startsWith("media_player.")){ 331 | return "media_player.media_play_pause" 332 | } 333 | else if(entity.entity_id.startsWith("input_select.")){ 334 | return "input_select.select_option" 335 | } else { 336 | return "homeassistant.toggle" 337 | } 338 | ]]] 339 | service_data: | 340 | [[[ 341 | var obj; 342 | if( entity.entity_id.startsWith("input_select.") ) 343 | obj = { entity_id: entity.entity_id, option: variables.state }; 344 | else 345 | obj = { entity_id: entity.entity_id }; 346 | return obj; 347 | ]]] 348 | styles: 349 | grid: 350 | - grid-template-areas: "n" 351 | name: 352 | - justify-self: "center" 353 | - font-weight: "bold" 354 | - font-size: "9.5px" 355 | - padding-bottom: "7px" 356 | - overflow: "[[[return (entity.state !== 'on' && entity.state !== 'playing' && entity.state != variables?.state) ? 'visible' : 'hidden']]]" 357 | card: 358 | - box-shadow: "none" 359 | - padding: "0px 5px 5px 5px" 360 | - margin-top: "-5px" 361 | - border-radius: "50px" 362 | - overflow: "[[[return (entity.state !== 'on' && entity.state !== 'playing' && entity.state != variables?.state) ? 'visible' : 'hidden']]]" 363 | custom_card_se7enair_topbar_welcome: 364 | show_icon: false 365 | show_name: false 366 | show_label: false 367 | styles: 368 | grid: 369 | - grid-template-areas: "item1 item2 item3" 370 | - justify-content: "space-between" 371 | - display: "flex" 372 | card: 373 | - border-radius: "none" 374 | - box-shadow: "none" 375 | - padding: "12px" 376 | - background: "none" 377 | custom_fields: 378 | item3: 379 | card: 380 | type: "custom:button-card" 381 | tap_action: 382 | action: "navigate" 383 | navigation_path: "/config/dashboard" 384 | template: "chip_mdi_icon_only" 385 | variables: 386 | ulm_chip_mdi_icon_only_icon: "mdi:cog-outline" 387 | styles: 388 | card: 389 | - align-self: "right" 390 | - box-shadow: > 391 | [[[ 392 | if (hass.themes.darkMode){ 393 | return "0px 2px 4px 0px rgba(0,0,0,0.80)"; 394 | } else { 395 | return "var(--box-shadow)"; 396 | } 397 | ]]] 398 | # auto-entities 399 | card_scenes_welcome_auto: 400 | show_icon: false 401 | show_name: true 402 | show_label: false 403 | variables: 404 | colors: > 405 | [[[ 406 | var colors = ['yellow', 'blue', 'red', 'purple','green', 'pink']; 407 | var color = colors[Math.floor(Math.random() * colors.length)]; 408 | return color; 409 | ]]] 410 | styles: 411 | grid: 412 | - grid-template-areas: "item1" 413 | - display: "flex" 414 | - justify-content: "center" 415 | card: 416 | - border-radius: "var(--border-radius)" 417 | - box-shadow: "var(--box-shadow)" 418 | - padding: "12px" 419 | custom_fields: 420 | item1: 421 | card: 422 | type: "custom:auto-entities" 423 | card: 424 | type: "grid" 425 | columns: 5 426 | square: false 427 | card_param: "cards" 428 | sort: 429 | count: 5 430 | filter: 431 | include: 432 | - domain: "light" 433 | options: 434 | type: "custom:button-card" 435 | template: "card_scenes_pill_welcome" 436 | custom_fields: 437 | item1: 438 | card: 439 | type: "custom:button-card" 440 | entity: "this.entity_id" 441 | styles: 442 | icon: 443 | - color: > 444 | [[[ 445 | var color = variables.colors 446 | if(hass.themes.darkMode){var color = "#FAFAFA";} 447 | return `rgba(var(--color-${color}), 1)`; 448 | ]]] 449 | - width: "20px" 450 | img_cell: 451 | - background-color: > 452 | [[[ 453 | var color = variables.colors 454 | var opacity = '0.20' 455 | if(hass.themes.darkMode){var opacity = '1'} 456 | return `rgba(var(--color-${color}), ${opacity})`; 457 | ]]] 458 | item2: 459 | card: 460 | type: "custom:button-card" 461 | entity: "this.entity_id" 462 | -------------------------------------------------------------------------------- /ui_lovelace_minimalist/dashboard/ui-lovelace.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | button_card_templates: !include_dir_merge_named "../../custom_components/ui_lovelace_minimalist/__ui_minimalist__/ulm_templates/" 3 | 4 | kiosk_mode: 5 | hide_header: true 6 | hide_sidebar: true 7 | mobile_settings: 8 | hide_sidebar: false 9 | ignore_entity_settings: true 10 | custom_width: 768 11 | 12 | title: "UI Lovelace Minimalist" 13 | theme: "minimalist-desktop" 14 | # views: !include_dir_merge_list "views/" 15 | views: 16 | # Dashboard 17 | - title: "Dashboard" 18 | path: 0 19 | icon: "mdi:flower" 20 | type: custom:grid-layout 21 | layout: 22 | grid-template-columns: 0.5em 5em repeat(3, 3fr) 0.5em 23 | grid-template-rows: 6em 18em 29em 1em 24 | grid-gap: 0.7em 25 | grid-template-areas: | 26 | ". . . chips clock ." 27 | ". navigation welcome weather camera ." 28 | ". navigation calendar rooms house ." 29 | ". . footer footer footer ." 30 | mediaquery: 31 | #phone 32 | "(max-width: 800px)": 33 | grid-template-columns: 100% 34 | grid-template-rows: 1.5em 35 | grid-gap: 0.7em 36 | grid-template-areas: | 37 | "back" 38 | "welcome" 39 | "rooms" 40 | "house" 41 | 42 | 43 | cards: 44 | 45 | ############# 46 | # Chips # 47 | ############# 48 | 49 | - type: vertical-stack 50 | view_layout: 51 | grid-area: chips 52 | cards: 53 | - type: "custom:button-card" 54 | color_type: blank-card 55 | - type: horizontal-stack 56 | cards: 57 | - type: "custom:button-card" 58 | color_type: blank-card 59 | - type: 'custom:button-card' 60 | template: custom_card_person_chip 61 | variables: 62 | ulm_custom_card_person_chip_entity: person.christoph 63 | - type: 'custom:button-card' 64 | template: custom_card_person_chip 65 | variables: 66 | ulm_custom_card_person_chip_entity: person.franziska 67 | - type: "custom:button-card" 68 | color_type: blank-card 69 | - type: "custom:button-card" 70 | color_type: blank-card 71 | 72 | ############# 73 | # Clock # 74 | ############# 75 | 76 | - type: "custom:button-card" 77 | view_layout: 78 | grid-area: clock 79 | styles: 80 | label: 81 | - justify-self: "right" 82 | name: 83 | - justify-self: "right" 84 | template: custom_card_nik_clock 85 | variables: 86 | ulm_custom_card_nik_clock_switch_enable: false 87 | 88 | ################## 89 | # Navigation # 90 | ################## 91 | 92 | - type: grid 93 | columns: 1 94 | square: true 95 | view_layout: 96 | grid-area: navigation 97 | cards: 98 | # House 99 | - type: custom:button-card 100 | name: 101 | icon: mdi:home 102 | aspect_ratio: 1/1 103 | tap_action: 104 | action: navigate 105 | navigation_path: /home 106 | # Climate 107 | - type: custom:button-card 108 | icon: mdi:home-thermometer 109 | aspect_ratio: 1/1 110 | tap_action: 111 | action: navigate 112 | navigation_path: /climate-yaml 113 | # Energy 114 | - type: custom:button-card 115 | name: 116 | icon: mdi:fire 117 | aspect_ratio: 1/1 118 | tap_action: 119 | action: navigate 120 | navigation_path: /energy-yaml 121 | # Metrics 122 | - type: custom:button-card 123 | icon: mdi:chart-multiline 124 | aspect_ratio: 1/1 125 | tap_action: !include popup/proxmox.yaml 126 | # Test 127 | - type: custom:button-card 128 | icon: mdi:test-tube 129 | aspect_ratio: 1/1 130 | tap_action: 131 | action: navigate 132 | navigation_path: /test-yaml 133 | 134 | ############### 135 | # Welcome # 136 | ############### 137 | 138 | - type: "custom:button-card" 139 | view_layout: 140 | grid-area: welcome 141 | template: "custom_card_se7enair_welcome" 142 | styles: 143 | card: 144 | - height: 100% 145 | triggers_update: input_boolean.alarmanlage 146 | variables: 147 | ulm_card_welcome_scenes_collapse: input_boolean.alarmanlage 148 | ulm_weather: weather.openweathermap 149 | entity_1: 150 | entity_id: script.popup_house 151 | icon: "mdi:home" #OPTIONAL 152 | name: "Haus" #OPTIONAL 153 | color: "blue" 154 | entity_2: 155 | entity_id: script.popup_battery 156 | icon: "mdi:battery-charging" #OPTIONAL 157 | name: "Batterien" #OPTIONAL 158 | color: "green" 159 | entity_3: 160 | entity_id: script.popup_light 161 | icon: "mdi:lightbulb" #OPTIONAL 162 | name: "Licht" #OPTIONAL 163 | color: "yellow" 164 | entity_4: 165 | entity_id: script.popup_motion 166 | icon: "mdi:motion-sensor" #OPTIONAL 167 | name: "Bewegung" #OPTIONAL 168 | color: "purple" 169 | entity_5: 170 | entity_id: script.popup_wifi 171 | icon: "mdi:wifi" #OPTIONAL 172 | name: "Wifi" #OPTIONAL 173 | color: "red" 174 | 175 | ############### 176 | # Weather # 177 | ############### 178 | 179 | - type: weather-forecast 180 | view_layout: 181 | grid-area: weather 182 | show_current: true 183 | show_forecast: true 184 | entity: weather.openweathermap 185 | 186 | ################ 187 | # Calendar # 188 | ################ 189 | 190 | - type: custom:atomic-calendar-revive 191 | view_layout: 192 | grid-area: calendar 193 | enableModeChange: true 194 | firstDayOfWeek: 1 195 | maxDaysToShow: 30 196 | entities: 197 | - entity: !secret calendar_entity_primary 198 | - entity: !secret calendar_entity_family 199 | showCurrentEventLine: false 200 | showMonth: false 201 | showWeekDay: true 202 | showNoEventsForToday: true 203 | showEventIcon: false 204 | calShowDescription: true 205 | showLastCalendarWeek: false 206 | dimFinishedEvents: true 207 | showRelativeTime: false 208 | eventCalNameColor: rgba(86, 100, 86, .35) 209 | calWeekDayColor: rgba(86, 100, 86, .35) 210 | showLocation: false 211 | untilText: bis 212 | noEventsForNextDaysText: keine Termine in den nächsten Tagen 213 | showProgressBar: false 214 | showDescription: true 215 | noEventText: keine Termine heute 216 | showFullDayProgress: true 217 | disableCalEventLink: false 218 | disableCalLocationLink: false 219 | disableCalLink: false 220 | showDate: false 221 | sortByStartTime: true 222 | cardHeight: 100% 223 | refreshInterval: 60 224 | 225 | ############# 226 | # House # 227 | ############# 228 | 229 | - type: grid 230 | columns: 2 231 | square: false 232 | view_layout: 233 | grid-area: house 234 | cards: 235 | - type: 'custom:button-card' 236 | template: custom_card_se7enair_washingmachine 237 | entity: input_select.waschmaschinenstatus 238 | variables: 239 | ulm_card_generic_swap_name: Waschmaschine 240 | - type: custom:button-card 241 | template: custom_card_se7enair_washingmachine 242 | entity: input_select.trocknerstatus 243 | variables: 244 | ulm_card_generic_swap_name: Trockner 245 | - type: 'custom:button-card' 246 | template: custom_card_se7enair_trash 247 | entity: calendar.abfallkalender 248 | - type: "custom:button-card" 249 | template: card_cover 250 | entity: cover.garage_tor 251 | variables: 252 | ulm_card_cover_enable_controls: false 253 | ulm_card_cover_enable_slider: false 254 | ulm_card_cover_name: Garage 255 | ulm_card_cover_garage: true 256 | - type: "custom:button-card" 257 | entity: lock.nuki_haustuere_lock 258 | template: "custom_card_eraycetinay_lock" 259 | name: "Haustüre" 260 | variables: 261 | ulm_custom_card_eraycetinay_lock_tap_control: true 262 | ulm_custom_card_eraycetinay_lock_battery_level: sensor.nuki_haustuere_battery 263 | ulm_custom_card_eraycetinay_lock_door_open: binary_sensor.flur_haustuere_tuersensor_contact 264 | triggers_update: 265 | - "sensor.nuki_haustuere_battery" 266 | - "binary_sensor.flur_haustuere_tuersensor_contact" 267 | - type: 'custom:button-card' 268 | template: card_generic_swap 269 | entity: switch.nuki_opener_ring_suppression 270 | variables: 271 | ulm_card_generic_swap_name: Klingelunterdrückung 272 | - type: 'custom:button-card' 273 | template: card_generic_swap 274 | entity: sensor.makitaladegeraet_status 275 | variables: 276 | ulm_card_generic_swap_name: Makita Ladegerät 277 | - type: 'custom:button-card' 278 | template: card_generic_swap 279 | entity: sensor.maehroboter_status_lesbar 280 | variables: 281 | ulm_card_generic_swap_name: Mähroboter 282 | ulm_card_generic_swap_icon: mdi:robot-mower 283 | - type: "custom:button-card" 284 | template: card_light 285 | entity: light.aussen_licht 286 | name: Aussenlicht 287 | variables: 288 | ulm_card_light_enable_slider: false 289 | ulm_card_light_enable_color: true 290 | ulm_card_light_force_background_color: false 291 | - type: "custom:button-card" 292 | template: card_generic_swap 293 | entity: switch.heizung_zirkulationspumpe 294 | variables: 295 | ulm_card_generic_swap_name: Zirkulationspumpe 296 | ulm_card_generic_swap_icon: mdi:pump 297 | 298 | 299 | ############# 300 | # Rooms # 301 | ############# 302 | 303 | - type: grid 304 | columns: 2 305 | styles: 306 | card: 307 | - height: 29em 308 | view_layout: 309 | grid-area: rooms 310 | square: false 311 | cards: 312 | # Wohnzimmer 313 | - type: 'custom:button-card' 314 | template: 315 | - card_room 316 | - red_on 317 | name: Wohnzimmer 318 | icon: mdi:sofa 319 | entity: climate.wohnzimmer_heizung 320 | # tap_action: !include ../../popup/climate_wohnzimmer.yaml 321 | # action: navigate 322 | # navigation_path: /ui-lovelace-minimalist/wohnzimmer 323 | variables: 324 | entity_1: 325 | entity_id: light.wohnzimmer_licht_gruppe 326 | tap_action: 327 | action: toggle 328 | templates: 329 | - yellow_on 330 | entity_2: 331 | entity_id: media_player.wz_tv 332 | templates: 333 | - yellow_on 334 | entity_3: 335 | entity_id: light.wz_licht_weihnachtsbaum 336 | # Esszimmer 337 | - type: 'custom:button-card' 338 | template: 339 | - card_room 340 | name: Esszimmer 341 | icon: mdi:table-furniture 342 | entity: climate.esszimmer_heizung 343 | tap_action: 344 | action: navigate 345 | navigation_path: /ui-lovelace-minimalist/esszimmer 346 | variables: 347 | entity_1: 348 | entity_id: light.esszimmer_licht 349 | templates: 350 | - yellow_on 351 | tap_action: 352 | action: toggle 353 | # Küche 354 | - type: 'custom:button-card' 355 | template: 356 | - card_room 357 | name: Küche 358 | icon: mdi:stove 359 | tap_action: 360 | action: navigate 361 | navigation_path: /ui-lovelace-minimalist/kueche 362 | variables: 363 | label_use_temperature: false 364 | entity_1: 365 | entity_id: light.kueche_licht_gruppe 366 | templates: 367 | - yellow_on 368 | tap_action: 369 | action: toggle 370 | # Bad 371 | # - type: 'custom:button-card' 372 | # template: 373 | # - card_room 374 | # name: Bad 375 | # icon: mdi:bathtub 376 | # entity: climate.bad_heizung 377 | # tap_action: 378 | # action: navigate 379 | # navigation_path: /ui-lovelace-minimalist/bad 380 | # variables: 381 | # entity_1: 382 | # entity_id: binary_sensor.bad_fenster_links_contact 383 | # Schlafzimmer 384 | - type: 'custom:button-card' 385 | template: 386 | - card_room 387 | name: Schlafzimmer 388 | icon: mdi:bed 389 | entity: climate.schlafzimmer_heizung 390 | tap_action: 391 | action: navigate 392 | navigation_path: /ui-lovelace-minimalist/schlafzimmer 393 | variables: 394 | entity_1: 395 | entity_id: light.schlafzimmer_licht 396 | templates: 397 | - yellow_on 398 | tap_action: 399 | action: toggle 400 | entity_2: 401 | entity_id: switch.schlafzimmer_babyphone 402 | templates: 403 | - yellow_on 404 | tap_action: 405 | action: toggle 406 | # Büro 407 | # - type: 'custom:button-card' 408 | # template: 409 | # - card_room 410 | # name: Büro 411 | # icon: mdi:chair-rolling 412 | # entity: climate.buero_heizung 413 | # tap_action: 414 | # action: navigate 415 | # navigation_path: /ui-lovelace-minimalist/buero 416 | # variables: 417 | # entity_1: 418 | # entity_id: binary_sensor.buero_bewegungsmelder_occupancy 419 | # tap_action: 420 | # action: more-info 421 | # templates: 422 | # - yellow_on 423 | 424 | ############## 425 | # Camera # 426 | ############## 427 | 428 | - type: custom:button-card 429 | view_layout: 430 | grid-area: camera 431 | styles: 432 | card: 433 | - height: 100% 434 | custom_fields: 435 | camera: 436 | [top: 0%, left: 0%, width: 111%, position: absolute] 437 | custom_fields: 438 | camera: 439 | card: 440 | type: custom:frigate-card 441 | cameras: 442 | - live_provider: frigate-jsmpeg 443 | camera_entity: camera.garten_kamera_hof 444 | frigate: 445 | camera_name: hof 446 | view: 447 | default: live 448 | update_seconds: 300 449 | timeout_seconds: 300 450 | update_force: false 451 | menu: 452 | buttons: 453 | clips: 454 | enabled: true 455 | image: 456 | enabled: false 457 | download: 458 | enabled: false 459 | snapshots: 460 | enabled: false 461 | frigate_ui: 462 | enabled: false 463 | media_player: 464 | enabled: false 465 | style: overlay 466 | position: top 467 | live: 468 | preload: true 469 | draggable: false 470 | actions: 471 | tap_action: 472 | action: custom:frigate-card-action 473 | frigate_card_action: fullscreen 474 | controls: 475 | next_previous: 476 | style: icons 477 | image: 478 | mode: camera 479 | --------------------------------------------------------------------------------