- theme: Backend-selected
title: Полигон
icon: mdi:ab-testing
layout: {}
type: custom:horizontal-layout
path: polygon
badges: []
cards:
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
button_type: state
icon: ''
show_name: true
card_layout: large
show_icon: true
force_icon: false
show_state: false
show_last_changed: false
show_last_updated: true
show_attribute: false
entity: person.mikhail
button_action:
tap_action:
action: more-info
styles: |-
.bubble-button-background {
background-color: ${
{
'home': '#8AD926FF',
'away': '#1982C4FF',
}[state] ?? '#ff0000AA'
};
}
- type: custom:bubble-card
card_type: button
button_type: switch
entity: person.roman
icon: ''
show_name: true
card_layout: large
show_state: false
show_last_changed: false
show_last_updated: true
button_action:
tap_action:
action: more-info
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
button_type: switch
icon: mdi:weather-partly-cloudy
show_name: false
card_layout: large
show_icon: true
force_icon: true
show_state: true
show_last_changed: false
show_last_updated: false
show_attribute: true
entity: weather.yandex_weather
button_action:
tap_action:
action: more-info
attribute: temperature
modules:
- get_state_attribute
get_state_attribute:
- entity: weather.yandex_weather
- entity: weather.yandex_weather
attribute: temperature
- entity: weather.yandex_weather
attribute: wind_speed
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
name: Светодиодная лента
icon: mdi:led-strip-variant
card_layout: large
sub_button: []
rows: '1'
slider_live_update: false
read_only_slider: false
use_accent_color: true
allow_light_slider_to_0: false
light_transition: true
- type: custom:bubble-card
card_type: media-player
name: ТВ Приставка
entity: media_player.mibox4
show_state: true
show_last_updated: false
show_attribute: false
card_layout: large
scrolling_effect: true
show_icon: true
force_icon: true
show_name: true
show_last_changed: false
columns: 2
rows: 1
min_volume: 0
max_volume: 100
cover_background: true
hide:
play_pause_button: true
volume_button: false
previous_button: true
next_button: true
power_button: true
sub_button: []
icon: mdi:television
attribute: friendly_name
button_action:
tap_action:
action: more-info
modules:
- conditional_icon
icon_container_color:
color: blue-grey
conditional_icon:
advanced_settings:
color_true: dark-grey
color_false: dark-grey
conditions:
- condition: device
device_id: 4a904b5168cb609dd3e9c788d17a3a34
domain: media_player
entity_id: 31690791dbcacc0190eaf40887eee06d
type: is_idle
- type: custom:bubble-card
card_type: cover
button_type: state
event_action:
tap_action:
action: more-info
double_tap_action:
action: none
hold_action:
action: none
icon_open: mdi:gate-open
entity: vacuum.dreame_p2009_05bd_robot_cleaner
sub_button: []
card_layout: large
icon_down: mdi:window-shutter
icon_up: mdi:window-shutter-open
force_icon: true
icon_close: mdi:gate
show_icon: true
name: Ворота
show_last_changed: false
show_last_updated: false
show_state: true
show_attribute: false
rows: '1'
button_action: {}
- type: custom:bubble-card
card_type: button
button_type: switch
entity: vacuum.dreame_p2009_05bd_robot_cleaner
force_icon: false
show_last_changed: false
show_state: true
show_attribute: true
attribute: battery_level
sub_button:
- entity: button.dreame_p2009_05bd_start_charge
icon: mdi:home
show_attribute: false
show_last_updated: false
- entity: button.dreame_p2009_05bd_start_sweep
icon: mdi:play
- entity: button.dreame_p2009_05bd_stop_sweeping
icon: mdi:stop
- entity: camera.dreame_p2009_05bd_map
icon: mdi:map-search
card_layout: large
- type: custom:bubble-card
card_type: select
entity: select.dreame_p2009_05bd_mode
force_icon: false
show_icon: true
show_state: true
show_last_changed: false
show_last_updated: false
show_attribute: true
attribute: options
card_layout: large-2-rows
sub_button: []
name: Кнопка выбора
icon: mdi:vacuum
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
button_type: switch
entity: light.yeelink_strip6_c28f_light
show_name: true
force_icon: true
sub_button:
- entity: light.yeelink_strip6_c28f_light
show_background: true
state_background: false
- entity: light.yeelink_strip6_c28f_light
state_background: false
light_background: true
- entity: light.yeelink_strip6_c28f_light
state_background: false
show_name: false
show_state: false
show_last_changed: false
show_last_updated: false
button_action:
tap_action:
action: none
card_layout: large
scrolling_effect: true
show_icon: true
use_accent_color: false
show_state: true
rows: '1'
modules:
- conditional_icon
conditional_icon:
advanced_settings:
color_true: dark-grey
color_false: dark-grey
conditions:
- condition: state
entity_id: light.yeelink_strip6_c28f_light
state:
- 'on'
- type: custom:bubble-card
card_type: button
button_type: switch
entity: input_boolean.silent_mode
modules:
- toggle_switch
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
modules:
- conditional_icon
- color_temp_slider
card_layout: large
conditional_icon:
advanced_settings:
color_true: dark-grey
color_false: dark-grey
conditions:
- condition: device
type: is_off
device_id: 29ec80c4fabc681c70620ed9d38b7941
entity_id: 3a98eae887f10ac4498a9060a9672fa3
domain: light
tap_to_slide: false
relative_slide: false
read_only_slider: false
slider_live_update: false
use_accent_color: false
styles: |
.bubble-buttons-container {
--bubble-sub-button-light-background-color: var(--color-theme);
#--icon-primary-color: grey;
}
allow_light_slider_to_0: true
light_transition: false
show_state: true
show_last_changed: false
show_last_updated: false
show_attribute: true
attribute: brightness
- type: custom:bubble-card
card_type: button
button_type: slider
entity: timer.bathroom_timer
modules:
- timer_progress
- conditional_icon
timer_progress:
inverted: false
startColor: disabled
endColor: disabled
timer_entity: timer.bathroom_timer
show_state: true
show_last_changed: false
show_last_updated: false
button_action:
tap_action:
action: perform-action
target:
entity_id: timer.bathroom_timer
perform_action: timer.pause
sub_button:
- entity: timer.bathroom_timer
show_attribute: false
attribute: restore
tap_action:
action: perform-action
target:
entity_id:
- timer.bathroom_timer
perform_action: timer.pause
icon: mdi:pause
show_background: true
state_background: false
- icon: mdi:play
tap_action:
action: call-service
service: timer.start
target:
entity_id:
- timer.bathroom_timer
state_background: false
card_layout: large
show_name: true
show_attribute: true
attribute: duration
icon_container_color:
color: none
conditional_icon:
advanced_settings:
color_true: dark-grey
color_false: dark-grey
conditions:
- condition: state
entity_id: timer.bathroom_timer
state:
- active
- type: custom:bubble-card
card_type: button
button_type: switch
entity: sensor.dreame_p2009_05bd_battery_level
force_icon: false
show_icon: true
scrolling_effect: true
show_state: false
show_last_changed: false
sub_button:
- entity: sensor.dreame_p2009_05bd_battery_level
show_state: true
show_icon: false
state_background: false
show_background: true
modules:
- conditional_icon
- progress_bar
progress_bar:
progress_color: disabled
min_value: 0
max_value: 100
card_layout: large
conditional_icon:
advanced_settings:
color_true: dark-grey
color_false: dark-grey
- type: custom:bubble-card
card_type: cover
button_type: state
event_action:
tap_action:
action: more-info
double_tap_action:
action: none
hold_action:
action: none
icon_open: mdi:gate-open
entity: vacuum.dreame_p2009_05bd_robot_cleaner
sub_button: []
card_layout: large
icon_down: mdi:arrow-down-bold
icon_up: mdi:arrow-up-bold
force_icon: true
icon_close: mdi:gate
show_icon: true
name: Ворота
show_last_changed: false
show_last_updated: false
show_state: true
show_attribute: false
rows: '1'
styles: |
ha-card {
--bubble-main-background-color: rgba(12,120,50,0.5) !important;
}
ha-card {
--bubble-icon-background-color: rgb(230, 128, 41) !important;
}
.bubble-sub-button {
height: 148px !important;
min-width: 148px !important;
}
.bubble-sub-button-2 {
background-color: blue !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: 126px !important;
}
- type: custom:bubble-card
card_type: button
card_layout: large
button_type: name
show_icon: false
show_name: false
sub_button:
- name: Mute
icon: mdi:volume-off
tap_action:
action: toggle
service: input_boolean.toggle
entity: input_boolean.silent_mode
- name: Covers
entity: cover.all_group
show_background: true
tap_action:
action: navigate
navigation_path: '#cover'
- name: Shopping list
icon: mdi:cart-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#shopping-list'
- name: Security
icon: mdi:video-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#security'
- name: Settings
icon: mdi:cog
show_background: true
tap_action:
action: navigate
navigation_path: '#configuration'
styles: |
.card-content {
width: 100%;
margin: 0 !important;
}
.bubble-button-card-container {
background: none;
border: none;
}
.bubble-sub-button {
height: 46px !important;
width: 46px !important;
}
.bubble-sub-button-container {
display: flex !important;
width: 100%;
justify-content: space-between !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: inherit !important;
}
.bubble-name-container {
margin-right: 0px !important;
}
- type: custom:bubble-card
card_type: button
card_layout: large
button_type: name
show_icon: false
show_name: false
sub_button:
- name: Mute
icon: mdi:volume-off
tap_action:
action: toggle
service: input_boolean.toggle
entity: input_boolean.silent_mode
- name: Covers
entity: cover.all_group
show_background: true
tap_action:
action: navigate
navigation_path: '#cover'
- name: Shopping list
icon: mdi:cart-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#shopping-list'
- name: Security
icon: mdi:video-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#security'
- name: Settings
icon: mdi:cog
show_background: true
tap_action:
action: navigate
navigation_path: '#configuration'
styles: |
.card-content {
width: 100%;
margin: 0 !important;
}
.bubble-sub-button {
height: 43px !important;
width: 45px !important;
}
.bubble-sub-button-container {
display: flex !important;
width: 100%;
justify-content: space-between !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: inherit !important;
}
.bubble-name-container {
margin-right: 0px !important;
}
- type: custom:bubble-card
card_type: button
button_type: state
entity: timer.bathroom_timer
sub_button:
- entity: timer.bathroom_timer
tap_action:
action: call-service
service: timer.start
target:
entity_id: timer.bathroom_timer
icon: mdi:play
- entity: timer.bathroom_timer
icon: mdi:pause
tap_action:
action: call-service
service: timer.pause
target:
entity_id: timer.bathroom_timer
- entity: timer.bathroom_timer
icon: mdi:cancel
tap_action:
action: call-service
target:
entity_id: timer.bathroom_timer
service: timer.cancel
- entity: timer.bathroom_timer
tap_action:
action: call-service
service: timer.finish
target:
entity_id: timer.bathroom_timer
icon: mdi:clock-end
show_attribute: false
show_state: true
show_name: true
{
card.timerEntity = hass.states[entity];
const now = new Date();
const endTime = new Date(card.timerEntity.attributes.finishes_at);
const runningTime = Math.round((endTime - now) / 1000);
const maxtime = Math.round(new Date("1970-01-01 " + card.timerEntity.attributes.duration + " UTC") / 1000);
const remainingTime = Math.round(new Date("1970-01-01 " + card.timerEntity.attributes.remaining + " UTC") / 1000);
var percentage = 0;
if (isNaN(runningTime)) {
percentage = 100 - Math.round( 100.0 * remainingTime / maxtime);
} else {
percentage = 100 - Math.round( 100.0 * runningTime / maxtime);
}
if (isNaN(percentage)) {
return "0%";
} else {
return "" + percentage +"%";
}
})()};
}
.bubble-icon-container {
background: radial-gradient(
var(--card-background-color) 60%,
transparent 0%
), conic-gradient(
var(--circle-color) var(--percentage) 0%,
var(--card-background-color) 0% 100%
) !important;
}
.bubble-icon-container:after {
content: "" !important;
height: 100% !important;
width: 100% !important;
position: absolute !important;
border-radius: 50% !important;
background: (var(--bubble-button-icon-background-color), 0.1) !important;
}
${(() => {
function UpdateState(){
try {
let now = new Date();
let endTime = new Date(card.timerEntity.attributes.finishes_at);
let runningTime = Math.round((endTime - now)/1000);
let hours = Math.floor(runningTime / 3600);
let minutes = Math.floor((runningTime - (hours * 3600)) / 60);
let remainingSeconds = runningTime % 60;
card.querySelector('.bubble-state').innerText =
(hours > 0 ? (hours + ":") : "") +
("0" + minutes).slice(-2) + ":" +
("0" + remainingSeconds).slice(-2);
} catch (error) {
card.querySelector('.bubble-state').innerText = card.timerEntity.attributes.duration;
}
};
if (card.timer == null && card.timerEntity.state === 'active') {
card.timer = setInterval(()=>{UpdateState()}, 500);
}else if (card.timerEntity.state != 'active'){
clearInterval(card.timer);
card.timer = null;
if (card.timerEntity.state !='paused') {
card.querySelector('.bubble-state').innerText = card.timerEntity.attributes.duration;
} else if(card.timerEntity.state==='paused') {
card.querySelector('.bubble-state').innerText = card.timerEntity.attributes.remaining;
}
}
})()}
${(() => {
subButtonIcon[0].setAttribute("icon",card.timerEntity.state != 'active' ?'mdi:play' : 'mdi:replay');
})()}
${(() => {
if (card.timerEntity.state != 'active') {
card.querySelector('.bubble-sub-button-2').classList.add("hidden");
}
})()}
${(() => {
if (card.timerEntity.state === 'idle') {
card.querySelector('.bubble-sub-button-3').classList.add("hidden");
}
})()}
${(() => {
if (card.timerEntity.state === 'idle') {
card.querySelector('.bubble-sub-button-4').classList.add("hidden");
}
})()}
- type: vertical-stack
cards:
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
card_layout: large
button_type: name
show_icon: false
show_name: false
sub_button:
- name: Mute
icon: mdi:volume-off
tap_action:
action: toggle
service: input_boolean.toggle
entity: input_boolean.silent_mode
- name: Covers
entity: cover.all_group
show_background: true
tap_action:
action: navigate
navigation_path: '#cover'
- name: Shopping list
icon: mdi:cart-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#shopping-list'
- name: Security
icon: mdi:video-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#security'
- name: Settings
icon: mdi:cog
show_background: true
tap_action:
action: navigate
navigation_path: '#configuration'
styles: |
.card-content {
width: 100%;
margin: 0 !important;
}
.bubble-sub-button {
height: 43px !important;
width: 45px !important;
}
.bubble-sub-button-container {
display: flex !important;
width: 100%;
justify-content: space-between !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: inherit !important;
}
.bubble-name-container {
margin-right: 0px !important;
}
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
card_layout: large
button_type: name
show_icon: false
show_name: false
sub_button:
- name: Mute
icon: mdi:volume-off
tap_action:
action: toggle
service: input_boolean.toggle
entity: input_boolean.silent_mode
- name: Covers
entity: cover.all_group
show_background: true
tap_action:
action: navigate
navigation_path: '#cover'
- name: Shopping list
icon: mdi:cart-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#shopping-list'
- name: Security
icon: mdi:video-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#security'
- name: Settings
icon: mdi:cog
show_background: true
tap_action:
action: navigate
navigation_path: '#configuration'
styles: |
.card-content {
width: 100%;
margin: 0 !important;
}
.bubble-sub-button {
height: 43px !important;
width: 45px !important;
}
.bubble-sub-button-container {
display: flex !important;
width: 100%;
justify-content: space-between !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: inherit !important;
}
.bubble-name-container {
margin-right: 0px !important;
}
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
card_layout: large
button_type: name
show_icon: false
show_name: false
sub_button:
- name: Mute
icon: mdi:volume-off
tap_action:
action: toggle
service: input_boolean.toggle
entity: input_boolean.silent_mode
- name: Covers
entity: cover.all_group
show_background: true
tap_action:
action: navigate
navigation_path: '#cover'
- name: Shopping list
icon: mdi:cart-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#shopping-list'
- name: Security
icon: mdi:video-outline
show_background: true
tap_action:
action: navigate
navigation_path: '#security'
- name: Settings
icon: mdi:cog
show_background: true
tap_action:
action: navigate
navigation_path: '#configuration'
styles: |
.card-content {
width: 100%;
margin: 0 !important;
}
.bubble-sub-button {
height: 43px !important;
width: 45px !important;
}
.bubble-sub-button-container {
display: flex !important;
width: 100%;
justify-content: space-between !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: inherit !important;
}
.bubble-name-container {
margin-right: 0px !important;
}
- type: custom:auto-entities
card:
square: false
type: grid
columns: 1
card_param: cards
filter:
template: |-
{%- for state in states.sensor if "battery" in state.entity_id -%}
{{
{
"entity": state.entity_id,
"name": (state.name | regex_replace('(?i)\\s*Battery.*$','') | replace('_',' ') | trim),
"type": "custom:bubble-card",
"card_type": "button",
"button_type": "slider",
"show_last_changed": true,
"show_state": true,
"read_only_slider": true,
"scrolling_effect": true,
"tap_action": { "action": "none" },
"hold_action": { "action": "none" },
"double_tap_action": { "action": "none" },
"name_tap_action": { "action": "none" },
"state_tap_action": { "action": "none" },
"icon_tap_action": { "action": "more-info" },
"styles": ".bubble-range-fill {\n background-color: rgba(${state >= 90 ? '46, 204, 113' /* vibrant green */\n : state >= 75 ? '39, 174, 96' /* green */\n : state >= 60 ? '110, 207, 151' /* light green */\n : state >= 40 ? '241, 196, 15' /* yellow */\n : state >= 25 ? '230, 126, 34' /* orange */\n : state >= 10 ? '231, 76, 60' /* light red */\n : '192, 57, 43' /* dark red */}, 0.45) !important;\n}\n${(() => {\n let date = new Date(hass.states[entity].attributes['battery_last_replaced']);\n let options = { weekday: \"short\", year: \"numeric\", month: \"short\", day: \"numeric\" };\n card.querySelector('.bubble-sub-button-2').innerText = hass.states[entity].attributes['battery_last_replaced'] == null ?\n \"Не заменялась\" : date.toLocaleDateString(undefined, options);\n})()}\n",
"sub_button": [
{
"show_state": false,
"show_icon": false,
"state_background": false,
"show_background": false,
"show_attribute": true,
"attribute": "battery_type_and_quantity",
"tap_action": { "action": "none" }
},
{
"show_name": true,
"show_state": false,
"show_icon": false,
"state_background": false,
"show_background": false,
"tap_action": { "action": "none" }
}
],
"modules": ["default"]
}
}},
{%- endfor -%}
sort:
method: friendly_name
ignore_case: true
reverse: false
show_empty: true
- type: custom:bubble-card
card_type: button
button_type: switch
entity: alarm_control_panel.home_alarm
show_attribute: true
show_state: true
force_icon: false
show_icon: true
scrolling_effect: false
show_name: true
sub_button:
- entity: script.alarm_active_outside_house
icon: mdi:shield-lock
tap_action:
action: toggle
double_tap_action:
action: none
visibility:
- condition: state
entity: alarm_control_panel.home_alarm
state_not: armed_away
- icon: mdi:shield-home
tap_action:
action: toggle
double_tap_action:
action: none
visibility:
- condition: state
entity: alarm_control_panel.home_alarm
state_not: armed_home
entity: script.alarm_active_in_house
- icon: mdi:shield-off
state_background: true
show_background: true
tap_action:
action: toggle
visibility:
- condition: state
entity: alarm_control_panel.home_alarm
state_not: disarmed
entity: script.alarm_inactive
tap_action:
action: none
double_tap_action:
action: none
hold_action:
action: none
modules:
- subbutton_colors
- home-assistant-default
subbutton_colors:
subbutton1:
color: teal
condition:
- condition: state
state: armed_away
entity_id: alarm_control_panel.home_alarm
subbutton2:
color: green
condition:
- condition: state
state: armed_home
entity_id: alarm_control_panel.home_alarm
subbutton3:
color: indigo
condition:
- condition: state
state: disarmed
entity_id: alarm_control_panel.home_alarm
card_layout: large-sub-buttons-grid
button_action:
tap_action:
action: none
hold_action:
action: none
styles: >-
.bubble-icon-container {
animation: ${state === 'arming' ? 'fade-animate 3s ease-in-out infinite' : '' };
background: ${
state == 'disarmed'
? "blue"
: state == 'armed_home'
? "green"
: state == 'armed_away'
? "teal"
: state == 'arming'
? "orange"
: "#FF0000" // Red
} !important;
#border-radius: 25%!important;
color: white!important;
}
@keyframes fade-animate {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0;
}
${card.querySelector('.bubble-state').innerText =
state == 'armed_home' ? "Сработала сигнализация (дома)"
: state == 'armed_away' ? "Сработала сигнализация (вне дома)"
: state == 'disarmed' ? "Отключить сигнализацию"
: "Включение сигнализации"
}
${state == 'armed_home' ? icon.setAttribute("icon",
'mdi:shield-home')
: state == 'armed_away' ? icon.setAttribute("icon", 'mdi:shield-lock')
: state == 'disarmed' ? icon.setAttribute("icon", 'mdi:shield-off')
:icon.setAttribute("icon", 'mdi:shield')};
}
name: Сигнализация
- type: vertical-stack
cards:
- type: custom:mini-graph-card
entities:
- entity: sensor.system_monitor_processor_use
color_thresholds:
- value: 10
color: '#CCE5FF'
- '#66B2FF'
- '#0080FF'
- '#87c087'
- '#389638'
- '#FF9932'
- '#FF8000'
- value: 27
color: '#ff0000'
hours_to_show: 24
points_per_hour: 1.2
animate: false
update_interval: 120
aggregate_func: avg
line_width: 1
height: 52
group: true
show:
labels: false
fill: true
state: false
name: false
icon: false
card_mod:
style: |
ha-card {
#height: 74px !important;
#position: absolute;
#box-shadow: none;
#background: none;
border-radius: 40px;
#border-color: black;
border-width: 0px;
opacity: 1;
margin-bottom: -65px;
margin-top: 10px;
#margin-left: 0em;
#margin-right: 0em;
#width: 100%;
#left: 0;
#top: 0;
}
- type: custom:bubble-card
card_type: button
scrolling_effect: false
show_name: true
tap_action:
action: more-info
card_layout: large
name: ''
styles: |
.bubble-button-card-container {
background: transparent;
} .bubble-name {
font-weight: bold !important;
}
show_attribute: true
show_state: true
show_icon: true
button_type: state
button_action:
tap_action:
action: navigate
navigation_path: '#office-temp'
entity: weather.yandex_weather
show_last_updated: false
show_last_changed: false
attribute: temperature
modules:
- get_state_attribute
get_state_attribute:
- entity: weather.yandex_weather
- entity: weather.yandex_weather
attribute: temperature
- entity: weather.yandex_weather
attribute: wind_speed
- type: custom:bubble-card
card_type: button
button_type: state
entity: input_number.massimo_assorbimento_auto
show_state: true
name: Corrente massima
scrolling_effect: false
icon: mdi:battery-charging-high
force_icon: false
sub_button:
- entity: input_number.massimo_assorbimento_auto
tap_action:
action: call-service
target:
entity_id: entity
service: input_number.decrement
show_background: true
icon: mdi:minus
state_background: false
- entity: input_number.massimo_assorbimento_auto
tap_action:
action: call-service
target:
entity_id: entity
service: input_number.increment
icon: mdi:plus
state_background: false
card_layout: normal
- type: custom:bubble-card
card_type: button
button_type: switch
entity: sensor.xiaomi_lumi_sen_ill_mgl01
sub_button:
- entity: sensor.xiaomi_lumi_sen_ill_mgl01
show_state: true
show_icon: false
show_last_updated: false
show_last_changed: false
show_attribute: false
state_background: false
show_state: false
modules:
- color_temp_slider
- type: custom:bubble-card
card_type: button
show_attribute: false
show_name: true
show_icon: true
scrolling_effect: true
show_state: false
card_layout: large-2-rows
tap_action:
action: none
button_type: name
name: Гостиная
icon: mdi:sofa
sub_button:
- name: Освещение гостиной
icon: mdi:lightbulb-group
tap_action:
action: navigate
navigation_path: '#rasveta_boravak'
entity: light.yeelink_strip6_c28f_light
- name: Media
icon: mdi:television-off
tap_action:
action: navigate
navigation_path: '#media_boravak'
entity: media_player.mibox4
- name: Media
tap_action:
action: navigate
navigation_path: '#klima_boravak'
entity: input_boolean.automation_off
styles: >-
.bubble-icon-container {
overflow: visible;
}
.bubble-icon {
#color: teal!important;
opacity: .5 !important;
}
.bubble-icon-container {
opacity: 1 !important;
background: var(--icon-Background-Color); !important;
}
.large .bubble-sub-button-container {
position: absolute;
right: 10px; /* fiksna udaljenost od desne ivice */
top: calc((100% - 4 * 36px)/5); /* vertikalni razmak */
display: flex !important;
flex-direction: column;
gap: calc((100% - 4 * 36px)/5) !important;
justify-content: flex-start;
height: 100% !important;
padding-right: 0 !important;
}
.large .bubble-sub-button {
height: 36px !important;
}
.bubble-sub-button {
height: 36px !important;
width: 36px !important;
border-radius: 10px !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: 24px !important;
}
${subButtonIcon[1].setAttribute("icon",
hass.states['media_player.mibox4'].state === 'on' ? 'mdi:television' :
'mdi:television-off')}
${subButtonIcon[2].setAttribute("icon",
hass.states['input_boolean.automation_off'].state === 'heat'
? 'mdi:fire'
: hass.states['input_boolean.automation_off'].state === 'heat_cool'
? 'mdi:sun-snowflake'
: hass.states['input_boolean.automation_off'].state === 'cool'
? 'mdi:snowflake'
: hass.states['input_boolean.automation_off'].state === 'dry'
? 'mdi:water-percent'
: hass.states['input_boolean.automation_off'].state === 'fan_only'
? 'mdi:fan'
: 'mdi:air-conditioner')}
card_mod:
style: |
.bubble-icon::after {
content: "{{states ('sensor.alarm_clock_a332_temperature')}}°C/{{states ('sensor.alarm_clock_a332_humidity')}}%";
position: absolute;
top: -30px;
left: 30px;
color: var(--primary-text-color);
opacity: 1 !important;
font-size: 12px;
}
{% if states('sensor.count_automation_off') | int > 0 %}
.bubble-sub-button-1:after {
content: "{{ states('sensor.count_automation_off') }}";
position: absolute;
top: -5px;
left: 22px;
width: 18px !important;
height: 15px !important;
display: flex;
align-items: center;
justify-content: center;
color: black;
background-color: orange;
border-radius: 20%;
font-size: 10px;
}
{% endif %}
{% if states('input_boolean.automation_off') !='off' %}
.bubble-sub-button-3:after {
content: "{{ state_attr('input_boolean.automation_off', 'temperature') }}";
position: absolute;
top: -5px;
left: 22px;
width: 18px !important;
height: 15px !important;
display: flex;
align-items: center;
justify-content: center;
color: black;
background-color: var(--primary-color);
border-radius: 20%;
font-size: 10px;
}
{% endif %}
grid_options:
columns: 6
rows: 3
modules:
- room_card
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
show_attribute: false
show_name: true
show_icon: true
scrolling_effect: true
show_state: false
card_layout: large-2-rows
tap_action:
action: none
button_type: name
name: Гостиная
icon: mdi:sofa
sub_button:
- name: Освещение гостиной
icon: mdi:lightbulb-group
tap_action:
action: navigate
navigation_path: '#rasveta_boravak'
entity: light.yeelink_strip6_c28f_light
show_background: true
light_background: true
state_background: true
show_name: false
- name: Media
icon: mdi:television-off
tap_action:
action: navigate
navigation_path: '#media_boravak'
entity: media_player.mibox4
- name: Media
tap_action:
action: navigate
navigation_path: '#klima_boravak'
entity: input_boolean.automation_off
styles: >-
.bubble-icon-container {
overflow: visible;
}
.bubble-icon {
#color: teal!important;
opacity: .5 !important;
}
.bubble-icon-container {
opacity: 1 !important;
background: var(--icon-Background-Color); !important;
}
.large .bubble-sub-button-container {
position: absolute;
right: 10px; /* fiksna udaljenost od desne ivice */
top: calc((100% - 4 * 36px)/5); /* vertikalni razmak */
display: flex !important;
flex-direction: column;
gap: calc((100% - 4 * 36px)/5) !important;
justify-content: flex-start;
height: 100% !important;
padding-right: 0 !important;
}
.large .bubble-sub-button {
height: 36px !important;
}
.bubble-sub-button {
height: 36px !important;
width: 36px !important;
border-radius: 10px !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: 24px !important;
}
${subButtonIcon[1].setAttribute("icon",
hass.states['media_player.mibox4'].state === 'on' ?
'mdi:television' : 'mdi:television-off')}
${subButtonIcon[2].setAttribute("icon",
hass.states['input_boolean.automation_off'].state === 'heat'
? 'mdi:fire'
: hass.states['input_boolean.automation_off'].state === 'heat_cool'
? 'mdi:sun-snowflake'
: hass.states['input_boolean.automation_off'].state === 'cool'
? 'mdi:snowflake'
: hass.states['input_boolean.automation_off'].state === 'dry'
? 'mdi:water-percent'
: hass.states['input_boolean.automation_off'].state === 'fan_only'
? 'mdi:fan'
: 'mdi:air-conditioner')}
grid_options:
columns: 6
rows: 3
modules:
- room_card
card_mod:
style: |
.bubble-icon::after {
content: "{{states ('sensor.alarm_clock_a332_temperature)}}°C/{{states ('sensor.alarm_clock_a332_humidity')}}%";
position: absolute;
top: -30px;
left: 30px;
color: var(--primary-text-color);
opacity: 1 !important;
font-size: 12px;
}
{% if states('sensor.count_automation_off') | int > 0 %}
.bubble-sub-button-1:after {
content: "{{ states('sensor.count_automation_off') }}";
position: absolute;
top: -5px;
left: 22px;
width: 18px !important;
height: 15px !important;
display: flex;
align-items: center;
justify-content: center;
color: black;
background-color: orange;
border-radius: 20%;
font-size: 10px;
}
{% endif %}
{% if states('input_boolean.automation_off') !='off' %}
.bubble-sub-button-3:after {
content: "{{ state_attr('input_boolean.automation_off', 'temperature') }}";
position: absolute;
top: -5px;
left: 22px;
width: 18px !important;
height: 15px !important;
display: flex;
align-items: center;
justify-content: center;
color: black;
background-color: var(--primary-color);
border-radius: 20%;
font-size: 10px;
}
{% endif %}
- type: custom:bubble-card
card_type: button
show_attribute: false
show_name: true
show_icon: true
scrolling_effect: true
show_state: false
card_layout: large-2-rows
tap_action:
action: none
button_type: name
name: Гостиная
icon: mdi:sofa
sub_button:
- name: Освещение гостиной
icon: mdi:lightbulb-group
tap_action:
action: navigate
navigation_path: '#rasveta_boravak'
entity: light.yeelink_strip6_c28f_light
- name: Media
icon: mdi:television-off
tap_action:
action: navigate
navigation_path: '#media_boravak'
entity: media_player.mibox4
- name: Media
tap_action:
action: navigate
navigation_path: '#klima_boravak'
entity: input_boolean.automation_off
styles: >-
.bubble-icon-container {
overflow: visible;
}
.bubble-icon {
#color: teal!important;
opacity: .5 !important;
}
.bubble-icon-container {
opacity: 1 !important;
background: var(--icon-Background-Color); !important;
}
.large .bubble-sub-button-container {
position: absolute;
right: 10px; /* fiksna udaljenost od desne ivice */
top: calc((100% - 4 * 36px)/5); /* vertikalni razmak */
display: flex !important;
flex-direction: column;
gap: calc((100% - 4 * 36px)/5) !important;
justify-content: flex-start;
height: 100% !important;
padding-right: 0 !important;
}
.large .bubble-sub-button {
height: 36px !important;
}
.bubble-sub-button {
height: 36px !important;
width: 36px !important;
border-radius: 10px !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: 24px !important;
}
${subButtonIcon[1].setAttribute("icon",
hass.states['media_player.mibox4'].state === 'on' ?
'mdi:television' : 'mdi:television-off')}
${subButtonIcon[2].setAttribute("icon",
hass.states['input_boolean.automation_off'].state === 'heat'
? 'mdi:fire'
: hass.states['input_boolean.automation_off'].state === 'heat_cool'
? 'mdi:sun-snowflake'
: hass.states['input_boolean.automation_off'].state === 'cool'
? 'mdi:snowflake'
: hass.states['input_boolean.automation_off'].state === 'dry'
? 'mdi:water-percent'
: hass.states['input_boolean.automation_off'].state === 'fan_only'
? 'mdi:fan'
: 'mdi:air-conditioner')}
card_mod:
style: |
.bubble-icon::after {
content: "{{states ('sensor.alarm_clock_a332_temperature')}}°C/{{states ('sensor.alarm_clock_a332_humidity')}}%";
position: absolute;
top: -30px;
left: 30px;
color: var(--primary-text-color);
opacity: 1 !important;
font-size: 12px;
}
{% if states('sensor.count_automation_off') | int > 0 %}
.bubble-sub-button-1:after {
content: "{{ states('sensor.count_automation_off') }}";
position: absolute;
top: -5px;
left: 22px;
width: 18px !important;
height: 15px !important;
display: flex;
align-items: center;
justify-content: center;
color: black;
background-color: orange;
border-radius: 20%;
font-size: 10px;
}
{% endif %}
{% if states('input_boolean.automation_off') !='off' %}
.bubble-sub-button-3:after {
content: "{{ state_attr('input_boolean.automation_off', 'temperature') }}";
position: absolute;
top: -5px;
left: 22px;
width: 18px !important;
height: 15px !important;
display: flex;
align-items: center;
justify-content: center;
color: black;
background-color: var(--primary-color);
border-radius: 20%;
font-size: 10px;
}
{% endif %}
grid_options:
columns: 6
rows: 3
modules:
- room_card
- type: custom:bubble-card
card_type: button
button_type: state
entity: sun.sun
show_icon: false
show_state: false
show_name: false
card_layout: large-sub-buttons-grid
grid_options:
columns: 48
rows: 3
tap_action:
action: none
double_tap_action:
action: none
hold_action:
action: none
button_action:
tap_action:
action: none
double_tap_action:
action: none
hold_action:
action: none
sub_button:
- entity: input_number.offene_fenster
icon: mdi:lock
state_background: false
show_state: true
- entity: input_number.eingeschaltete_lampen
icon: mdi:lightbulb
state_background: false
show_state: true
- entity: sun.sun
icon: ''
state_background: false
show_state: true
show_background: false
show_icon: false
show_attribute: false
tap_action:
action: none
- entity: sensor.total_dc_power
icon: m3rf:solar-power
show_icon: true
state_background: false
show_background: true
show_last_changed: false
show_state: true
- entity: sensor.battery_level
state_background: false
show_state: true
- entity: sensor.energy_production_today_remaining
icon: mdi:calendar-month-outline
state_background: false
show_state: true
- entity: sensor.load_power
icon: mdi:home-lightning-bolt
show_background: true
state_background: false
show_state: true
- entity: sensor.meter_active_power_raw
icon: mdi:transmission-tower
state_background: false
show_state: true
styles: >-
ha-card {
--bubble-sub-button-background-color: rgba(46, 43, 56, 0.7); # Add transparency
}
.bubble-button-card-container {
background-image: url("https://www.hessl.at/files/architektenhaus-mit-pool/architektenhaus-kueche-essbereich.jpg");
background-size: cover;
border-radius: 28px;
background-position: center;
}
.bubble-sub-button-container {
width: 100%; # Span the container over the full width
}
.bubble-sub-button-1 ha-icon {
color: #06d8d0;
}
.bubble-sub-button-2 ha-icon {
color: #fcc93d;
}
.bubble-sub-button-3 {
opacity: 0.0; # Hide unused button
}
.bubble-sub-button-6 {
grid-column: span 2; # Larger button over 2 columns
}
# Format text for large sub-button
${card.querySelector('.bubble-sub-button-6
.bubble-sub-button-name-container').innerText = "~" +
Math.round(subButtonState[5]*10)/10 + "kWh Solarertrag verbleibend"}
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
name: Гостиная
icon: mdi:sofa-outline
hash: '#balcony'
button_type: name
close_on_click: true
- type: custom:bubble-card
card_type: separator
name: Освещение (пример)
icon: mdi:lightbulb-outline
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
show_state: true
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
show_state: true
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
show_state: true
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
hash: '#lights'
name: Главная
icon: mdi:chart-bubble
width_desktop: 500px
margin_top_desktop: 10%
margin_top_mobile: 30vh
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
name: Кухня
icon: mdi:dip-switch
entity: light.kitchen_lights
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
name: Гостиная
icon: mdi:dip-switch
entity: light.living_room_lights
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
name: Спальня
icon: mdi:dip-switch
entity: light.yeelink_strip6_c28f_light
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
hash: '#bathroom'
button_type: name
name: Ванна
icon: mdi:bathtub
card_layout: normal
styles: ".bubble-button-card-container {\n background: none;\n border: none;\n}\n.bubble-sub-button-icon {\n --mdc-icon-size: 14px;\n}\n.bubble-sub-button {\n\tfont-size: 14px !important;\n padding: 6px;\n}\n"
bg_color: var(--secondary-background-color)
bg_opacity: '50'
auto_close: '4000'
sub_button:
- entity: weather.yandex_weather
show_background: false
show_state: true
- entity: sensor.system_monitor_processor_use
show_background: false
show_state: true
show_header: true
close_on_click: true
hide_backdrop: false
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
hash: '#hallway'
name: Освещение
icon: mdi:chart-bubble
width_desktop: 500px
margin_top_desktop: 10%
button_type: name
modules: []
more_info_popup:
center: false
window_ani: scale(0.1)
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
name: Кухня
icon: mdi:dip-switch
entity: light.kitchen_lights
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
name: Гостиная
icon: mdi:dip-switch
entity: light.living_room_lights
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
name: Спальня
icon: mdi:dip-switch
entity: light.yeelink_strip6_c28f_light
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.yeelink_strip6_c28f_light
- type: custom:bubble-card
card_type: horizontal-buttons-stack
auto_order: false
highlight_current_view: true
margin: 0px
width_desktop: 1540px
1_icon: mdi:home-city-outline
1_link: '#lights'
2_icon: mdi:door-open
2_link: '#hallway'
3_icon: mdi:sofa-outline
3_link: '#livingroom'
4_icon: mdi:bed-king-outline
4_link: '#bedroom'
5_icon: mdi:sofa-single-outline