博主头像
John Titor's blog

欢迎来到我的主页

头图

「HA」HomeAssistant 主题美化 - 侧边栏篇

本文为小红书笔记的延伸,方便大家复制小红书里不太好编辑的代码。
小红书主页

效果展示1
效果展示1

效果展示2
效果展示2

 


 

写在前面

本文主题整体的灵感来源来自于github上作者matt8707hass-config主题。
但是hass-config完全依赖于ui-lovelace.yaml文件编辑,其纯代码的编辑方式不是很方便编辑和添加设备,也不利于新手学习。

本文的主题是我参考hass-config的风格,自己制作的一套主题,大部分都使用了HA官方自带的卡片,便于随时调整,学习门槛也比较低。

 


 

开始

在开始前我们可以先设置一下主题和背景。
以下为下载链接,内容包括主题文件和我自己制作的标签页图片及psd源文件,方便自行修改。

下载链接:HomeAssistant主题相关 密码: 5100
下载好后
1.将HomeAssistant主题相关/主题里的tablet.yaml(通用主题)和transparent.yaml(透明卡片)这两个文件,放在HA根目录/config/themes文件夹下。
2.将HomeAssistant主题相关/背景图里的background.png放在HA根目录/config/www文件夹下,如果没有www文件夹可以自己新建。
3.点击HA首页,开发者工具 - YAML 配置重新加载 - 所有YAML配置用来加载主题。
4.加载完成后,在HA首页点击左下角的用户,下拉找到浏览器设置 - 主题设置为深色,主题选择tablet就可以得到和我一样的主题和背景了。

1.添加仪表盘

添加仪表盘
添加仪表盘

(1).在HA主页,点击设置
(2).找到仪表盘
(3).点击右下角的添加仪表盘
(4).选择从新建仪表盘开始
(5).为这个仪表盘起一个合适的名称,选一个图标,网址可以不填。

2.创建视图

创建视图
创建视图

添加好仪表盘后,HA主页的左侧就会出现我们添加的这个仪表盘。

(1).点击这个仪表盘。
(2).在右上角点击编辑仪表盘
(3).点击+号 添加视图,为每一个房间创建一个视图,视图名称为房间名称。
(4).视图的部件最大宽度选择3(即左侧边栏占1列,右侧操作区域占2列),都选好后点击保存。

—— 可选 ——

创建好视图后,我们可以在第一个视图内左侧创建一个垂直堆叠卡片,然后左侧边栏里的所有内容都在这个垂直堆叠卡片内编辑。
这样整个左侧整个侧边栏就算1个卡片,我们在其中一个视图内创建好边栏后只要复制这个垂直堆叠卡片到其他视图,即可保证每个视图的边栏是一致的。
我们整个侧边栏的逻辑其实就是每个视图的左侧侧边栏内容一致,右侧操作区域为每个房间的设备,以此实现整体侧边栏和操作区域独立的效果。

 


 

时间和日期


时间和日期
时间和日期

1.安装Button-Card

HACS里搜索并安装Button-Card

Button-Card
Button-Card

2.编辑configuration.yaml

HA根目录/config下的configuration.yaml文件里添加如下代码(推荐使用VS Code编辑)。

configuration.yaml
configuration.yaml

