🌻 Lovelace UI • Minimalist

Overview

My Home Assistant

At the top of each page we find the chips which allow me to quickly visualize the important information of the page. Then title to separate the different sections and cards to represent and interact with devices, sensors, etc … I used the custom component button-card for all these cards. I drew a lot of inspiration from 7ahang’s work that I found on Behance.

Table of Contents

Installation

  1. Add button_card_templates in ui-lovelace.yaml file.
    button_card_templates: !include lovelace/button_card_templates/button_card_templates.yaml
  2. Add resources in your configuration.yaml file. You will need at least button-card
    lovelace:
      mode: yaml
      resources: !include lovelace/resources/resources.yaml
  3. Add themes in your configuration.yaml file
    frontend: 
      themes: !include configuration/themes.yaml

Design system

Colors

I tried to set up a consistency between the colors used to represent the entities.

Color Type

orange

💡 Light

Electricity

red

🔥 Heating

Blue

☑️ On/off devices

🏠 Home

green

🌲 Exterior

Chips

Chips

Code template
Template
chips:
  tap_action:
    action: more-info
  show_icon: false
  show_name: false
  show_state: false
  show_label: true
  size: 80%
  styles:
    img_cell:
      - width: 24px
    card:
      - border-radius: 18px
      - box-shadow: var(--box-shadow)
      - height: 36px
      - width: auto
      - padding-left: 6px
      - padding-right: 6px
    grid:
      - grid-template-areas: '"l"'
    label:
      - justify-self: center
      - padding: 0px 6px
      - font-weight: bold
      - font-size: 14px

Temperature

Chips - Temperature

Code
Example Template
- template: chips_temperature
  type: 'custom:button-card'
chips_temperature:
  template: chips
  tap_action:
      action: navigate
      navigation_path: /lovelace/temperature
  label: |
    [[[
      var inter = states['sensor.fibaro_multisensor_salon_temperature'].state;
      var exter = states['sensor.fibaro_multisensor_balcon_temperature'].state;
      var icon = '☀️';
      if (states['sensor.dark_sky_icon'].state == 'clear-day'){
        var icon = '☀️';
      } else if(states['sensor.dark_sky_icon'].state == 'clear-night'){
        var icon = '🌙';
      } else if(states['sensor.dark_sky_icon'].state == 'rain'){
        var icon = '🌧️';
      } else if(states['sensor.dark_sky_icon'].state == 'snow'){
        var icon = '❄️';
      } else if(states['sensor.dark_sky_icon'].state == 'sleet'){
        var icon = '❄️';
      } else if(states['sensor.dark_sky_icon'].state == 'wind'){
        var icon = '🌫️';
      } else if(states['sensor.dark_sky_icon'].state == 'fog'){
        var icon = '🌫️';
      } else if(states['sensor.dark_sky_icon'].state == 'cloudy'){
        var icon = '☁️';
      } else if(states['sensor.dark_sky_icon'].state == 'partly-cloudy-day'){
        var icon = '⛅️';
      } else if(states['sensor.dark_sky_icon'].state == 'partly-cloudy-night'){
        var icon = '⛅';
      }
      return icon + ' ' + exter + '° / ' +  inter + '°' ;
    ]]]

Electric consumption

Chips - Consommation

Code
Example Template
- template: chips_power_consumption
  type: 'custom:button-card'
chips_power_consumption:
  template: chips
  tap_action:
    action: navigate
    navigation_path: /lovelace/consommation
  label: |
    [[[
      var price = states['sensor.atome_price_conso_today'].state;
      return '⚡ ' +  price + '€' ;
    ]]]

Presence counter

Chips - Present

Code
Example Template
- template: chips_localisation_present
  type: 'custom:button-card'
  chips_localisation_present:
    tap_action:
      action: navigate
      navigation_path: /lovelace/localisation
    label: |
      [[[
        var personnes_presentes = states['sensor.people_count_present'].state;
        return '🏠 ' +  personnes_presentes;
      ]]]
    template: chips

Return button

Chips - return

Code
Example Template
- template: chips_return
  type: 'custom:button-card
chips_return:
  template: chips
  show_icon: true
  icon: 'mdi:arrow-left'
  size: 80%
  styles:
    grid:
      - grid-template-areas: '"i"'
  tap_action:
    action: navigate
    navigation_path: /lovelace/home

Scene

Scene

Code
Example Template Template Blue
- entity: sensor.present
  template: scene_blue
  variables:
    state: "Present"
  type: 'custom:button-card'
