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

    SQL 感測器實作:查 Home Assistant 自己的資料庫,做出內建沒有的五個統計

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 08:38:13 | 顯示全部樓層 |閱讀模式
    Home Assistant 的感測器幾乎都在回答同一個問題:「現在是多少」。但你真正想知道的常常是另一種問題 —— 這個月冷氣開了幾次、洗衣機上次跑完是什麼時候、資料庫現在多大、這個感應器今天是不是誤觸發到爆。

    這些數字其實都已經在你的硬碟裡了。Home Assistant 每一次狀態改變都會寫進一個資料庫,而 SQL 感測器這個內建整合,可以把任意一句 SQL 查詢的結果變成一個實體。

    SQL 感測器

    這篇會做完的事


    • 裝一個可以用瀏覽器直接翻資料庫的工具,先看清楚資料長什麼樣
    • 搞懂四張你一定會用到的表,以及為什麼新版把 entity_id 搬走了
    • 做出五個感測器:資料庫大小、某實體今日觸發次數、上次完成時間、本月用電、最吵的前十名實體
    • 處理「每 30 秒查一次會拖慢整個 Home Assistant」這件事(而且官方的做法跟你想的不一樣)
    • 做一個「資料庫太大就通知我」的自動化


    全部做完大約 90 分鐘,其中一半是在瀏覽器裡試 SQL。不需要買任何東西。

    第零步之前:先確認你是不是真的需要 SQL

    很多舊教學(包括這篇的前一版)是從「這些內建都沒有」開始講的。那句話今天只對了一半,而照著做的代價是用一個每 30 秒掃資料庫的查詢,去取代一個內建的、正確的、不花效能的輔助元件。

    動手之前先對一次下面這張表:
    1. 你想要的東西                     先試這個(不必寫 SQL)
    2. -------------------------------  --------------------------------------
    3. 這個月/今天用了多少電、水、瓦斯   輔助元件「用電量計 Utility Meter」
    4. 某個東西今天開著總共多久           輔助元件「歷史統計 History Stats」
    5.                                  (模式選 time)
    6. 某個東西今天觸發幾次               輔助元件「歷史統計 History Stats」
    7.                                  (模式選 count)
    8. 某個實體上次變化是多久以前         範本:time_since(states.X.last_changed)
    9. 一段時間內的平均、最大、最小       輔助元件「統計 Statistics」
    10. 把幾個感測器加總/平均             輔助元件「群組」選感測器群組
    11. 真的只能用 SQL 的                 為什麼
    12. -------------------------------  --------------------------------------
    13. 資料庫自己有多大                   沒有任何內建感測器回答這件事
    14. 跨越 recorder 保留期限的查詢       輔助元件都只看得到記憶體裡的近期狀態,
    15.                                  查半年前只能去 statistics 表撈
    16. 一次比較幾十個實體(誰最吵)       輔助元件是一個實體一個,做不了排行
    17. 自訂的複雜條件組合                 例如「state 是 on 而且屬性 X 大於 5
    18.                                  而且發生在週末」
    複製代碼

    所以這篇的立場是:上半張表的東西請用輔助元件,別用 SQL;下半張表的東西才是 SQL 感測器真正不可取代的地方。第八步會示範同一件事(本月用電)用兩種做法,並說明為什麼計量器那個比較準。

    怎麼建輔助元件:設定 → 裝置與服務 → 輔助元件 → 建立輔助元件,清單裡就有上面提到的每一種。這一步花兩分鐘,可以省掉後面一整篇。

    第零步:確認你的起點

    開始之前先確認三件事,每一件都會影響後面要打什麼字。

    0-1 確認 Home Assistant 版本

    到 設定 → 系統 → 一般,最下面會顯示版本。這篇是照 2026.9 寫的。

    0-2 確認你用的是哪一種資料庫

    看一下 /config/configuration.yaml 裡有沒有 recorder: 區塊。


    • 找不到任何 recorder 的設定項,而且你從來沒改過 configuration.yaml 的 recorder: 區塊 → 你用的是預設的 SQLite,檔案是 /config/home-assistant_v2.db。這篇的主線就是走這條
    • 你的 configuration.yaml 裡有 recorder: 而且底下有 db_url: 指向 mysql:// 或 mariadb:// → 你用的是 MariaDB。這篇最後有一整段講 MariaDB 要改哪些字


    0-3 確認你的設定檔在哪一層

    這篇所有 YAML 都會標明「放進哪個檔、放在第幾層」。如果你從來沒編輯過 configuration.yaml,先裝一個可以編輯它的工具:

    設定 → 應用程式 → 應用程式商店,搜 File editor,按安裝,啟動之後按「開啟網頁介面」。

    注意名稱改了:Home Assistant 在 2026.2 把「附加元件(Add-ons)」整批改名成「應用程式(Apps)」。舊教學寫的「設定 → 附加元件」現在是「設定 → 應用程式」,東西完全一樣,只是選單文字變了。同一批社群套件的程式碼倉庫也跟著從 addon-xxx 改名成 app-xxx。

    第一步:裝 SQLite Web,把資料庫打開來看

    不要直接寫 YAML 然後重新啟動。 SQL 寫錯的時候,Home Assistant 給你的回饋是一個 unavailable 的實體 —— 沒有錯誤訊息、沒有行號、不知道是欄位名打錯還是 JOIN 寫反。在瀏覽器裡把查詢跑通再貼進設定,除錯時間差十倍。

    1-1 到 設定 → 應用程式 → 應用程式商店,右上角三個點 → 儲存庫,貼上:
    1. https://github.com/hassio-addons/repository
    複製代碼

    按新增。這是 Home Assistant Community Apps 的官方儲存庫。

    1-2 回到商店,往下捲找到 Home Assistant Community Apps 這一區,裡面有 SQLite Web。點進去按安裝。

    你會看到:安裝進度條大約跑 1 到 3 分鐘,結束後畫面上方出現「啟動」「重新啟動」「解除安裝」三個按鈕,以及「顯示在側邊欄」的開關。

    1-3 把「顯示在側邊欄」打開,按啟動,然後切到上方的日誌分頁。

    你會看到日誌最後幾行長這樣:
    1. INFO: Starting sqlite-web...
    2. * Loading database: /config/home-assistant_v2.db
    3. * Running on http://0.0.0.0:8080
    複製代碼

    看不到 Loading database 那一行,而是看到 unable to open database file,代表你的資料庫不在預設位置(多半是因為你改用 MariaDB 了)。那樣的話 SQLite Web 對你沒用,跳到本篇最後的「MariaDB 使用者怎麼做」。

    1-4 按開啟網頁介面。

    你會看到一個左側有表格清單的網頁,清單裡至少會有這些名字:
    1. event_data          events          event_types
    2. recorder_runs       schema_changes  state_attributes
    3. states              states_meta     statistics
    4. statistics_meta     statistics_runs statistics_short_term
    複製代碼

    清單是空的或整頁 500 錯誤,通常是資料庫正在被 Home Assistant 寫入而鎖住。等 30 秒重新整理即可。

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

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

    本版積分規則

    延伸閱讀

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

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

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

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