在我之前的一篇文章「掌握 AppDaemon:抓取 Telegram 資料以建立 Home Assistant 日曆事件」中,我分享瞭如何結合 AppDaemon 和網頁抓取將事件新增至 Home Assistant 的本機行事曆。
在該範例中,我必須同時使用 AppDaemon 和 Home Assistant 腳本來完成工作,因為 AppDaemon 不支援該calendar.get_events
服務。現在,儘管 Home Assistant 本地日曆已經取得了長足的進步,但整合仍然存在一些限制。經過多次更新,它仍然不提供更改或刪除日曆事件的內建服務。
問題:
要完全理解我正在解決的問題的背景,請參閱我的第一篇文章。在那裡 墨西哥電報數據 我解釋瞭如何設定一個系統,使用從 Telegram 頻道抓取的資料自動將斷電通知新增至我的 Home Assistant 日曆。
為了使我的斷電通知系統充分發揮作用,我需要一種方法來刪除不再相關的日曆事件。有關時間表變更的更新來自我在上一篇文章中討論的相同 Telegram 頻道。透過分析訊息中的關鍵字,我可以確定更新是新計劃還是對現有計劃的變更。
為了解決這個問題,我為 MultiScrape 感測器添加了一個布林屬性。此屬性有助於監視計劃何時更改,以便我的系統知道何時從日曆中刪除舊事件。
解決方案:
這就是 AppDaemon 展現其真正潛 提高送達率的電子郵件清單清理最佳實踐 力的地方。儘管Home Assistant沒有提供直接刪除日曆事件的方法,但我們可以使用AppDaemon來編輯儲存這些事件的檔案。 Home Assistant 將每個本機日曆的資料保存在.ics
位於.storage
設定資料夾目錄中的檔案中。我們的想法是建立此日曆檔案的新版本,其中排除我們要刪除的事件。
這種方法存在一些風險。直接編輯這些檔案意味著我們超出了通常的安全邊界。因此,在嘗試此方法之前,請務必小心並備份日曆檔案。
執行:
為了最大限度地減少不必要的文件修改,我changed_schedule
在 Home Assistant 自訂事件中包含了一個參數。這允許我的 AppDaemon 應用程式僅在需要時嘗試刪除事件,具體取決於是否有需要刪除的事件。
當需要刪除事件時,程式碼會 兄弟數據 讀取現有.ics
檔案並建立一個新的日曆物件 ( new_calendar
),其中不包含我們不再需要的事件。然後,它將更新的日曆資料寫回原始日曆文件,從而刪除任何不相關的事件。文件中的每個事件都.ics
儲存為“VEVENT”元件。提供的程式碼掃描這些元件以識別符合特定條件的事件:事件的標題 ( SUMMARY
) 及其開始 ( DTSTART
) 和結束 ( DTEND
) 時間。滿足這些條件的事件將從物件中省略new_calendar
,確保更新的日曆檔案中僅保留相關事件。
修改日曆檔案後,在 Home Assistant 中重新載入日曆實體至關重要。此步驟可確保變更反映在您的儀表板上,並刪除過時的事件。此重新載入過程包含在自動更新的程式碼中。
上一篇文章中的程式碼的更新版本現在包含刪除事件的功能。除了這個新功能之外,我還對程式碼做了一些其他的小改進:
總之,管理 Home Assistant 本地日曆中的日曆事件可能很棘手,因為它在直接處理變更方面有其限制。透過創意地使用AppDaemon,例如直接編輯日曆文件,我們可以解決這些挑戰並建立一個功能齊全的通知系統。請記住,在嘗試此類解決方案時,請採取預防措施,備份數據,並在安全環境中仔細測試所有內容。