【免费下载链接】atomic-calendar-revive
An advanced calendar card for Home Assistant Lovelace.
Atomic Calendar Revive 是 Home Assistant Lovelace 中一款进阶日历卡片(advanced calendar card)。当多个人共用一个家庭日历时,事件标题往往混着人名前缀、语言标记等杂质(比如 "Daddy 超市购物"、"STEVE hat Geburtstag"),看起来杂乱无章。卡片提供的 titleReplace 选项允许你按实体配置一组正则替换规则,一键美化显示标题——只改展示,不污染原始事件数据。本文带你快速掌握它的用法、配置细节和避坑要点。
为什么需要 titleReplace?
家庭场景下很常见的情况:一个 calendar.family 实体里混着所有人的日程,标题自带各种标记:
Daddy 超市购物/Mummy 家长会—— 人名前缀STEVE hat Geburtstag—— 德语"过生日"标记Dinner = Sushi—— 前缀标签式命名
allowlist / blocklist 可以过滤事件,但没法改写标题。而 titleReplace 正是为改写而生:按 {from, to} 规则列表,对显示标题逐个执行正则替换,from 是不区分大小写的正则,to 是替换内容(留空即删除匹配部分)。
30 秒上手:基础配置
titleReplace 是按实体配置的选项,写在 entities 列表对应条目下:
type: custom:atomic-calendar-revive
entities:
- entity: calendar.family
allowlist: '^Dinner = '
titleReplace:
- from: '^Dinner = '
to: ''
效果:原始标题 Dinner = Sushi 在卡片上只显示为 Sushi。完整的实体级选项说明(含默认值表格)见官方文档 docs/configuration/entity.rst。
实战技巧:正则规则怎么写更稳
下面几个技巧能让规则更精准,避免误伤:
- 用
^锁定开头、$锁定结尾:^Daddy只删开头的人名前缀,标题中间恰好出现的 "daddy" 不会被动 to留空 = 纯删除:最常见的"去前缀/去后缀"场景,to填''即可- 多条规则按顺序执行:前一条规则的输出会作为后一条的输入,可链式清理
- 大小写不敏感:
STEVE hat Geburtstag与steve hat geburtstag会被同一条规则命中,无需写(?i) - 全局替换:规则按全局正则编译,同一标题中多次出现的匹配都会被替换
多规则示例(摘自官方文档)——去掉人名前缀并清理德语后缀:
entities:
- entity: calendar.daddy
name: Daddy
titleReplace:
- from: '^Daddy '
to: ''
- from: ' hat Geburtstag$'
to: ''
也可以在月视图(Calendar 模式)中检查标题展示效果:
进阶要点:titleReplace 与过滤规则配合
一个容易被忽略的细节:过滤规则(allowlist / blocklist)始终匹配替换前的原始标题(rawTitle),而卡片展示的是替换后的标题。源码中对此有明确注释,见 src/lib/event.class.ts。
这意味着:
- 你可以先按原始标题过滤(
allowlist: '^Dinner = '),再删掉同一个前缀用于展示,两者互不干扰 - 若某事件只有被
titleReplace删掉的标记(替换后标题为空),用blocklist依然能按原始标题把它过滤掉
核心替换逻辑 applyTitleReplace 位于 src/lib/event.class.ts,行为要点:
| 场景 | 行为 |
|---|---|
| 未配置规则 / 空列表 | 标题原样返回 |
from 为非法正则 | 该条规则被静默跳过,其余规则继续生效,不会导致卡片报错 |
| 多条规则 | 按数组顺序依次执行,最后 trim() 收尾 |
配置校验:写错会怎样
配置加载时,titleReplace 会经过严格校验(实现见 src/lib/config-validator.ts):
- 必须是数组,否则报错:
entities[0].titleReplace must be an array of {from, to} entries - 每个条目必须是含
from字段的对象,from为字符串且须为合法正则,to可选但必须是字符串 - 报错信息会精确到条目下标,如
entities[0].titleReplace[0].from must be a string regex pattern,方便定位
相关测试用例可参考 src/tests/event.class.test.ts 与 src/tests/config-validator.test.ts,其中覆盖了顺序执行、大小写不敏感、非法正则跳过等行为。
常见场景速查表
| 目标 | 规则 | 示例效果 |
|---|---|---|
| 去固定前缀 | { from: '^Daddy ', to: '' } | Daddy 超市 → 超市 |
| 去固定后缀 | { from: ' hat Geburtstag$', to: '' } | STEVE hat Geburtstag → STEVE |
| 整体重命名 | { from: 'Daddy Work', to: 'Work' } | Daddy Work → Work |
| 链式替换 | 先 { from: '^Birthday ', to: '' } 再 { from: 'Grandpa', to: 'Opa' } | Birthday Grandpa → Opa |
💡 提示:不建议对同一实体同时使用
allowlist和blocklist(官方文档明确提示),需要精细控制时优先用titleReplace+ 单一白名单组合。
小结
titleReplace 是 Atomic Calendar Revive 中成本极低、收益很高的一项配置:
- 展示与数据分离——只美化显示标题,
allowlist/blocklist仍能匹配原始标题 - 规则容错——非法正则会跳过而非炸掉整张卡片
- 顺序可控——多条规则链式执行,可覆盖前缀、后缀、重命名等全部常见美化需求
按本文的配置方式改造后,你的家庭共享日历就能在 Home Assistant 大屏上呈现干净、统一的标题了。更多实体级选项(图标、时间过滤、字体等)请查阅 docs/configuration/entity.rst。
【免费下载链接】atomic-calendar-revive
An advanced calendar card for Home Assistant Lovelace.
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





