Skip to content

Commit a0f150c

Browse files
authored
Merge pull request #1318 from UI-Lovelace-Minimalist/release
Release v1.3.6
2 parents fbf4703 + 4402d40 commit a0f150c

File tree

6 files changed

+147
-46
lines changed

6 files changed

+147
-46
lines changed

custom_components/ui_lovelace_minimalist/lovelace/translations/default.yaml

+10-2
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ ulm_translation_engine:
7171
let lang = hass["language"];
7272
let domain = entity.entity_id.substr(0, entity.entity_id.indexOf("."));
7373
var translation = hass.resources[lang]["component." + domain + ".entity_component._.state." + state]
74+
let display_precision = hass.entities[entity.entity_id]?.display_precision
7475
const now = new Date();
7576
const timestamp = (new Date(state)).getTime();
7677
const nowTimeStamp = now.getTime();
@@ -81,7 +82,7 @@ ulm_translation_engine:
8182
const secondsDiff = Math.round(microSecondsDiff / (1000));
8283
const formatter = new Intl.RelativeTimeFormat(lang, { numeric: 'auto' });
8384
var scale = 'day'
84-
var diff = 'daysDiff'
85+
var diff = daysDiff
8586
if (Math.abs(secondsDiff) < 60){ scale = 'second'; diff = secondsDiff }
8687
else if (Math.abs(minutesDiff) < 60){ scale = 'minute'; diff = minutesDiff }
8788
else if (Math.abs(hoursDiff) < 24){ scale = 'hour'; diff = hoursDiff }
@@ -95,6 +96,9 @@ ulm_translation_engine:
9596
else if (d_class == 'timestamp'){
9697
var translation = formatter.format(diff, scale)
9798
}
99+
else if (parseFloat(display_precision) >=0){
100+
var translation = parseFloat(entity.state).toFixed(display_precision?.toString())
101+
}
98102
return translation ? translation.charAt(0).toUpperCase() + translation.slice(1) : state;
99103
}
100104
]]]
@@ -124,6 +128,7 @@ ulm_translation_engine:
124128
let lang = hass["language"];
125129
let domain = entity.entity_id.substr(0, entity.entity_id.indexOf("."));
126130
let unit = entity.attributes.unit_of_measurement != null ? " " + entity.attributes.unit_of_measurement : "";
131+
let display_precision = hass.entities[entity.entity_id]?.display_precision
127132
const now = new Date();
128133
const timestamp = (new Date(state)).getTime();
129134
const nowTimeStamp = now.getTime();
@@ -135,7 +140,7 @@ ulm_translation_engine:
135140
const formatter = new Intl.RelativeTimeFormat(lang, { numeric: 'auto' });
136141
137142
var scale = 'day'
138-
var diff = 'daysDiff'
143+
var diff = daysDiff
139144
if (Math.abs(secondsDiff) < 60){ scale = 'second'; diff = secondsDiff }
140145
else if (Math.abs(minutesDiff) < 60){ scale = 'minute'; diff = minutesDiff }
141146
else if (Math.abs(hoursDiff) < 24){ scale = 'hour'; diff = hoursDiff }
@@ -161,6 +166,9 @@ ulm_translation_engine:
161166
else if (d_class == 'timestamp'){
162167
var translation = formatter.format(diff, scale);
163168
}
169+
else if (parseFloat(display_precision) >=0){
170+
var translation = parseFloat(entity.state).toFixed(display_precision?.toString()) + unit
171+
}
164172
return translation ? translation.charAt(0).toUpperCase() + translation.slice(1) : state;
165173
}
166174
]]]

custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
card_binary_sensor:
44
template:
55
- "icon_more_info_new"
6-
- "blue"
76
- "ulm_translation_engine"
87
show_last_changed: false
98
variables:

custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml

