接續上篇,這篇聊聊因為特斯拉居家電池 Powerwall 3 的控制系統不夠有效率,我就簡單弄了個工具來控制它充電放電,省省家裡的電費。粗略估計這幾小時的開發成本能讓我家省下每天二十美金的電費,甚至賺回一點錢。過程也順便體驗利用當紅 LLM 來協助開發流程,畢竟在 Google 工作幾年已經與外界技術隔絕太久啦。
為何省電?
因為電貴啊!灣區的電價有很多方案可以選,以我目前的 PGE 方案,高峰時期(下午三點到晚上十二點)每度電差不多 $0.51 美元,離峰則是 $0.32。
以冬天為例,因為有寶寶需要開暖氣,每天用電幾乎都集中在高峰時期,一天用掉四十度電左右,大概就噴掉 $20 美金!一個月光是電費就六七百美金。這還是在我們白天都不在家,只在公司把車子電充飽的情況估計。

順便提一下,我家那台老特斯拉一度電大概可以跑 4~5 英里。即使只拿來通勤,一天也要四度電左右,一個月就是 80 度電,也就是四十美金左右!這也解釋了為何每天公司的免費充電站都塞滿了車,排隊嗷嗷待哺等著充電。
為何自己控制電池?
上文提到我最近安裝了特斯拉電池板 Powerwall 3,理論上它能幫你智能地估計何時該充電與何時該放電。

但我發現它有點笨,比方說在午夜十二點時電價會變便宜,此時它就開始瘋狂充電,把電池給充到飽。但日出後太陽能也會幫電池充電的,因為電池已飽,導致太陽能通通都便宜賣給電網,而不是存在電池內等到高峰時再高價賣出。
一樣的例子也發生在晚上:在高峰時期,它的演算法在上半夜就把電都賣給電網,沒留多少給家裡自用,導致後半夜我們被迫需要從電網買高價的電來用!
雖然它網站號稱需要點時間學習我們的用電規律,但為了好玩,我就弄了一套簡單系統來稍微優化一下。
兩大目標
低買高賣
獲利的本質就是低買高賣啦,電池就像水桶,在便宜時把它塞滿,從太陽能或者電網充電。而在高價時就儘量不跟電網買電,盡可能自用甚至是賣回去。

用 LLM 來開發玩具
另一個目標就是開發點東西來玩,寫點炒麵程式碼。在 Google 工作的問題之一就是沒什麼機會接觸外面的技術,以及所有程式碼都要寫得很乾淨可維護。所以開發這種自用的玩具就可以試試其它有趣的技術,順便寫一些不用測試維護的炒麵程式碼~
使用工具
- Amazon EC2
- Github: https://github.com/jasonacox/pypowerwall
- LLM: Gemini vs ChatGPT
因為該 Github Repo 是用 Python,我就順便寫點 Python 炒麵啦。
開發過程
因為目標是省錢,就打算用第一年免費的 Amazon EC2,每隔幾小時來檢查是否要修改電池狀態,需要的話就用 Tesla API 來修改。
以前在 Startup 時這些流程都已經是肌肉記憶,不用查文檔就可以從零寫出來,寫 Python、開 EC2、用 Github 與 Crontab 之類的。但進了 Google 後長期只接觸內部工具,這些早已通通忘光。剛好這次就利用 LLM 當開發助手,效果卓越。

比方說我的電腦連 Github SSH 都沒設,以前要上網查,現在就問問 LLM 就能給出滿意的答案。類似的案例也有 Crontab 語法忘了,寫個檢查小時的 Python utility 之類的,大部分開發時間變成問 LLM 後把答案貼過來,而不是自己去查文檔後寫出來。

省錢的目標函數
理想的函數是在電價變貴前用最低的成本以充飽電池,在電價變貴時,確保家裡電夠用的前提下賣掉多的電。但實作上有點複雜,因為要能準確地預估接下來幾小時的太陽能充多少電,今晚家裡需要多少電,甚至與電網買賣電的速度也不是常數,所以很難寫出完美的函數。考慮時間不多,我就先弄個近似的解法,以後再優化。
- 至於電池健康之類的,之後再來慢慢調參數吧。

當然也能說用 AI 把上面因素通通考慮進去,這也是未來可以考慮的方向。但把天氣與用電資訊塞進 prompt 裡面可能會導致我無法用免費的 LLM,以及特斯拉號稱已經在做這件事,可能直接等現成的版本比較實際。
其實第一版就只是想解決它太早充放電的問題,所以控制邏輯很簡單:
- 如果已經快要到高峰期間,電池沒滿的話,就開始充電。
- 剛進入離峰時期,別急著充電,因為會有太陽能。
- 如果已經快要到離峰時間,還剩下一堆電的話,就開始賣電。
- 剛進入高峰時期,別急著賣電,因為每天的用電量會波動。
即使沒用到 AI,但光是這些簡單的檢查就能大幅度提升當前的使用效率。
實驗結果
經由上面設置後,我家基本上在高峰期間能夠完全不從電網拿電,還能賣不少電出去。而在離峰時間,能夠把電池盡可能用太陽能充飽後才用到電網的便宜電。

上面這張圖能看到,我大概從中午後開始從電網充電,讓它在高峰開始的下午三點時電池剛好充滿。三點後電價變貴,就先不賣電,此時因為大家還沒回家,靠太陽能就很夠供應家電(冰箱之類的)。
即使五六點回家後也沒用多少電。天黑後開暖氣就開始耗電,但其實也用不完。所以在九點前我就開始賣電給電網,但也留一些給自家用,以便撐到午夜十二點(在此之後電價才變便宜)。

從電網的角度來說,我在電價貴的時候(下午三點到午夜十二點),基本上都是只賣電不買電,所以那段時間的曲線是負的。而在其他時段,我會慢慢地把電池充滿,確保在電價變貴時有足夠的電能賣。
獲益預估
這種玩法的獲益是用電越高則省越多,因為能轉移支付電網的成本到低電價時段。非常粗略的估計,一天如果一樣花四十度電的話,
- 舊方法:付給電網 $20 美金
- 新做法:用 $8 美金買電,確保居家用電後再用 $10 美金賣出剩下的,倒賺 $2 美金
- 新舊方法比:賺 $22 美金
當然夏天時差距大概會小不少,因為不用開暖氣,加上灣區夏天涼爽,常常沒在開冷氣。到時大部分收益應該是來自於從太陽能瘋狂充電賣電,而不是這種轉移成本。
結語
這個大部分是娛樂性質,長期來說特斯拉應該會有更聰明的方法來控制電池的充放電。其實這也只是控制時間,具體要充電放電多少還是由特斯拉決定的,我沒有 API 能控制到這麼細節,但看來調整時間後它還是能做到不錯的,就希望未來它可以把時間也考慮進去啦。

最後附上最近看到股市的心情。