智慧家庭第六步 Home Assistant接入超便宜溫濕度計

如果你還沒有安裝好Home Assistant 請先閱讀

智慧家庭第一步 在Synology上架設Home Assistant

如果你還沒在Home Assistant上安裝HACS 請先閱讀

智慧家庭第二步 Home Assistant安裝 HACS

如果以上兩個步驟都已經完成,那麼我們就往下繼續看吧

本篇以switchbot Thermometer/Hygrometer sensor為範例,透過switchbot提供的 cloud API取得資料回到Home Assistant中

參考資訊 :

前言 :

switchbot 溫濕度計其實只需要購買本體,不需要購買其他配件就可以在手機APP中加入裝置並且看到資訊,而這次要做的是需要透過Wifi接入Home Assistant中,所以必須多購入switchbot hub mini,未來如果在其他空間中也需要擺放溫濕度計,那麼就只要買溫濕度計本體就行,只需要有一個hub存在即可。

這大概是目前最便宜的解決方案

github上有另一個專案是透過Home Assistant本身的藍芽裝置去搜尋附近的switchbot裝置,這個方法也是可行,只是我Home Assistant是裝在虛擬機中,無法使用藍牙,而且藍芽有距離限制,因此本次採用的是switchbot cloud API方式來取得資料。

Step1 : 將溫濕度計/Hub mini 加入switchbot APP中

switchbot的溫濕度計擁有網路以及藍芽兩個介面,因此加入方式超簡單,安裝好APP登入後,按右上角的+號就能找到裝置

switchbot

這時候,手機是透過藍芽跟溫濕度計連線的,所以在裝置附近的話才能夠看到數值,有測試過隔一個房間就會收不到了

接下來,再將hub mini用一樣的方式加入switchbot app中,接著點入hub mini頁面,選擇右上角的設定按鈕

switchbot hub mini

進入畫面後,選擇wifi settings

switchbot hub

進到這個畫面之後,請選擇要讓hub mini連接上的無線網路SSID,以及輸入密碼

switchhub mini

這樣子就完成了初期設定了,這時候神奇的事情來了,同一個App底下的裝置都會走跟Hub mini一樣的網路設定連接到家中的wifi

這時候就可以發現,手機已經不是用藍芽連接到溫濕度計上了,而是透過網路介面連接到switchbot cloud上

Step2 : 取得API token

接下來就是要取得API token了,這樣子才能讓Home Assistant透過這組API token向switchbot cloud取得資料

點選App右下角的Profile

switchbot

選擇Perferences

switchbot

接著找到,底下的App Version,對著這個按鈕點10下,對你沒有看錯就是對他點10下

switchbot

然後,畫面上就會出現Developer Options這個選項

switchbot

進入畫面之後,產生一組新的API Token,然後複製起來,這組token很重要,接下來很多步驟都會用到它

switchbot

Step3 : 取得 device ID

device ID就是你的溫濕度計裝置的ID,拿到這個ID之後,下一步就是透過API Token以及device ID來取得數值內容了

首先如果你是windows用戶,請在搜尋中打上cmd,打開命令模式,如果是Mac用戶,請使用”終端機”

接下來需要輸入一個指令,基本上不難照貼就好

在終端機中貼上上面的指令,把[API_TOKEN]這幾個字換成你剛剛在APP中找到的就好,按下Enter之後你應該會看到類似這樣的畫面,找到deviceId後面那串用中括號刮起來的文字就是我們要的deviceId了

switchbot cloud api

接著可以用下一行指令來看看這個device可以提供我們什麼樣的資料

同樣的把[API_TOKEN]以及[DEVICE_ID]替換成你的就行了,接著你應該可以看到類似下面的畫面,其中有看到humidity以及temperature兩個數值就是我們會用在Home Assistant中的了

switchbot cloud api

Step 4 : 設定Home Assistant YAML擋

首先,我們剛剛拿到了很多token deviceId以及網址之類的東西,我們先找個地方存下來

在根目錄底下新增一個secrets.yaml檔案,把剛剛拿到的資料存下

switchbot_api: “[TOKEN]”
switchbot_device_status_url: https://api.switch-bot.com/v1.0/devices/[DEVICE_ID]/status
switchbot_device_deviceId: [DEVICE_ID]

如果你有多個裝置就放多個deviceId跟url這樣

接著,新增一個rests.yaml檔案在根目錄,輸入以下資訊

resource: !secret switchbot_book_room_status_url
method: GET
scan_interval: 120
headers:
Authorization: !secret switchbot_api
Content-Type: “application/json”
sensor:
name: “book_room_temperature”
value_template: “{{value_json.body.temperature | float}}”
unique_id: “book_room_temperature”
unit_of_measurement: °C
name: “book_room_humidity”
value_template: “{{value_json.body.humidity | float}}”
unique_id: “book_room_humidity”
unit_of_measurement: “%”

簡單說明一下,看到!secret開頭的就是我們剛剛放在secret.yaml中的資訊,而value_template則是描述API拿回來的資訊格式

我們需要兩個資訊,一個是溫度一個是濕度,所以在sensor中我們建了兩個,分別去取得value_json中的bosy.temperature以及body.humidity兩個,unit_of_measurement則是去定義這個數值的單位是什麼,unique_id則是去表達在Home Assistant這個sensor的唯一ID,自訂不重複即可

Step 5:重新啟動Home Assistant

再重新啟動Home Assistant後,我們就可以在”實體”中看到剛剛新增進去的兩個sensor了喔

home assistent sensor