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

    用 input_datetime 做一個真的好用的鬧鐘(不用改 YAML 就能調時間)

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    內建的「時間觸發器」有個致命缺點:時間寫死在 YAML 裡
    想改鬧鐘時間要進去改設定、重新載入,家人完全不可能自己弄。

    這篇做一個介面上就能調的鬧鐘。



    第一步:建立輔助元件

    設定 → 裝置與服務 → 輔助元件 → 建立輔助元件

    建三個:


    • 日期/時間(只要時間)→ 命名「鬧鐘時間」
    • 切換 → 命名「鬧鐘啟用」
    • 下拉選單 → 命名「鬧鐘模式」,選項填:只有燈 / 燈加音樂 / 燈加語音


    用 YAML 建也可以:
    1. input_datetime:
    2.   鬧鐘時間:
    3.     name: 鬧鐘時間
    4.     has_date: false
    5.     has_time: true
    6.     icon: mdi:alarm
    7. input_boolean:
    8.   鬧鐘啟用:
    9.     name: 鬧鐘啟用
    10.     icon: mdi:alarm-check
    11. input_select:
    12.   鬧鐘模式:
    13.     name: 鬧鐘模式
    14.     options:
    15.       - 只有燈
    16.       - 燈加音樂
    17.       - 燈加語音
    18.     initial: 燈加語音
    複製代碼

    第二步:觸發器怎麼寫

    這是關鍵。時間觸發器可以直接吃 input_datetime:
    1. triggers:
    2.   - trigger: time
    3.     at: input_datetime.鬧鐘時間
    複製代碼

    就這麼簡單。不用範本、不用每分鐘比對。
    使用者在介面改時間,觸發時間自動跟著變。

    (很多舊教學會教你用 trigger: template 每分鐘比對,
    那是 HA 很早以前才需要的寫法,現在不用了。)

    第三步:完整的自動化
    1. alias: 智慧鬧鐘
    2. description: 日出式喚醒,時間和模式都在介面上調
    3. triggers:
    4.   - trigger: time
    5.     at: input_datetime.鬧鐘時間
    6. conditions:
    7.   - condition: state
    8.     entity_id: input_boolean.鬧鐘啟用
    9.     state: "on"
    10.   # 週末不叫
    11.   - condition: time
    12.     weekday: [mon, tue, wed, thu, fri]
    13.   # 人要在家
    14.   - condition: state
    15.     entity_id: binary_sensor.家裡真的有人
    16.     state: "on"
    17. actions:
    18.   # 1. 日出式漸亮:從 1% 花 15 分鐘升到 80%
    19.   - action: light.turn_on
    20.     target:
    21.       entity_id: light.主臥
    22.     data:
    23.       brightness_pct: 1
    24.       color_temp_kelvin: 2200
    25.   - repeat:
    26.       count: 20
    27.       sequence:
    28.         - delay: "00:00:45"
    29.         - action: light.turn_on
    30.           target:
    31.             entity_id: light.主臥
    32.           data:
    33.             brightness_pct: "{{ 1 + repeat.index * 4 }}"
    34.             color_temp_kelvin: "{{ 2200 + repeat.index * 110 }}"
    35.   # 2. 依模式做不同的事
    36.   - choose:
    37.       - conditions:
    38.           - condition: state
    39.             entity_id: input_select.鬧鐘模式
    40.             state: 燈加音樂
    41.         sequence:
    42.           - action: media_player.volume_set
    43.             target: {entity_id: media_player.臥室音箱}
    44.             data: {volume_level: 0.25}
    45.           - action: media_player.play_media
    46.             target: {entity_id: media_player.臥室音箱}
    47.             data:
    48.               media_content_type: playlist
    49.               media_content_id: 早晨清單
    50.       - conditions:
    51.           - condition: state
    52.             entity_id: input_select.鬧鐘模式
    53.             state: 燈加語音
    54.         sequence:
    55.           - action: tts.speak
    56.             target: {entity_id: tts.piper}
    57.             data:
    58.               media_player_entity_id: media_player.臥室音箱
    59.               message: >
    60.                 早安。現在 {{ now().strftime('%H 點 %M 分') }}。
    61.                 外面 {{ states('sensor.室外溫度') }} 度,
    62.                 {% if states('sensor.今日降雨機率') | float(0) > 50 %}
    63.                 今天可能會下雨,記得帶傘。
    64.                 {% else %}
    65.                 今天天氣不錯。
    66.                 {% endif %}
    67. mode: single
    複製代碼



    repeat 那段在做什麼
    1.   - repeat:
    2.       count: 20
    3.       sequence:
    4.         - delay: "00:00:45"
    5.         - action: light.turn_on
    6.           data:
    7.             brightness_pct: "{{ 1 + repeat.index * 4 }}"
    複製代碼

    repeat.index 是第幾次(從 1 開始)。
    跑 20 次、每次間隔 45 秒=15 分鐘,亮度從 5% 漸進到 81%,
    色溫從 2310K 升到 4400K(模擬日出從暖到白)。

    這比 light.turn_on 的 transition 參數彈性 ——
    transition 只能線性變亮度,不能同時變色溫,而且很多燈的驅動不支援長時間 transition。

    第四步:做一張儀表板卡片
    1. type: entities
    2. title: 鬧鐘
    3. entities:
    4.   - entity: input_boolean.鬧鐘啟用
    5.   - entity: input_datetime.鬧鐘時間
    6.   - entity: input_select.鬧鐘模式
    7.   - type: divider
    8.   - entity: automation.智慧鬧鐘
    9.     name: 自動化本身(除錯用)
    複製代碼

    家人打開 App 就能自己改時間,這是重點。

    加分項:顯示「還有多久」
    1. template:
    2.   - sensor:
    3.       - name: 距離鬧鐘
    4.         state: >
    5.           {% set t = state_attr('input_datetime.鬧鐘時間', 'timestamp') %}
    6.           {% if t is none %}
    7.             未設定
    8.           {% else %}
    9.             {% set now_s = now().hour * 3600 + now().minute * 60 + now().second %}
    10.             {% set diff = (t - now_s) % 86400 %}
    11.             {{ (diff // 3600) }} 小時 {{ (diff % 3600) // 60 }} 分
    12.           {% endif %}
    複製代碼

    input_datetime 的 timestamp 屬性在「只有時間」模式下,
    回傳的是「當天零點起算的秒數」。用 % 86400 處理跨日。

    幾個實用變化


    • 假日不同時間:再做一個 input_datetime.假日鬧鐘,加第二個時間觸發器
    • 賴床偵測:鬧鐘後 10 分鐘,如果臥室還沒偵測到動作,音量調大 + 再講一次
    • 跟行事曆連動:用 calendar 觸發器,有早班的日子提早 30 分鐘
    • 前一晚提醒:睡前推播「明天鬧鐘設在 06:30,要調嗎?」


    ---

    這套我用了很久,最有感的是日出式漸亮真的比較好起床
    被鈴聲驚醒跟慢慢亮到自然醒,差很多。

    不過也要老實講:完全不用鈴聲的話,重要日子我還是會另外設手機鬧鐘保險。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

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

    GMT+8, 2026-9-24 10:29 , Processed in 0.083494 second(s), 26 queries .

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