我其中一項疫情期間培養並持續至今的嗜好是居家自動化。我發現了 Home Assistant — 這個受歡迎的開源、高度可自訂的居家自動化平台 — 以及你能用它來讓你的家運作得更好的各種複雜功能。
我患有注意力不足過動症 (ADHD),並發現 Home Assistant 是管理執行功能障礙的寶貴工具。我用它來接收口頭的日曆提醒、洗衣提醒、計時器,以及監控我的門鈴攝影機和我家狗狗的保母攝影機。對我來說,它也是純粹的書呆子樂趣的絕佳來源。而我最近在我對居家自動化的執著上,邁出了最令人欣喜若狂的書呆子一步。
Home Assistant 讓你能夠建立自訂儀表板來與你的智慧家居裝置互動。社群成員花費無數小時來完善他們的儀表板,其中一些真的令人印象深刻。我甚至發現了一個 Home Assistant 的社群主題,讓它在很大程度上看起來像是《星艦迷航記:銀河飛龍》時代的 LCARS 電腦控制系統。LCARS 並不是一個實用或有用的電腦介面。它的既定目的是「在觀眾於場景背景中看到它時,能暗示出一些組織良好的東西」。但它確實很華麗。這種美學在八歲時就抓住了我,並且從未放手。
我的大部分居家自動化都是透過實際的自動化完成,無需我的介入,而且我確實廣泛使用語音控制(是的,「電腦」是我的喚醒詞。觀看《星艦迷航記》時出現的誤觸警報是值得的)。但有些事情我總是想要一個儀表板。有時你想手動控制事物。它對於天氣顯示或觸發自訂燈光場景很有用。自從我迷上 Home Assistant 開始,我就一直渴望使用 LCARS 風格的介面。上面連結的主題非常好 — 我用它作為我手機的主要儀表板。但它並不完美。
肘部分隔線的尺寸和比例有點偏差,按鈕也都被分成兩塊。這些都是小問題。但我屬於那種希望將準確性發揮到極致的粉絲。所以我自己動手做了。
我最近發現了 LVGL (Light and Versatile Graphics Library),它能讓你建立比標準 Home Assistant 儀表板設定更具可自訂性和複雜性的圖形介面。我認為一定有辦法讓 LVGL 與 Home Assistant 溝通。最後一塊拼圖是 ESPHome。ESPHome 是一個開源韌體框架,讓像我這樣的編碼新手能夠使用相對簡單的標記語言來程式設計 Wi-Fi 啟用微控制器,例如 ESP32、ESP8266 和 RP2040,並且它與 Home Assistant 深度整合。可能性是無限的。我使用 ESPHome 元件作為運動偵測器、存在感測器、空氣品質感測器,以及 LED 燈條的控制器。而且 ESPHome 在特定的顯示硬體上支援 LVGL。
於是我購買了這款帶有內建 ESP32-S3 微控制器的 Waveshare 7 吋觸控顯示器,並開始動手。我花了好幾個小時在網路上搜尋螢幕截圖和粉絲重製的 90 年代《星艦迷航記》中眾多 LCARS 面板。我最終鎖定在這個畫面上:
這是一個在《星艦迷航記:航向天際》中 Tuvok 房間裡看到的圖形。我不確定它在劇中 supposed to do,但它有許多色彩鮮豔的按鈕和圓角。最關鍵的是頂部有兩個儀表,不知道是做什麼用的。但對我來說,它們看起來像是燈光亮度控制器。所以我的設計就有了方向。
接下來是建構。要在 ESPHome 中使用 LVGL 建構介面,你需要使用 YAML 來指定你想要的圖形元素的特性(尺寸、位置、顏色等)。LVGL 稱它們為「小工具」。所以我首先在 Adobe Illustrator 中創建了我的設計作為參考。
然後我開始了相當枯燥的任務,在 Home Assistant 的 ESPHome 編輯器中重現這個設計。幸運的是,你不需要知道 C 語言(LVGL 是為此編寫的語言)才能在 ESPHome 中使用它。取而代之的是,你使用 YAML,這對像我這樣熱情的業餘愛好者來說更加寬容。一個接一個元件,我指定了每個按鈕的尺寸、位置、顏色、標籤以及形狀。在 LVGL 中,最好是使用內建的小工具,而不是僅僅插入圖片。LVGL 確實有這種能力,但 ESP32 微控制器沒有太多額外的資源,圖片會很快耗盡它們。這個設計中唯一實際使用的圖片是右上角的兩個儀表。所有其他形狀都是 LVGL 按鈕小工具。
對於不規則的形狀,我確實不得不稍微作弊。LCARS 介面中的一些按鈕只有兩個圓角。LVGL 按鈕在圓角方面是全有或全無。不過幸運的是,LVGL 不介意你將形狀堆疊在一起。對於半圓形的按鈕,我只是在方形按鈕的末端堆疊了一個圓形。它們顏色相同,所以看起來像一個單一的形狀。中間的肘部也是用類似的方式製作的。
最終我成功了。一個真實可信的 LCARS 觸控螢幕出現在我的客廳裡。12 歲的我一定會非常佩服。41 歲的我當然非常佩服。
剩下要做的就是將它連接到我的裝置。在進行這個專案時,我正待在客廳,所以我選擇了我的客廳燈。 (是的,我在對我到底要做什麼有明確想法之前就完成了這個專案。這不是一個適合完全務實的人的嗜好。)
我設定了一個特定的按鈕,在燈亮時變成白色,在燈滅時恢復原色。另一個按鈕實際上可以切換燈的開關。越多的按鈕做越多的事情,對我來說就越真實。而且這個面板上的按鈕比我家的燈還多。其中一個儀表同時反映並控制著這些燈的亮度。有一些狀態按鈕顯示我的家庭操作模式是「正常」還是「舒適」,這決定了我廣泛的 WLED 設定中的燈光場景。
帶有面板的觸控螢幕放在沙發旁的支架上。它一點也不實用。我們對 LCARS 已經知道了這一點。然而,它很美麗。而且它讓我的書呆子心靈感到非常高興,因為我現在可以像我童年的英雄控制他們的星艦一樣控制我的家。