
Cos’è la Bubble Card e perché installarla
La Bubble Card è una custom card per Home Assistant pensata per creare dashboard minimaliste, compatte e funzionali. Il progetto è ben curato e aggiornato con regolarità, open source e disponibile su GitHub (Clooos/Bubble-Card).
La caratteristica distintiva resta l’interazione basata su finestre pop-up al tap, anche se nel tempo il concetto si è allargato: oggi non ci sono solo i pop-up, ma anche pulsanti e card di vario genere. Ogni elemento (“bolla”) è personalizzabile e può contenere i pulsanti e le card che vuoi — spesso rappresenta una stanza o un dispositivo. Toccandolo si apre un pannello dedicato con i controlli avanzati (luci, sensori, clima), evitando di sovraccaricare la schermata principale. È inoltre possibile unificare funzioni diverse — come ventilazione e riscaldamento — in un’unica interfaccia.
Come funziona e differenze con Mushroom
La Bubble Card si basa su due elementi architetturali chiave:
- Pop-up basati su URL hash: cliccando su una card viene richiamata un’ancora univoca nell’URL (es.
#kitchen) che apre il pannello sovrapposto. Questo permette la navigazione fluida anche tramite il pulsante “Indietro” del browser o dello smartphone. - Barra di navigazione (
horizontal-buttons-stack): un menu fisso e scrollabile posto a fondo pagina per passare da una vista all’altra o richiamare i pop-up.
A differenza di Mushroom Cards, ideale per visualizzazioni statiche a tutto schermo, Bubble Card è ottimizzata per interfacce a livelli, permettendo di raggruppare decine di comandi in pochissimo spazio visivo. L’utilità della Bubble Card sta proprio qui: semplifica la dashboard ed elimina il rumore visivo di troppi pulsanti sempre in vista, nascondendoli dietro un click in più — veloce ed elegante. Per un confronto più approfondito con Mushroom e Button Card leggi Bubble Card vs Mushroom vs Button Card.
Come installare la Bubble Card
Ti serve HACS installato — se non l’hai ancora configurato, parti da lì prima di procedere.
Metodo 1: Tramite HACS (consigliato)
- Apri HACS
- Cerca Bubble Card e selezionala
- In basso a destra clicca su Download
- Torna nella dashboard e apri l’editor (icona matita)
- Cerca in Aggiungi alla Dashboard, sezione By Card: Bubble Card
Metodo 2: Installazione manuale
- Scarica i file
bubble-card.jsebubble-pop-up-fix.jsdalla repository GitHub - Copia i file all’interno della cartella
/www/di Home Assistant - Vai su Modifica Dashboard → Gestisci Risorse → Aggiungi Risorsa
- Inserisci il percorso
/local/bubble-card.js?v=1e seleziona Modulo JavaScript - Salva e ricarica la pagina
Come per il metodo 1, vai su modifica dashboard e cerca la card Bubble Card.
Esempi di configurazione YAML
1. Pop-up base per una stanza
Creazione di un pop-up da zero nell'editor visuale (~2 min). Nel video creiamo un semplice esempio — non fare caso a forma e stile, serve solo a mostrare il procedimento passo passo.
Rispetto alle versioni precedenti alla 3.2.0, non serve più avvolgere tutto in un vertical-stack: la sintassi è più semplice e diretta. Ecco il codice YAML completo usato nel video:
type: grid
cards:
- type: heading
heading: New section
- type: custom:bubble-card
card_type: pop-up
hash: '#cucina'
cards:
- type: tile
entity: light.yeelight_color_0x36ed322 # sostituisci con la tua entità
- type: tile
entity: light.0xa4c1380a031cae28 # sostituisci con la tua entità
features:
- type: toggle
button_type: name
sub_button:
main: []
bottom: []
- show_name: true
show_icon: true
type: button
name: PopUp
icon: mdi:party-popper
tap_action:
action: navigate
navigation_path: '#cucina'La parte che conta davvero è il blocco che inizia con type: custom:bubble-card.
Per ricreare l’esempio: vai su modifica dashboard, cerca la card Bubble Card e clicca per aggiungerla. In Card Type scegli Pop-up. Nel campo Hash scrivi il nome che vuoi dare al pop-up, ad esempio “cucina”. Clicca su Crea e a destra inserisci le card che vuoi mostrare nel pop-up — nell’esempio abbiamo aggiunto solo due card di luci.
Come vedi dagli screenshot, le configurazioni e le personalizzazioni possibili sono tantissime: prenditi il tempo di provarle per trovare quella più adatta a te.
2. Pulsante con slider per regolazione luminosità
Questo esempio crea uno slider per regolare la luminosità delle luci. Come Card Type scegli Button, come Button Type scegli Slider, poi seleziona l’entità che vuoi controllare.
type: custom:bubble-card
card_type: button
button_type: slider
sub_button:
main: []
bottom: []
entity: light.yeelight_color_0x36ed322 # sostituisci con la tua entità3. Barra orizzontale per apertura pop-up
Questo esempio crea una barra di pulsanti in basso: sfruttando il pop-up #cucina creato in precedenza, possiamo aprirlo cliccando sul pulsante corrispondente.
Come Card Type scegli Horizontal buttons stack, poi completa i campi con il link #cucina (stesso nome del pop-up creato in precedenza) e i campi opzionali nome, icona e la funzione auto_order in base alla presenza rilevata in una stanza.
type: custom:bubble-card
card_type: horizontal-buttons-stack
button_type: slider
sub_button:
main: []
bottom: []
entity: light.yeelight_cucina_gruppo # sostituisci con la tua entità
1_entity: light.yeelight_cucina_gruppo # sostituisci con la tua entità
1_link: '#cucina'
1_icon: mdi:countertop-outline
1_name: Cucina
2_link: '#living-room'
2_name: Soggiorno
2_icon: mdi:sofaBubble Card offre un grado di personalizzazione molto più ampio di questi tre esempi base. Per altri utilizzi (clima con fan, media player, calendari, sub-button) consulta la documentazione ufficiale su GitHub o gli esempi condivisi dalla community.
Pop-up: dalla configurazione base agli usi avanzati
5 esempi pratici
1. Controllo luci stanza completo — slider per la luce principale, griglia di tile per i punti luce singoli, scene rapide come sub-button:
type: custom:bubble-card
card_type: pop-up
hash: '#luci-soggiorno'
name: Luci Soggiorno
icon: mdi:lightbulb-group
width_desktop: 540px
cards:
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.soggiorno_principale # sostituisci con la tua entità
name: Luce Principale
show_state: true
card_layout: large
- type: grid
columns: 2
square: false
cards:
- type: tile
entity: light.0xa4c138ac1637334f # sostituisci con la tua entità
name: Angolo Lettura
- type: tile
entity: light.0xa4c1380a031cae28 # sostituisci con la tua entità
name: Tavolo
- type: custom:bubble-card
card_type: sub-buttons
auto_order: false
sub_button:
main: []
bottom:
- entity: scene.new_scene # sostituisci con la tua scena
- entity: scene.cucina_luce_di_cortesia # sostituisci con la tua scena
- entity: scene.camera_da_letto_luce_lampada_in_arancione_soffusa_e_luce_principale_spenta # sostituisci con la tua scena2. Termostato con grafici storici — climate card, mini-graph-card per temperatura/umidità, preset rapidi:
type: custom:bubble-card
card_type: pop-up
hash: '#clima-casa'
name: Climatizzazione
icon: mdi:thermostat
width_desktop: 600px
cards:
- type: custom:bubble-card
card_type: climate
entity: climate.aqara_termostato # sostituisci con la tua entità
name: Termostato Principale
show_state: true
card_layout: large
- type: custom:mini-graph-card
entities:
- entity: sensor.temperatura_percepita_soggiorno # sostituisci con la tua entità
name: Temperatura
color: '#FF6B6B'
- entity: sensor.temperatura_percepita_esterno # sostituisci con la tua entità
name: Umidità
color: '#4ECDC4'
y_axis: secondary
hours_to_show: 24
points_per_hour: 4
line_width: 2
animate: true
- type: horizontal-stack
cards:
- type: tile
entity: sensor.0x84ba20fffed47cfc_temperature # sostituisci con la tua entità
name: Esterno
icon: mdi:air-filter
vertical: false
features_position: bottom
- type: tile
entity: sensor.0xa4c138e9e1c7c89d_illuminance # sostituisci con la tua entità
name: Luminosità
icon: mdi:molecule-co2
vertical: false
features_position: bottom
sub_button:
main: []
bottom: []
button_type: nameRichiede mini-graph-card via HACS; i preset devono essere supportati dal tuo termostato.
3. Media center con sorgenti rapide:
Pop-up media con card personalizzata WeSmart — trovi la card su WeSmart Custom Cards per Home Assistant e sul repository GitHub.
type: custom:bubble-card
card_type: pop-up
hash: '#media-soggiorno'
name: Media Soggiorno
icon: mdi:play-circle
width_desktop: 540px
cards:
- type: custom:bubble-card
card_type: media-player
entity: media_player.salotto # sostituisci con la tua entità
name: TV Soggiorno
cover_background: true
card_layout: large
- type: custom:bubble-card
card_type: button
button_type: slider
entity: media_player.salotto # sostituisci con la tua entità
name: Volume
icon: mdi:volume-high
attribute: volume_level
min_value: 0
max_value: 1
step: 0.05
card_layout: large
- type: custom:wesmart-buttons-bar-card
theme: light
buttons:
- name: Luci
icon: mdi:lightbulb
entity: light.soggiorno # sostituisci con la tua entità
- name: TV
icon: mdi:television
entity: switch.tv # sostituisci con la tua entità
button_type: name
sub_button:
main: []
bottom: []I nomi sorgente devono corrispondere esattamente a quelli del tuo media player (verificali in Strumenti per sviluppatori → Stati). La card wesmart-buttons-bar-card richiede l’installazione delle card WeSmart, ma puoi tranquillamente farne a meno e sostituirla con una card nativa a tuo piacimento.
4. Sicurezza con feed telecamere:
Sostituisci le telecamere dell’esempio con quelle che possiedi davvero.
type: custom:bubble-card
card_type: pop-up
hash: '#sicurezza'
name: Sicurezza Casa
icon: mdi:shield-home
width_desktop: 800px
margin_top_desktop: 100px
cards:
- type: alarm-panel
entity: alarm_control_panel.allarme_casa # sostituisci con la tua entità
states:
- arm_home
- arm_away
- arm_night
- type: grid
columns: 2
square: false
cards:
- type: picture-entity
entity: camera.ingresso # sostituisci con la tua entità
name: Ingresso
camera_view: live
show_state: false
- type: picture-entity
entity: camera.giardino # sostituisci con la tua entità
name: Giardino
camera_view: live
show_state: false
fit_mode: cover
- type: picture-entity
entity: camera.garage # sostituisci con la tua entità
name: Garage
camera_view: live
show_state: false
- type: picture-entity
entity: camera.retro # sostituisci con la tua entità
name: Retro Casa
camera_view: live
show_state: false
- type: horizontal-stack
cards:
- type: tile
entity: binary_sensor.0xa4c138dccb4cb231_contact # sostituisci con la tua entità
name: Movimento Ingresso
- type: tile
entity: binary_sensor.movimento_giardino # sostituisci con la tua entità
name: Movimento Giardino
- type: tile
entity: binary_sensor.porta_garage # sostituisci con la tua entità
name: Porta Garage
sub_button:
main: []
bottom: []
button_type: nameChi ha seguito la guida Allarme senza centrale può riusare qui lo stesso alarm_control_panel.
5. Meteo dettagliato:
Esempio con card meteo personalizzate WeSmart, ancora in fase di sviluppo, che puoi comunque sostituire con le card meteo native di Home Assistant.
type: custom:bubble-card
card_type: pop-up
hash: '#meteo'
name: Meteo Dettagliato
icon: mdi:weather-partly-cloudy
width_desktop: 600px
cards:
- type: custom:wesmart-weather-card
entity: weather.home # sostituisci con la tua entità
title: Milano
theme: dark
forecast_type: daily
forecast_days: 5
show_humidity: true
show_wind: true
show_pressure: false
show_visibility: false
- type: custom:wesmart-chart-card
title: Sensori Casa
theme: light
entities:
- sensor.temperatura_percepita_esterno # sostituisci con la tua entità
- entity: sensor.temperatura_percepita_soggiorno # sostituisci con la tua entità
name: Umidità Bagno
icon: mdi:water-percent
- entity: sensor.0x00158d008bbe7678_humidity # sostituisci con la tua entità
name: Umidità
- type: grid
columns: 3
square: false
cards:
- type: tile
entity: sensor.temperatura_percepita_esterno # sostituisci con la tua entità
name: Temperatura
icon: mdi:thermometer
- type: tile
entity: sensor.0x00158d008bbe7678_humidity # sostituisci con la tua entità
name: Umidità
icon: mdi:water-percent
- type: tile
entity: sensor.pressione_1h_fa # sostituisci con la tua entità
name: Pressione
icon: mdi:gauge
- type: tile
entity: sensor.velocita_vento # sostituisci con la tua entità
name: Vento
icon: mdi:weather-windy
- type: custom:mini-graph-card
entities:
- entity: sensor.temperatura_percepita_soggiorno # sostituisci con la tua entità
name: Temperatura
color: '#FF6B6B'
- entity: sensor.0x84ba20fffed47cfc_humidity # sostituisci con la tua entità
name: Umidità
color: '#4ECDC4'
y_axis: secondary
hours_to_show: 24
points_per_hour: 4
line_width: 2
animate: true
button_type: name
sub_button:
main: []
bottom: []I sensori meteo dipendono dall’integrazione usata (Met.no, OpenWeatherMap): adatta i nomi entità alla tua configurazione.
Trigger automatici
I pop-up possono aprirsi da soli quando una condizione si verifica, senza bisogno di un bottone.
Apertura su sensore:
type: custom:bubble-card
card_type: pop-up
hash: '#sicurezza-auto'
name: Alert Sicurezza
icon: mdi:alert
width_desktop: 540px
trigger:
- condition: state
entity: binary_sensor.movimento_ingresso # sostituisci con la tua entità
state: "on"
cards:
- type: picture-entity
entity: camera.ingresso # sostituisci con la tua entità
camera_view: live
- type: tile
entity: binary_sensor.movimento_ingresso # sostituisci con la tua entità
name: Sensore MovimentoCon chiusura automatica (notifica temporanea che si chiude da sola):
type: custom:bubble-card
card_type: pop-up
hash: '#alert-temporaneo'
name: Notifica Temporanea
icon: mdi:bell-alert
trigger:
- condition: state
entity: binary_sensor.porta_garage # sostituisci con la tua entità
state: "on"
auto_close: 30000
cards: []Si chiude da sola dopo 30000 ms (30 secondi).
Trigger multipli (si apre se una qualsiasi delle condizioni è vera):
type: custom:bubble-card
card_type: pop-up
hash: '#alert-multiplo'
name: Alert Casa
icon: mdi:home-alert
trigger:
- condition: state
entity: binary_sensor.movimento_ingresso # sostituisci con la tua entità
state: "on"
- condition: state
entity: binary_sensor.porta_principale # sostituisci con la tua entità
state: "on"
- condition: state
entity: binary_sensor.finestra_soggiorno # sostituisci con la tua entità
state: "on"
cards: []Trigger via input_boolean (utile per aprirlo da un’automazione o uno script):
# In configuration.yaml
input_boolean:
mostra_clima:
name: Mostra Pop-up Clima
icon: mdi:thermometer
# Nel pop-up
type: custom:bubble-card
card_type: pop-up
hash: '#clima-auto'
name: Controllo Clima
icon: mdi:thermostat
trigger:
- condition: state
entity: input_boolean.mostra_clima
state: "on"
cards: []Azioni all’apertura e alla chiusura (es. accendere luci ambiente quando parte un film):
type: custom:bubble-card
card_type: pop-up
hash: '#media-smart'
name: Media Center
icon: mdi:play
trigger:
- condition: state
entity: media_player.tv_soggiorno # sostituisci con la tua entità
state: "playing"
open_action:
action: call-service
service: light.turn_on
service_data:
entity_id: light.tv_backlight # sostituisci con la tua entità
brightness: 50
close_action:
action: call-service
service: light.turn_off
service_data:
entity_id: light.tv_backlight # sostituisci con la tua entità
cards:
- type: custom:bubble-card
card_type: media-player
entity: media_player.tv_soggiorno # sostituisci con la tua entitàPersonalizzazione avanzata
Dimensioni e posizionamento (proprietà invariate dalla 3.2.0):
width_desktop: 700px
margin_top_desktop: 100px- Metà schermo:
margin_top_desktop: 50vh - Altezza fissa 400px:
margin_top_desktop: calc(100vh - 400px) - Full-screen:
margin_top_desktop: 0px - Su mobile con header nascosto:
margin_top_mobile: -56px
Backdrop e trasparenze:
bg_opacity: 85
bg_blur: 15
bg_color: '#1a1a1a'
shadow_opacity: 60Il blur funziona solo se bg_opacity è sotto 100. Per nasconderlo del tutto su tutti i pop-up: hide_backdrop: true sul primo pop-up della dashboard.
CSS personalizzato:
type: custom:bubble-card
card_type: pop-up
hash: '#custom-style'
name: Pop-up Personalizzato
icon: mdi:palette
width_desktop: 600px
bg_opacity: 90
bg_blur: 10
cards: []
styles: |
.bubble-pop-up {
border-radius: 24px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
}
.bubble-header-container {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 20px;
}
.bubble-pop-up-container {
padding: 16px;
}Nota sui selettori: dalla v3.2.0 le classi CSS dei pop-up usano il prefisso bubble- (.bubble-pop-up, .bubble-header-container, .bubble-pop-up-container), non più i nomi generici .pop-up / .pop-up-header delle versioni precedenti — verificabile nel sorgente CSS ufficiale.
Template pronti all’uso
Stanza completa:
type: custom:bubble-card
card_type: pop-up
hash: '#stanza-template'
name: Nome Stanza
icon: mdi:home
width_desktop: 600px
cards:
- type: custom:bubble-card
card_type: button
button_type: slider
entity: light.stanza_principale # sostituisci con la tua entità
name: Luci Principali
card_layout: large
- type: custom:bubble-card
card_type: climate
entity: climate.stanza # sostituisci con la tua entità
name: Temperatura
card_layout: large
- type: custom:bubble-card
card_type: media-player
entity: media_player.stanza # sostituisci con la tua entità
name: Audio
card_layout: large
- type: grid
columns: 2
cards:
- type: tile
entity: switch.stanza_1 # sostituisci con la tua entità
- type: tile
entity: switch.stanza_2 # sostituisci con la tua entitàDashboard informazioni:
type: custom:bubble-card
card_type: pop-up
hash: '#info-casa'
name: Informazioni Casa
icon: mdi:information
width_desktop: 700px
bg_opacity: 2
bg_blur: 15
bg_color: '#1a1a1a'
shadow_opacity: 60
cards:
- type: grid
columns: 3
cards:
- type: tile
entity: sensor.batteria_sensore_porta # sostituisci con la tua entità
- type: tile
entity: sensor.umidita_camera # sostituisci con la tua entità
- type: tile
entity: sensor.consumo_energia_lavatrice # sostituisci con la tua entità
- type: custom:mini-graph-card
entities:
- sensor.temperatura_camera # sostituisci con la tua entità
hours_to_show: 24
line_width: 2
- type: entities
entities:
- entity: binary_sensor.connessione_internet # sostituisci con la tua entità
name: Connessione Internet
- entity: sensor.dispositivi_wifi_connessi # sostituisci con la tua entità
name: Dispositivi WiFi
- entity: sensor.spazio_disco_ha # sostituisci con la tua entità
name: Spazio Disco HAEsempi di dashboard complete
Le sezioni precedenti mostrano singole card e singoli pop-up. Qui trovi invece 5 dashboard complete — pagine intere costruite con la vista sections di Home Assistant e più card Bubble Card combinate — pronte da copiare e adattare alle tue entità.
Come usare questi template
- Copia il codice YAML dell’esempio che ti interessa
- Crea una nuova vista nella tua dashboard
- Passa alla modalità YAML (icona in alto a destra)
- Incolla il codice sostituendo quello esistente
- Personalizza le entità con i tuoi device
- Salva e verifica il risultato
Per trovare i nomi delle tue entità vai su Strumenti per sviluppatori → Stati e cerca nel formato dominio.nome_entità (es. light.lampada_salotto).
Esempio 1: Dashboard Soggiorno Completa
Controllo luci principale con slider, gestione termostato, media player per TV/streaming, scene rapide e informazioni meteo — layout a griglia che si adatta automaticamente da due colonne su desktop a colonna singola su mobile.
type: sections
max_columns: 1
title: Bubble Dashboard
path: bubble-dashboard
sections:
- type: grid
cards:
- type: heading
heading: Minimal Dahboard
heading_style: title
icon: mdi:monitor-dashboard
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
hash: "#soggiorno-card"
button_type: name
sub_button:
main: []
bottom: []
name: Soggiorno
icon: mdi:sofa
bg_color: rgba(255, 255, 255, 0.18)
bg_blur: "40"
backdrop_blur: "0"
shadow_opacity: "0"
bg_opacity: "12"
styles: ""
- type: custom:bubble-card
card_type: button
button_type: switch
sub_button:
main:
- entity: light.soggiorno
sub_button_type: default
content_layout: icon-left
show_attribute: true
attribute: brightness
force_icon: false
show_icon: true
light_background: true
state_background: true
scrolling_effect: true
bottom: []
entity: light.soggiorno
show_state: true
- type: custom:bubble-card
card_type: button
button_type: switch
sub_button:
main:
- entity: light.soggiorno
sub_button_type: default
content_layout: icon-left
show_attribute: true
attribute: brightness
force_icon: false
show_icon: true
light_background: true
state_background: true
scrolling_effect: true
bottom: []
entity: light.cucina_tutte_le_luci
show_state: true
icon: mdi:countertop-outline
- type: tile
grid_options:
columns: 12
rows: 2
entity: light.luci_tutte
name: Luci
vertical: true
tap_action:
action: navigate
navigation_path: "#soggiorno-card"
icon_tap_action:
action: none
features_position: bottom
card_mod:
style: |
ha-card {
box-shadow: none !important;
background: var(--ha-card-background, var(--card-background-color));
border: none !important;
border-radius: 0 !important;
background: #e4e8f0 !important;
color: var(--primary-text-color);
}
.tile {
padding: 8px !important;
}
.tile::before {
box-shadow: none !important;
}
- type: custom:bubble-card
card_type: climate
sub_button:
main:
- name: HVAC modes menu
select_attribute: hvac_modes
state_background: false
show_arrow: false
sub_button_type: select
bottom: []
entity: climate.aqara_termostato_soggiorno # sostituisci con la tua entità
name: Riscaldamento Soggiorno
show_state: false
show_last_changed: false
show_last_updated: false
show_attribute: false
attribute: supported_features
state_color: true
- type: custom:bubble-card
card_type: media-player
sub_button:
main: []
bottom: []
entity: media_player.soggiorno # sostituisci con la tua entità
- type: custom:bubble-card
card_type: button
button_type: switch
sub_button:
main: []
bottom: []
entity: scene.mattina # sostituisci con la tua scena
- type: custom:bubble-card
card_type: button
button_type: switch
sub_button:
main: []
bottom: []
entity: scene.serata # sostituisci con la tua scena
header:
card:
type: markdown
text_only: true
content: |-
# Ciao {{user}}
Esempio di Dashboard con Bubble Card
cards: []Sostituisci light.soggiorno/light.cucina_tutte_le_luci con le tue entità luce, climate.aqara_termostato_soggiorno con il tuo termostato, e crea (o rimuovi) le scene corrispondenti.
Tip: usa scrolling_effect: true per animazioni fluide al tocco — rende l’interfaccia più reattiva e moderna.
Esempio 2: Control Center Camera da Letto
Dashboard minimalista per la camera, focalizzata su comfort e semplicità d’uso notturno: lampada comodino con controllo intensità, termostato con preset notte, sveglia/timer e modalità “Buonanotte” one-tap.
type: sections
max_columns: 1
title: Camera da Letto
sections:
- type: grid
cards:
- type: heading
heading: Camera da Letto
heading_style: title
icon: mdi:bed
- type: custom:bubble-card
card_type: button
button_type: switch
entity: light.lampada_comodino
name: Lampada
show_state: true
icon: mdi:lamp
sub_button:
main:
- entity: light.lampada_comodino
sub_button_type: slider
attribute: brightness
show_background: true
show_icon: true
- entity: light.lampada_comodino
sub_button_type: slider
attribute: color_temp
show_background: true
show_icon: true
bottom: []
- type: custom:bubble-card
card_type: climate
entity: climate.aqara_termostato
name: Temperatura
show_state: true
state_color: true
sub_button:
main:
- name: HVAC modes
select_attribute: hvac_modes
sub_button_type: select
state_background: false
show_arrow: false
bottom: []
- type: custom:bubble-card
card_type: button
button_type: state
entity: timer.sveglia
name: Sveglia
icon: mdi:alarm
show_state: true
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
entity: scene.buonanotte
name: Buonanotte
icon: mdi:weather-night
button_action:
tap_action:
action: call-service
service: scene.turn_on
service_data:
entity_id: scene.buonanotte
sub_button:
main: []
bottom: []
header:
card:
type: markdown
text_only: true
content: |-
# Benvenuto in Camera
Controlla luci, clima e tapparelle
cards: []La scena “Buonanotte” può attivare automaticamente: spegnimento di tutte le luci tranne quella del comodino al 10%, chiusura tapparelle, abbassamento termostato a 18 gradi e attivazione della modalità Non disturbare sullo smartphone.
Esempio 3: Dashboard Meteo e Clima Casa
Vista dedicata al monitoraggio meteo esterno e clima interno, utile per gestire riscaldamento e ventilazione: temperatura esterna e previsioni, temperatura/umidità per stanza, alert finestre aperte con riscaldamento attivo.
type: sections
max_columns: 1
title: Meteo e Sensori
sections:
- type: grid
cards:
- type: custom:bubble-card
card_type: button
button_type: state
entity: weather.casa # sostituisci con la tua entità
name: Meteo Casa
show_state: true
card_layout: large
sub_button:
main:
- entity: sensor.temperatura_soggiorno # sostituisci con la tua entità
name: Soggiorno
show_state: true
show_icon: true
icon: mdi:thermometer
- entity: sensor.temperatura_camera # sostituisci con la tua entità
name: Camera
show_state: true
show_icon: true
icon: mdi:thermometer
- entity: sensor.temperatura_percepita_esterno # sostituisci con la tua entità
name: Esterno
show_state: true
show_icon: true
icon: mdi:thermometer
bottom: []
- type: custom:bubble-card
card_type: button
button_type: state
entity: sensor.umidita_soggiorno # sostituisci con la tua entità
name: Umidità e Finestre
show_state: true
icon: mdi:water-percent
sub_button:
main:
- entity: binary_sensor.alert_finestre
name: Finestre
show_state: true
show_icon: true
icon: mdi:window-open-variant
state_background: true
bottom: []
header:
card:
type: markdown
text_only: true
content: |-
# Meteo e Clima
Temperatura e umidità in casa
cards: []Automazione suggerita: crea un’automazione che avvisa quando una finestra resta aperta più di 10 minuti con il riscaldamento acceso — risparmio garantito.
Esempio 4: Media Center Completo
Dashboard dedicata al controllo dei dispositivi multimediali: TV con cover art e volume, speaker multi-room, playlist rapide, scene “Cinema” e “Musica”.
type: sections
max_columns: 2
title: Media e Intrattenimento
sections:
- type: grid
cards:
- type: heading
heading: Media Center
heading_style: title
icon: mdi:multimedia
grid_options:
columns: 12
- type: custom:bubble-card
card_type: media-player
entity: media_player.salotto # sostituisci con la tua entità
name: TV Soggiorno
show_state: true
show_last_changed: false
grid_options:
columns: 12
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: media-player
entity: media_player.speaker_soggiorno # sostituisci con la tua entità
name: Speaker Soggiorno
show_state: true
grid_options:
columns: 12
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
name: Relax
icon: mdi:music
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: media_player.play_media
service_data:
entity_id: media_player.speaker_soggiorno
media_content_type: playlist
media_content_id: spotify:playlist:relax
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
name: Party
icon: mdi:dance-ballroom
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: media_player.play_media
service_data:
entity_id: media_player.speaker_soggiorno
media_content_type: playlist
media_content_id: spotify:playlist:party
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
entity: scene.cinema
name: Cinema
icon: mdi:movie-open
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: scene.turn_on
service_data:
entity_id: scene.cinema
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
entity: scene.musica
name: Musica
icon: mdi:music-note
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: scene.turn_on
service_data:
entity_id: scene.musica
sub_button:
main: []
bottom: []
header:
card:
type: markdown
text_only: true
content: |-
# Media Center
TV, musica e scene multimediali
cards: []Integrazioni consigliate: Spotify (nativa in Home Assistant), Plex o Kodi per media server locali, Philips Hue Entertainment per luci sincronizzate ai contenuti TV, un Universal Remote per dispositivi IR/RF meno recenti.
Esempio 5: Dashboard Mobile Ottimizzata
Layout verticale pensato per lo smartphone: controlli più usati in alto, scene one-tap grandi e facili da premere, stato casa (luci, porte, allarme), quick action “Uscendo”/“Tornando”.
type: sections
max_columns: 1
title: Controllo Casa
sections:
- type: grid
cards:
- type: custom:bubble-card
card_type: button
button_type: state
entity: light.luci_tutte
name: Stato Casa
show_state: true
icon: mdi:home
card_layout: large
grid_options:
columns: 12
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
entity: script.uscendo
name: Uscendo
icon: mdi:exit-run
card_layout: large
grid_options:
columns: 12
rows: 2
button_action:
tap_action:
action: call-service
service: script.turn_on
service_data:
entity_id: script.uscendo
sub_button:
main: []
bottom: []
styles: |
.bubble-button-card-container {
height: 80px !important;
}
- type: custom:bubble-card
card_type: button
button_type: name
entity: script.tornando
name: Tornando a Casa
icon: mdi:home-import-outline
card_layout: large
grid_options:
columns: 12
rows: 2
button_action:
tap_action:
action: call-service
service: script.turn_on
service_data:
entity_id: script.tornando
sub_button:
main: []
bottom: []
styles: |
.bubble-button-card-container {
height: 80px !important;
}
- type: custom:bubble-card
card_type: button
button_type: switch
entity: light.luci_tutte
name: Luci Principali
show_state: true
card_layout: large
grid_options:
columns: 12
sub_button:
main:
- entity: light.luci_principali
sub_button_type: slider
attribute: brightness
show_background: true
show_icon: true
bottom: []
- type: custom:bubble-card
card_type: climate
entity: climate.aqara_termostato
name: Clima Casa
show_state: true
state_color: true
card_layout: large
grid_options:
columns: 12
sub_button:
main:
- name: HVAC modes
select_attribute: hvac_modes
sub_button_type: select
state_background: false
show_arrow: false
bottom: []
- type: custom:bubble-card
card_type: button
button_type: state
entity: alarm_control_panel.allarme
name: Allarme
show_state: true
state_color: true
grid_options:
columns: 6
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: state
entity: binary_sensor.porta_ingresso # sostituisci con la tua entità
name: Porta
show_state: true
state_color: true
grid_options:
columns: 6
sub_button:
main: []
bottom: []
header:
card:
type: markdown
text_only: true
content: |-
# Controllo Casa
Gestisci luci, clima e sicurezza
cards: []Gli script “Uscendo” e “Tornando” possono automatizzare sequenze complesse con un tap:
- Uscendo: spegni tutte le luci, imposta il termostato in eco mode, chiudi le tapparelle, attiva l’allarme, blocca la smart lock
- Tornando: accendi le luci d’ingresso, termostato a temperatura comfort, disattiva l’allarme, apri le tapparelle (se è giorno)
Dashboard completa con Bubble Card in stile Liquid Glass
Mix & match: combinare gli esempi
Il vero potenziale di questi template emerge quando li combini per creare la tua dashboard personalizzata. Due approcci:
- Multi-vista: una vista per ogni contesto — Home con quick action mobile, una vista per stanza (esempi 1 e 2), una vista Clima (esempio 3), una vista Media (esempio 4)
- Dashboard unica: unisci i componenti migliori in una sola vista — quick action dell’esempio 5 in alto, controlli stanza dell’esempio 1 al centro, media player dell’esempio 4 in basso, widget meteo dell’esempio 3 in sidebar
Best practice di layout: gerarchia visiva (elementi più usati in alto), raggruppamento logico per funzione o stanza, spazi bianchi con vertical-stack per separare le sezioni, test su mobile/tablet/desktop, set di icone coerente (MDI consigliato).
Ecco un esempio di dashboard combinata che applica questi principi su un’unica pagina, con tutte le sezioni precedenti unite in viste separate:
type: sections
max_columns: 1
title: Dashboard Completa
path: home
sections:
# ========================================
# SEZIONE 1: QUICK ACTIONS
# ========================================
- type: grid
title: Quick Actions
cards:
- type: custom:bubble-card
card_type: button
button_type: state
entity: light.luci_tutte
name: Stato Casa
show_state: true
icon: mdi:home
card_layout: large
grid_options:
columns: 12
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
entity: script.uscendo
name: Uscendo
icon: mdi:exit-run
card_layout: large
grid_options:
columns: 6
rows: 2
button_action:
tap_action:
action: call-service
service: script.turn_on
service_data:
entity_id: script.uscendo
sub_button:
main: []
bottom: []
styles: |
.bubble-button-card-container {
height: 80px !important;
}
- type: custom:bubble-card
card_type: button
button_type: name
entity: script.tornando
name: Tornando a Casa
icon: mdi:home-import-outline
card_layout: large
grid_options:
columns: 6
rows: 2
button_action:
tap_action:
action: call-service
service: script.turn_on
service_data:
entity_id: script.tornando
sub_button:
main: []
bottom: []
styles: |
.bubble-button-card-container {
height: 80px !important;
}
# ========================================
# SEZIONE 2: SOGGIORNO
# ========================================
- type: grid
title: Soggiorno
cards:
# Pop-up Soggiorno
- type: custom:bubble-card
card_type: pop-up
hash: "#soggiorno-card"
name: Soggiorno
icon: mdi:sofa
bg_color: rgba(255, 255, 255, 0.18)
bg_blur: "40"
backdrop_blur: "0"
shadow_opacity: "0"
bg_opacity: "12"
show_state: false
grid_options:
columns: 12
sub_button:
main: []
bottom: []
# Luci Soggiorno
- type: custom:bubble-card
card_type: button
button_type: switch
entity: light.soggiorno
name: Luci Soggiorno
show_state: true
card_layout: large
grid_options:
columns: 6
sub_button:
main:
- entity: light.soggiorno
sub_button_type: slider
attribute: brightness
show_background: true
show_icon: true
bottom: []
# Luci Cucina
- type: custom:bubble-card
card_type: button
button_type: switch
entity: light.cucina_tutte_le_luci
name: Luci Cucina
icon: mdi:countertop-outline
show_state: true
card_layout: large
grid_options:
columns: 6
sub_button:
main:
- entity: light.cucina_tutte_le_luci
sub_button_type: slider
attribute: brightness
show_background: true
show_icon: true
bottom: []
# Tile Tutte le Luci
- type: tile
grid_options:
columns: 12
rows: 2
entity: light.luci_tutte
name: Tutte le Luci
vertical: true
tap_action:
action: navigate
navigation_path: "#soggiorno-card"
icon_tap_action:
action: none
features_position: bottom
card_mod:
style: |
ha-card {
box-shadow: none !important;
background: #e4e8f0 !important;
border: none !important;
border-radius: 8px !important;
color: var(--primary-text-color);
}
.tile {
padding: 8px !important;
}
.tile::before {
box-shadow: none !important;
}
# Termostato Soggiorno
- type: custom:bubble-card
card_type: climate
entity: climate.0x3c2ef5fffebad64b
name: Riscaldamento
show_state: true
state_color: true
card_layout: large
grid_options:
columns: 12
sub_button:
main:
- name: HVAC modes
select_attribute: hvac_modes
sub_button_type: select
state_background: false
show_arrow: false
bottom: []
# ========================================
# SEZIONE 3: CAMERA DA LETTO
# ========================================
- type: grid
title: Camera da Letto
cards:
# Lampada comodino
- type: custom:bubble-card
card_type: button
button_type: switch
entity: light.lampada_comodino
name: Lampada
show_state: true
icon: mdi:lamp
card_layout: large
grid_options:
columns: 12
sub_button:
main:
- entity: light.lampada_comodino
sub_button_type: slider
attribute: brightness
show_background: true
show_icon: true
- entity: light.lampada_comodino
sub_button_type: slider
attribute: color_temp
show_background: true
show_icon: true
bottom: []
# Termostato camera
- type: custom:bubble-card
card_type: climate
entity: climate.aqara_termostato
name: Temperatura
show_state: true
state_color: true
card_layout: large
grid_options:
columns: 12
sub_button:
main:
- name: HVAC modes
select_attribute: hvac_modes
sub_button_type: select
state_background: false
show_arrow: false
bottom: []
# Sveglia e Scena Buonanotte
- type: custom:bubble-card
card_type: button
button_type: state
entity: timer.sveglia
name: Sveglia
icon: mdi:alarm
show_state: true
grid_options:
columns: 6
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
entity: scene.buonanotte
name: Buonanotte
icon: mdi:weather-night
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: scene.turn_on
service_data:
entity_id: scene.buonanotte
sub_button:
main: []
bottom: []
# ========================================
# SEZIONE 4: METEO E SENSORI
# ========================================
- type: grid
title: Meteo e Clima
cards:
# Meteo con temperature
- type: custom:bubble-card
card_type: button
button_type: state
entity: weather.casa
name: Meteo Casa
show_state: true
card_layout: large
grid_options:
columns: 12
sub_button:
main:
- entity: sensor.0x84ba20fffed47cfc_temperature
name: Soggiorno
show_state: true
show_icon: true
icon: mdi:thermometer
- entity: sensor.0x00158d008bbe7678_temperature
name: Camera
show_state: true
show_icon: true
icon: mdi:thermometer
- entity: sensor.temperatura_percepita_esterno
name: Esterno
show_state: true
show_icon: true
icon: mdi:thermometer
bottom: []
# Umidità e finestre
- type: custom:bubble-card
card_type: button
button_type: state
entity: sensor.0x84ba20fffed47cfc_humidity
name: Umidità
show_state: true
icon: mdi:water-percent
card_layout: large
grid_options:
columns: 12
sub_button:
main:
- entity: binary_sensor.alert_finestre
name: Finestre
show_state: true
show_icon: true
icon: mdi:window-open-variant
state_background: true
bottom: []
# ========================================
# SEZIONE 5: MEDIA CENTER
# ========================================
- type: grid
title: Media Center
cards:
# TV Soggiorno
- type: custom:bubble-card
card_type: media-player
entity: media_player.salotto
name: TV Soggiorno
show_state: true
card_layout: large
grid_options:
columns: 12
sub_button:
main: []
bottom: []
# Speaker
- type: custom:bubble-card
card_type: media-player
entity: media_player.echo_plus_di_massimo
name: Echo Plus
show_state: true
card_layout: large
grid_options:
columns: 12
sub_button:
main: []
bottom: []
# Playlist e Scene
- type: custom:bubble-card
card_type: button
button_type: name
name: Relax
icon: mdi:music
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: media_player.play_media
service_data:
entity_id: media_player.speaker_soggiorno
media_content_type: playlist
media_content_id: spotify:playlist:relax
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
name: Party
icon: mdi:dance-ballroom
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: media_player.play_media
service_data:
entity_id: media_player.speaker_soggiorno
media_content_type: playlist
media_content_id: spotify:playlist:party
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
entity: scene.cinema
name: Cinema
icon: mdi:movie-open
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: scene.turn_on
service_data:
entity_id: scene.cinema
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: name
entity: scene.musica
name: Musica
icon: mdi:music-note
grid_options:
columns: 6
button_action:
tap_action:
action: call-service
service: scene.turn_on
service_data:
entity_id: scene.musica
sub_button:
main: []
bottom: []
# ========================================
# SEZIONE 6: SICUREZZA
# ========================================
- type: grid
title: Sicurezza
cards:
- type: custom:bubble-card
card_type: button
button_type: state
entity: alarm_control_panel.allarme
name: Allarme
show_state: true
state_color: true
card_layout: large
grid_options:
columns: 6
sub_button:
main: []
bottom: []
- type: custom:bubble-card
card_type: button
button_type: state
entity: binary_sensor.0xa4c138dccb4cb231_contact
name: Porta Ingresso
show_state: true
state_color: true
card_layout: large
grid_options:
columns: 6
sub_button:
main: []
bottom: []
header:
card:
type: markdown
text_only: true
content: |-
# Ciao {{user}}!
Dashboard completa con Bubble Card 3.1
**{{now().strftime('%A %d %B %Y')}}**
cards: []Tip avanzato: usa Browser Mod insieme a Bubble Card per creare popup dinamici che si aprono al click — utile per controllare gruppi di luci o dettagli sensori senza cambiare vista.
Non esiste la dashboard “perfetta” uguale per tutti: il layout migliore è quello che si adatta alle tue abitudini e ai tuoi dispositivi. Usa questi template come punto di partenza, testali per qualche giorno, poi itera e personalizza.
Personalizzazione visiva
Bubble Card supporta nativamente la sovrascrittura tramite variabili CSS all’interno dei temi Lovelace:
--bubble-main-background-color(colore di sfondo)--bubble-accent-color(colore d’accento/stato attivo)--bubble-border-radius(raggio dei bordi)
Sono inoltre disponibili moduli avanzati opzionali (tramite il Patreon del creatore) come Bubble Badges v2, Bubble Weather (sfondi animati dinamici) e Bubble Neon (colorazione dinamica autonoma per ogni card).
Cronologia versioni: da 3.0 a oggi
v3.0 (luglio 2025) — i Moduli
La versione 3.0 ha introdotto i Moduli: stili e template personalizzati gestibili dall’editor senza toccare CSS o JavaScript, con un Module Store per installarli in un clic. Ha aggiunto anche la card Calendario, slider più sicuri (richiedono di tenere premuto prima di modificare un valore) e l’ingrandimento universale delle card.
v3.1.0 (gennaio 2026) — sub-button con slider
Con la 3.1.0 arriva Bubble Card Tools, il componente che gestisce i moduli come file YAML invece che come entità. I sub-button possono diventare slider o dropdown, non solo pulsanti, ed è nata la card “Sub-buttons only” con modalità footer per creare barre di navigazione fisse. L’editor è diventato fino a 100 volte più veloce sulle dashboard con molti pop-up.
Le patch 3.1.3/3.1.4 (marzo 2026) hanno risolto i problemi di compatibilità introdotti da Home Assistant 2026.3: dropdown rotti nell’editor, scrolling indesiderato, pulsante “Copia YAML” non funzionante.
v3.2.0 (maggio 2026) — i pop-up cambiano architettura
Il salto più grande dell’intero progetto. I pop-up non hanno più bisogno di un vertical-stack che li contenga: sono card standalone a tutti gli effetti, con un editor drag-and-drop nativo. Sono arrivate anche nuove modalità — Adaptive (si adatta al contenuto), Dialog centrato, Adaptive dialog — più uno stile “Classic” con header tradizionale, pulsante “indietro” per navigare tra pop-up annidati, e un performance_mode per i dispositivi più lenti.
Nota: le configurazioni pop-up create prima della 3.2.0 continuano a funzionare — l’editor offre una migrazione automatica guidata, non serve riscrivere nulla a mano.
Le patch 3.2.1 e 3.2.2 (fine maggio) hanno risolto i problemi di stabilità emersi durante la migrazione dei pop-up esistenti.
v3.2.3 e successive (giugno 2026) — suggerimenti nel picker
Da qui Bubble Card si aggancia al nuovo picker per entità di Home Assistant 2026.6: scegli un’entità e ricevi già una configurazione Bubble Card pronta, con anteprima live — funzionalità aggiunta da Piitaya, lo sviluppatore di Mushroom Card. In parallelo l’editor è stato localizzato in 64 lingue, italiano incluso.
v3.2.5 (10 luglio 2026) — versione attuale
L’ultima release aggiunge il supporto al tilt per le card cover (apertura/chiusura dell’inclinazione per tapparelle veneziane, con pulsanti dedicati o slider), risolve un bug che disabilitava il pulsante “Salva” nell’editor dei pop-up standalone, e sistema la compatibilità con custom:grid-layout.
Nel mio setup la migrazione e l’aggiornamento, come al solito, non hanno dato problemi. Il passaggio dal dover avvolgere tutto in un vertical-stack all’essere nativo è un bel passo avanti. Il componente resta comunque, a mio avviso, piuttosto complesso: le voci e le configurazioni sono tante e a volte ci si perde tra i menu. Bisogna fare attenzione e acquisire familiarità — forse una maggiore semplificazione sarebbe necessaria. L’alto grado di personalizzazione e una community di valore restano comunque un punto a favore.
Compatibilità e note tecniche
| Aspetto | Dettaglio | Note |
|---|---|---|
| Versione minima HA | 2023.9.0+ | Consigliata 2025.x o superiore |
| Versione Bubble Card | v3.2.5 | Include il rifacimento standalone dei pop-up (dalla v3.2.0) |
| Posizionamento | Card indipendente | Dalla v3.2.0 i pop-up sono card a sé stanti: non serve più metterli per ultimi né incapsularli in un vertical-stack |
| Performance | Ottimizzazione pop-up | Su pop-up con 10+ entità, disabilita le animazioni pesanti |
| Aggiornamenti | Automatici via HACS | Consigliato monitorare le release dopo ogni major update di HA |
Compatibilità
Domande frequenti
Bubble Card è gratuita?
Sì, la versione completa è open source e gratuita. Esistono solo alcuni moduli estetici opzionali riservati ai supporter Patreon.
Funziona senza HACS?
Sì, inserendo manualmente lo script JS nella cartella www/ e registrandolo nelle risorse Lovelace.
Quante card si possono inserire in un pop-up?
Non ci sono limiti numerici rigidi; per mantenere l’interfaccia reattiva è preferibile limitare le entità con aggiornamenti real-time molto frequenti all’interno dello stesso pannello.
Supporta i temi Lovelace?
Sì, la card rispetta le variabili d’ambiente globali e permette un’integrazione completa con temi personalizzati.
Conclusione
La Bubble Card resta la soluzione più versatile per rendere la dashboard Lovelace di Home Assistant interattiva ed elegante. Con la v3.2.5 il progetto ha completato il passaggio a pop-up standalone, più veloci e più semplici da configurare rispetto al passato, e continua a essere aggiornato con regolarità dal suo autore.
Per approfondire, consulta il repository GitHub ufficiale di Bubble Card con tutti gli esempi disponibili, o rivedi i 5 esempi di dashboard complete più sopra in questa guida. La community su Reddit e nel forum GitHub è molto attiva e piena di spunti.
Sperimenta con colori, icone e variabili CSS per adattare la Bubble Card alla tua interfaccia smart home ideale — le potenzialità sono ampie e continuano a crescere a ogni release.









