DIY水族溫度計接入Home Assistant

DIY水族溫度計
最近看水母討論群組內在找為何水母會出問題時常常問到溫度,可見溫度對於水母的生長是十分重要的一個因素。如果在海洋內由於水體夠大,水溫一般來說不會出現太大的震盪,但養殖在魚缸內水溫就容易因為室溫的變化而跟著變動,水體越小越容易上升或下降。這時候有些人會選擇使用冷氣固定室溫,或是使用水冷機。不過我沒有水冷機,24小時開冷氣也不太經濟。於是就想說能不能接入我原本就有在用的Home Assistant做監控,必要時可以遠端開啟冷氣,之後如果購入水冷機也可以自動化控制水冷機的開關。不過上網尋找了一下,並沒有找到能夠放在魚缸內的智慧溫度計,大多是測量室溫的智慧溫度計。

看來只能靠自己了,先前有在智慧家庭的群組聽過ESPHome,據說可以將開發板接上各種感測器後加入HA的系統中。可玩性十分高並且ESP的開發板也不貴,於是這次就藉由這個機會來試試看。

事前準備

材料

  • ESP32 (NodeMCU-32S)
  • DS18B20感測器(防水版)
  • 4.7k電阻
  • 麵包板 / 擴展板
  • 跳線

接線

可以參考這個網站:ESP32 - Temperature Sensor _ ESP32 Tutorial

  • 擴展板

    後來發現要接在5V,測得的數據比較準,不然會低1度C左右,對照組是另一條2m的防水DS18B20、水族溫度計、液晶溫度計、食品溫度計,它們的數值是比較接近的。

    擴展板

  • 麵包板

    麵包板

安裝ESPHome

  1. 在Home Assistant的附加元件商店

  2. 新增裝置 + NEW DEVICE

    + NEW DEVICE

初始化ESP32

設定名稱及網路

設定名稱

網路我因為設定過了,沒跳出來…

安裝

  • 跳過這步

    安裝

  • 選擇ESP32

    選擇裝置類型

  • Install

    安裝

  • 將NodeMCU-32S用USB連接到安裝Home Assistant的機器上

    選擇實體連接

  • 安裝

    選擇USB

    安裝中

    安裝中

  • 等它跑完之後就可以按下STOP,之後通知就會自動找到新設備,不過可以稍後再設定

    HA自動發現裝置

設定檔

接下來我們要把config檔寫入ESP內

點選EDIT

點選EDIT

可以看到YAML格式的設定檔,需要做一些修改:

  • name、key及password的部分應該會自動生成

  • esp32 board類型改為

    1
    2
    esp32:
    board: nodemcu-32s
  • 加入DS18B20的設定參數

    我們的資料針腳接在GPIO21,所以這裡填入GPIO21。資料更新間隔沒寫的話預設是60秒,如果要手動設定可以像範例這樣寫。第一次使用的時候要先取得sensor的address,所以先不用sensor區域。

    1
    2
    3
    4
    5
    6
    # DS18B20 Temperature Sensor
    dallas:
    - pin: GPIO21
    update_interval: 60s

    # Note you don't have to add any sensors at this point

    完整config範例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    esphome:
    name: jellyfish-ds18b20

    esp32:
    board: nodemcu-32s

    # Enable logging
    logger:

    # Enable Home Assistant API
    api:
    encryption:
    key: "XXXXXXXXXXXXXXXXXXX"

    ota:
    password: "XXXXXXXXXXXXXXXXX"

    wifi:
    ssid: !secret wifi_ssid
    password: !secret wifi_password

    # Enable fallback hotspot (captive portal) in case wifi connection fails
    ap:
    ssid: "Jellyfish-Ds18B20"
    password: "XXXXXXX"

    captive_portal:

    # DS18B20 Temperature Sensor
    dallas:
    - pin: GPIO21
    update_interval: 60s

    # address may different
    #sensor:
    # - platform: dallas
    # address: 0x5e030497940af528
    # name: "Jellyfish Temperature"

燒入ESP32

  1. SAVE後按INSTALL,看是要用Wirelessly或是接線都可以

    • 無線
      選擇無線燒錄
    • 有線
      選擇有線燒錄
  2. 等到安裝完成就可以找到sensor的address,把它記下來

    sensor的address

補上 sensor address

回到YAML,把sensor資料補上(或是取消註解)。完成後同樣SAVE、INSTALL,再次燒到ESP32內。

1
2
3
4
sensor:
- platform: dallas
address: 0xFC04146F37EDFF28
name: "DEVICE NAME"

加入整合元件

從剛剛的通知裡進入設定頁面,輸入在YAML內顯示的金鑰。

輸入金鑰

複製"YOUR_KEY"那顯示的文字,貼到金鑰欄位。

1
2
3
4
# Enable Home Assistant API
api:
encryption:
key: "YOUR_KEY"

完成後就會看到整合內有剛剛設定的ESP設備

新增到HA裡面

完工

最後就可以加入主面板

主面板
完成,測試中

參考