sensor:
  - platform: time_date
    display_options:
      - 'time'
      - 'date'
  - platform: template
    sensors:
      current_time:
        friendly_name: "当前时间"
        value_template: "{{ as_timestamp(now()) | timestamp_custom('%H:%M') }}"
      current_date:
        friendly_name: "当前日期"
        value_template: >
          {{ ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"][now().weekday()] }}
          {{ now().strftime('%m月%d日') }}
以上代码是用于创建时间&日期传感器,添加在configuration.yaml文件的末尾即可。

3.创建时间&日期卡片

进入创建的垂直堆叠卡片,在里面点击+号新建一个卡片,卡片类型选择最底部的手动

创建卡片
创建卡片

输入如下代码。
type: custom:button-card
styles:
  card:
    - font-weight: bold
    - line-height: 1.2
    - color: white
    - text-align: left
    - padding: 10px
    - border-radius: 10px
    - background-color: transparent !important
    - border: none
    - box-shadow: none
    - justify-content: flex-start
    - align-items: center
    - width: 100%
    - margin-top: 20px
  custom_fields:
    time:
      - font-size: 48px
      - font-weight: 400
      - text-align: left
      - width: 100%
custom_fields:
  time: |
    [[[ return states['sensor.current_time'].state; ]]]
show_icon: false
以上代码是一个时间卡片。
时间卡片创建好后再点击+号新建一个新卡片,同样选择手动,输入如下代码。
type: custom:button-card
styles:
  card:
    - font-weight: normal
    - line-height: 1.2
    - color: gray
    - text-align: left
    - padding: 10px
    - background-color: transparent !important
    - border: none
    - box-shadow: none
    - justify-content: flex-start
    - align-items: center
    - width: 100%
    - margin-top: "-30px"
  custom_fields:
    date:
      - font-size: 20px
      - font-weight: normal
      - text-align: left
      - width: 100%
custom_fields:
  date: |
    [[[ return states['sensor.current_date'].state; ]]]
show_icon: false
以上代码是一个日期卡片。

 


 

天气预报


天气预报
天气预报

1.安装天气预报集成

HACS里搜索并安装天气预报集成。

天气预报集成
天气预报集成

如果在HACS里搜不到,可以去作者的Github主页手动添加
https://github.com/hasscc/tianqi
如果打不开Github可以尝试使用以下网址
https://my.home-assistant.io/redirect/hacs_repository/?owner=hasscc&repository=tianqi&category=integration 打开后输入自己HA的ip和端口号点击save即可。
配置集成:
安装完后在HA的设置 - 设备与服务里点击右下角添加集成。搜索天气预报,服务器域填写weather.com.cn,搜索地点填写你所在的城市地区,然后回车,搜索完成后勾选搜索出来的地区,点击提交即可。

2.配置天气卡片

添加天气卡片并调用天气预报集成

天气卡片
天气卡片

(1).在垂直堆叠卡片里点击+号新建卡片,卡片类型选择天气预报
(2).实体选择先前添加的天气实体。
(3).主题选择transparent(这是一个透明主题,选择该主题可以让卡片的背景透明化)。
(4).要显示的天气选择只显示当前天气(也可根据自己喜好选择)。

 


 

湿度和降雨量(进度条样式)


湿度和降雨量进度条
湿度和降雨量进度条

1.创建湿度卡片

在垂直堆叠卡片里点击+号新建卡片,卡片类型选择手动,并输入以下代码。

type: custom:button-card
name: 湿度
entity: sensor.jiangning_humidity
styles:
  card:
    - padding: 10px
    - border-radius: 10px
    - height: auto
    - border: none
    - box-shadow: none
    - margin-top: "-20px"
    - background-color: transparent !important
  grid:
    - grid-template-areas: "\"n value\" \"bar bar\""
    - grid-template-rows: auto 20px
    - grid-template-columns: 1fr auto
  name:
    - justify-self: start
    - font-size: 14px
    - color: rgba(255, 255, 255, 0.7)
    - font-weight: bold
  custom_fields:
    value:
      - justify-self: end
      - font-size: 14px
      - color: rgba(255, 255, 255, 0.7)
    bar:
      - height: 8px
      - background-color: rgba(255, 255, 255, 0.2)
      - border-radius: 4px
      - overflow: hidden
custom_fields:
  value: |
    [[[ 
      if (entity && entity.state) {
        return `${entity.state}%`;  // 显示湿度数值
      }
      return 'N/A';  // 如果状态无效,显示“不可用”
    ]]]
  bar: |
    [[[ 
      if (entity && entity.state) {
        const value = parseFloat(entity.state);
        return `<div style="width: ${value}%; height: 100%; background-color: rgba(255, 255, 255, 0.7);"></div>`;  // 填充透明度为 70%
      }
      return `<div style="width: 0%; height: 100%; background-color: rgba(255, 255, 255, 0.3);"></div>`;  // 未填充部分透明度为 30%
    ]]]
以上代码是一个湿度卡片

!!注意!!

以上代码中,开头部分第三行的entity: sensor.jiangning_humidity字段需替换成自己所在城市的实体。可以在HA的设置 — 设备与服务 — 天气预报集成的实体里找到湿度集成,点开后右上角选择设置按钮,然后复制实体标识符的内容进行替换。

2.创建降雨量卡片

在垂直堆叠卡片里点击+号新建卡片,卡片类型选择手动,并输入以下代码。

type: custom:button-card
name: 降雨量
entity: sensor.jiangning_precipitation
styles:
  card:
    - padding: 10px
    - border-radius: 10px
    - height: auto
    - border: none
    - box-shadow: none
    - margin-top: "-20px"
    - background-color: transparent !important
  grid:
    - grid-template-areas: "\"n value\" \"bar bar\""
    - grid-template-rows: auto 20px
    - grid-template-columns: 1fr auto
  name:
    - justify-self: start
    - font-size: 14px
    - color: rgba(255, 255, 255, 0.7)
    - font-weight: bold
  custom_fields:
    value:
      - justify-self: end
      - font-size: 14px
      - color: rgba(255, 255, 255, 0.7)
    bar:
      - height: 8px
      - background-color: rgba(255, 255, 255, 0.2)
      - border-radius: 4px
      - overflow: hidden
custom_fields:
  value: |
    [[[ 
      if (entity && entity.state) {
        return `${entity.state} mm`;  // 显示降雨量数值,单位为毫米
      }
      return 'N/A';  // 如果状态无效,显示“不可用”
    ]]]
  bar: |
    [[[ 
      if (entity && entity.state) {
        const value = parseFloat(entity.state);  // 转换降雨量为数值
        const percentage = Math.min((value / 50) * 100, 100);  // 将降雨量映射为百分比,假设最大值为 50mm
        return `<div style="width: ${percentage}%; height: 100%; background-color: rgba(255, 255, 255, 0.7);"></div>`;  // 填充为白色,透明度 70%
      }
      return `<div style="width: 0%; height: 100%; background-color: rgba(255, 255, 255, 0.3);"></div>`;  // 未填充部分透明度为 30%
    ]]]
以上代码是一个降雨量卡片

!!注意!!

以上代码中,开头部分第三行的entity: sensor.jiangning_precipitation字段需替换成自己所在城市的实体。可以在HA的设置 — 设备与服务 — 天气预报集成的实体里找到降水量集成,点开后右上角选择设置按钮,然后复制实体标识符的内容进行替换。

 


 

侧边栏标签页


侧边栏标签页
侧边栏标签页

侧边栏标签页的逻辑是使用了官方自带的图片元素卡片。

1.制作前请先下载文章开头处的主题包。
如果我的主题包内预设的标签页文字和图标不适合你,你也可以利用包内的psd文件自行更改,各种icon图标可以在https://pictogrammers.com/library/mdi/下载。

2.将下载或自己制作的图片放在HA根目录/config/www文件夹下(没有这个文件夹可以自己新建)。
为方便管理,我讲所有的图片都放在了HA根目录/config/www/home下。
后面设置文件夹地址时,/www即/local
例:/www/home/ui/概览选中.png/local/home/ui/概览选中.png

1.添加图片元素

添加图片元素卡片并设置卡片选项。

图片选素卡片选项
图片选素卡片选项

(1).在垂直堆叠卡片里点击+号新建卡片,卡片类型选择图片元素
(2).点击展开卡片选项
(3).设置图像路径本地路径或web网址下面的图像路径填写先前我们上传的图片路径。
例:/www/home/ui/概览选中.png/local/home/ui/概览选中.png
(4).主题选择transparent(即透明主题)。

2.设置元素行为

设置元素行为
设置元素行为

(1).删除默认的状态徽章
(2-3).选择添加新元素图像
(4).在互动选项卡中,选择点击行为前往
(5).导航路径下拉选择对应的视图路径。
(6).选择图像路径为本地路径或 Web 网址,地址和上面一样填写。例:/local/home/ui/概览选中.png
(7).下拉到页面最底部,添加以下代码,用于控制图片元素的大小。
left: 50%
top: 50%
width: 100%
height: 100%

以上便完成了其中一个跳转标签的设定,点击该标签即可跳转到对应页面,接下来就可以仿照以上的设置,设置其他的标签。

整体的标签逻辑为:
为每一张图片元素标签设置一个点击行为,点击图片跳转到对应视图页面。 每一页视图下,该视图的图片设置为选中状态(白底),其他图片为未选中(透明底)。

例:点击“概览”则跳转到 dashboard-xxx/1 即概览页面,
此页面“概览”这张图为选中状态,有一个白底。其余图片都是透明底。
点击“平面图”则跳转到 dashboard-xxx/2 即平面图页面,
此页面“概览”,包括其他标签都为透明底,“平面图”为选中状态,有一个白底

以此类推,将我们制作好的整个垂直堆叠卡片复制,并粘贴到其他视图,粘贴好后修改当前视图的跳转标签即可。

 


 

室内温湿度


室内温湿度卡片
室内温湿度卡片

1.安装card-mod

HACS里搜索并安装card-mod(用于自定义卡片颜色等)。

card-mod
card-mod

2.添加温湿度卡片

新建一个水平堆叠卡片(将温湿度两个卡片放进同一个水平堆叠卡片里,方便复制到其他视图)。

温湿度卡片
温湿度卡片

(1).新建一个水平堆叠卡片。
(2).点击+号分别添加温湿度卡片,卡片类型选择传感器
(3).选择实体,我这里调用的是米家温湿度计的数据。
(4).主题选择transparent(透明主题)。
(5).温湿度两个卡片都设置好后,点击底部的显示代码编辑器
(6).在底部添加以下代码
    card_mod:
      style: |
        ha-card {
          --accent-color: #49b7e8; /* 修改线条颜色为蓝色 */
          border-radius: 0 !important; /* 取消圆角 */
        }
grid_options:
  columns: 12
  rows: 2.9
以上代码用于自定义颜色及卡片高度,也可自行修改
「HA」HomeAssistant 主题美化 - 侧边栏篇
https://blog.ibm5100.cn/index.php/archives/8/
本文作者 Lee
发布时间 2025-03-25
许可协议 CC BY-NC-SA 4.0
已有 38 条评论
  1. 评论头像

    太好看了

    ff April 20th, 2025 at 09:56 am 回复
  2. 评论头像

    博主做的真的很好看,膜拜中,顺便分享下学习过程中遇到的坎,给后面学习的朋友缩短点时间。
    1、博主的代码中设计的UI是透明卡片,白色字体,如果你跟着步骤走啥都看不到,建议先更换HA主题,或在面板视图里添加深色背景
    2、修改configuration.yaml文件,是在文件中顶格的frontend 和 automation之间添加代码,其他位置添加会报错。
    3、添加天气预报卡片时,记得修改entity后面的实例,博主贴的是自己的实例。实例名称可在HA的开发者工具->顶部状态->搜索sensor ,即可找到自己的实例。
    后面的教程没研究出来了(╯°A°)╯︵○○○

    乔木 May 18th, 2025 at 10:42 pm 回复
    1. 评论头像

      感谢提醒,我已修改了上述你提到的内容,方便后面的小伙伴使用。

      Lee 博主 June 16th, 2025 at 10:45 am 回复
  3. 评论头像

    抄了一个骨架,Mattias的灵魂没有抄到,滑动卡片,现在是不是用不了了

    cgl2528 June 29th, 2025 at 06:10 pm 回复
    1. 评论头像

      我把设备都按照房间划分了,通过左侧的标签页切换房间,不需要滑动卡片。

      Lee 博主 June 30th, 2025 at 10:51 am 回复
  4. 评论头像

    ButtonCardJSTemplateError: TypeError: Cannot read properties of undefined (reading 'state') in 'return states['sensor.current_time'].state;'

    Shane June 30th, 2025 at 09:53 am 回复
    1. 评论头像

      检查一下configuration.yaml里添加的代码,如果没错的话也执行一次重新加载所有YAML配置,可能是添加了代码以后没有重新加载YAML配置,导致ha识别不到新添加的时间日期部分。

      Lee 博主 June 30th, 2025 at 10:55 am 回复
      1. 评论头像

        up想问下,如果是装在虚拟机里面的ha,那些文件要怎么复制进去啊,找不到对应的根目录啊,虚拟机好像整体封装的

        世界和平 September 17th, 2025 at 10:47 am 回复
    2. 评论头像

      我也有这个问题

      Amireux July 13th, 2025 at 07:36 pm 回复
      1. 评论头像

        我重启HA就有了,是重启整个HA哦

        Aer0 July 14th, 2025 at 08:09 pm 回复
  5. 评论头像

    集成天气预报时提示要求输入服务器地址和搜索地点,要填写什么呢

    aabb July 20th, 2025 at 07:02 pm 回复
    1. 评论头像

      服务器地址填写weather.com.cn,搜索地点就搜索你自己所在的地区,然后回车,选择搜索到的你的地区就行。这一部分我马上也更新到教程里。

      Lee 博主 July 21st, 2025 at 02:51 pm 回复
  6. 评论头像

    请问tablet主题里面,以下这段代码没生效是为什么呢:
    #view {
    background: url('/local/background.png') !important;
    background-size: cover !important;
    }
    我可以用http://homeassistant.local:8123/local/background.png这个url看到这个图片,但是HA的主题没有被改变

    FantasticZ July 26th, 2025 at 12:36 am 回复
    1. 评论头像

      将HomeAssistant主题相关/背景图里的background.png放在HA根目录/config/www文件夹下,如果没有www文件夹可以自己新建。教程里有写的

      Lee 博主 July 28th, 2025 at 11:25 am 回复
  7. 评论头像

    后续什么时候出,坐等

    李先生 August 19th, 2025 at 03:26 pm 回复
  8. 评论头像

    小红书慕名而来。

    摇摇车 August 25th, 2025 at 04:50 pm 回复
    1. 评论头像

      ヾ(≧∇≦*)ゝ

      Lee 博主 August 25th, 2025 at 05:17 pm 回复
  9. 评论头像

    博主您好,非常喜欢你的每一步作品,想请问一个低级问题,我是绿联nas,虚拟机安装的HA,请问如何能找到HA的根目录,谢谢

    刘先生 August 25th, 2025 at 09:15 pm 回复
  10. 评论头像

    2创建视图这里还不太明白,垂直堆叠卡片在哪里设置的?

    雨中浪漫 August 27th, 2025 at 07:37 am 回复
    1. 评论头像

      新建好视图以后里面是空的,需要自己添加卡片,可以添加垂直堆叠卡片,然后下面教程里的时间、日期、跳转标签等等都放在这个垂直对堆叠卡片里。
      这样就相当于是一整张卡片。之后复制到别的视图比较方便。

      Lee 博主 August 27th, 2025 at 02:21 pm 回复
  11. 评论头像

    你好 我在添加天气预报时提示要求输入搜索地点,输入本地名称不对啊,昌邑市不对,潍坊市不对,山东省不对Σ(っ °Д °;)っ

    初见 September 10th, 2025 at 11:09 pm 回复
    1. 评论头像

      可以用别的天气软件,把对应的sensor. 代码填进去就行

      MR.W September 15th, 2025 at 09:37 pm 回复
  12. 评论头像

    博主您好,
    新手小白在努力学习中,您的帖子给我在茫茫无从下手的头绪中一个尝试的可能,非常感谢!!!
    现在有一个问题请教一下,在需要将同样的部件(即日期,天气降雨,跳转等)复制到每一个房间页面的时候有没有什么快捷的方法。。。如果每个都要重新输入 人要疯。。

    Darren September 16th, 2025 at 11:35 pm 回复
    1. 评论头像

      你想复制的卡片,点开卡牌配置的时候,左下角有个下是代码编辑器,复制到新增加的卡片的代码编辑器里

      111 September 17th, 2025 at 02:10 pm 回复
    2. 评论头像

      其实我在最开始的创建卡片那里说了,可以将所有的卡片全部放在一个垂直堆叠卡片里,这样所有的卡片就相当于一张垂直堆叠卡片,只要读指着一张垂直堆叠卡片到别的视图粘贴就行了。

      Lee 博主 September 18th, 2025 at 01:36 pm 回复
  13. 评论头像

    感谢分享。提一个小建议,目前字体与进度条颜色全部硬编码为白色,导致白天模式下无法看清,只能全部使用黑暗模式。希望这一点可以改进。总而言之,很漂亮的风格!

    HAUSER September 17th, 2025 at 05:28 pm 回复
  14. 评论头像

    想请教一下天气预报设置完后,提示设置失败,将重试:
    然后我看了下HA的日志报错内容如下:

    2025-10-23 08:39:23.435 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry 江宁 for binary_sensor
    Traceback (most recent call last):
    File "/usr/src/homeassistant/homeassistant/config_entries.py", line 751, in __async_setup_with_context
    result = await component.async_setup_entry(hass, self)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/src/homeassistant/homeassistant/components/binary_sensor/__init__.py", line 139, in async_setup_entry
    return await hass.data[DATA_COMPONENT].async_setup_entry(entry)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 219, in async_setup_entry
    raise ValueError(
    ......
    )
    ValueError: Config entry 江宁 (01K8832332NNNR57N6NRPGWFFM) for tianqi.binary_sensor has already been setup!

    但是看了下卡片内容好像是可以用的⌇●﹏●⌇

    @@@@ October 23rd, 2025 at 04:40 pm 回复
  15. 评论头像

    大佬您好!
    1.将HomeAssistant主题相关/主题里的tablet.yaml(通用主题)和transparent.yaml(透明卡片)这两个文件,放在HA根目录/config/themes文件夹下。
    2.将HomeAssistant主题相关/背景图里的background.png放在HA根目录/config/www文件夹下,如果没有www文件夹可以自己新建。
    3.点击HA首页,开发者工具 - YAML 配置重新加载 - 所有YAML配置用来加载主题。
    4.加载完成后,在HA首页点击左下角的用户,下拉找到浏览器设置 - 主题设置为深色,主题选择tablet就可以得到和我一样的主题和背景了。

    这4步都做完后,背景并没有替换成您的背景图,主题有加载进去,也能切换,就是没背景图,怎么回事嘞。|´・ω・)ノ

    mai2 October 29th, 2025 at 12:00 am 回复
    1. 评论头像

      我也看不到图片

      老师你好 October 30th, 2025 at 02:40 pm 回复
    2. 评论头像

      翻了论坛,学会了。
      新版homeassistant引用背景位置变了,除了在configuration.yaml里面加include 之外,还要在界面的原始编辑器(即仪表盘点击编辑,再点右上角三个点即可看到)里直接引用背景图片。
      # Example background section in view yaml
      background:
      image: /local/background.png
      opacity: 50 # any percentage between 0 and 100
      size: auto # auto, cover, contain
      alignment: center # top left, top center, top right, center left, center, center right, bottom left, bottom center, bottom right
      repeat: no-repeat # repeat, no-repeat
      attachment: scroll # scroll, fixed

      上述代码引用自瀚思彼岸xzx836大佬!

      mai2 November 2nd, 2025 at 12:33 am 回复
      1. 评论头像

        views:
        - title: 概览
        type: sections
        max_columns: 3
        background:
        image: /local/background.png
        opacity: 50
        size: auto
        alignment: center
        repeat: no-repeat
        attachment: scroll
        这里添加吗 ,添加完也重启了 也没有效果,是写的不对吗。background.png图片在www目录下

        yunyi November 17th, 2025 at 06:13 pm 回复
        1. 评论头像

          就直接放第一行,希望原代码,都往下让位就好。

          Houlio November 27th, 2025 at 03:16 pm 回复
  16. 评论头像

    博主您好,我是按照您的步骤来创建的,但是我的标签页不知道为什么不会跳转。。。

    吖Ben November 4th, 2025 at 02:25 am 回复
  17. 评论头像

    文章图片显示不了

    小胡 November 9th, 2025 at 04:14 pm 回复
    1. 评论头像

      现在好了

      Lee 博主 November 10th, 2025 at 06:03 pm 回复
  18. 评论头像

    求更新

    wil November 10th, 2025 at 01:09 pm 回复
  19. 评论头像

    求更新房间的那个

    lgz November 25th, 2025 at 06:27 pm 回复
  20. 评论头像

    求更新

    咸鱼 December 6th, 2025 at 02:06 pm 回复
发表新评论