scene:
  size: 20px
  show_label: true
  label: |
    [[[ return (entity.attributes.value )]]]
  styles:
    card:
      - border-radius: var(--border-radius)
      - box-shadow: var(--box-shadow)
      - padding: 10px 0px 8px 0px 
    grid:
      - grid-template-areas: '"i" "n" "l"'
    name:
      - margin-top: 10px
      - justify-self: center
      - font-weight: bold
      - font-size: 14px
    label:
      - justify-self: center
      - align-self: start
      - font-weight: bolder
      - font-size: 12px
      - filter: opacity(40%)
    icon:
      - color: 'rgba(var(--color-theme),0.2)'
    img_cell:
      - background-color: 'rgba(var(--color-theme),0.05)'
      - border-radius: 50%
      - place-self: center
      - width: 42px
      - height: 42px
scene_blue:
  variables:
    state: "default"
  template: 
    - scene
  state:
    - operator: template
      value: >
        [[[
          return states['input_select.localisation_thomas'].state == variables.state
        ]]]
      styles:
        icon:
          - color: 'rgba(var(--color-blue),1)'
        img_cell:
          - background-color: 'rgba(var(--color-blue), 0.2)'
        card:
          - background-color: 'rgba(var(--color-background-blue), var(--opacity-bg))'
        name:
          - color: 'rgba(var(--color-blue-text),1)'
        label:
          - color: 'rgba(var(--color-blue-text),1)'

Title

Title

Code
Example Template
- template: title
  name: Title
  label: 'Subtitle'
  type: 'custom:button-card'
  
title:
  tap_action:
    action: none
  show_icon: false
  show_label: true
  show_name: true
  styles:
    card:
      - background-color: rgba(0,0,0,0)
      - box-shadow: none
      - height: auto
      - width: auto
      - margin-top: 12px
      - margin-left: 24px
      - margin-bottom: 0px
    grid:
      - grid-template-areas: '"n" "l"'
      - grid-template-columns: 1fr
      - grid-template-rows: min-content min-content
    name:
      - justify-self: start
      - font-weight: bold
      - font-size: '1.5rem'
    label:
      - justify-self: start
      - font-weight: bold
      - font-size: '1rem'
      - opacity: '0.4'

Cards

Cards

Anatomy

Anatomy

  1. Dot : Visible when the device is unavailable. Also used on the entity person
  2. Icon : Icon that represents the device
  3. Primary line : Main information
  4. Secondary line : Secondary information
  5. Optionnal part : Possibility to display buttons to launch actions related to the device. Or display a graph to view the history of a sensor

Light

Light

Code
Example Template
- entity: light.example
  name: Lumière
  template: 
    - icon_info_bg
    - light
  type: 'custom:button-card'
light:
  tap_action:
    action: toggle
  hold_action:
    action: more-info
  label: >-
    [[[ if (entity.state !='unavailable'){
          if (entity.state =='off'){
            var bri = Math.round(entity.attributes.brightness / 2.55);
            return 'Off';  
          }else{
            var bri = Math.round(entity.attributes.brightness / 2.55);
            return (bri ? bri : '0') + '%'; 
          }
        }else{
          return "Indisponible";
        }
    ]]]
  template: 
    - yellow

Light slider

Light-slider

Code
Example Template
  - entity: light.exemple
    template: 
      - light_slider
    variables:
      entity: "light.exemple"
      name: "Light"
    type: 'custom:button-card'
  light_slider:
    variables:
      name: "Default name"
    show_icon: false
    show_name: false
    show_label: false
    styles:
      card:
        - border-radius: var(--border-radius)
        - box-shadow: var(--box-shadow)
        - padding: 12px
      grid:
        - grid-template-areas: '"item1" "item2"'
        - grid-template-columns: 1fr
        - grid-template-rows: min-content  min-content
        - row-gap: 12px
    state:
      - operator: template
        value: >
          [[[
            return entity.state == 'on'
          ]]]
        styles:
          card:
            - background-color: 'rgba(var(--color-background-yellow),var(--opacity-bg))'
    custom_fields:
      item1:
        card:
          entity: '[[[ return variables.entity ]]]'
          name: '[[[ return variables.name ]]]'
          template:
            - icon_info
            - light
          type: 'custom:button-card'
      item2:
        card:
          type: 'custom:slider-card'
          entity: '[[[ return variables.entity ]]]'
          radius: 14px
          height: 42px
          mainSliderColor: rgba(var(--color-yellow),1)
          secondarySliderColor: rgba(var(--color-yellow),0.2)
          mainSliderColorOff: rgba(var(--color-theme),0.05)
          secondarySliderColorOff: rgba(var(--color-theme),0.05)
          thumbHorizontalPadding: '0px'
          thumbVerticalPadding: '0px'   
          thumbWidth: 0px
          card_mod:
          style: |
            ha-card {
              border-radius: 14px;
              box-shadow: none;
            }

Outlet

Prise

