Bubble-Card: Cover als Slider selbst aufbauen

Hallo zusammen,

wer interesse hat mal die Rollos in Home Assistant mit einer Bubble-Card und NICHT als Cover-Card sondern als Slider darzustellen habe ich hier eine Hilfe für euch.
Die Idee stammt nicht von mir. Ich bin da sogar hier im Forum mal aufmerksam drauf geworden. Das wurde aber eher nebenbei in einem Thema erwähnt und ich finde es auch nicht wieder. Möchte mich hier also auch nicht unnötigerweise mit fremden Federn schmücken.

Verwendet wird also ein Bubble-Card für Cover aber vom Typ Slider. Die Knöpfe für Schließen, Stoppen und Öffnen sind Sub-Buttons.

So sieht das bei mir aus:

Hier mal ein Kartenbeispiel:

Zusammenfassung
type: custom:bubble-card
card_type: button
button_type: slider
entity: cover.shelly_buro_2
force_icon: false
show_state: true
show_last_changed: false
show_attribute: true
attribute: current_position
min_value: 0
sub_button:
  - entity: cover.shelly_buro_2
    icon: mdi:arrow-down-bold
    state_background: true
    show_background: false
    tap_action:
      action: perform-action
      perform_action: cover.close_cover
      target:
        entity_id: cover.shelly_buro_2
      data: {}
  - entity: cover.shelly_buro_2
    icon: mdi:stop
    tap_action:
      action: perform-action
      perform_action: cover.stop_cover
      target:
        entity_id: cover.shelly_buro_2
      data: {}
    show_background: false
  - entity: cover.shelly_buro_2
    icon: mdi:arrow-up-bold
    tap_action:
      action: perform-action
      perform_action: cover.open_cover
      target:
        entity_id: cover.shelly_buro_2
      data: {}
    show_background: false
card_layout: normal
styles: ""
show_icon: true
show_name: true
button_action:
  tap_action:
    action: none
  hold_action:
    action: none
slider_live_update: false
modules:
  - jalousien_slider

Das wäre der Code fürs Styling:

Zusammenfassung
/* ändert das Haupt-Icon (Links)je nach Zustand */
${icon.setAttribute(
    "icon",
        hass.states[entity].attributes.current_position < 1 ? 'mdi:window-shutter' :
        hass.states[entity].attributes.current_position > 99 ? 'mdi:window-shutter-open' :
        'mdi:window-shutter-alert'
)}

/* Hintergrundfarbe der Bubble, wenn das Cover geschlossen oder teil-geschlossen ist.
Außerdem die Angabe des Hintergrundbild, falls gewünscht */
.bubble-container {
  background: #282828 url(/local/bg_img/cover_bg4.png) repeat-x !important;
}

/* Füll-Farbe des Slider */
.bubble-range-fill {
  background-color: rgba(23, 52, 95, 1) !important;
}

/* Haupt-Icon-Container (Links). Hintergrund abhängig von der Position des Cover */
.bubble-icon-container {
  background-color: ${
      hass.states[entity].attributes.current_position < 1 ? '#525252' :
      '#22497f'
  } !important;
}

/* Haupt-Icon (Links). Farbe je nach Position des Cover */
.bubble-icon {
  color: ${
      hass.states[entity].attributes.current_position > 99 ? '#e1e1e1' :
      hass.states[entity].attributes.current_position < 1 ? '#909090' :
      'rgba(9, 23, 42, 1)'
  } !important;
  opacity: 1;
}

/* Grundkonfiguration für alle Sub-Buttons. Farben nach Zustand opening und closing */
.bubble-sub-button {
  color: ${
      state === 'opening' ? 'rgba(225, 225, 225, 1)' :
      state === 'closing' ? 'rgba(225, 225, 225, 1)' :
      'rgba(225, 225, 225, 0.2)'
  };
  background-color: ${
      state === 'opening' ? 'rgba(18, 40, 72, 1)' :
      state === 'closing' ? 'rgba(18, 40, 72, 1)' :
      'rgba(18, 40, 72, 0.6)'
  };
  width: 45px;
  border: 1px solid rgba(225, 225, 225, 0.1);

}

