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

    Google 常式(Routine)能做和不能做的事,以及怎麼跟 HA 分工

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    很多人搞不清楚:同樣一件事,該寫在 Google 的「常式」還是 HA 的自動化?

    這篇講清楚分工。



    Google 常式能做什麼

    觸發方式


    • 語音指令(「OK Google,我回來了」)—— 這是它最強的地方
    • 特定時間
    • 日出 / 日落
    • 鬧鐘解除
    • 裝置狀態改變(有限,主要是 Nest 產品)
    • 到達 / 離開家(手機定位)


    動作


    • 控制智能家居裝置
    • 播放音樂 / 新聞 / Podcast
    • 調整音量
    • 說一段話(自訂訊息)
    • 廣播到其他裝置
    • 傳送訊息 / 打電話(部分地區)
    • 執行另一個常式


    Google 常式做不到什麼


    • 複雜的條件判斷 —— 沒有 if/else、沒有巢狀條件
    • 用感測器數值當條件 —— 「溫度超過 28 度才執行」做不到
    • 等待 —— 「開燈後等三分鐘再關」做不到
    • 迴圈
    • 存取歷史資料
    • 呼叫外部 API
    • 保留變數或狀態


    簡單說:Google 常式是「一連串動作」,不是「程式」。

    正確的分工原則

    Google 常式負責「入口」,HA 負責「邏輯」。

    具體做法:


    • Google 常式只做一件事:把一個 HA 的虛擬開關打開
    • HA 偵測到那個開關被打開,執行真正的自動化




    實作:虛擬開關橋接

    第一步:在 HA 建立虛擬開關
    1. input_boolean:
    2.   google_回家:
    3.     name: Google 回家觸發
    4.     icon: mdi:home-import-outline
    5.   google_睡覺:
    6.     name: Google 睡覺觸發
    7.     icon: mdi:sleep
    8.   google_看電影:
    9.     name: Google 看電影觸發
    10.     icon: mdi:movie-open
    複製代碼

    第二步:曝露給 Google

    設定 → 語音助理 → Google Assistant → 曝露的實體

    把這三個 input_boolean 勾起來。

    注意:input_boolean 曝露給 Google 之後會變成一個「開關」。
    給它一個好唸的名字很重要。

    第三步:在 Google Home App 建常式
    1. 常式名稱:我回來了
    2. 啟動方式:說「我回來了」或「回家了」
    3. 動作:開啟「Google 回家觸發」
    複製代碼

    第四步:HA 接手
    1. alias: Google 回家觸發
    2. id: google_arrive_home
    3. triggers:
    4.   - trigger: state
    5.     entity_id: input_boolean.google_回家
    6.     to: "on"
    7. actions:
    8.   # 1. 立刻把開關關回去(這樣下次才能再觸發)
    9.   - action: input_boolean.turn_off
    10.     target:
    11.       entity_id: input_boolean.google_回家
    12.   # 2. 真正的邏輯(這裡可以任意複雜)
    13.   - choose:
    14.       # 白天回家
    15.       - conditions:
    16.           - condition: sun
    17.             before: sunset
    18.         sequence:
    19.           - action: scene.turn_on
    20.             target: {entity_id: scene.日間回家}
    21.       # 晚上回家
    22.       - conditions:
    23.           - condition: sun
    24.             after: sunset
    25.         sequence:
    26.           - action: scene.turn_on
    27.             target: {entity_id: scene.夜間回家}
    28.   # 3. 太熱才開冷氣
    29.   - if:
    30.       - condition: numeric_state
    31.         entity_id: sensor.living_room_temperature
    32.         above: 28
    33.     then:
    34.       - action: climate.set_temperature
    35.         target: {entity_id: climate.living_room}
    36.         data: {temperature: 26, hvac_mode: cool}
    37.   # 4. 回報
    38.   - action: tts.google_translate_say
    39.     target:
    40.       entity_id: media_player.客廳音箱
    41.     data:
    42.       message: >
    43.         歡迎回來。室內 {{ states('sensor.living_room_temperature') }} 度。
    44.         {% if states.light | selectattr('state','eq','on') | list | count > 0 %}
    45.         燈已經開好了。
    46.         {% endif %}
    47. mode: single
    複製代碼

    第一步「立刻關回去」很重要
    不然開關會一直是 on,下次說「我回來了」就不會觸發(因為狀態沒變)。

    這個架構的四個好處


    • 語音入口在 Google(反應快、辨識準)
    • 邏輯在 HA(想多複雜都可以)
    • 改邏輯不用動 Google(改 HA 就好)
    • 同一個邏輯可以有多個入口(語音、按鈕、自動觸發都指向同一個 script)




    什麼時候直接用 Google 常式就好

    不是所有東西都要繞一圈。純粹的「播放」類動作留在 Google 比較好


    • 「OK Google,早安」→ 播新聞 + 報天氣 + 播音樂
    • 「OK Google,睡覺音樂」→ 播白噪音,設定 30 分鐘後停
    • 「OK Google,廣播吃飯了」→ 廣播到所有音箱


    這些用 HA 做反而更麻煩,而且音樂服務的整合 Google 做得比較好。

    反過來,這些一定要用 HA


    • 任何需要感測器數值判斷
    • 任何需要等待
    • 任何需要記住狀態
    • 任何家裡沒網路也要能運作


    最後一點特別重要。
    Google 常式完全依賴雲端 —— 網路斷了就不能用。
    HA 的自動化是本地執行的。

    一個進階技巧:讓 Google 唸 HA 算出來的內容

    Google 常式的「說一段話」只能講固定文字。

    想講動態內容的話,用 HA 的 TTS:
    1. - action: tts.google_translate_say
    2.   target:
    3.     entity_id: media_player.客廳音箱
    4.   data:
    5.     message: >
    6.       現在室內 {{ states('sensor.living_room_temperature') }} 度,
    7.       濕度 {{ states('sensor.living_room_humidity') }}%。
    8.       {% set n = states.light | selectattr('state','eq','on') | list | count %}
    9.       {% if n > 0 %}還有 {{ n }} 盞燈開著。{% endif %}
    10.       {% if is_state('lock.front_door','unlocked') %}前門沒有鎖。{% endif %}
    複製代碼

    HA 有好幾種 TTS 可以選


    • google_translate_say —— 免費,但要連外網,而且品質普通
    • cloud_say(Nabu Casa)—— 品質好很多,中文也自然
    • piper —— 完全本地,不用連網。中文有社群模型但品質參差
    • edge-tts —— 用微軟的語音,品質好而且免費(社群整合)


    中文的話我自己覺得 edge-tts 的 CP 值最高。

    同步的注意事項

    在 HA 新增或改名實體之後,Google 那邊不會立刻更新。

    手動同步:對 Google 說「同步我的裝置」,
    或在 Google Home App 裡重新整理。

    或者在 HA 裡呼叫
    1. - action: google_assistant.request_sync
    複製代碼

    我做了一個自動化,每次 HA 重啟後自動同步一次
    1. alias: HA 重啟後同步 Google
    2. triggers:
    3.   - trigger: homeassistant
    4.     event: start
    5. actions:
    6.   - delay: "00:05:00"
    7.   - action: google_assistant.request_sync
    8. mode: single
    複製代碼

    ---

    我自己的比例大概是:


    • Google 常式:4 個(全部都是「觸發一個 HA 開關」或「播音樂」)
    • HA 自動化:20 幾個(所有真正的邏輯)


    這個分工跑了很久沒出過問題。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

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

    GMT+8, 2026-9-24 11:30 , Processed in 0.078982 second(s), 23 queries .

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