Code
Example Template
- entity: switch.exemple
  name: Prise
  template: 
    - icon_info_bg
    - outlet
  label: |-
      [[[ if (entity.state =='on')
          var etat = "On • " + states["sensor.exemple"].state + "W"; 
          else
        var etat = "Off";
      return etat ; ]]]
  type: 'custom:button-card'
  outlet:
    tap_action:
      action: more-info
    label: |-
      [[[ if (entity.state =='on')
         var etat = "On";
         else
        var etat = "Off";
      return etat ; ]]]
    template: 
      - yellow

Binary sensor

Mouvements Fenêtres

Code
Example Template
- entity: binary_sensor.example
  name: Mouvement
  icon: 'mdi:run'
  template: 
    - icon_info_bg
    - binary_sensor
  type: 'custom:button-card'
binary_sensor:
  show_last_changed: true
  template: 
    - blue

Cover

Volets

Code
Example Template
- template: cover_buttons
  variables:
    entity: "cover.example"
    name: "Volets"
  type: 'custom:button-card'
cover_buttons:
  variables:
    entity: "cover.fibaro_cover_balcon"
    name: "Default name"
  styles:
    card:
      - border-radius: var(--border-radius)
      - box-shadow: var(--box-shadow)
      - padding: 12px
    grid:
      - grid-template-areas: '"item1" "item2"'
      - grid-template-columns: 1fr
      - grid-template-rows: min-content  min-content
      - row-gap: 12px
  custom_fields:
    item1:
      card:
        entity: '[[[ return variables.entity ]]]'
        name: '[[[ return variables.name ]]]'
        tap_action:
          action: more-info
        template:
          - icon_info
          - cover
        type: 'custom:button-card'
    item2:
      card:
        template: list_items
        type: 'custom:button-card'
        custom_fields:
          item1:
            card:
              icon: 'mdi:arrow-down'
              tap_action:
                action: call-service
                service: cover.close_cover
                service_data:
                  entity_id: '[[[ return variables.entity ]]]'
              type: 'custom:button-card'
              template: widget_icon
          item2:
            card:
              icon: 'mdi:pause'
              tap_action:
                action: call-service
                service: cover.stop_cover
                service_data:
                  entity_id: '[[[ return variables.entity ]]]'
              type: 'custom:button-card'
              template: widget_icon
          item3:
            card:
              icon: 'mdi:arrow-up'
              tap_action:
                action: call-service
                service: cover.open_cover
                service_data:
                  entity_id: '[[[ return variables.entity ]]]'
              type: 'custom:button-card'
              template: widget_icon

Thermostat

Thermostat

Code
Example Template
- entity: climate.example
  template: 
    - icon_info_bg
    - thermostat
  type: 'custom:button-card'
thermostat:
  hold_action:
    action: more-info
    entity: input_boolean.radiateur_arret_force
  label: >-
    [[[ 
        if (entity.state =='off'){
          return 'Off' ;
        }else{
          if (states['light.qubino'].state == 'on'){
            var etat = "Chauffe";
          }else{
            var etat = "Inactif";
          }
          return (entity.attributes.temperature ) + '°' + ' • ' + etat ;
        }
    ]]]
  state:
    - operator: template
      value: >
        [[[
          return states['light.qubino'].state == 'on'
        ]]]
      styles:
        icon:
          - color: 'rgba(var(--color-red),1)'
        img_cell:
          - background-color: 'rgba(var(--color-red),0.2)'
        card:
          - background-color: 'rgba(var(--color-background-red),var(--opacity-bg))'
        name:
          - color: 'rgba(var(--color-red-text),1)'
        label:
          - color: 'rgba(var(--color-red-text),1)'

Water heater

Chauffe-eau

Code
Example Template
- entity: switch.example
  name: Chauffe eau
  template: 
    - icon_info_bg
    - water_heater
  type: 'custom:button-card'
water_heater:
  icon: 'mdi:waves'
  tap_action:
    action: more-info
  hold_action:
    action: more-info
  label: >-
    [[[ 
        if (entity.state == 'off'){
          return 'Arrêt forcé';
        }else{
          if (states["sensor.shelly_prise_salon_conso"].state > 0){
            var etat = "Chauffe • " + states["sensor.shelly_prise_salon_conso"].state + "W";
          }else{
            var etat = "Inactif";
          }
          return etat ;
        }
    ]]]
  state:
    - operator: template
      value: >
        [[[
          return (states['sensor.shelly_prise_salon_conso'].state > 0)
        ]]]
      styles:
        icon:
          - color: 'rgba(var(--color-red),1)'
        img_cell:
          - background-color: 'rgba(var(--color-red),0.2)'
        card:
          - background-color: 'rgba(var(--color-background-red),var(--opacity-bg))'
        name:
          - color: 'rgba(var(--color-red-text),1)'
        label:
          - color: 'rgba(var(--color-red-text),1)'

Media player

Enceintes