/* Sub-Button für Schließen. Button bekommt angepasste Alpha-Transparenz wenn "Status closing nicht möglich", weil Position === 0 also vollständig geschlossen
Hier kann auch alternativ auf state "closed" geprüft werden */
.bubble-sub-button-1 {
  background-color: ${
      hass.states[entity].attributes.current_position === 0 ? 'rgba(18, 40, 72, 0.6)' :
      'rgba(18, 40, 72, 1)'
  } !important;
  color: ${
      hass.states[entity].attributes.current_position === 0 ? 'rgba(225, 225, 225, 0.2)' :
      'rgba(225, 225, 225, 1)'
  } !important;
  border-top-right-radius: 3px;
  border-bottom-right-radius: 3px;
  margin: 0 -3px 0 0;
  padding: 0 0 0 1px;
}

/* Sub-Button für Stoppen bzw. Pause. Button bekommt angepasste Alpha-Transparenz wenn "nicht" Status "closing" oder "opening" vorliegt (Pause oder Stoppen ist dann nicht möglich. Konfiguration siehe Sub-Button 1 */
.bubble-sub-button-2 {
  border-radius: 3px;
  width: 40px;
}

/* Sub-Button für Öffnen. Button bekommt angepasste Alpha-Transparenz wenn "Status "opening"" nicht möglich", weil Position === 100 also vollständig geöffnet
Hier kann auch alternativ auf state "open" geprüft werden */
.bubble-sub-button-3 {
  background-color: ${
      hass.states[entity].attributes.current_position === 100 ? 'rgba(18, 40, 72, 0.6)' :
      'rgba(18, 40, 72, 1)'
  } !important;
  color: ${
      hass.states[entity].attributes.current_position === 100 ? 'rgba(225, 225, 225, 0.2)' :
      'rgba(225, 225, 225, 1)'
  } !important;
  border-top-left-radius: 3px;
  border-bottom-left-radius: 3px;
  margin: 0 0 0 -3px;
  padding: 0 1px 0 0;
}

Ich würde jedem empfehlen das nicht im Feld “Styling options / Custom styles & JS templates” einzufügen. Das funktioniert zwar, in aller Regel hat man aber doch mehrere Jalousien in seinem Haushalt. Wenn man das in jeder Bubble-Card separat einfügt hat man bei Änderungen irgend wann ein Maintain-Problem und es bläht den Code eigentlich nur unnötig auf.
Die Bubble-Card hat dafür die Module. Besser ist es also ein eigenes Modul dafür zu erstellen und dieses jeweils der Cover-Karten zuzuweisen.

Zum besseren Verständnis habe ich den Code entsprechend Kommentiert.

Das Background für den Bubble-Container liegt bei mir im Ordner ../www/img_bg/ und wird mittels /local/bg_img/ angesprochen.

Das ist die Datei (die ist sehr Transparent (nur4%)→ schlecht sichtbar bei hellem Forum Hintergrund. eventuell auf dark-Mode umschalten, oder selbst eine Grafik erstellen):

cover_bg4

Was ich noch nicht hinbekommen habe und eigentlich umsetzen wollte, ist dass die Sub-Buttons für Schließen, Stoppen und Öffnen nur klickbar werden, wenn eine entsprechende Action überhaupt möglich ist. Wer da Ideen hat… You are welcome :slight_smile:

Für Anregungen bin ich natürlich immer offen :wink:

1 „Gefällt mir“

Hat das denn irgendeinen besonderen Vorteil zur Bubble Cover-Card oder warum das ganze? Interessiert mich.

Nö, hat keinen besondern Vorteil. Die Funktion an sich wird nicht verändert.

Es geht rein um die Darstellung als Slider. Das ist mit der Cover Karte nicht möglich. Da wird nur angezeigt ob auf oder zu. Bei Bedarf noch der State oder Atribut. Das wars.

Ich nutze es mir dem Modul “Cover gradient background indicator” so

Kann man machen :slight_smile:

Nicht jeder möchte sich aber vielleicht Module dazu installieren, zumal das nicht nötig und ja auch längst nicht alles kostenfrei ist. Zudem wird man auch nicht dümmer, wenn mans selbst macht. … nur mM…

1 „Gefällt mir“

