找回密碼
 立即註冊
    查看: 128|回覆: 0

    用資料盤點智能家居:哪些自動化真的在跑、哪些裝置從來沒人碰

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 03:02:21 | 顯示全部樓層 |閱讀模式
    裝置累積一年之後,多數人的直覺是「大概有一半沒在用」,但說不出是哪一半。這篇不談感覺,談怎麼把答案查出來:用 Home Assistant 自己記下來的資料,算出每個自動化這個月觸發了幾次、每個實體多久沒變過、哪些操作是人按的哪些是自動的,最後決定砍掉什麼。全部步驟都用內建功能,不裝任何外掛。

    裝置累積一年之後,多數人的直覺是「大概有一半沒在用」,但說不出是哪一半。這篇不談感覺,談怎麼把答案查出來:用 Home Assistant

    為什麼要做這件事

    不是為了整齊。三個實際的理由:


    • 每個還開著的自動化都是一顆可能誤觸發的地雷。 你忘記它存在,它某天半夜把燈打開,然後你花一小時查為什麼
    • 每個還在線的裝置都在佔資源。 Zigbee 網路的裝置數、Wi-Fi 的連線數、recorder 資料庫的寫入量
    • 升級的時候,壞掉的東西越多越難查。 二十個自動化裡壞了一個,你找得到;八十個裡壞了一個,你一個月後才發現


    這篇會產出什麼


    • 一份「每個自動化最後觸發時間」的清單
    • 一份「這個月觸發了幾次」的數字(不是猜的)
    • 一份「超過 N 天沒變過狀態」的實體清單
    • 一個「人手動操作 vs 自動觸發」的比例
    • 一份每月自動寄給你的盤點報告


    步驟 1:先確認你的資料保存了多久

    所有的盤點都建立在 recorder 這個內建元件記下來的資料上。它的保存天數預設只有 10 天。

    也就是說,你現在直接去問「這個自動化這三個月跑了幾次」,答案只會涵蓋最近十天,而且不會有任何警告。

    先看你現在的設定。打開 configuration.yaml 找 recorder:。


    • 完全沒有這一段 → 你在用預設值:保存 10 天、每晚 04:12 自動清理、每隔一個週日重整資料庫
    • 有這一段 → 看 purge_keep_days 的值


    要做有意義的盤點,建議拉到 30 到 90 天。但直接拉長會讓資料庫變得非常大,所以要同時把雜訊排除掉:
    1. recorder:
    2.   purge_keep_days: 90
    3.   commit_interval: 30
    4.   auto_purge: true
    5.   auto_repack: true
    6.   exclude:
    7.     domains:
    8.       - update
    9.       - device_tracker
    10.       - weather
    11.     entity_globs:
    12.       - sensor.*_lqi
    13.       - sensor.*_rssi
    14.       - sensor.*_xin_hao
    15.       - sensor.sun*
    16.       - sensor.*_uptime
    17.       - sensor.*_linkquality
    18.     entities:
    19.       - sensor.date
    20.       - sensor.time
    複製代碼

    每一項的意思:


    • purge_keep_days: 90 —— 保存 90 天
    • commit_interval: 30 —— 每 30 秒才把資料寫進磁碟。預設是 5 秒。如果你的 Home Assistant 裝在記憶卡上,官方明確建議把這個值調高(例如 30 秒),因為頻繁寫入會縮短記憶卡壽命。代價是資料庫裡的紀錄會延遲最多 30 秒 —— 但畫面上的即時狀態與歷史圖不受影響,那些是直接串流的
    • auto_purge —— 每晚 04:12 自動清掉超過保存期的資料。預設就是開的
    • auto_repack —— 每隔一個週日在清理之後重整資料庫。沒有重整的話,清理完檔案大小也不會變小。注意:auto_purge 關掉的話這個也沒用
    • exclude —— 不要記錄這些。訊號強度、開機時間這類每分鐘都在變、但你永遠不會回頭查的資料,是資料庫肥大的主因


    改完先 開發者工具 → YAML → 檢查設定,再 設定 → 系統 → 重新啟動。

    你會看到什麼:重啟後到 設定 → 系統 → 儲存空間,或者在 開發者工具 → 模板 貼上:
    1. 資料庫大小:{{ states('sensor.home_assistant_v2_db') | default('沒有這個感測器', true) }}
    複製代碼

    ⚠ 一個重要的前提:exclude 只對未來生效。已經記下來的舊資料不會被清掉,要等 90 天後自然過期,或者手動執行一次清理。

    手動清理:到 開發者工具 → 動作,切 YAML 模式:
    1. action: recorder.purge
    2. data:
    3.   keep_days: 90
    4.   repack: true
    複製代碼

    ⚠ repack: true 會鎖住資料庫一段時間(資料庫大的話可能好幾分鐘),期間 Home Assistant 會變慢甚至沒反應。在你不需要用的時候執行。

    ⚠ 還有一件事:調整 recorder 之後,要等幾天資料才有意義。今天改成 90 天,不代表你明天就有 90 天的資料 —— 你只會有改設定那天往前算 10 天的舊資料,加上之後累積的。

    所以第一步做完就先去做別的事,一週後再回來看。 這不是拖延,是資料需要時間累積。

    步驟 2:列出所有自動化與最後觸發時間

    這一步不需要等,現在就有答案 —— last_triggered 這個屬性不受 recorder 影響,它一直存在。

    到 開發者工具 → 模板,把左邊整個換成:
    1. {% set now_ts = as_timestamp(now()) %}
    2. {% set rows = namespace(items=[]) %}
    3. {% for a in states.automation %}
    4.   {% set lt = a.attributes.last_triggered %}
    5.   {% set days = 99999 if lt is none else ((now_ts - as_timestamp(lt)) / 86400) | round(1) %}
    6.   {% set rows.items = rows.items + [(days, a.name, a.state)] %}
    7. {% endfor %}
    8. {% for d, name, st in rows.items | sort(reverse=true) %}
    9. {{ '從未觸發' if d > 9999 else (d | string + ' 天前') }} | {{ st }} | {{ name }}
    10. {%- endfor %}
    複製代碼

    你會看到什麼:右邊出現一份按「多久沒觸發」排序的清單,最久沒動的在最上面:

    以下還有約 80% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

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

    GMT+8, 2026-11-10 00:55 , Processed in 0.140004 second(s), 25 queries .

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