Máy Tính

Tự động hóa Home Assistant: Điều Khiển Thiết Bị Từ Xa qua Email với Tines và Proxmox

Màn hình laptop hiển thị giao diện điều khiển TrueNAS và Proxmox

Là một người yêu thích thử nghiệm và kết nối các dịch vụ công nghệ, tôi luôn tìm cách tạo ra những sự kết hợp độc đáo. Một trong số đó là Tines, một nền tảng tự động hóa tập trung vào bảo mật. Mặc dù Tines cung cấp nhiều tính năng mạnh mẽ ngay cả trong phiên bản miễn phí, nhưng Tines Tunnel – một dịch vụ tương tự như Cloudflare Tunnel – lại chỉ có sẵn cho các gói đăng ký trả phí, chủ yếu dành cho doanh nghiệp. Điều này khiến tôi suy nghĩ: liệu có thể tự xây dựng một “đường hầm” tương tự thông qua sức mạnh của Home Assistant và các quy trình tự động hóa hay không?

Với gói đăng ký Nabu Casa, Home Assistant cho phép tạo các webhook công khai. Tines lại có khả năng thực hiện các yêu cầu HTTP và tự host webhook. Bằng cách kết nối chúng, tôi nhận được chức năng tương tự như một đường hầm, cho phép giao tiếp hai chiều bảo mật. Dù không linh hoạt bằng một đường hầm thực sự, nhưng như bạn sẽ thấy, nó hoàn toàn đáp ứng được mục đích.

Cần lưu ý rằng đây là một thử nghiệm mang tính chất “làm vì có thể làm được”, chứ không phải là giải pháp bắt buộc cho tất cả mọi người. Đây là một trải nghiệm thú vị để học hỏi những phần mềm mới, và đôi khi, việc thử một điều gì đó mới mẻ và xem kết quả là gì cũng rất đáng giá.

I. Khám phá Khả Năng và Lập Kế Hoạch Dự Án Độc Đáo

1. Tại sao không dùng tính năng có sẵn của Home Assistant?

Với việc đã xác định được khả năng giao tiếp hai chiều, bước tiếp theo là lên ý tưởng cho một dự án và lập kế hoạch cụ thể. Home Assistant đã kết nối hầu hết mọi thiết bị trong nhà tôi, nên việc tìm ra một ý tưởng độc đáo để triển khai từ bên ngoài lại là một thách thức. Hầu hết các tác vụ đều có thể dễ dàng tự động hóa ngay trong Home Assistant, vì vậy tôi cần một ý tưởng đặc biệt hơn.

Màn hình laptop hiển thị giao diện điều khiển TrueNAS và ProxmoxMàn hình laptop hiển thị giao diện điều khiển TrueNAS và Proxmox

Khi đó, tôi phát hiện ra hai hành động thú vị mà Tines cung cấp: “Send email” (Gửi email) và “Receive email” (Nhận email). Chúng hoạt động đúng như tên gọi; “Send email” gửi email, trong khi “Receive email” thiết lập một địa chỉ email ngẫu nhiên để bạn có thể gửi yêu cầu đến. Vậy, điều gì sẽ xảy ra nếu tôi có thể gửi lệnh qua email, và nhận lại phản hồi từ Tines, chứa thông tin yêu cầu hoặc xác nhận hành động đã hoàn tất? Có thể nói email là API nguyên thủy, nên việc thử nghiệm nó nghe có vẻ là một ý tưởng thú vị.

2. Ý tưởng kiểm soát Homelab qua Email

Cuối cùng, tôi quyết định triển khai hai phương án làm bằng chứng khái niệm: đầu tiên là tương tác với mô hình LLM tự host và nhận phản hồi qua email; thứ hai là điều khiển các container Proxmox đang chạy trong homelab của tôi, cho phép khởi động, dừng hoặc khởi động lại chúng từ xa. Điều này đặt ra một số vấn đề về bảo mật, nhưng tôi sẽ đề cập và giải thích cách tôi xử lý chúng. Với một kế hoạch rõ ràng, việc triển khai hóa ra lại dễ dàng một cách đáng ngạc nhiên.

II. Giải Mã Lệnh Điều Khiển Gửi qua Email với Tines

1. Bảo mật Email: Chìa Khóa Quyết Định

Email là một giao thức khá phức tạp với nhiều thành phần giúp chúng ta tin tưởng rằng người gửi thực sự là người họ nói. Ví dụ, nếu bạn nhận được email từ “[email protected]”, làm sao bạn có thể xác minh đó thực sự là từ tôi? Việc giả mạo địa chỉ email cực kỳ dễ dàng, và nếu tôi sử dụng email để điều khiển homelab, tôi cần đảm bảo rằng các lệnh đó thực sự đến từ tôi chứ không phải từ một kẻ giả mạo.

Để xác minh người gửi email, có một vài công nghệ hữu ích. Hai trong số đó là SPF và DKIM, viết tắt của Sender Policy Framework và DomainKeys Identified Mail. SPF thực hiện kiểm tra đơn giản để đảm bảo địa chỉ IP đã gửi email được tên miền đó ủy quyền. Việc giả mạo SPF đã khó, và cần một cuộc tấn công man-in-the-middle, chiếm quyền BGP, hoặc chính sách SPF yếu kém trên tên miền để vượt qua.

