Coding4Fun - 智慧插座用電量長期監測
2 |
前幾天看到朋友入手新玩具,剛好我也是無風扇迷你電腦愛好者,免不了交換點心得兼請益最新資訊,卻冷不防被推坑,說有款 WiFi 控制智慧插座 C/P 值不錯,六孔 110V 插座可獨立遙控,能定時開或關,還有耗電監測功能。我對耗電測量向來感興趣,之前買過單孔瓦特計(參考:電器耗電知多少?),陽春款式只有 LCD 顯示肉眼判讀,新式產品內建 WiFi 又能手機控制,代表一定有 Protocol 可查詢資訊跟控制,肯定能寫程式搞出新花樣,感覺很好玩耶! 想著想著,腦波一弱,就不爭氣地下了單。
才三天,新玩具就到貨了,體積比想像大些,蠻厚實的,質感不錯。插座內含微處理器及無線網路,平時需統計用電數據,本身耗電約 3 瓦左右,機體會微微發熱。
安裝好 App 註冊帳號,很快設定好並新增插座,便可由 App 遙控插座開或關,點開插座內容,除可設定排程、倒數計時開啟或關閉,還能查詢即時耗電(瓦特)、當日、七天及 30 天平均用電量(kWh)及使用時數。
不過,App 沒法一次看六個插座的用電數字,也沒法顯示過去一段時間內的電量起伏變化,要長期監測總不會拿紙筆記錄吧?這樣跟之前的陽春瓦特計有什麼兩樣,愧對它具備 WiFi 功能。於是,我義無反顧地走上 Coding4Fun 之路!
趁著週末,用 .NET Minimal API + EF Core + SQLite + Vue3 + Highchart 簡單拼裝出我心中的理想版本,丟到家用伺服器 CentOS 上執行:
上面的圖是小黑 T470p 電源供應器的用電統計,16:05 - 16:07 期間有一段 50W 高原,是故意開兩個 YouTube 4K 影片讓 CPU 100% 做出來的,之後有段趨於零是蓋上螢幕睡眠時的數字,平時正常使用(上網查網頁、開 VSCode、VS2022 寫程式)則落在 25W 左右,會間歇短暫上升隨即降回,最高到 50W。
這才是我心目中合格的耗電監測功能,一次監看所有插座的耗電狀況,點一下查詢過去期間的耗電曲線,很酷吧? 另外,服務也提供 API 方便取回指定期間的資料做進階分析:
我把這次的題目當成一次全端綜合演練,測驗自己能在多短時間做完包含前端、後端含 EF Core 的小型服務,以老人的標準來說還行,過程新學了一些知識,溫習幾個老技巧,收獲挺多,是一次愉快的 Coding4Fun。
底下是一些技術參考資料,分享給有興趣 DIY 的同學:
- TP-Link WiFi SmartPlug Client and Wireshark Dissector
智慧插座通訊協定測試工具,透過 TCP 9999 Port 溝通(採匿名存取無權限概念,需留意無線區域網路安全性) - TP-Link Smart Home Protocol Command List
通訊協定指令清單 - 我的 TP-Link Smart Devices SDK Fork
已有社群朋友分享連接智慧插座的 .NET 程式庫,但只有切換開關 API,我 Fork 加上查詢耗電資料的 API (已發 PR,但能否 Merge 看緣份) - ASP.NET Core 極簡風 - 嵌入 .html/.css/.js 靜態檔案徹底實現單檔部署
因偏向短期執行服務,這回我沒包 Docker 而是針對 Linux 平台(使用-r linux-x64
參數)編譯成單一執行檔,丟到 24 小時運轉的家用伺服器執行:
Comments
# by solonglin
請教一下黑大,要如何知道買的智慧型產品 有API可以讓自己寫程式呼叫用,我看官網也沒寫 看到你的文章才知道可以自己Coding4Fun
# by Jeffrey
to solonglin, 我想官方並未把這個協定定位成公開的 API,也從未鼓勵大家串接(但也沒禁止就是了),這是沒有官方文件或資訊的原因,網路上的規格跟程式庫是社群朋友自已分析跟開發出來的,要靠關鍵字搜索。