diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/default.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/default.yaml
index 92c3a9711..a99f59898 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/default.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/default.yaml
@@ -71,6 +71,7 @@ ulm_translation_engine:
let lang = hass["language"];
let domain = entity.entity_id.substr(0, entity.entity_id.indexOf("."));
var translation = hass.resources[lang]["component." + domain + ".entity_component._.state." + state]
+ let display_precision = hass.entities[entity.entity_id]?.display_precision
const now = new Date();
const timestamp = (new Date(state)).getTime();
const nowTimeStamp = now.getTime();
@@ -81,7 +82,7 @@ ulm_translation_engine:
const secondsDiff = Math.round(microSecondsDiff / (1000));
const formatter = new Intl.RelativeTimeFormat(lang, { numeric: 'auto' });
var scale = 'day'
- var diff = 'daysDiff'
+ var diff = daysDiff
if (Math.abs(secondsDiff) < 60){ scale = 'second'; diff = secondsDiff }
else if (Math.abs(minutesDiff) < 60){ scale = 'minute'; diff = minutesDiff }
else if (Math.abs(hoursDiff) < 24){ scale = 'hour'; diff = hoursDiff }
@@ -95,6 +96,9 @@ ulm_translation_engine:
else if (d_class == 'timestamp'){
var translation = formatter.format(diff, scale)
}
+ else if (parseFloat(display_precision) >=0){
+ var translation = parseFloat(entity.state).toFixed(display_precision?.toString())
+ }
return translation ? translation.charAt(0).toUpperCase() + translation.slice(1) : state;
}
]]]
@@ -124,6 +128,7 @@ ulm_translation_engine:
let lang = hass["language"];
let domain = entity.entity_id.substr(0, entity.entity_id.indexOf("."));
let unit = entity.attributes.unit_of_measurement != null ? " " + entity.attributes.unit_of_measurement : "";
+ let display_precision = hass.entities[entity.entity_id]?.display_precision
const now = new Date();
const timestamp = (new Date(state)).getTime();
const nowTimeStamp = now.getTime();
@@ -135,7 +140,7 @@ ulm_translation_engine:
const formatter = new Intl.RelativeTimeFormat(lang, { numeric: 'auto' });
var scale = 'day'
- var diff = 'daysDiff'
+ var diff = daysDiff
if (Math.abs(secondsDiff) < 60){ scale = 'second'; diff = secondsDiff }
else if (Math.abs(minutesDiff) < 60){ scale = 'minute'; diff = minutesDiff }
else if (Math.abs(hoursDiff) < 24){ scale = 'hour'; diff = hoursDiff }
@@ -161,6 +166,9 @@ ulm_translation_engine:
else if (d_class == 'timestamp'){
var translation = formatter.format(diff, scale);
}
+ else if (parseFloat(display_precision) >=0){
+ var translation = parseFloat(entity.state).toFixed(display_precision?.toString()) + unit
+ }
return translation ? translation.charAt(0).toUpperCase() + translation.slice(1) : state;
}
]]]
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml
index 6e5e65277..14faff885 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml
@@ -3,7 +3,6 @@
card_binary_sensor:
template:
- "icon_more_info_new"
- - "blue"
- "ulm_translation_engine"
show_last_changed: false
variables:
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml
index a5ae36a15..1da7638e4 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml
@@ -14,6 +14,7 @@ card_cover:
ulm_card_cover_garage_large: false
ulm_card_cover_gate: false
ulm_card_cover_enable_controls: false
+ ulm_card_cover_favorite_percentage: null
ulm_card_cover_enable_slider: false
ulm_card_cover_slider_min: 0
ulm_card_cover_slider_max: 100
@@ -44,24 +45,54 @@ card_cover:
grid:
- grid-template-areas: >
[[[
- var areas = [];
- areas.push("item1");
+ if (variables.ulm_card_cover_enable_horizontal) {
- if (variables.ulm_card_cover_enable_controls) {
- areas.push("item2");
- }
- if (variables.ulm_card_cover_enable_slider) {
- areas.push("item3");
- }
- if (variables.ulm_card_cover_enable_tilt) {
- areas.push("item4");
- }
+ var hor_area = ["item1"];
+ var ver_area = [];
- if (variables.ulm_card_cover_enable_horizontal) {
- areas = areas.slice(0, 2);
- return "\"" + areas.join(" ") + "\"";
+ if (variables.ulm_card_cover_enable_controls) {
+ if (variables.ulm_card_cover_enable_horizontal == "controls" || variables.ulm_card_cover_enable_horizontal == true) {
+ hor_area.push("item2");
+ } else {
+ ver_area.push("item2" + " " + "item2");
+ }
+ }
+ if (variables.ulm_card_cover_enable_slider) {
+ if (variables.ulm_card_cover_enable_horizontal == "slider") {
+ hor_area.push("item3");
+ } else {
+ ver_area.push("item3" + " " + "item3");
+ }
+ }
+ if (variables.ulm_card_cover_enable_tilt) {
+ if (variables.ulm_card_cover_enable_horizontal == "tilt") {
+ hor_area.push("item4");
+ } else {
+ ver_area.push("item4" + " " + "item4");
+ }
+ }
+
+ if (ver_area.length < 1) {
+ return "\"" + hor_area.join(" ") + "\" ";
+ } else {
+ return "\"" + hor_area.join(" ") + "\" " + "\"" + ver_area.join("\" \"") + "\"";
+ }
+ } else {
+ var areas = [];
+ areas.push("item1");
+
+ if (variables.ulm_card_cover_enable_controls) {
+ areas.push("item2");
+ }
+ if (variables.ulm_card_cover_enable_slider) {
+ areas.push("item3");
+ }
+ if (variables.ulm_card_cover_enable_tilt) {
+ areas.push("item4");
+ }
+
+ return "\"" + areas.join("\" \"") + "\"";
}
- return "\"" + areas.join("\" \"") + "\"";
]]]
- grid-template-columns: >
[[[
@@ -72,9 +103,6 @@ card_cover:
]]]
- grid-template-rows: >
[[[
- if (variables.ulm_card_cover_enable_horizontal) {
- return "min-content";
- }
var rows = [];
rows.push("min-content");
if (variables.ulm_card_cover_enable_controls) {
@@ -86,6 +114,11 @@ card_cover:
if (variables.ulm_card_cover_enable_tilt) {
rows.push("min-content");
}
+ if (variables.ulm_card_cover_enable_horizontal) {
+ if (rows.length > 1) {
+ rows.pop()
+ }
+ }
return rows.join(" ");
]]]
- row-gap: "12px"
@@ -107,9 +140,6 @@ card_cover:
- display: >
[[[
if (variables.ulm_card_cover_enable_slider) {
- if (variables.ulm_card_cover_enable_horizontal && variables.ulm_card_cover_enable_controls) {
- return "none";
- }
return "block";
} else {
return "none";
@@ -119,9 +149,6 @@ card_cover:
- display: >
[[[
if (variables.ulm_card_cover_enable_tilt) {
- if (variables.ulm_card_cover_enable_horizontal && (variables.ulm_card_cover_enable_controls || variables.ulm_card_cover_enable_slider)) {
- return "none";
- }
return "block";
} else {
return "none";
@@ -289,10 +316,20 @@ card_cover:
item2:
card:
type: "custom:button-card"
- template: "list_3_items"
+ template: "[[[ return (variables.ulm_card_cover_favorite_percentage) ? 'list_4_items' : 'list_3_items' ]]]"
styles:
card:
- background: "none"
+ custom_fields:
+ item4:
+ - display: >
+ [[[
+ if (variables.ulm_card_cover_favorite_percentage) {
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
custom_fields:
item1:
card:
@@ -484,6 +521,47 @@ card_cover:
}
return "mdi:arrow-up";
]]]
+ item4:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ entity: "[[[ return entity.entity_id ]]]"
+ styles:
+ card:
+ - background-color: >
+ [[[
+ if(!hass.themes.darkMode && variables.ulm_card_cover_force_background_color){
+ if (variables.ulm_active_state){
+ return 'rgb(250,250,250)'
+ }
+ }
+ return 'rgba(var(--color-theme),0.05)'
+ ]]]
+ img_cell:
+ - background-color: >
+ [[[
+ if (variables.ulm_card_cover_force_background_color && variables.ulm_active_state) {
+ var color = variables.ulm_card_cover_color;
+ return 'rgba(var(--color-' + color + '),0.2)';
+ }
+ return 'rgba(var(--color-theme),0.05)';
+ ]]]
+ icon:
+ - color: >
+ [[[
+ if (variables.ulm_card_cover_force_background_color && variables.ulm_active_state) {
+ var color = variables.ulm_card_cover_color;
+ return 'rgba(var(--color-' + color + '),1)';
+ }
+ return 'rgba(var(--color-theme),0.9)';
+ ]]]
+ tap_action:
+ action: "call-service"
+ service: "cover.set_cover_position"
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
+ position: "[[[ return variables.ulm_card_cover_favorite_percentage ]]]"
+ icon: "mdi:star"
item3:
card:
type: "custom:my-slider"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_welcome_scenes.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_welcome_scenes.yaml
index cc390a58c..0b6bbbdd4 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_welcome_scenes.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_welcome_scenes.yaml
@@ -297,6 +297,9 @@ card_scenes_pill_welcome:
}
else if(entity.entity_id.startsWith("input_select.")){
return "input_select.select_option"
+ }
+ else if(entity.entity_id.startsWith("script.")){
+ return entity.entity_id
} else {
return "homeassistant.toggle"
}
@@ -304,6 +307,9 @@ card_scenes_pill_welcome:
navigation_path: "[[[ return variables?.nav_path; ]]]"
service_data: |
[[[
+ if (variables.service_data){
+ return variables.service_data
+ }
var obj;
if( entity.entity_id.startsWith("input_select.") )
obj = { entity_id: entity.entity_id, option: variables.state };
@@ -379,12 +385,18 @@ card_scenes_pill_welcome:
}
else if(entity.entity_id.startsWith("input_select.")){
return "input_select.select_option"
+ }
+ else if(entity.entity_id.startsWith("script.")){
+ return entity.entity_id
} else {
return "homeassistant.toggle"
}
]]]
service_data: |
[[[
+ if (variables.service_data){
+ return variables.service_data
+ }
var obj;
if( entity.entity_id.startsWith("input_select.") )
obj = { entity_id: entity.entity_id, option: variables.state };
diff --git a/docs/usage/cards/card_cover.md b/docs/usage/cards/card_cover.md
index bf6d1065f..c88877aab 100644
--- a/docs/usage/cards/card_cover.md
+++ b/docs/usage/cards/card_cover.md
@@ -3,6 +3,7 @@ title: Cover Card
hide:
- toc
---
+
## Description
@@ -14,27 +15,28 @@ hide:
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.
!!! warning
- 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`.
+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`.
## Variables
-| Variable/Entity | Default | Required | Notes | Requirement |
-|----------------------------------------|-----------------|------------------|----------------------------------------|-------------|
-| entity | | :material-check: | Your HA entity | |
-| ulm_card_cover_name | `friendly_name` | :material-close: | Customize name | |
-| ulm_card_cover_icon | | :material-close: | Customize icon | |
-| ulm_card_invert_percent | `false` | :material-close: | Invert the Percentage (100% = Closed) | |
-| ulm_card_cover_display_left_right | `false` | :material-close: | Display left right control button | |
-| ulm_card_cover_garage_large | `false` | :material-close: | Display variant garage icon for garage cover | Only if `device_class = 'garage` |
-| ulm_card_cover_enable_controls | `false` | :material-close: | Enable control buttons | |
-| ulm_card_cover_enable_slider | `false` | :material-close: | Enable slider | |
-| 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` |
-| ulm_card_cover_enable_tilt | `false` | :material-close: | Display angled buttons for Venetian blind tilt | |
-| ulm_card_cover_enable_popup | `false` | :material-close: | Enable `popup_cover` | |
-| ulm_card_cover_slider_min | `0` | :material-close: | Set Minimum Slider Value | |
-| ulm_card_cover_slider_max | `100` | :material-close: | Set Maximum Slider Value | |
-| ulm_card_cover_color | `blue` | :material-close: | Set Custom Color | |
-| ulm_card_cover_force_background_color | `false` | :material-close: | Set `ulm_card_cover_color` as background color in active state ` | |
+| Variable/Entity | Default | Required | Notes | Requirement |
+| ------------------------------------- | --------------- | ---------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| entity | | :material-check: | Your HA entity | |
+| ulm_card_cover_name | `friendly_name` | :material-close: | Customize name | |
+| ulm_card_cover_icon | | :material-close: | Customize icon | |
+| ulm_card_invert_percent | `false` | :material-close: | Invert the Percentage (100% = Closed) | |
+| ulm_card_cover_display_left_right | `false` | :material-close: | Display left right control button | |
+| ulm_card_cover_garage_large | `false` | :material-close: | Display variant garage icon for garage cover | Only if `device_class = 'garage` |
+| ulm_card_cover_enable_controls | `false` | :material-close: | Enable control buttons | |
+| ulm_card_cover_enable_slider | `false` | :material-close: | Enable slider | |
+| 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` |
+| ulm_card_cover_favorite_percentage | `false` | :material-close: | Display favorite button to jump to preset position | enter number |
+| ulm_card_cover_enable_tilt | `false` | :material-close: | Display angled buttons for Venetian blind tilt | |
+| ulm_card_cover_enable_popup | `false` | :material-close: | Enable `popup_cover` | |
+| ulm_card_cover_slider_min | `0` | :material-close: | Set Minimum Slider Value | |
+| ulm_card_cover_slider_max | `100` | :material-close: | Set Maximum Slider Value | |
+| ulm_card_cover_color | `blue` | :material-close: | Set Custom Color | |
+| ulm_card_cover_force_background_color | `false` | :material-close: | Set `ulm_card_cover_color` as background color in active state ` | |
## Usage
@@ -45,6 +47,7 @@ With the `cover-card` you have the state of your cover. Optionally, on the secon
variables:
ulm_card_cover_enable_controls: true
ulm_card_cover_enable_slider: true
+ ulm_card_cver_favorite_percentage: 45
ulm_card_cover_color: "green"
```
diff --git a/docs/usage/cards/card_welcome_scenes.md b/docs/usage/cards/card_welcome_scenes.md
index d44f4eb17..196683236 100644
--- a/docs/usage/cards/card_welcome_scenes.md
+++ b/docs/usage/cards/card_welcome_scenes.md
@@ -36,6 +36,7 @@ This is a card which shows the basic needs for your dashboard. This card can gen
| _color | Random | :material-close: | Color of the icon
Can choose between: `blue`, `red`, `green`, `yellow`, `pink`, `purple`
If not specified, it will take a random color |
| _state | `on` or `playing` | :material-close: | Define `input_select` state or give manual state for pill to be full |
| _nav_path | | :material-close: | Navigate to another view
*Overrides other types of actions*
+| _service_data | | :material-close: | Data to be passed through to data_service. Useful for running scripts with custom fields/parameters
## Requirement Collapse Function