+103-25
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ card_cover:
1414
ulm_card_cover_garage_large: false
1515
ulm_card_cover_gate: false
1616
ulm_card_cover_enable_controls: false
17+
ulm_card_cover_favorite_percentage: null
1718
ulm_card_cover_enable_slider: false
1819
ulm_card_cover_slider_min: 0
1920
ulm_card_cover_slider_max: 100
@@ -44,24 +45,54 @@ card_cover:
4445
grid:
4546
- grid-template-areas: >
4647
[[[
47-
var areas = [];
48-
areas.push("item1");
48+
if (variables.ulm_card_cover_enable_horizontal) {
4949
50-
if (variables.ulm_card_cover_enable_controls) {
51-
areas.push("item2");
52-
}
53-
if (variables.ulm_card_cover_enable_slider) {
54-
areas.push("item3");
55-
}
56-
if (variables.ulm_card_cover_enable_tilt) {
57-
areas.push("item4");
58-
}
50+
var hor_area = ["item1"];
51+
var ver_area = [];
5952
60-
if (variables.ulm_card_cover_enable_horizontal) {
61-
areas = areas.slice(0, 2);
62-
return "\"" + areas.join(" ") + "\"";
53+
if (variables.ulm_card_cover_enable_controls) {
54+
if (variables.ulm_card_cover_enable_horizontal == "controls" || variables.ulm_card_cover_enable_horizontal == true) {
55+
hor_area.push("item2");
56+
} else {
57+
ver_area.push("item2" + " " + "item2");
58+
}
59+
}
60+
if (variables.ulm_card_cover_enable_slider) {
61+
if (variables.ulm_card_cover_enable_horizontal == "slider") {
62+
hor_area.push("item3");
63+
} else {
64+
ver_area.push("item3" + " " + "item3");
65+
}
66+
}
67+
if (variables.ulm_card_cover_enable_tilt) {
68+
if (variables.ulm_card_cover_enable_horizontal == "tilt") {
69+
hor_area.push("item4");
70+
} else {
71+
ver_area.push("item4" + " " + "item4");
72+
}
73+
}
74+
75+
if (ver_area.length < 1) {
76+
return "\"" + hor_area.join(" ") + "\" ";
77+
} else {
78+
return "\"" + hor_area.join(" ") + "\" " + "\"" + ver_area.join("\" \"") + "\"";
79+
}
80+
} else {
81+
var areas = [];
82+
areas.push("item1");
83+
84+
if (variables.ulm_card_cover_enable_controls) {
85+
areas.push("item2");
86+
}
87+
if (variables.ulm_card_cover_enable_slider) {
88+
areas.push("item3");
89+
}
90+
if (variables.ulm_card_cover_enable_tilt) {
91+
areas.push("item4");
92+
}
93+
94+
return "\"" + areas.join("\" \"") + "\"";
6395
}
64-
return "\"" + areas.join("\" \"") + "\"";
6596
]]]
6697
- grid-template-columns: >
6798
[[[
@@ -72,9 +103,6 @@ card_cover:
72103
]]]
73104
- grid-template-rows: >
74105
[[[
75-
if (variables.ulm_card_cover_enable_horizontal) {
76-
return "min-content";
77-
}
78106
var rows = [];
79107
rows.push("min-content");
80108
if (variables.ulm_card_cover_enable_controls) {
@@ -86,6 +114,11 @@ card_cover:
86114
if (variables.ulm_card_cover_enable_tilt) {
87115
rows.push("min-content");
88116
}
117+
if (variables.ulm_card_cover_enable_horizontal) {
118+
if (rows.length > 1) {
119+
rows.pop()
120+
}
121+
}
89122
return rows.join(" ");
90123
]]]
91124
- row-gap: "12px"
@@ -107,9 +140,6 @@ card_cover:
107140
- display: >
108141
[[[
109142
if (variables.ulm_card_cover_enable_slider) {
110-
if (variables.ulm_card_cover_enable_horizontal && variables.ulm_card_cover_enable_controls) {
111-
return "none";
112-
}
113143
return "block";
114144
} else {
115145
return "none";
@@ -119,9 +149,6 @@ card_cover:
119149
- display: >
120150
[[[
121151
if (variables.ulm_card_cover_enable_tilt) {
122-
if (variables.ulm_card_cover_enable_horizontal && (variables.ulm_card_cover_enable_controls || variables.ulm_card_cover_enable_slider)) {
123-
return "none";
124-
}
125152
return "block";
126153
} else {
127154
return "none";
@@ -289,10 +316,20 @@ card_cover:
289316
item2:
290317
card:
291318
type: "custom:button-card"
292-
template: "list_3_items"
319+
template: "[[[ return (variables.ulm_card_cover_favorite_percentage) ? 'list_4_items' : 'list_3_items' ]]]"
293320
styles:
294321
card:
295322
- background: "none"
323+
custom_fields:
324+
item4:
325+
- display: >
326+
[[[
327+
if (variables.ulm_card_cover_favorite_percentage) {
328+
return "block";
329+
} else {
330+
return "none";
331+
}
332+
]]]
296333
custom_fields:
297334
item1:
298335
card:
@@ -484,6 +521,47 @@ card_cover:
484521
}
485522
return "mdi:arrow-up";
486523
]]]
524+
item4:
525+
card:
526+
type: "custom:button-card"
527+
template: "widget_icon"
528+
entity: "[[[ return entity.entity_id ]]]"
529+
styles:
530+
card:
531+
- background-color: >
532+
[[[
533+
if(!hass.themes.darkMode && variables.ulm_card_cover_force_background_color){
534+
if (variables.ulm_active_state){
535+
return 'rgb(250,250,250)'
536+
}
537+
}
538+
return 'rgba(var(--color-theme),0.05)'
539+
]]]
540+
img_cell:
541+
- background-color: >
542+
[[[
543+
if (variables.ulm_card_cover_force_background_color && variables.ulm_active_state) {
544+
var color = variables.ulm_card_cover_color;
545+
return 'rgba(var(--color-' + color + '),0.2)';
546+
}
547+
return 'rgba(var(--color-theme),0.05)';
548+
]]]
549+
icon:
550+
- color: >
551+
[[[
552+
if (variables.ulm_card_cover_force_background_color && variables.ulm_active_state) {
553+
var color = variables.ulm_card_cover_color;
554+
return 'rgba(var(--color-' + color + '),1)';
555+
}
556+
return 'rgba(var(--color-theme),0.9)';
557+
]]]
558+
tap_action:
559+
action: "call-service"
560+
service: "cover.set_cover_position"
561+
service_data:
562+
entity_id: "[[[ return entity.entity_id ]]]"
563+
position: "[[[ return variables.ulm_card_cover_favorite_percentage ]]]"
564+
icon: "mdi:star"
487565
item3:
488566
card:
489567
type: "custom:my-slider"

custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_welcome_scenes.yaml

+12
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,19 @@ card_scenes_pill_welcome:
297297
}
298298
else if(entity.entity_id.startsWith("input_select.")){
299299
return "input_select.select_option"
300+
}
301+
else if(entity.entity_id.startsWith("script.")){
302+
return entity.entity_id
300303
} else {
301304
return "homeassistant.toggle"
302305
}
303306
]]]
304307
navigation_path: "[[[ return variables?.nav_path; ]]]"
305308
service_data: |
306309
[[[
310+
if (variables.service_data){
311+
return variables.service_data
312+
}
307313
var obj;
308314
if( entity.entity_id.startsWith("input_select.") )
309315
obj = { entity_id: entity.entity_id, option: variables.state };
@@ -379,12 +385,18 @@ card_scenes_pill_welcome:
379385
}
380386
else if(entity.entity_id.startsWith("input_select.")){
381387
return "input_select.select_option"
388+
}
389+
else if(entity.entity_id.startsWith("script.")){
390+
return entity.entity_id
382391
} else {
383392
return "homeassistant.toggle"
384393
}
385394
]]]
386395
service_data: |
387396
[[[
397+
if (variables.service_data){
398+
return variables.service_data
399+
}
388400
var obj;
389401
if( entity.entity_id.startsWith("input_select.") )
390402
obj = { entity_id: entity.entity_id, option: variables.state };

docs/usage/cards/card_cover.md

+21-18
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ title: Cover Card
33
hide:
44
- toc
55
---
6+
67
<!-- markdownlint-disable MD046 -->
78

89
## Description
@@ -14,27 +15,28 @@ hide:
1415
With the `cover-card` you have the state of your cover. Optionally, on the second line, OPEN / PAUSE / CLOSE to control it and/or a slider to control position.
1516

1617
!!! warning
17-
This card has backward compatibility with older template except custom name. It means variable `ulm_card_cover_buttons_name` must be replaced by `ulm_card_cover_name`.
18+
This card has backward compatibility with older template except custom name. It means variable `ulm_card_cover_buttons_name` must be replaced by `ulm_card_cover_name`.
1819

1920
## Variables
2021

21-
| Variable/Entity | Default | Required | Notes | Requirement |
22-
|----------------------------------------|-----------------|------------------|----------------------------------------|-------------|
23-
| entity | | :material-check: | Your HA entity | |
24-
| ulm_card_cover_name | `friendly_name` | :material-close: | Customize name | |
25-
| ulm_card_cover_icon | | :material-close: | Customize icon | |
26-
| ulm_card_invert_percent | `false` | :material-close: | Invert the Percentage (100% = Closed) | |
27-
| ulm_card_cover_display_left_right | `false` | :material-close: | Display left right control button | |
28-
| ulm_card_cover_garage_large | `false` | :material-close: | Display variant garage icon for garage cover | Only if `device_class = 'garage` |
29-
| ulm_card_cover_enable_controls | `false` | :material-close: | Enable control buttons | |
30-
| ulm_card_cover_enable_slider | `false` | :material-close: | Enable slider | |
31-
| ulm_card_cover_enable_horizontal | `false` | :material-close: | Enable horizontal card | Need `ulm_card_cover_enable_controls: true` or `ulm_card_cover_enable_slider: true` |
32-
| ulm_card_cover_enable_tilt | `false` | :material-close: | Display angled buttons for Venetian blind tilt | |
33-
| ulm_card_cover_enable_popup | `false` | :material-close: | Enable `popup_cover` | |
34-
| ulm_card_cover_slider_min | `0` | :material-close: | Set Minimum Slider Value | |
35-
| ulm_card_cover_slider_max | `100` | :material-close: | Set Maximum Slider Value | |
36-
| ulm_card_cover_color | `blue` | :material-close: | Set Custom Color | |
37-
| ulm_card_cover_force_background_color | `false` | :material-close: | Set `ulm_card_cover_color` as background color in active state ` | |
22+
| Variable/Entity | Default | Required | Notes | Requirement |
23+
| ------------------------------------- | --------------- | ---------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
24+
| entity | | :material-check: | Your HA entity | |
25+
| ulm_card_cover_name | `friendly_name` | :material-close: | Customize name | |
26+
| ulm_card_cover_icon | | :material-close: | Customize icon | |
27+
| ulm_card_invert_percent | `false` | :material-close: | Invert the Percentage (100% = Closed) | |
28+
| ulm_card_cover_display_left_right | `false` | :material-close: | Display left right control button | |
29+
| ulm_card_cover_garage_large | `false` | :material-close: | Display variant garage icon for garage cover | Only if `device_class = 'garage` |
30+
| ulm_card_cover_enable_controls | `false` | :material-close: | Enable control buttons | |
31+
| ulm_card_cover_enable_slider | `false` | :material-close: | Enable slider | |
32+
| ulm_card_cover_enable_horizontal | `false` | :material-close: | Enable horizontal card | Need `ulm_card_cover_enable_controls: true` or `ulm_card_cover_enable_slider: true` |
33+
| ulm_card_cover_favorite_percentage | `false` | :material-close: | Display favorite button to jump to preset position | enter number |
34+
| ulm_card_cover_enable_tilt | `false` | :material-close: | Display angled buttons for Venetian blind tilt | |
35+
| ulm_card_cover_enable_popup | `false` | :material-close: | Enable `popup_cover` | |
36+
| ulm_card_cover_slider_min | `0` | :material-close: | Set Minimum Slider Value | |
37+
| ulm_card_cover_slider_max | `100` | :material-close: | Set Maximum Slider Value | |
38+
| ulm_card_cover_color | `blue` | :material-close: | Set Custom Color | |
39+
| ulm_card_cover_force_background_color | `false` | :material-close: | Set `ulm_card_cover_color` as background color in active state ` | |
3840

3941
## Usage
4042

@@ -45,6 +47,7 @@ With the `cover-card` you have the state of your cover. Optionally, on the secon
4547
variables:
4648
ulm_card_cover_enable_controls: true
4749
ulm_card_cover_enable_slider: true
50+
ulm_card_cver_favorite_percentage: 45
4851
ulm_card_cover_color: "green"
4952
```
5053

docs/usage/cards/card_welcome_scenes.md

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ This is a card which shows the basic needs for your dashboard. This card can gen
3636
| _color | Random | :material-close: | Color of the icon <br> Can choose between: `blue`, `red`, `green`, `yellow`, `pink`, `purple` <br> If not specified, it will take a random color |
3737
| _state | `on` or `playing` | :material-close: | Define `input_select` state or give manual state for pill to be full |
3838
| _nav_path | | :material-close: | Navigate to another view <br> *Overrides other types of actions*
39+
| _service_data | | :material-close: | Data to be passed through to data_service. Useful for running scripts with custom fields/parameters
3940

4041
## Requirement Collapse Function
4142

0 commit comments

Comments
 (0)