:::

Home Assistant要怎麼取得感測器的平均溼度? / How to Get the Average Humidity of the Sensor in Home Assistant?

2023-0922-210618.png

請使用Average Sensor


Home Assistant

https://www.home-assistant.io/

https://www.home-assistant.io/ 

Home Assistant是一個開源的智慧家居自動化平台,旨在讓使用者能夠輕鬆控制和監視他們的家居設備和服務。它具有高度的靈活性和可擴展性,可支援各種不同品牌和類型的智慧設備,例如燈泡、冷氣、攝影機、喇叭等。也可以跟感測器整合,隨時監控家裡的溫度與溼度。搭配自動化的腳本,Home Assistant就能夠根據室內的溫溼度狀態來控制冷氣、暖氣。

溼度感測器 / Humidity Sensor

tw-11134207-7r98q-llxd3riiovx752-cropped.png

儘管Home Assistant可以接收感測器的溼度,但感測器準不準,又是另外一回事了。我用的感測器是Tuya的溫度與紅外線遙控器,以WIFI連接。拿它用來感測溫度的時候還沒什麼問題,不過在溼度感測上就不如預期。

2023-0922-202016.png

上圖是該感測器取得的溼度資訊。有時候溼度變化很明細,這是因為我開了除溼機的緣故。但除此之外,溼度還是會在某些時候頻繁地改變。今日天氣晴,我的房間也沒在玩水,照理來說溼度變化不應該這麼頻繁。也就是說,感測器的溼度可能會有異常值(outlier)。

如果要在時間序列的資料上消除異常值,除了直接設定上下限移除極端值之外,比較好的做法應該說平滑化。平滑化的做法有很多種,最直接的作法是取一個時間範圍,並計算這個範圍內所有數值的平均值,作為該時間點的代表性數值。

2023-0922-202858.png

https://community.home-assistant.io/t/average-sensor/111674 

上圖是Limych展示了實際溫度跟用溫度平均值平滑化之後的差異。青綠色的線條是實際溫度,可以看到在這兩天內,溫度在白天時會出現高峰,到夜晚時則下降。紅色的線條是平均溫度,計算方式是取得48小時內所有溫度的平均值。最後取得的結果可以看到溫度沒有劇烈的改變,不會明顯受到白天跟夜晚所帶來的極端值影響,整體而言更容易看到溫度上升的趨勢。

我想要的就是這種平滑化去除異常值的效果。但這要怎麼在Home Assistant裡面實現呢?

Average Sensor

https://github.com/Limych/ha-average

https://github.com/Limych/ha-average

Limych在GitHub發佈了Home Assistant的自訂套件Average Sensor。這個套件可以計算特定數值在過去的一段時間內的平均值,並將結果顯示為一個虛擬感測器。讓我們來看看要怎麼使用它。

安裝 / Install

https://github.com/Limych/ha-average#installation

https://github.com/Limych/ha-average#installation 

最簡單的方式是在HACS裡面搜尋「Average」並安裝。但我是使用Docker來運作Home Assistant,這種方式不能使用HACS,所以我要看下面的「Manual installation」手動安裝。

手動安裝的做法如下:

  1. 找到configuration.yaml的所在資料夾。
  2. 進入該資料夾下的custom_components資料夾。如果沒有custom_components資料夾,則請你建立它後並進入。
  3. 在custom_components資料夾裡建立average資料夾,並且進入它。
  4. 下載Average Sensor的程式壓縮檔average.zip。下載網址為:https://github.com/Limych/ha-average/releases/latest 
  5. 將壓縮檔average.zip解壓縮。注意,不要再另外建立資料夾,所有檔案都在average資料夾內。

2023-0922-204322.png

最終你將看到「manifest.json」、「services.yaml」、「sensor.py」、等檔案。這樣就可以進入設定了。

設定 / Configuration

2023-0922-204444.png

找到Home Assitant的configuration.yaml,加入以下設定:

sensor:
  - platform: average
    name: 'Average Humidity'
    unique_id: average.average_humidity
    duration:
      minutes: 30
    entities:
      - sensor.real_humidity_sensor

如果你的configuration.yaml已經有「sensor:」了,你只需要將「- platform: average」之後的內容貼到「sensor:」下面即可。要注意縮排跟空格不能改變喔。

接下來我們來調整這段設定的內容。這個設定有5項參數,意義如下:

  • 「platform: average」。使用自訂套件average,請維持這行不要修改。
  • 「name: 'Average Humidity'」。名稱為「Average Humidity」,會以此出現在Home Assistant的網頁上,請改成你容易識別的名稱。
  • 「unique_id: average.average_humidity」。實體ID為「average.average_humidity」。如果你需要將此實體跟其他自動化整合,那最好設定一個實體ID。
  • 「duration:」。設定要計算的時段,下面的設定「minutes: 30」表示取30分鐘內的平均值。支援seconds、minutes、hours、days四種時間設定。
  • 「entities:」。設定要取得實體的值。我設定的「- sensor.real_humidity_sensor」表示會從實體ID「sensor.real_humidity_sensor」裡取得數值。你可以搭配多個感應器,從多個實體一起取平均值,以免單一感應器壞掉造成整體故障。

https://github.com/Limych/ha-average#configuration-variables

https://github.com/Limych/ha-average#configuration-variables

其他的用法請參考「Configuration Variables」說明。

2023-0922-210107.png

儲存好configuration.yaml,並且重新啟動Home Assistant之後,你就可以看到設定好的實體。由於我才剛設定好,平均溼度的資料還沒很多,不過可以看到得出整體溼度變化比較平緩,這樣就不會有突如其來急劇變化的異常狀況了。


有了智慧家居的感測器之後,你通常會偵測什麼數值呢?

  • 1. 溫度
  • 2. 溼度
  • 3. 亮度
  • 4. 存在感應
  • 5. 其他:在下面留言分享吧!