Ứng dụng Home Assistant trên tablet hiển thị tình trạng hệ thống Raspberry PiỨng dụng Home Assistant trên tablet hiển thị tình trạng hệ thống Raspberry Pi

Tuy nhiên, DKIM lại khó vượt qua hơn nhiều. DKIM cung cấp một chữ ký số với mỗi email được gửi, và chữ ký này có thể được so sánh với khóa công khai liên kết với tên miền. Nếu khớp, email đó đến từ một người gửi hợp lệ và không bị giả mạo. Bằng cách kết hợp cả hai với DMARC, mức độ bảo mật sẽ rất cao, trừ khi bạn cũng bao gồm một khóa bí mật chỉ riêng bạn biết trong email để kiểm tra. Nếu tôi định sử dụng giải pháp này lâu dài, tôi chắc chắn sẽ triển khai thêm khóa bí mật đó.

2. Triển khai Logic Kiểm Tra Bảo Mật trên Tines

Khi bạn gửi email đến địa chỉ Tines cung cấp, các kết quả kiểm tra SPF, DKIM, DMARC đều nằm trong phần header của email. Do đó, chúng ta chỉ cần kiểm tra xem “spf=pass”, “dkim=pass”, và “dmarc=pass” có tồn tại trong đối tượng “Authentication-Results” hay không. Nếu không, chúng ta có thể tạo một luồng thất bại để gửi email thông báo cho tôi; nếu tất cả đều vượt qua, chúng ta tiếp tục với phần còn lại của quy trình.

3. Trích xuất và Phân tích Lệnh từ Email

Phần còn lại của quy trình khá đơn giản. Đầu tiên, chúng ta cần trích xuất các lệnh từ tiêu đề (subject) và nội dung (body) của email, sau đó thiết lập một luồng chuyển đến các “trigger” khác nhau. Trigger về cơ bản là một chuỗi các khối “if-else”, nơi chúng ta có thể kích hoạt dựa trên một lệnh và có một loạt các lệnh này dựa trên văn bản mà chúng ta trích xuất.

Biểu đồ luồng tự động hóa email trong Tines (kích hoạt các điều kiện bảo mật)Biểu đồ luồng tự động hóa email trong Tines (kích hoạt các điều kiện bảo mật)

Khi trích xuất văn bản, Tines làm cho việc này khá dễ dàng. Bạn có thể truyền một chuỗi từ một biến đã khai báo, hoặc trích xuất từ một đối tượng JSON, và còn nhiều tùy chọn khác nữa. Chúng ta sẽ trích xuất từ tham số “receive_email_action.body”, nhưng có một vấn đề: nội dung email có thể trông như sau (các ký tự <> đã được thay thế bằng ()):

"(div dir="ltr")104(/div)n"

Chúng ta chỉ muốn lấy phần “104”, nhưng việc chỉ lấy nội dung bên trong div khá phức tạp. May mắn thay, Tines hỗ trợ regex, vì vậy chúng ta có thể sử dụng biểu thức sau để lấy văn bản bên trong div một cách nhất quán (ký tự C đã thay thế cho <):

Cdiv[^C]*C s*w+s+(.*?) C/divC

Biểu thức này giúp chúng ta chỉ lấy được văn bản bên trong thẻ div và gán nó vào một biến. Dòng tiêu đề thì dễ hơn, và regex duy nhất chúng ta cần là “.*”. Cuối cùng, các trigger đơn giản là kiểm tra văn bản được trích xuất là gì, và phản ứng tương ứng dựa trên việc nó là “proxmox start”, “proxmox stop”, hay “proxmox reboot.”

4. Gửi Lệnh tới Home Assistant qua Webhook

Biểu đồ luồng tự động hóa email trong Tines (kích hoạt lệnh và gửi webhook)Biểu đồ luồng tự động hóa email trong Tines (kích hoạt lệnh và gửi webhook)

Phần tiếp theo này có thể được cải thiện đáng kể bằng cách kết nối mọi thứ vào một yêu cầu HTTP duy nhất, nhưng ở đây tôi tạo một yêu cầu HTTP từ Tines đến webhook của Home Assistant, với khóa của đối tượng JSON được gửi là “start”, “stop”, hoặc “reboot”, và giá trị là con số được trích xuất từ email.

Để cải thiện hơn nữa và giảm số lượng khối đang sử dụng, tôi có thể tạo động khóa được gửi trong đối tượng JSON dựa trên lệnh, và giữ tất cả trong một khối yêu cầu HTTP duy nhất trong Tines. Nhưng còn về phía Home Assistant thì sao? Các lệnh phải đến một nơi nào đó, vì vậy chúng ta sẽ chuyển sang việc kết nối mọi thứ lại với nhau.

III. Cấu Hình Home Assistant để Xử Lý Lệnh từ Tines

1. Chuẩn bị Môi Trường Home Assistant

