- 积分
- 4795
- 金钱
- 4287
- 威望
- 0
- 贡献
- 0
- HASS币
- 156
论坛元老
佑桑
- 积分
- 4795
- 金钱
- 4287
- HASS币
- 156
|
本帖最后由 chinyaolin 于 2020-12-5 23:37 编辑
先給兩篇連結
- ESPHome 提供 REST API, 可直接取得 sensor 資料 或是 直接控制 switch/light 開關
Web Server API - ESPHome 從 15.0 版之後, 提供了 http_request 元件, 可 get/post/put 呼叫外部 URL
HTTP Request
沿襲之前的「愛老婆的好男人(床頭燈聯動)」思路,
今天要讓兩個床頭燈在僅有 wifi 而沒有 HA 的情形下, 實現聯動互控
這個思路大家可以發揮想像力, 可以應用在雙控、三控等各種場景
一、說在前頭
- 要想使用 Web Server API, 你的 ESPHome 需高於 1.3 版, 應該沒有人使用這麼舊的版本了
- 要想使用 HTTP Request, 你的 ESPHome 需高於 15.0 版, 且使用的 Arduino framework 高於 2.5.0 (後者若你已經用 15.x 一定沒有問題)
- 另外, 因為載入 HTTP Request 元件之後, 幾乎 100% 會讓你的固件大於 512KB, 對於使用 ESP8266 來說, 未來將無法直接 OTA 刷固件, 而需要改用二階段升級, 大概的做法如下:
- 製作一個全新的 ESPHome YAML 檔案, 只留下 esphome/wifi/web_server/api 等最精簡的設定, 編譯一個最小固件備存 (miniESPHome.bin)
- 在刷你自己的新固件之前, 先透過 Web 介面刷入 miniESPHome.bin 後重啟
- 重啟之後, 這時才可以透過 ESPHome 介面上傳固件
- 若遇到 mDNS 無法解析時, 也可以用 (2) 的方法上傳新固件
- 當然, 若將模塊拆下直刷, 保證就沒有問題了
- 經過實測, 也可以使用 http://ota.tasmota.com/tasmota/release/tasmota-minimal.bin (379k) 做為中繼固件, 先經由 ESPHome Web 上傳這個固件後重啟, 再透過 Tasmota Web 上傳新編好的 ESPHome 固件
二、老婆的床頭燈
我用了 Sonoff RFR3 來做床頭燈的控制, 這裡就使用最簡單的 GPIO 控制開關燈, 應該沒什麼難度
這裡為了比較好閱讀, 所以也用了一點我之前發表過的小技巧 YAML 混搭 JSON 讓你的設定檔更簡捷
#################################################################################
substitutions: { desc: 老婆床頭燈, devicename: SONOFF_RFR3_AD2EA }
#################################################################################
esphome:
name: $devicename
platform: ESP8266
board: esp01_1m
packages:
wifi: !include common/wifi_YAO_and_SOPHIA_2.yaml
apiotaweb: !include common/apiotaweb_default.yaml
binary_sensor:
- platform: gpio
id: btn1
internal: true
pin: {number: GPIO0, mode: INPUT_PULLUP, inverted: True}
filters: [{delayed_on: 40ms}, {delayed_off: 40ms}]
on_press: [{light.toggle: light1}]
output:
- {pin: 12, id: output1, platform: gpio}
light:
- {id: light1, output: output1, platform: binary, name: '${devicename}_lt1'}
switch:
- {platform: restart, name: '${devicename}_restart'}
三、好男人的床頭燈
不廢話, 直接上代碼
四、解釋一下
- http_request : 載入元件
- packages : 把共用的設定另外存放,編譯時載入, 未來要統一修改也方便 [ 官網的說明 ]
- on_click / on_multi_click : 讓一個按鍵透過短按/長按來執行不同的功能
- http_request.post : 使用 post 方法呼叫指定的 URL
- URL : 格式為 http://[IP位址/mDNS網址]/<domain>/<ID>/<action>
其中,
- [IP位址/mDNS網址] : 192.168.x.x 或是 sonoff_rfr3_ad2ea5.local 可以連結到你想控制的模塊
- <domain> : 你在 ESPHome 想控制的實例所設定的 domain, 我這裡是 light
- <ID> : 這裡比較麻煩, 不是你在 YAML 檔中所設定的 ID。依照官方的說法 -->「此ID是通過採用組件的名稱,去除所有非字母數字字符,將所有內容都變為小寫並用下劃線替換所有空格來創建的」, 轉換細節請參考前面給出的官網連結。以我為例, 我要控制的燈是老婆的床頭燈, 這個燈在我的 YAML 檔中取名為SONOFF_RFR3_AD2EA_lt1 , 經由剛剛說明會轉換為 sonoff_rfr3_ad2ea_lt1
- <action> : 不同 domain 支援的 action 不同, 還是請大家去看官網, 我這裡選擇使用 toggle
- 整串連結起來, 從我的床頭燈要控制老婆床頭置所使用的 URL 為 http://sonoff_rfr3_ad2ea5.local/light/sonoff_rfr3_ad2ea5_lt1/toggle
以上,
我再也不同擔心 HA 主機發生狀況時,
沒有辦法幫老婆關燈了
|
评分
-
查看全部评分
|