文档

触发器 CLI 命令

用 CAP 紧急警报接管屏幕,并显示 Home Assistant、传感器或任何 HTTP 客户端推送的叠加层:创建、测试和轮换触发器。

这里的每个命令都按 CLI 参考所述运行:全局标志、JSON 输出、退出代码、修订和重试。

CAP 警报触发器

触发器允许紧急通知系统(如 Everbridge、Rave、Alertus 或 IPAWS 中继)使用 CAP 1.2 警报接管屏幕。每个触发器有自己的 URL、用户名和密码,输入发送系统作为其 CAP HTTP POST 目标,使用 HTTP 基本认证。组织跨其所有项目最多 20 个触发器。

触发器分两种。此处介绍的 CAP 触发器接收应急系统的告警。叠加层触发器会显示任意发送方(例如 Home Assistant、传感器中枢或告警工具)推送的内容,形式是正在播放内容之上的横条或接管;triggers create --kind overlay 创建一个,triggers update、triggers clear 和 triggers rotate-secret 对两种都适用,而 triggers deliveries 读取叠加层触发器的日志。

触发器针对标签(每警报到达时解析)或最多 500 个屏幕 ID。每个警报成为触发器自有播放列表的接管:全屏卡片,颜色对应严重级别,显示事件、标题、描述和指令。演习添加 EXERCISE 横幅。接管持续至警报 <expires>,否则为触发器 --for 默认(1 分钟至 7 天,默认 1 小时),且不超过 7 天。更新重绘卡片,取消或全部清除将屏幕恢复至之前播放内容。新警报替换当前显示。测试、系统、草稿消息,确认和错误消息及过期警报被忽略,重复发送者和标识为重复。屏幕需默认播放列表才能被接管;其他屏幕跳过。

密码srtg_…仅由triggers create和triggers rotate-secret显示,附带警告trigger_password_shown_once。CLI 不在其配置、操作日志和恢复状态中保存密码。URL 和用户名不保密。

问题代码退出含义
trigger_limit_reached5组织已有 20 个触发器。未创建任何内容。请先删除一个。
resource_conflict5triggers test 或 triggers delete 在警报激活时。next 是 triggers clear。
not_found4项目中无此 ID 的触发器。
revision_conflict6--expect-rev 版本已过时。运行 triggers show,然后重试。

triggers create#

创建触发器并获取其 URL、用户名和密码。

triggers create --name NAME [--kind cap|overlay] (--tag TAG | --screen-id ID...) [--for DURATION] [--pull FILE]
    [--show bar|takeover] [--edge bottom|top] [--style FILE] [--map FILE] [--signing]
    [--verify VENDOR [--verify-secret-file FILE] [--verify-header NAME] [--verify-encoding hex|base64]
        [--verify-timestamp-header NAME] [--verify-tolerance SECONDS]]
    [--handshake VENDOR]