Đầu tiên và quan trọng nhất, tôi đang sử dụng tích hợp Proxmox VE HACS, đây là một phiên bản nâng cao của tích hợp Proxmox tích hợp sẵn. Việc thiết lập có hơi dài dòng một chút, nhưng kết quả là bạn có thể điều khiển tất cả các VM và LXC của mình từ Home Assistant.

2. Xây dựng Automation Đơn Giản và Hiệu Quả

Để bắt đầu, chúng ta tạo một tự động hóa (automation) trong Home Assistant, được kích hoạt dựa trên một webhook. Điều này sẽ tự động tạo webhook cho bạn. Tôi chỉ thiết lập nó cho LXC ở đây, nhưng việc thay đổi để điều khiển VM cũng khá dễ dàng. Chúng ta có thể tận dụng thực tế là mỗi cảm biến (sensor) được tạo bởi tích hợp đều tuân theo cùng một định dạng:

button.lxc_(tên)_(số)_(start/stop/reboot)

Với tích hợp này, chúng ta định nghĩa các biến sau:

  • action: là start, stop, hoặc reboot
  • number: giá trị trong payload được gửi từ Tines
  • button_entity: lặp qua tất cả các nút, kiểm tra:
    • các nút bắt đầu bằng “button.lxc_”
    • các nút kết thúc bằng “_(action)”
    • các nút chứa số đã cho
  • status_sensor: cảm biến liên quan đến dịch vụ, để xác nhận hành động của chúng ta có hoạt động hay không

Với các biến này, chúng ta có thể gửi lệnh như “proxmox start 104” qua email tới Tines, lệnh này được trích xuất và sau đó được gửi đến webhook của Home Assistant. Nó được diễn giải, các biến được đặt, và chúng ta nhấn biến “button_entity”.

Ảnh chụp màn hình quy trình tự động hóa Home Assistant với Proxmox và TinesẢnh chụp màn hình quy trình tự động hóa Home Assistant với Proxmox và Tines

3. Phản Hồi Trạng Thái Thực Thi Lệnh

Cuối cùng, chúng ta chờ 15 giây, sau đó thăm dò cảm biến. Nếu nó trả về giá trị mong đợi, chúng ta gửi một rest_command đến webhook của Tines, từ đó gửi một email với thông báo liệu hành động có thành công hay thất bại, bằng cách kiểm tra xem giá trị mong đợi có khớp với giá trị thực tế hay không.

IV. Kết Nối Các Nền Tảng Tự Động Hóa: Giới Hạn là Bầu Trời

Hãy rõ ràng: đây là một giải pháp “phức tạp hóa quá mức” cho một vấn đề thực sự không tồn tại. Tuy nhiên, tôi làm điều này để minh họa cách một công cụ như Tines có thể được sử dụng để tự động hóa việc điều khiển homelab của bạn. Thông qua Home Assistant như một dạng đường hầm, bạn có thể kích hoạt giao tiếp hai chiều giữa homelab và nền tảng Tines dựa trên đám mây, điều này có thể hữu ích theo nhiều cách khác thông qua các công cụ như tích hợp command_line để gửi hướng dẫn đến các máy chủ hoặc container khác trong mạng của bạn.

Đối với những người lo ngại về bảo mật khi sử dụng một công cụ tự động hóa dựa trên đám mây, Tines đặt bảo mật lên hàng đầu. Dịch vụ đám mây của họ tuân thủ SOC2 Type 2, mặc dù “tuân thủ” là một chủ đề khác khi không có cơ quan tập trung nào để thực hiện các cuộc kiểm toán đó. Tuy nhiên, hãy yên tâm rằng Tines được xây dựng trên nền tảng tự động hóa và bảo mật. Tài khoản phiên bản Cộng đồng, mà tôi đang sử dụng ở đây, chỉ lưu trữ nhật ký trong bảy ngày. Có những hạn chế đối với điều đó, chẳng hạn như các tự động hóa dài hạn bị giới hạn trong một tuần, nhưng điều này cũng tuyệt vời vì nó có nghĩa là dữ liệu của bạn sẽ biến mất sau một tuần.

Việc triển khai một hệ thống như thế này đòi hỏi sự cẩn trọng đặc biệt trong việc bảo vệ dữ liệu và cách các lệnh của bạn được thực thi, nhưng nền tảng này được xây dựng để cung cấp loại chức năng đó cho các doanh nghiệp lớn. Một số người thích kiểm soát mọi thứ cục bộ, điều này hoàn toàn dễ hiểu, và đối với những người đó, một công cụ như n8n sẽ phù hợp hơn với trường hợp sử dụng của bạn.

Hãy chia sẻ những ý tưởng sáng tạo của bạn về việc kết hợp các nền tảng tự động hóa trong phần bình luận dưới đây!

Related posts

Baseus EnerCore: Giải Pháp Sạc Rút Gọn Tối Ưu Cho Cuộc Sống Hiện Đại

Administrator

Tại sao Neovim là Trình soạn thảo văn bản Yêu thích của Tôi?

Administrator

Hướng Dẫn Sao Lưu Proxmox Lên TrueNAS Scale Với Proxmox Backup Server

Administrator