Code
Example Template
- entity: media_player.example
  name: Enceintes
  template: 
    - icon_info_bg
    - media
  type: 'custom:button-card'
  media:
    label: >-
      [[[ if (entity.state =='off'){
            return "Off";
          }else{
            return entity.state;
          }
      ]]]
    icon: |
      [[[
          var application = entity.attributes.app_name;
          var icon = 'mdi:speaker';
          if (application == 'Oto music'){
            var icon = 'mdi:music-circle';
          } else if(application == 'Spotify'){
            var icon = 'mdi:spotify';
          } else if(application == 'Google Podcasts'){
            var icon = 'mdi:google-podcast';
          } else if(application == 'Plex'){
            var icon = 'mdi:plex';
          }
          return icon ;
      ]]]
    styles:
      label:
        - opacity: '0.6'
      icon:
        - color: 'rgba(var(--color-theme),0.2)'
      img_cell:
        - background-color: 'rgba(var(--color-theme),0.05)'
      card:
        - background-blend-mode: multiply
        - background: >
            [[[
              var image = entity.attributes.entity_picture_local;
              var bg = entity.attributes.entity_picture_local;
              if (image == null){
                var bg = '';
              } else{
                var bg = 'center / cover url(' + image + ') rgba(0, 0, 0, 0.15)';
              }
              return bg;
            ]]]
    state:
      - operator: template
        value: >
          [[[
            return entity.state !='off'
          ]]]
        name: >
            [[[
              return entity.attributes.media_title;
            ]]]
        label: >
            [[[
              return entity.attributes.media_album_name;
            ]]]
        styles:
          label: 
            - color: white
            - filter: opacity(100%)
          img_cell:
            - background-color: 'rgba(var(--color-theme),0.0)'
          icon:
            - color: white
          name:
            - color: white

Playstation

Playstation

Code
Example Template
- entity: media_player.example
  template: 
    - icon_info_bg
    - ps4
  type: 'custom:button-card'
ps4:
  label: >-
    [[[ if (entity.state =='unknown'){
          return "Off";
        }else if (entity.state =='standby'){
          return "En veille";
        }else{
          return "On";
        }
    ]]]
  styles:
    icon:
      - color: 'rgba(var(--color-theme),0.2)'
    img_cell:
      - background-color: 'rgba(var(--color-theme),0.05)'
  state:
    - value: 'idle'
      styles:
        icon:
          - color: 'rgba(var(--color-blue),1)'
        img_cell:
          - background-color: 'rgba(var(--color-blue), 0.2)'
    - value: 'standby'
      styles:
        icon:
          - color: 'rgba(var(--color-theme),0.2)'
        img_cell:
          - background-color: 'rgba(var(--color-theme),0.05)'
    - operator: template
      value: >
        [[[
          return entity.state !='unknown' 
        ]]]
      name: >
          [[[
            return entity.attributes.media_title;
          ]]]
      label: >
          [[[
            return entity.attributes.friendly_name;
          ]]]
      styles:
        label: 
          - color: white
          - filter: opacity(100%)
        img_cell:
          - background-color: 'none'
        icon:
          - color: white
        name:
          - color: white
        card:
          - background-blend-mode: multiply
          - background: >
              [[[
                var image = entity.attributes.entity_picture;
                return 'center / cover url(' + image + ') rgba(0, 0, 0, 0.15)';
              ]]]

Person

Personne

Information

Dot :

  • At home : Blue
  • Away : Green

Dot icon :

  • At home : Home
  • Away : Walking man
  • Sleeping : Moon

Comment : The sleep state takes over the At home or Away state to display the moon icon

Code
Example Template
- entity: input_select.localisation_thomas
  variables:
    personne: "thomas"
  template: 
    - icon_info_bg
    - personne-thomas
  name: Thomas
  type: 'custom:button-card'
person:
  tap_action:
    action: more-info
  show_label: true
  label: >
      [[[return entity.state]]]
  styles:
    icon:
      - color: 'rgba(var(--color-theme),0.9)'
    custom_fields:
      notification:
        - border-radius: 50%
        - position: absolute
        - left: 38px
        - top: 8px
        - height: 16px
        - width: 16px
        - border: 2px solid var(--card-background-color)
        - font-size: 12px
        - line-height: 14px
  
####################################################
 
person-thomas:
  variables:
    person: "thomas"
  template: person
  hold_action:
    action: more-info
    entity: input_boolean.thomas_nuit
  styles:
    custom_fields:
      notification:
        - background-color: >
            [[[
              if (states['input_select.localisation_thomas'].state == 'Present'){
                return "rgba(var(--color-blue),1)";
              }else{
                return "rgba(var(--color-green),1)";
              }
            ]]]
  custom_fields:
    notification: >
      [[[
        if (states['input_boolean.thomas_nuit'].state == 'on'){
          return `<ha-icon icon="mdi:power-sleep" style="width: 10px; height: 10px; color: var(--primary-background-color);"></ha-icon>`
        }else{
          if (states['input_select.localisation_thomas'].state == 'Present'){
            return `<ha-icon icon="mdi:home-variant" style="width: 10px; height: 10px; color: var(--primary-background-color);"></ha-icon>`
          }else{
            return `<ha-icon icon="mdi:pine-tree" style="width: 10px; height: 10px; color: var(--primary-background-color);"></ha-icon>`
          }
        }
      ]]]

