找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 1|回覆: 0

    可操作的通知:讓推播上直接有按鈕(完整範例)

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    一般通知只能看。可操作通知(actionable notification)可以在通知上
    直接按按鈕做事,不用打開 App。

    這是我覺得投資報酬率最高的 HA 功能之一



    前提

    要裝 Home Assistant Companion App(iOS 或 Android),
    而且在 HA 裡有對應的 notify.mobile_app_xxx 服務。

    不確定名字的話:開發者工具 → 動作 → 搜尋 notify,會列出來。

    最簡單的形式
    1. actions:
    2.   - action: notify.mobile_app_charles
    3.     data:
    4.       title: 門沒關
    5.       message: 後門已經開著 12 分鐘
    6.       data:
    7.         actions:
    8.           - action: CLOSE_DOOR
    9.             title: 幫我關
    10.           - action: IGNORE
    11.             title: 我知道了
    複製代碼

    注意有兩層 data
    外層的 data 是給 notify 服務的,內層的 data 是給手機 App 的。
    這個結構很多人第一次寫會搞錯。

    按下去之後怎麼接

    App 會發出一個事件 mobile_app_notification_action
    你要寫一個自動化來接:
    1. alias: 處理通知按鈕
    2. triggers:
    3.   - trigger: event
    4.     event_type: mobile_app_notification_action
    5.     event_data:
    6.       action: CLOSE_DOOR
    7. actions:
    8.   - action: cover.close_cover
    9.     target:
    10.       entity_id: cover.後門
    11. mode: single
    複製代碼

    action 那串代號要完全一致(大小寫有差)。



    更好的做法:一個自動化處理全部按鈕

    按鈕多了之後,一個按鈕一個自動化會爆炸。用 choose 合併:
    1. alias: 通知按鈕總處理
    2. triggers:
    3.   - trigger: event
    4.     event_type: mobile_app_notification_action
    5. actions:
    6.   - choose:
    7.       - conditions: "{{ trigger.event.data.action == 'CLOSE_DOOR' }}"
    8.         sequence:
    9.           - action: cover.close_cover
    10.             target: {entity_id: cover.後門}
    11.       - conditions: "{{ trigger.event.data.action == 'LOCK_DOOR' }}"
    12.         sequence:
    13.           - action: lock.lock
    14.             target: {entity_id: lock.前門}
    15.       - conditions: "{{ trigger.event.data.action == 'SNOOZE_LAUNDRY' }}"
    16.         sequence:
    17.           - delay: "00:10:00"
    18.           - action: notify.mobile_app_charles
    19.             data:
    20.               title: 再提醒一次
    21.               message: 衣服還沒晾喔
    22.       - conditions: "{{ trigger.event.data.action == 'AC_OFF' }}"
    23.         sequence:
    24.           - action: climate.turn_off
    25.             target: {entity_id: climate.客廳}
    26. mode: parallel
    27. max: 10
    複製代碼

    進階用法

    1. 帶資料進來(同一個按鈕處理多個對象)
    1.       data:
    2.         actions:
    3.           - action: "TURN_OFF_{{ entity_id }}"
    4.             title: 關掉它
    複製代碼

    接的時候用 startswith:
    1.   - trigger: event
    2.     event_type: mobile_app_notification_action
    3.     event_data: {}
    4. actions:
    5.   - condition: "{{ trigger.event.data.action.startswith('TURN_OFF_') }}"
    6.   - action: homeassistant.turn_off
    7.     target:
    8.       entity_id: "{{ trigger.event.data.action[10:] }}"
    複製代碼

    2. 需要解鎖才能執行(危險動作用)
    1.         actions:
    2.           - action: UNLOCK_DOOR
    3.             title: 開門
    4.             authenticationRequired: true
    複製代碼

    iOS 會要求 Face ID 或密碼。門鎖、保全這類一定要加。

    3. 讓使用者輸入文字
    1.         actions:
    2.           - action: REPLY
    3.             title: 回覆
    4.             behavior: textInput
    5.             textInputButtonTitle: 送出
    6.             textInputPlaceholder: 輸入訊息
    複製代碼

    接的時候取 trigger.event.data.reply_text

    4. 點通知本身跳到某一頁
    1.       data:
    2.         url: /lovelace/security        # 點通知開到這個儀表板
    3.         actions:
    4.           - action: URI
    5.             title: 看攝影機
    6.             uri: /lovelace/cameras
    複製代碼

    action 填 URI 是特殊值,代表「這個按鈕是開網址」,不會發事件。

    5. 通知分組與取代
    1.       data:
    2.         tag: door_alert          # 同一個 tag 的新通知會「取代」舊的
    3.         group: security          # 同一個 group 會摺疊在一起
    複製代碼

    tag 很重要。門沒關的提醒每五分鐘發一次的話,
    沒有 tag 就會累積十幾則;有 tag 就永遠只有最新那一則。

    6. 主動清除通知

    事情解決了就把通知收掉:
    1.   - action: notify.mobile_app_charles
    2.     data:
    3.       message: clear_notification
    4.       data:
    5.         tag: door_alert
    複製代碼

    message 填 clear_notification 是保留字。

    7. 緊急通知(突破勿擾模式)
    1.       data:
    2.         push:
    3.           interruption-level: critical     # iOS
    4.           sound:
    5.             name: default
    6.             critical: 1
    7.             volume: 1.0
    複製代碼

    Android 用 channelimportance: high

    這個只留給真正的緊急事件:瓦斯、漏水、闖入。
    濫用的話家人會把整個通知關掉,那就全部白做了。

    一個完整的實例:瓦斯警報
    1. alias: 瓦斯警報
    2. triggers:
    3.   - trigger: state
    4.     entity_id: binary_sensor.廚房瓦斯
    5.     to: "on"
    6. actions:
    7.   - action: notify.mobile_app_charles
    8.     data:
    9.       title: 偵測到瓦斯
    10.       message: 廚房瓦斯感測器觸發,請立即確認
    11.       data:
    12.         tag: gas_alert
    13.         push:
    14.           interruption-level: critical
    15.           sound: {name: default, critical: 1, volume: 1.0}
    16.         actions:
    17.           - action: GAS_CLEAR
    18.             title: 已確認安全
    19.           - action: URI
    20.             title: 看廚房攝影機
    21.             uri: /lovelace/cameras
    22.   # 同時做實體動作
    23.   - action: switch.turn_on
    24.     target: {entity_id: switch.廚房抽風}
    25.   - action: light.turn_on
    26.     target: {entity_id: light.全屋}
    27.     data: {brightness_pct: 100}
    28. mode: single
    複製代碼

    ---

    我家最常按的按鈕是「洗衣機十分鐘後再提醒我」和「出門了幫我關冷氣」。
    這兩個一天大概會用到三四次,比打開 App 快太多了。

    大家有做什麼好用的按鈕嗎?
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-24 12:21 , Processed in 0.078741 second(s), 24 queries .

    快速回覆 返回頂部 返回列表