参数类型必填默认备注
--name NAMEstring是无触发器名称,1 到 80 个字符,不含控制字符。
--kind KINDcap 或 overlay否capcap 接收应急系统的 CAP 1.2 告警。overlay 接收任意发送方的几句话,需要 --show。
--tag TAGstring--tag 或 --screen-id 之一无每个警报到达时带此标签的活动屏幕。
--screen-id IDstring--tag 或 --screen-id 之一无一个 scr_ 屏幕 ID。重复输入,或用逗号分隔列出;最多 500 个。
--for DURATIONduration否1h(叠加层为 10m)没有 <expires> 的告警或没有 duration 的叠加层推送保持屏幕的时长,例如 30m、2h 或 1d;CAP 触发器为 1 分钟到 7 天,叠加层触发器为 10 秒到 7 天。
--pull FILE路径否无CAP 触发器:一个 JSON 对象,来自文件或表示标准输入的 -,同时让平台为该触发器读取 CAP 警报源。其成员是 cap-alert 卡的参数,见下文。
--show SHOWbar 或 takeover配合 --kind overlay无bar 在目标屏幕正在播放的内容之上绘制一条横条。takeover 全屏播放告警。
--edge EDGEbottom 或 top否bottom横条所在的边。仅与 --show bar 一起使用。
--style FILE路径否无一个 JSON 对象,来自文件或表示标准输入的 -,描述文本卡片的样式:theme、accent、background、backgroundColor、textColor 和 align。最大 64 KiB。
--map FILE路径否无一个 JSON 模板,来自文件或表示标准输入的 -,根据发送方发送的正文构建叠加层推送;参见叠加层触发器。最大 64 KiB。
--signing标志否关闭还要求每次推送带有 ScreenRig-Signature 标头,并只显示一次签名密钥。不能与 --verify 一起使用。
--verify VENDORstring否无叠加层触发器:接受携带此服务商自有签名的请求,以代替 srtg_ 密码,该密码仍可并行使用。取值为 github、stripe、shopify、slack、linear、vercel、asana 或 generic_hmac。
--verify-secret-file FILE路径需要 --verify,asana 除外无服务商的密钥,来自文件或表示标准输入的 -,绝不能作为参数传入:GitHub、Stripe、Shopify、Slack、Linear 或 Vercel 显示的 webhook 密钥,或 generic_hmac 发送方的密钥。asana 不需要密钥:由其握手送来。
--verify-header NAMEstring配合 --verify generic_hmac无携带签名的请求头。
--verify-encoding ENCODINGhex 或 base64否hex与 --verify generic_hmac 同用:签名的书写方式。可以以 sha256= 开头。
--verify-timestamp-header NAMEstring否无与 --verify generic_hmac 同用:携带 Unix 时间的请求头,单位为秒,或为 13 位数字的毫秒。此时签名文本为 <timestamp>.<body>。
--verify-tolerance SECONDSinteger否300配合 --verify-timestamp-header:时间戳与服务器时钟的最大偏差,1 到 86400。
--handshake VENDORstring否无叠加层触发器:应答 microsoft_graph、monday、trello 或 azure_event_grid 的设置验证。Slack 和 Asana 通过 --verify 应答。
screenrig triggers create --name "Campus alerts" --tag Campus
screenrig triggers create --name "Campus alerts" --tag Campus --pull pull.json
screenrig triggers create --name "Lobby sensors" --kind overlay --show bar --tag Lobby
screenrig triggers create --name "Doorbell" --kind overlay --show takeover --tag Lobby --for 30s
screenrig triggers create --name "Payments" --kind overlay --show bar --tag Lobby --verify stripe --verify-secret-file stripe.secret --map stripe-map.json
screenrig triggers create --name "Boards" --kind overlay --show bar --tag Lobby --handshake trello

