Home Assistant取得一個實體entity的歷史數值 (Get the historical values of a Home Assistant entity)

分類:

參考文章

在Home Assistant中,要取得實體的歷史數值,需要有recorder把實體數值保存。

如果確定有一實體有過往數值,那可以使用以下的SQL範例。

範例為 entity_id = ‘<your_entity_id>’ 取30天前的第一筆資料:

SELECT
  states.state
FROM
  states
WHERE
      metadata_id = (
        SELECT
          metadata_id
        FROM
          states_meta
        WHERE
          entity_id = '<your_entity_id>'
      )
  AND FROM_UNIXTIME(last_updated_ts) >= DATE_SUB(NOW(), INTERVAL 30 DAY)
  ORDER BY
	last_updated_ts ASC
  LIMIT
    1;

Home Assistant在保存數值是放入states資料表,而state透過metadata_id去對應entity_id,因此需要先從states_meta去找到entity_id對應的metadata_id,然後再從states找metadata_id符合的記錄。

將著states記錄中的時間欄位為last_updated_ts,使用timestamp格式,需要轉換成datetime類別才能做時間比較。

如果看不出timestamp的時間為某年某月某日,可以將值輸入到此網頁去轉換成時期格式。

DATE_SUB中的DAY,可以換成MONTH或是HOUR,依據使用需要。

步驟

從整合中,添加SQL。

官方文件中的說明

在欄位打上state,在選擇查詢將sql語句貼上。