das Modul “Cover gradient” führt bei mir dazu, dass die karte kurz mit gradient gezeigt wird verschwindet und dann gradient wieder deaktiviert ist

Hi zusammen, hat jemand von euch, die BubbleCard so konfiguriert, das sie für Raffstore geeignet ist? Das heißt, das ich sowohl Position als auch Lamellen in einem Control umstellen kann? Im Standard Button Type Cover finde ich das nicht, eventuell übersehe ich aber was.

Kann man dafür sorgen, dass der sub-Button eine Referenz ist auf das Hauptelement, damit man den für eine andere Entität nicht anpassen muss? Ich hätte die Entität, für die das Element gilt, gerne genau einmal dastehen, nicht öfter.

Ansonsten klappt bei mir der Hintergrund nicht zuverlässig, ich verstehe noch nicht, warum er nicht immer geladen wird. Aber ich muss den Style eh noch gobal machen, bin erst am Testen.

Bin mir nicht ganz sicher worauf du dich beziehst… Wenn der Sub Button dieselbe Entität anspricht wie die Haupt-Entität der Karte, muss in dem Sub-Button die Hauptentität nicht erneut refferenziert werden…

In diesem Fall kannst du die Entität des Sub Buttons also weg lassen…

aber du verweist ja nochmal in der Tap Action on Button im Sub-Button auf das Ziel… ohne Ziel anzugeben geht es nicht. An zwei Stellen muss das Cover also hinterlegt sein.

Kann es sein, dass die Bubble Card von irgendwas abhängt, das ich ggf nicht will? Ich habe das Problem, dass das Element, in dem die Bubble Card verwendet wird, in manchen Browsern/auf manchen Geräten nicht angezeigt wird. Die Bubble Card Tools haben aber auch kein Cloud Icon, das sollte also alles also auch ohne Internet und mit Verboten für andere Domains durch uMatrix ohne Einschränkungen funktionieren, richtig?

Wenn ich in uMatrix den Filter auf raw.githubusercontent.com disable und Shift-Reload aufrufe, wird es angezeigt. Solche Zugriffe möchte ich nicht in meinen Dashboards. Manche Geräte, mit denen ich zugreife, dürfen überhaupt nicht ins Internet - da hat sowas keine Chance. Im Readme steht aber auch nichts von der Abhängigkeit.

Wo kommt das her und wie wird man es los?

Jawohl, in der bubble-card.js gibt es ein Stück source

src="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/.github/bubble-card.gif"

Hole ich das per wget, so dass es neben der bubble-card.js liegt und ersetze es durch

src="bubble-card.gif"

so funktioniert alles. Reichlich unnötig scheint mir, wegen diesem Logo, das nicht lokal bereitgestellt wird, geht das ganze Dashboard ohne Zugriff auf raw.githubusercontent.com nicht, es wird nichts angezeigt - und nicht nur das Rollladen-Element!

Ich mache mal ein Issue auf.

Edit: So einfach scheint es nicht zu sein. Ich verstehe nicht, unter welchen Umständen das Problem auftritt. Nach einem Reboot des Geräts ohne Internet sollte es auftreten. Tut es nicht. Aber vermutlich müsste ich den ganzen Home Assistant neu laden, damit das geänderte Modul verwendet wird? Und wieso rotiert es, das erste mal zeigt es nichts an, dann wird es englisch, beim dritten Laden ist es deutsch - und danach wieder kaputt?!? Hm, Shift-Reload scheint zu würfeln, welche der möglichen Reaktionen angezeigt wird. Ich bin mir nicht mal mehr sicher, ob ich die Ursache tatsächlich gefunden habe oder es doch etwas anderes ist. Sonst müsste es mit meiner gepatchten Version zuverlässig laufen - auch das tut es nicht.

Edit 2: OK, ich habe es falsch verwendet. Der Fehler ist woanders, bei meiner Anwendung der Bubble-Card. Und mit jedem Neu-Laden wird es anders angezeigt, deshalb sah es so aus, als ob meine Lösung hilft.

Edit 3: Ich wollte die Entitäten nicht mehrfach eingeben müssen, und da hat sich ein Fehler bei der Initialisierung eingeschlichen. Es ist nicht unbedingt schön, aber funktional. Wenn es jemand verwenden will, es ist hier zu finden.