Generic

Generic

Code
Example Template
- entity: sensor.example
  template: 
    - icon_info_bg
    - generic
  type: 'custom:button-card'
generic:
  label: >
      [[[return entity.state + " " + entity.attributes.unit_of_measurement]]]
  styles:
    icon:
      - color: 'rgba(var(--color-theme),0.9)'
    grid:
      - grid-template-areas: '"i l" "i n"'
      - grid-template-columns: min-content auto
      - grid-template-rows: min-content min-content
    label:
      - align-self: end
      - justify-self: start
      - font-weight: bold
      - font-size: 14px
      - margin-left: 12px
      - filter: opacity(100%)
    name:
      - justify-self: start
      - align-self: start
      - font-weight: bolder
      - font-size: 12px
      - filter: opacity(40%)
      - margin-left: 12px

Generic + graph

Entity - graph

Code
Example Template
- type: 'custom:button-card'
  template: graph
  variables:
    entity: "sensor.exemple"
    color: "var(--google-blue)"
    name: "Température"
graph:
  variables:
    entity: "sensor.xiaomi_multisensor_salon_humidite"
    color: "var(--info-color)"
    name: "Default name"
  styles:
    card:
      - border-radius: var(--border-radius)
      - box-shadow: var(--box-shadow)
      - padding: 0px
    grid:
      - grid-template-areas: '"item1" "item2"'
      - grid-template-columns: 1fr
      - grid-template-rows: min-content  min-content
  custom_fields:
    item1:
      card:
        entity: '[[[ return variables.entity ]]]'
        name: '[[[ return variables.name ]]]'
        template: 
          - icon_info
          - generic
        styles:
          card:
            - padding: 12px
        type: 'custom:button-card'
    item2:
      card:
        type: 'custom:mini-graph-card'
        entities:
          - entity: '[[[ return variables.entity ]]]'
        line_color: '[[[ return variables.color ]]]'
        show:
          name: false
          icon: false
          legend: false
          state: false
        style: |
          ha-card {
            box-shadow: none;
            border-radius: var(--border-radius);
          }
