生活在烏克蘭,我和我的家人已經非常習慣應對定期斷電的挑戰, 掌握 AppDaemon:抓取 Telegram 這是持續衝突和俄羅斯對我們能源基礎設施的攻擊的殘酷現實。 2022年冬季是個特別艱難的時期,停電頻繁且持續時間較長。情況一度好轉,但最近,隨著新一波攻擊,停電又捲土重來。
為了管理電力負荷,特別是在高峰時段,並在家庭和企業之間公平分配可用電力,當局製定了時間表。消費者被分成幾組,每組都有一個特定的斷電時間。這些時間表通常提前一天在運營商的網站上或透過其公共 Telegram 管道發布。
任務
身為智慧家庭愛好者,我自然希望將這些停電資訊整合到我的家庭助理系統中。想像一下可能性:自動關閉熱水器等耗能設備,以節省備用電池電量,或透過語音通知向我的家人提供早期警告:「注意! 30分鐘停電!是時候為手機充電了!
但問題是:這些時間表是動態的,每天都在變化,沒有固定的發佈時間。這意味著要不斷監控網站或 Telegram 頻道,以保持 Home Assistant 的最新狀態。
解決方案
我決定使用家庭助理的本地 荷蘭電報數據 日曆來處理這些停電時間表。我選擇從 Telegram 頻道抓取數據,因為它的訊息結構非常適合我的需求。
儘管 Home Assistant 具有內建的抓取整合和名為 Multiscrape 的更高級的 HACS 組件(請在此處查看),但我不知道如何使用這些工具來解決我的問題。也許這是可能的,但我在 Jinja 模板和複雜配置方面的技能還不足以勝任這項任務。因此,我轉向 Home Assistant 的 AppDaemon 整合。
根據官方文檔,“AppDaemon 是一個補充 Home Assistant 自動化和腳本組件的子系統。”簡單來說,它允許您編寫 Python 程式碼(應用程式)來控制和自動化 Home Assistant。
現在,我在其他程式語言方面有了一些經驗,但 Python 對我來說是新領域。因此,我轉向 ChatGPT,這是最新的科技轟動事件。我想:“這個人工智慧一定能幫我渡過難關!”劇透警告:這是一個混合體。雖然它確實推動我朝著正確的方向前進,但並不總是一帆風順。有時它所建議的功能和服務根本不存在。我花了很多時間弄清楚要呼叫的正確服務、如何傳遞變數以及如何正確格式化這些變數。
最令人頭痛的問題之一是弄清楚如何從 Appdaemon 中檢查 Home Assistant 日曆中是否已包含停電時間表,這樣我就不會遇到重複的事件。 ChatGPT 建議使用具有開始和結束時間的「calendar.get_events」服務來檢查現有事件。不幸的是,由於 AppDaemon 內的限制,這不起作用。經過大量搜尋和幾次沮喪的嘆息後,我偶然發現了Markus Ressel 寫的一篇非常有用的文章(https://markusressel.de/blog/post/calendar-integration- Between-home-assistant-and- appdaemon)。它讓我了解了問題的根本原因,並最終幫助我找到了一個保持日曆不重複的解決方案。
讓我逐步引導您完成如何使用 AppDaemon 將斷電時間表整合到 Home Assistant 的過程。
第 1 步:設定本機日曆
首先,在 Home Assistant 中建立一個名為「powercuts」的本地日曆,其中的日程安排將被匯入。這可以透過 Home Assistant 中的「裝置和服務」頁面完成:
步驟2:安裝AppDaemon
前往 Home Assistant 附加商店並安裝 AppDaemon 整合。
步驟3:設定AppDaemon
在開始整合之前,您需要將其配置為包含您的 2024 年母親節電子郵件行銷活動的 5 個技巧 應用程式所需的任何 Python 套件。對於我的項目,我添加了datetime
、requests
和beautifulsoup4
。您可以在 AppDaemon 的配置部分中添加這些包,然後繼續並開始整合。
第 4 步:找到正確的資料夾
導航到家庭助理的父目錄。裡面有一個名為 的資料夾addon_configs
。在 內addon_configs
,尋找名為類似名稱的資料夾abcd123_Appdaemon
(通常是字母和數字的混合,後面跟著 _Appdaemon)。在此資料夾中,您將找到另一個名為 的資料夾apps
。
第 5 步:創建您的 Python 應用程式
在該apps
資料夾中,建立一個新的 Python 檔案 ( .py
)。這是您編寫程式碼的地方。您在此文件中使用的文件名和類別名稱很重要,因為您稍後將在apps.yaml
文件中引用它們。
例如,如果您將檔案powercut_scraper.py
和類別命名為PowercutScraper
,則在設定 AppDaemon 時需要使用這些名稱才能知道在哪裡可以找到您的程式碼。
第 6 步:設定您的應用程式apps.yaml
在同一apps
資料夾中,您將找到一個名為apps.yaml
.此文件向 AppDaemon 告知您的自訂應用程式。新增一個像這樣的條目:
第 7 步:了解程式碼流程
- 觸發代碼:程式碼由名為 的事件觸發
"tele_powercut_scraper_event"
,該事件在二進位感測器(使用 Multiscrape 元件建立)開啟時產生。我之前已經設定了這個感測器,所以我用它作為我的觸發器。如果您願意,您也可以安排應用程式每隔幾分鐘運行一次。 - 抓取 Telegram 頻道:程式碼會遍歷 Telegram 頻道中的消息,找出日期和時間表。當它找到兩者時,它會呼叫一個函數來更新日曆。
- 更新日曆:此功能首先忽略任何早於今天的停電日期(不必擔心過去的事件!)。對於相關訊息,它將連續的每小時時段組合成更大的區塊(因為時間表是以一小時的間隔提供的)。
結論
我知道你們中的許多人可能不必擔心你們國家 兄弟數據 的停電和導彈警報。但我想分享這篇文章,因為我概述的方法和程式碼可以啟發您在自己的智慧家庭中創建更複雜的自動化。無論是管理高峰時段的能源使用,還是精心安排早晨的例行公事,AppDaemon 都能提供強大的工具,讓您的智慧家庭變得更加智慧。
因此,即使您足夠幸運,生活在沒有這些挑戰的地方,我也希望您在這裡找到一些有用的想法來增強您的家庭自動化專案。畢竟,智慧家庭的聰明程度取決於我們提。