信封是带有 data.url(https://api.screenrig.ai/api/triggers/<id>/cap,叠加层触发器为 .../overlay)、data.username(触发器 ID)和 data.password 的触发器。请立即把它们填入发送系统;叠加层触发器的发送方需要 URL 和密码(Authorization: Bearer)。使用 --signing 时,信封还包含只显示一次的 data.signing_secret,并附带警告 trigger_signing_secret_shown_once。创建被中断或结果不明时,请在 24 小时内再次运行相同的命令:它会重用已保存的幂等键,服务器返回同一个触发器和同一个密码,而不会再创建一个。

--pull 添加了平台读取的来源,除了已发布的 URL,后者仍然有效。该对象包含 sources(最多 5 个 CAP 1.0 到 1.2 警报或 ATOM/RSS 索引的 http 或 https URL)、publicAlerts、location(name、latitude、longitude 和 geocodes 作为 [{name, value}])、minSeverity、maxSeverity、minUrgency、minCertainty、events、excludeEvents、senders、statuses、scopes、languages 和 areaUnknown;feeds get cap 接受与标志相同的筛选条件。除非提供 sources,否则必须有 location,且没有 sources 时会读取覆盖 location 的公共源。每个来源每分钟抓取一次。最严重的匹配警报会像已发布的一样接管屏幕,当来源没有警报时,拉取的警报结束;过期或失败的来源不会结束警报。例如 {"location": {"latitude": 49.25, "longitude": -123}, "minSeverity": "moderate"}。

叠加层选项(--show、--edge、--style、--map、--signing、--verify 及其配套选项,以及 --handshake)需要 --kind overlay,而 --pull 需要 CAP 触发器。--style、--map 和 --verify-secret-file 各自读取一个文件,其中只有一个可以读取 -(stdin)。

--verify VENDOR 让服务商自己的 webhook 直接推送到 data.url:在其自有请求头中携带服务商有效签名的请求,无需 data.password 即可被接受,该认证方式仍可并行使用。服务商的密钥以加密方式存储,只会以 overlay.verify.secret 的形式读回,包含 set 及其最后四个字符。asana 不需要密钥:它的握手会送来密钥,在此之前事件会返回 secret_pending。generic_hmac 需要 --verify-header,并接受 --verify-encoding、--verify-timestamp-header 和 --verify-tolerance。--handshake VENDOR 会在要求任何凭据之前应答该服务商的设置验证;它不会改变任何告警,从不计费,并在 triggers deliveries 中显示为结果 handshake。服务商、它们的请求头以及在各服务商处要填写的设置,见服务商签名和握手。

triggers list#

列出该项目的触发器及其最新警报,最旧优先。

triggers list
screenrig triggers list

--human 输出 ID、KIND、LABEL、TARGET、ALERT 和 LAST_RECEIVED;对于叠加层触发器,ALERT 说明它绘制什么以及保留了多少条告警。列表从不包含密码或签名密钥。

triggers show#

检查触发器及其最新警报。

triggers show <id>
参数类型必填默认备注
<id>string是无trg_ 触发器 ID。
screenrig triggers show trg_01EXAMPLETRIGGER00

data.alert 是最新的告警:它的 CAP 字段、state active 或 ended(带 ended_reason cancelled、all_clear、cleared 或 expired)、until,以及带 targeted、taken_over、cleared、skipped、failed 和 pending 的 screens。pending 在屏幕仍在写入时为 true,失败的屏幕会重试。data.playlist_id 是触发器的告警播放列表,screen show 将告警报告为对它的接管。对于叠加层触发器,data.overlay 包含 show、edge、enabled、signing、verify 和 handshake(设置后才会出现)、card_id、alerts(有效告警,最新的在前;第一条是正在显示的)、带 targeted、holding、taken_over、removed、edge_taken、skipped 和 failed 的 screens,以及 pending。

triggers test#

在触发屏幕上显示 60 秒运动提醒。

triggers test <id>
参数类型必填默认备注
<id>string是无trg_ 触发器 ID。
screenrig triggers test trg_01EXAMPLETRIGGER00

信封就是回执:data.outcome shown 和 data.alert。答复在所有屏幕写入完成之前返回;triggers show 报告计数。叠加层触发器会显示告警 screenrig-test(标签 Test,标题 Test overlay)60 秒,回执与一次推送得到的相同(data.alert_id、data.until、data.active)。两种触发器在有告警显示时都会拒绝测试。

triggers update#

更改触发器,而不更改其 URL 或密钥。

triggers update <id> [--name NAME] [--tag TAG | --screen-id ID...] [--for DURATION] [--pull FILE | --no-pull]
    [--edge bottom|top] [--style FILE | --clear-style] [--map FILE | --clear-map] [--enable | --disable]
    [--signing | --no-signing]
    [--verify VENDOR [--verify-secret-file FILE] [--verify-header NAME] [--verify-encoding hex|base64]
        [--verify-timestamp-header NAME] [--verify-tolerance SECONDS] | --clear-verify]
    [--handshake VENDOR | --clear-handshake] [--expect-rev REVISION]
参数类型必填默认备注
<id>string是无trg_ 触发器 ID。
--name NAMEstring否未更改重命名触发器。
--tag TAG, --screen-id IDstring否未更改新的目标,与 triggers create 相同。
--for DURATIONduration否未更改未指明结束时间的告警的新保持时长:CAP 触发器为 1 分钟到 7 天,叠加层触发器为 10 秒到 7 天。
--pull FILE, --no-pull路径、标志否未更改CAP 触发器:替换其 CAP 来源,或停止读取。
--edge EDGEbottom 或 top否未更改叠加层横条:将其移到这条边。
--style FILE, --clear-style路径、标志否未更改叠加层触发器:替换整个样式,或将其移除。
--map FILE, --clear-map路径、标志否未更改叠加层触发器:替换模板,或将其移除,使发送的对象就是推送。
--enable, --disable标志否未更改叠加层触发器:已停用的触发器对每次推送都返回错误密钥会得到的 404。
--signing, --no-signing标志否未更改叠加层触发器:开启签名校验(签名密钥只显示一次),或将其关闭。不能与 --verify 一起使用。
--verify VENDORstring否未更改叠加层触发器:替换服务商验证,方式与 triggers create 相同。不带 --verify-secret-file 时,若服务商不变则保留已存储的密钥;更换服务商则需要提供新的密钥。
--verify-secret-file FILE路径否未更改与 --verify 同用:服务商的密钥,来自文件或表示标准输入的 -。
--verify-header NAMEstring否未更改与 --verify generic_hmac 同用:携带签名的请求头。
--verify-encoding ENCODINGhex 或 base64否未更改与 --verify generic_hmac 同用:签名的书写方式。
--verify-timestamp-header NAMEstring否未更改与 --verify generic_hmac 同用:携带 Unix 时间的请求头。
--verify-tolerance SECONDSinteger否未更改配合 --verify-timestamp-header:时间戳与服务器时钟的最大偏差,1 到 86400。
--clear-verify标志否关闭叠加层触发器:不再接受服务商的签名,并清除其密钥。
--handshake VENDORstring否未更改叠加层触发器:应答 microsoft_graph、monday、trello 或 azure_event_grid 的设置验证。
--clear-handshake标志否关闭叠加层触发器:不再应答服务商握手。
--expect-rev REVISIONstring否无可选修订前提条件。
screenrig triggers update trg_01EXAMPLETRIGGER00 --tag Lobby
screenrig triggers update trg_01EXAMPLETRIGGER00 --edge top --style style.json
screenrig triggers update trg_01EXAMPLETRIGGER00 --map map.json --signing
screenrig triggers update trg_01EXAMPLETRIGGER00 --verify github --verify-secret-file github.secret
screenrig triggers update trg_01EXAMPLETRIGGER00 --clear-verify

除 --expect-rev 外至少需要一个选项。横条会在新的目标屏幕和新的边上重新放置;接管触发器的新目标从下一条开始的告警起生效。已经签名的触发器在重复 --signing 时保留其签名密钥;triggers rotate-secret --signing 会替换它。--clear-verify 会移除服务商验证并清除其密钥,--clear-handshake 会停止应答服务商握手。更新被中断或结果不明时,请再次运行相同的命令:它会重用已保存的幂等键。

triggers deliveries#

读取叠加层触发器的推送日志:每次推送为何被显示、忽略或拒绝。

triggers deliveries <id> [--limit N]
参数类型必填默认备注
<id>string是无trg_ 触发器 ID。
--limit Ninteger否100投递记录的条数,最新的在前;1 到 100。
screenrig triggers deliveries trg_01EXAMPLETRIGGER00 --limit 20

data.items 保存最近七天的请求:at、outcome(shown、updated、unchanged、ended、ignored、refused、invalid 或 handshake)、被拒绝或无效请求的 reason(credentials、signature、signature_missing、signature_invalid、timestamp_missing、timestamp_stale、secret_pending、handshake_invalid、disabled、body、mapping、field、rate_limited 或 internal)、detail(出错的成员或映射路径)、status、bytes、files(multipart 请求中的文件部分,会被忽略)、alert_id 和 request_id。signature 表示失败的 ScreenRig-Signature;其余签名、时间戳和握手原因属于服务商,详见服务商签名和握手下的表格。日志从不保存正文、请求头或凭据。错误的密钥、无效的签名和已停用的触发器,都会向发送方返回同样的 404,因此要看是哪一种,请查看此日志。CAP 触发器没有投递记录。

triggers clear#

立即结束触发器警报。

triggers clear <id> [--alert-id ID]
参数类型必填默认备注
<id>string是无trg_ 触发器 ID。
--alert-id IDstring否无叠加层触发器:只结束这一条告警。不指定则结束所有告警。
screenrig triggers clear trg_01EXAMPLETRIGGER00
screenrig triggers clear trg_01EXAMPLETRIGGER00 --alert-id front-door

告警以 ended_reason cleared 结束,其屏幕恢复为之前播放的内容。此后被其他接管替换的屏幕保持不变。没有有效告警时,不会有任何变化。对于叠加层触发器,解除一条未生效的告警不会有任何变化,最后一条告警结束时横条会收起,或接管的屏幕会交还。

triggers rotate-secret#

替换触发器密码。

triggers rotate-secret <id> [--signing] [--expect-rev REVISION]
参数类型必填默认备注
<id>string是无trg_ 触发器 ID。
--signing标志否关闭会签名的叠加层触发器:替换签名密钥而不是密码。
--expect-rev REVISIONstring否无可选修订前提条件。
screenrig triggers rotate-secret trg_01EXAMPLETRIGGER00

信封的 data.password 中包含新密码。旧密码立即失效,因此请把新密码填入发送系统。使用 --signing 时,信封改为包含新的 data.signing_secret,只显示一次;旧的立即失效,而不签名的触发器会返回 invalid_request。轮换被中断或结果不明时,请在 24 小时内重新运行相同命令:它会重用已保存的幂等键,服务器返回已经发生的那次轮换,而不是再轮换一次。

triggers delete#

删除触发器。其 URL 会立即停止接受告警和推送;叠加层触发器的横条会从其屏幕上撤下,其卡片被删除。正在显示告警的触发器会被拒绝,返回 resource_conflict:请先运行 triggers clear。

triggers delete <id> [--expect-rev REVISION]
参数类型必填默认备注
<id>string是无trg_ 触发器 ID。
--expect-rev REVISIONstring否无可选修订前提条件。
screenrig triggers delete trg_01EXAMPLETRIGGER00

叠加层触发器

叠加层触发器会显示外部系统推送的内容。Home Assistant、门或运动传感器中枢、摄像头系统或告警工具通过一次 HTTP POST 发送几句话,触发器的屏幕会显示它们,直到到期或发送方结束它们。它和 CAP 触发器一样是一种触发器:triggers create --kind overlay 创建它,并计入每个组织 20 个的同一上限。

--show bar 在每个目标屏幕正在播放的内容之上绘制一条横条,位于底部,使用 --edge top 时位于顶部。告警开始时横条滑入,最后一条告警结束时滑出;播放列表、页面和时间安排都不变。每个屏幕每条边只有一条横条:如果某个屏幕上这条边已被另一个叠加层触发器占用,则该触发器不会在那里显示(triggers show 将这些屏幕计为 edge_taken),而在该边上有自己带存在性横条的页面会保留它。无论横条是否显示,该边上的角落卡片或标签卡片都会向内移动,让出横条的高度。广告位页面上和接管期间不会绘制横条。--show takeover 从第一条告警开始到最后一条告警结束,在设有默认播放列表的目标屏幕上全屏播放告警。接管触发器不会替换屏幕上已有的接管,例如操作员的接管或紧急告警,而 CAP 告警会替换它。

标签目标在告警开始时解析;之后才加上标签的屏幕会在下一条开始的告警时获得横条。接管会跳过没有默认播放列表的屏幕。离线的屏幕在重新连接时会赶上。

发送方向 data.url 推送 JSON、表单或 multipart/form-data(文件部分会被忽略),带 Authorization: Bearer SECRET,或使用 HTTP Basic,用户名为触发器 ID,密码为密钥。密钥绝不会出现在 URL 中。一次推送包含以下成员;未知成员会被拒绝并指出其名称。

成员类型备注
alert_idstring发送方为告警指定的 ID,1 到 200 个字符。相同的 ID 会更新该告警,而不是再叠加一条。不指定时是名为 default 的单个告警。解除时,不指定则结束所有告警。
labelstring标题上方的简短标签:最多 40 个字符。
titlestring最多 120 个字符。
messagestring主要文字:最多 400 个字符。
notestring底部一行不显眼的文字:最多 120 个字符。
duration数字或字符串这次推送从现在起保持其告警的时长:10 到 604800 秒,或 10s、5m、2h、1d 或 until_cleared。省略时使用触发器的 --for(未设置时为 10 分钟)。
clear布尔值或字符串true(或 yes、y、1、x)结束该告警;false(或 no、n、0、空值)触发告警。解除会忽略其他成员。
statestring发送方的状态词。off、closed、clear、cleared、resolved、ok、normal、inactive 和 ended(不区分大小写)会结束告警;其他任何状态都会触发告警。

触发至少需要 label、title、message 和 note 之一。超过限制的文本会被拒绝,duration 超出 10 秒到 7 天的范围也会被拒绝,两者都会用 invalid_request 指出成员。每次触发或更新都会从该次推送起保持其告警 duration,因此每隔几秒推送一次的运动传感器会让横条一直显示,并在最后一次推送 duration 后消失。触发器显示其最新的告警;它结束后,前一条会重新显示。它保留十条告警,第十一条会替换最旧的一条。告警在到期后约十秒内结束。重复发送两次解除只会结束告警一次,解除一条未生效的告警不会有任何变化。

结果是一张回执:outcome(shown、updated、unchanged、ended 或 ignored)、alert_id、until(对保持到被清除的告警为 null)和 active,即触发器在投递后持有的告警。8 到 200 个字符的 Idempotency-Key 标头会在 24 小时内用第一张回执回应发送方的重试。一个触发器每分钟接受 120 次投递。投递不计入智能体请求上限,清除操作绝不会被拒绝,因此告警始终可以从屏幕上撤下。

curl -X POST https://api.screenrig.ai/api/triggers/trg_01EXAMPLETRIGGER00/overlay \
  -H "Authorization: Bearer srtg_YOUR_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"alert_id":"front-door","title":"Front door","message":"The front door is open","duration":"10m"}'

错误的地址、错误的密钥、已停用的触发器、缺失或错误的签名以及任何 GET 都会返回同样的 404 not_found,因此发送方或链接预览无从得知是哪一种。triggers deliveries 向项目显示最近七天的原因,不含推送正文。--style FILE 设置文本卡片的 theme、accent、background、backgroundColor、textColor 和 align;每种外观使用一个触发器。

--map FILE 根据告警工具发送的正文构建推送,所用模板语言与卡片 Webhook 相同。含 {{body.title}} 的字符串是文本,恰好为一个占位符的字符串保留其类型,{"$text": "{{body.message}}", "$max": 400} 会截断文本,路径以 body 或 query 开头。下面的模板转换监控工具的告警,并在其状态为 resolved 时结束它:

{"alert_id": "{{body.groupKey}}", "title": "{{body.title}}", "message": {"$text": "{{body.message}}", "$max": 400}, "state": "{{body.status}}"}

--signing 还要求 ScreenRig-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">,使用 data.signing_secret(whsec_…,仅显示一次)签名,其中 t 与服务器时钟相差不得超过五分钟。发送方在轮换密钥期间可以携带两个 v1 值。

body='{"alert_id":"front-door","title":"Front door","message":"The front door is open"}'
t=$(date +%s)
sig=$(printf '%s.%s' "$t" "$body" | openssl dgst -sha256 -hmac "$SIGNING_SECRET" -hex | sed 's/^.* //')
curl -X POST "$URL" -H "Authorization: Bearer $SECRET" -H "ScreenRig-Signature: t=$t,v1=$sig" \
  -H "Content-Type: application/json" -d "$body"

对于自己给请求签名的告警工具或服务商,可以让系统用其签名代替密钥来验证,并响应服务商的设置握手,方式与卡片 webhook 相同:triggers create 和 triggers update 接受 --verify VENDOR 及 --verify-secret-file FILE,以及 --handshake VENDOR,triggers update 还接受 --clear-verify 和 --clear-handshake 以分别将其移除。服务商、它们的请求头以及 generic_hmac 选项都与那里列出的相同。携带服务商有效签名的请求无需触发器的 srtg_ 密码即可被接受,该密码仍可并行使用;--verify 与 --signing 互斥,握手不会改变任何告警。签名失败的原因可通过 triggers deliveries 查看。

Home Assistant 的 rest_command 向触发器发送。将密钥放在 secrets.yaml 中,并为每个自动化指定它要触发或结束的告警:

# secrets.yaml
screenrig_lobby_overlay: "Bearer srtg_YOUR_SECRET"

# configuration.yaml
rest_command:
  screenrig_lobby:
    url: "https://api.screenrig.ai/api/triggers/trg_01EXAMPLETRIGGER00/overlay"
    method: post
    headers:
      Authorization: !secret screenrig_lobby_overlay
    content_type: "application/json"
    payload: >-
      {{ {"alert_id": alert_id | default(""), "title": title | default(""),
          "message": message | default(""), "duration": duration | default("10m"),
          "clear": clear | default(false)} | tojson }}

# automations.yaml
- alias: Front door open on the lobby screens
  triggers:
    - trigger: state
      entity_id: binary_sensor.front_door
      to: "on"
  actions:
    - action: rest_command.screenrig_lobby
      data: {alert_id: front-door, title: Front door, message: The front door is open, duration: until_cleared}
- alias: Front door closed
  triggers:
    - trigger: state
      entity_id: binary_sensor.front_door
      to: "off"
  actions:
    - action: rest_command.screenrig_lobby
      data: {alert_id: front-door, clear: true}
- alias: Driveway motion
  triggers:
    - trigger: state
      entity_id: binary_sensor.driveway_motion
      to: "on"
  actions:
    - action: rest_command.screenrig_lobby
      data: {alert_id: driveway, title: Driveway, message: Motion at the driveway, duration: 2m}

有两点使其生效。每次运动推送都会从该次推送起保持横条 2 分钟,因此运动持续时它一直显示,并在最后一个事件 2 分钟后消失。并且 Home Assistant 会在推送前渲染 {{ }} 模板,因此触发器收到的是普通 JSON;触发器自己的 --map 模板是另一个独立步骤,会让每次推送都经过它;因此对已经推送叠加层成员的发送方(例如这里的 Home Assistant),请不要使用 --map,或为该发送方单独建一个触发器。

其他命令组