Comments
  • Wrong key label for theme modes

    Wrong key label for theme modes

    The key for switching between light and dark theme should be mode. I think modes is wrong.

    In the documentation Frontend documentation in the samples the keyword 'modes' is used. But in the text and in the attribute list mode is listed as attribute key word.

    After changing to mode the automatic change takes place. But the themes aren't rendered correct. In light theme the border is missing. And in both themes (light and dark) the colors are missing. If I change back to modes only light theme is working. But than borders and colors are back.

    I am running Home Assistant 2021.8.6 on docker.

    opened by dylan09 4
  • [Info Request] - Config of Presence Sensors

    [Info Request] - Config of Presence Sensors

    Hi,

    I love the work you shared here. Can you please share your configuration of the below sensors?

    sensor.present
    sensor.absent
    sensor.travail
    

    Sharing the config of one of them would be enough.

    opened by ee02217 2
  • Configuration error

    Configuration error

    strange configuration error!

    Invalid config for [frontend]: expected a dictionary for dictionary value @ data['frontend']['themes']['accent-color']. Got 'var(--google-yellow)' expected a dictionary for dictionary value @ data['frontend']['themes']['app-header-background-color']. Got 'var(--primary-background-color)' expected a dictionary for dictionary value @ data['frontend']['themes']['app-header-text-color']. Got 'var(--primary-text-color)' expected a dictionary for dictionary value @ data['frontend']['themes']['border-radius']. Got '20px' expected a dictionary for dictionary value @ data['frontend']['themes']['box-shadow']. Got '0px 2px 4px 0px rgba(0,0,0,0.16)' expected a dictionary for dictionary value @ data['frontend']['themes']['card-background-color']. Got '#FAFAFA' expected a dictionary for dictionary value @ data['frontend']['themes']['card-mod-root']. Got 'app-toolbar {\n display: none;\n}\n' expected a dictionary for dictionary value @ data['frontend']['themes']['card-mod-theme']. Got 'mobile' expected a dictionary for dictionary value @ data['frontend']['themes']['color-background-blue']. Got '250, 250, 250' expected a dictionary for dictionary value @ data['frontend']['themes']['color-background-green']. Got '250, 250, 250' expected a dictionary for dictionary value @ data['frontend']['themes']['color-background-red']. Got '250, 250, 250' expected a dictionary for dictionary value @ data['frontend']['themes']['color-background-yellow']. Got '250, 250, 250' expected a dictionary for dictionary value @ data['frontend']['themes']['color-blue']. Got '61, 90, 254' expected a dictionary for dictionary value @ data['frontend']['themes']['color-blue-text']. Got 'var(--primary-text-color)' expected a dictionary for dictionary value @ data['frontend']['themes']['color-green']. Got '1, 200, 82' expected a dictionary for dictionary value @ data['frontend']['themes']['color-green-text']. Got 'var(--primary-text-color)' expected a dictionary for dictionary value @ data['frontend']['themes']['color-grey']. Got '187, 187, 187' expected a dictionary for dictionary value @ data['frontend']['themes']['color-pink']. Got '233, 30, 99' expected a dictionary for dictionary value @ data['frontend']['themes']['color-purple']. Got '102, 31, 255' expected a dictionary for dictionary value @ data['frontend']['themes']['color-red']. Got '245, 68, 54' expected a dictionary for dictionary value @ data['frontend']['themes']['color-red-text']. Got 'var(--primary-text-color)' expected a dictionary for dictionary value @ data['frontend']['themes']['color-theme']. Got '51,51,51' expected a dictionary for dictionary value @ data['frontend']['themes']['color-yellow']. Got '255, 145, 1' expected a dictionary for dictionary value @ data['frontend']['themes']['color-yellow-text']. Got 'var(--primary-text-color)' expected a dictionary for dictionary value @ data['frontend']['themes']['divider-color']. Got 'rgba(var(--color-theme),.12)' expected a dictionary for dictionary value @ data['frontend']['themes']['error-color']. Got 'var(--google-red)' expected a dictionary for dictionary value @ data['frontend']['themes']['google-blue']. Got '#3D5AFE' expected a dictionary for dictionary value @ data['frontend']['themes']['google-green']. Got '#01C852' expected a dictionary for dictionary value @ data['frontend']['themes']['google-grey']. Got '#BBBBBB' expected a dictionary for dictionary value @ data['frontend']['themes']['google-red']. Got '#F54436' expected a dictionary for dictionary value @ data['frontend']['themes']['google-violet']. Got '#661FFF' expected a dictionary for dictionary value @ data['frontend']['themes']['google-yellow']. Got '#FF9101' expected a dictionary for dictionary value @ data['frontend']['themes']['ha-card-box-shadow']. Got 'var(--box-shadow)' expected a dictionary for dictionary value @ data['frontend']['themes']['info-color']. Got 'var(--google-blue)' expected a dictionary for dictionary value @ data['frontend']['themes']['mdc-theme-on-secondary']. Got 'var(--card-background-color)' expected a dictionary for dictionary value @ data['frontend']['themes']['mini-media-player-accent-color']. Got 'var(--google-red)' expected a dictionary for dictionary value @ data['frontend']['themes']['opacity-bg']. Got '1' expected a dictionary for dictionary value @ data['frontend']['themes']['paper-tabs-selection-bar-color']. Got 'var(--primary-text-color)' expected a dictionary for dictionary value @ data['frontend']['themes']['primary-background-color']. Got '#EFEFEF' expected a dictionary for dictionary value @ data['frontend']['themes']['primary-color']. Got '#434343' expected a dictionary for dictionary value @ data['frontend']['themes']['primary-text-color']. Got '#212121' expected a dictionary for dictionary value @ data['frontend']['themes']['secondary-background-color']. Got '#EFEFEF' expected a dictionary for dictionary value @ data['frontend']['themes']['sidebar-selected-icon-color']. Got 'var(--google-red)' expected a dictionary for dictionary value @ data['frontend']['themes']['sidebar-selected-text-color']. Got 'var(--google-red)' expected a dictionary for dictionary value @ data['frontend']['themes']['sidebar-text-color']. Got '#80868b' expected a dictionary for dictionary value @ data['frontend']['themes']['slider-bar-color']. Got 'rgba(var(--color-blue),0.38)' expected a dictionary for dictionary value @ data['frontend']['themes']['slider-color']. Got 'rgb(var(--color-blue))' expected a dictionary for dictionary value @ data['frontend']['themes']['state-icon-color']. Got 'rgb(var(--color-theme))' expected a dictionary for dictionary value @ data['frontend']['themes']['success-color']. Got 'var(--google-green)' expected a dictionary for dictionary value @ data['frontend']['themes']['switch-checked-color']. Got 'var(--google-blue)' expected a dictionary for dictionary value @ data['frontend']['themes']['warning-color']. Got 'var(--google-yellow)' value should be a string for dictionary value @ data['frontend']['themes']['modes']['dark']. Got OrderedDict([('primary-text-color', '#DDDDDD'), ('primary-color', '#89B3F8'), ('google-red', '#F18B82'), ('google-green', '#80C994'), ('google-yellow', '#FCD663'), ('google-blue', '#89B3F8'), ('google-violet', '#BB86FC'), ('google-grey', '#BBBBBB'), ('color-red', '241, 139, 130'), ('color-green', '128, 201, 148'), ('color-yellow', '252, 214, 99'), ('color-blue', '137, 179, 248'), ('color-theme', '221,221,221'), ('color-purple', '102, 31, 255'), ('color-grey', '187, 187, 187'), ('color-pink', ... value should be a string for dictionary value @ data['frontend']['themes']['modes']['light']. Got OrderedDict([('primary-text-color', '#212121'), ('primary-color', '#434343'), ('google-red', '#F54436'), ('google-green', '#01C852'), ('google-yellow', '#FF9101'), ('google-blue', '#3D5AFE'), ('google-violet', '#661FFF'), ('google-grey', '#BBBBBB'), ('color-red', '245, 68, 54'), ('color-green', '1, 200, 82'), ('color-yellow', '255, 145, 1'), ('color-blue', '61, 90, 254'), ('color-purple', '102, 31, 255'), ('color-grey', '187, 187, 187'), ('color-pink', '233, 30, 99'), ('color-theme', '51,51,5.... (See /config/configuration.yaml, line 24). Component error: themes - Integration 'themes' not found. Component error: mode - Integration 'mode' not found. Component error: resources - Integration 'resources' not found.

    opened by elax46 2
  • Usage of auto entities

    Usage of auto entities

    Not really an issue but an improvement...

    On "consommation" dashboard. You can use the custom:auto-entities card to populate the grid for batteries. This avoids manual update of the dash if any new battery device shows up ! here is what i've done :

        - cards:
            - template: bordures
              type: 'custom:button-card'
            - type: 'custom:auto-entities'
              sort:
                method: state
                numeric: true
              card:
                type: grid
                columns: 2
                square: false
              card_param: cards
              filter:
                exclude: null
                include:
                  - entity_id: sensor.*battery
                    options:
                      type: 'custom:button-card'
                      template:
                        - icon_info_bg
                        - generique
                  - entity_id: sensor.*netatmo*battery*
                    options:
                      type: 'custom:button-card'
                      template:
                        - icon_info_bg
                        - generique
            - template: bordures
              type: 'custom:button-card'
          type: horizontal-stack
    

    And adding the sort will show you the lowest battery level first !

    opened by SNoof85 1
  • Hi I am working on custome SmartHome platform (SimpleHome) think :)

    Hi I am working on custome SmartHome platform (SimpleHome) think :)

    Hi, I notice your project, and i was wodering, if you could give me your opinion on my Interface or maybe do some colaboration with me on my platform :) I really admre your UI/UX skills :)

    New Laravelsystem benefits:

    • Plugin system (Shelly, Google Assistant) plugins are done :)
    • Dashboard mod for wall tablets etc.
    • Core Is in transition to PWA Standard
    • Notifications implemented (FCM in future)
    • And many more :)

    Dev Hardship

    Most of the time I am the only developer from time to time someone joins write part and leave without trace :( I think we could benefit both if we could join forces :)

    Project Main URL: Simple-Home If you wish to at least chat with someone with a similar idea you can join our discord server :) Simple-Home Discord

    Few Images:

    Login MainBoard Detail DeviceControl integrationsManagments

    Thank you for your precious time :) & Thank you for any answer :)

    P.S. - Sorry for my bad English :( I am not a native speaker.

    opened by GamerClassN7 1
  • Chips don't work well with conditional card

    Chips don't work well with conditional card

    When using a conditional card in a horizontal-stack with other cards the stack gets weird as the styles are applied to the hui-conditional-card instead of the button-card.

    image image image image

    opened by OmgImAlexis 0
  • How'd you arrange the chips at the top so they don't overflow?

    How'd you arrange the chips at the top so they don't overflow?

    I feel we need a card to wrap around this that just sets up flex box's wrap feature. Or maybe a card that let's you scroll horizontally without scroll bars. 🤔

    image

    opened by OmgImAlexis 1
  • HowTo guide

    HowTo guide

    Hi,

    I tried to implement this to my lovelace but there are alot of old yaml files which arent needed anymore in new HA. So i couldnt nog get this to work. Are you gonna update this or do you have a how to guide with new HA to implement this? Thanks in advance!

    opened by umutcelebi 6
Owner
null
Firefox theme that is minimalist, customizable and theme-compatible.

Oneliner Deluxe Installation 1. Download .zip Click the green 'Code' button above and then 'Download ZIP' 2. Copy files Extract contents of @programFi

null 11 Jul 21, 2022
Minimalistic media card for Home Assistant Lovelace UI

Mini Media Player A minimalistic yet customizable media player card for Home Assistant Lovelace UI. Inspired by Custom UI: Mini media player and custo

Karl Kihlström 1.2k Jan 5, 2023
A card for Home Assistant Lovelace for exploring the history of your entities interactively and in real time.

History explorer card This is a custom history card for Home Assistant. This card offers a highly interactive and configurable way to view the history

null 165 Dec 31, 2022
Show multiple entity states, attributes and icons in a single card in Home Assistant's Lovelace UI

room-card Show multiple entity states, attributes and icons in a single card in Home Assistant's Lovelace UI NOTE: This card is base on the multiple-e

Marco Kreeft 79 Dec 16, 2022
Additional themes for Lovelace Mushroom Cards 🍄

?? Mushroom Themes Mushroom themes allow you to customize your Mushroom dashboard using Home Assistant themes. ⚠️ It's only a theme! You need to insta

Paul Bottein 127 Dec 24, 2022
A super-simple thermostat for Home Assistant's Lovelace UI.

Minimalist Thermostat by @ShepleySound A super-simple thermostat for Home Assistant's Lovelace. The goal is to create a thermostat interface that clea

Robert Shepley 1 Jan 22, 2022
A minimalistic card for Home Assistant Lovelace UI which shows how many days it has been between any input_datetime and today.

Datetime Card A minimalistic card for Home Assistant Lovelace UI which shows how many days it has been between any input_datetime and today. Useful to

Antonino Piazza 12 Aug 12, 2022
A front-end only implementation of linked template cards for Lovelace

Linked Lovelace by @daredoes A Javascript/Websocket way to do templating in the Lovelace UI Support Hey you! Help me out for a couple of ?? or a ☕ ! F

Daniel Evans 13 Dec 12, 2022
A minimalist CSS framework.

A minimalist CSS framework. Why it's awesome Milligram provides a minimal setup of styles for a fast and clean starting point. Just it! Only 2kb gzipp

Milligram 9.9k Jan 4, 2023
Fast, unopinionated, minimalist web framework for node.

Fast, unopinionated, minimalist web framework for node. const express = require('express') const app = express() app.get('/', function (req, res) {

null 59.5k Jan 5, 2023
Firefox theme that is minimalist, customizable and theme-compatible.

Oneliner Deluxe Installation 1. Download .zip Click the green 'Code' button above and then 'Download ZIP' 2. Copy files Extract contents of @programFi

null 11 Jul 21, 2022
A minimalist web app for the daily morning and night athkar.

Morning & Night Athkar | أذكار الصباح والمساء Local Development Recommended: Use nvm to manage npm dependencies and versions. This app uses node versi

Mohammed Amarnah 4 Dec 2, 2022
Sharerbox - Free, minimalist and lightweight JavaScript-based social-media sharer for websites

Sharerbox Free minimalist and lightweight JavaScript-based social-media sharer for websites. Version: 0.8.1 Description SharerBox is a free, minimalis

Juan Astudillo 3 Aug 22, 2022
minimalist virtual dom library

petit-dom A minimalist virtual DOM library. Supports HTML & SVG elements. Supports Render functions and Fragments. Custom components allows to build y

Yassine Elouafi 485 Dec 12, 2022
This is a basic website Todo Application that displays a list that looks and behaves like the part of minimalist project.

To-Do-list-microverse Description This is a basic website; a Todo Application that displays a list that looks and behaves like the part of minimalist

Dennis Akagha 7 Feb 3, 2022
Minimalist Web XR Location Based Markers for A-Frame 1.3.0

LBAR.js “I understand how the engines work now. It came to me in a dream. The engines don't move the ship at all. The ship stays where it is and the e

Media Engineering Institute 9 Dec 3, 2022
A Fictional & Minimalist Bank

?? Bankist ?? A Fictional & Minimalist Bank ?? Live Demo ?? You Can See The Bankist Live On: Here ?? Log-in credentials ?? Account UserName Password A

Amirhosein Hesami 7 Jun 30, 2022
A minimalist ToDo list app to add, update and remove tasks easily

To-do list is a tool that helps to organize your day. It simply lists the things that you need to do and allows you to mark them as complete. We will build a simple website that allows for doing that, and we will do it using ES6 and Webpack!

Oybek Kayumov 14 Jun 23, 2022
"To Do List" is a minimalist project that displays a list of task and allows you to add and remove task from that list. Built with JavaScript

To Do List Structure Solo programming project for module 2 week 2 of the Microverse Program. Live Demo Live Demo Link "To Do List" is a minimalist pro

Yersel Hurtado 7 Mar 5, 2022
This is a To-Do List. It shows a minimalist design with the next features: Add new tasks, edit tasks, markup completed tasks, and erase all completed tasks. Built with JavaScript.

Project Name To Do List Built With HTML CSS JavaScript Live Demo To do List Live Demo Link Getting Started This is a To Do List. It shows a minimalist

Santiago Cárdenas 6 Jun 9, 2022