├── 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 | 
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 |
--------------------------------------------------------------------------------