Trong thế giới tự động hóa ngày càng phát triển, việc kết nối các dịch vụ khác nhau để tạo ra những giải pháp độc đáo luôn là niềm đam mê của tôi. Một trong những nền tảng tự động hóa mạnh mẽ mà tôi đã thử nghiệm gần đây là Tines – một công cụ chuyên biệt về tự động hóa với trọng tâm bảo mật. Dù Tines cung cấp các gói trả phí, phiên bản miễn phí cũng đủ để thực hiện nhiều tác vụ phức tạp. Tuy nhiên, tính năng Tines Tunnel, tương tự như Cloudflare Tunnel, lại bị giới hạn cho người dùng trả phí và chủ yếu hướng đến các doanh nghiệp lớn.
Điều này đã thôi thúc tôi tìm kiếm một giải pháp thay thế, một “đường hầm” riêng biệt, tận dụng sức mạnh của Home Assistant và khả năng tự động hóa linh hoạt. Với gói đăng ký Nabu Casa, Home Assistant cho phép tạo các webhook công khai, trong khi Tines có thể thực hiện các yêu cầu HTTP và tự lưu trữ webhook riêng. Bằng cách xâu chuỗi chúng lại với nhau, tôi đã có thể tạo ra một chức năng tương tự như tunnel, cho phép giao tiếp hai chiều an toàn giữa hai nền tảng. Mặc 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 nhu cầu.
Cần lưu ý rằng đây là một thử nghiệm mang tính chất “tôi làm điều này vì tôi có thể”, không phải là giải pháp bắt buộc cho tất cả mọi người. Mục tiêu chính là khám phá, học hỏi những phần mềm mới và thỏa mãn sự tò mò cá nhân. Đôi khi, việc thử nghiệm những điều mới lạ để xem kết quả ra sao lại mang đến niềm vui riêng.
Thiết lập dự án và lên kế hoạch tự động hóa
Làm điều Home Assistant thông thường không thể
Với khả năng thiết lập giao tiếp hai chiều đã được xác định, bước tiếp theo là lên ý tưởng cho một dự án cụ thể. Home Assistant vốn đã liên kết gần như mọi thứ trong ngôi nhà thông minh của tôi, nên việc tìm ra một ý tưởng độc đáo thực sự là một thử thách. Hầu hết các tác vụ đều có thể được triển khai trực tiếp trong Home Assistant, vì vậy tôi cần một thứ gì đó khác biệt.
Chính lúc đó, tôi phát hiện hai hành động rất thú vị mà Tines cung cấp: “Send email” (Gửi email) và “Receive email” (Nhận email). Chức năng của chúng đúng như tên gọi; “Send email” dùng để gửi thư, trong khi “Receive email” sẽ tạo ra một địa chỉ email ngẫu nhiên mà bạn có thể gửi yêu cầu đến. Vậy thì, 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 thì sao? Một số người có thể coi email là “API nguyên bản”, và việc thử nghiệm ý tưởng này nghe có vẻ rất thú vị.
Màn hình laptop Windows 11 hiển thị giao diện quản lý TrueNAS và Proxmox VE, minh họa môi trường homelab.
Cuối cùng, tôi quyết định triển khai hai trường hợp thử nghiệm (proof of concept): đầu tiên là tương tác với mô hình LLM (Large Language Model) tự host của tôi 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 tôi khởi động, dừng hoặc khởi động lại chúng từ xa. Tất nhiên, có những vấn đề bảo mật liên quan đến việc này, nhưng tôi sẽ 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 đã diễn ra dễ dàng hơn tôi tưởng.
Giải mã lệnh được gửi qua email
Đảm bảo an toàn dữ liệu gửi tới Home Assistant
Email là một giao thức khá phức tạp với nhiều thành phần giúp xác minh độ tin cậy của người gửi. Ví dụ, nếu bạn nhận được một email từ “[email protected]”, làm thế nào bạn có thể xác minh rằng nó thực sự đến từ tôi? Việc giả mạo địa chỉ email người gửi cực kỳ dễ dàng, và nếu tôi sử dụng email để gửi các lệnh điều khiển homelab, tôi phải đảm bảo rằng những lệnh đó thực sự đến từ tôi chứ không phải từ một kẻ mạo danh.
Khi nói đến email, có một vài công nghệ có thể giúp chứng minh liệu người gửi email có phải là người gửi thực sự hay không. Hai trong số đó là SPF (Sender Policy Framework) và DKIM (DomainKeys Identified Mail). SPF là một kiểm tra đơn giản để đảm bảo rằng địa chỉ IP gửi email được ủy quyền bởi tên miền đó. Việc giả mạo SPF đã khó, đòi hỏi một cuộc tấn công “man-in-the-middle”, chiếm quyền BGP, hoặc chính sách SPF của tên miền được triển khai kém để vượt qua.
Tiếp theo là DKIM, khó vượt qua hơn nhiều. DKIM cung cấp một chữ ký số với mỗi email gửi đi, và chữ ký này có thể được so sánh với khóa công khai liên quan đến tên miền. Nếu khớp, email đến từ người gửi hợp lệ và chưa bị giả mạo. Bằng cách kết hợp cả SPF và DKIM với DMARC (Domain-based Message Authentication, Reporting, and Conformance), bạn sẽ có một hệ thống xác thực vô cùng mạnh mẽ, chỉ có thể được tăng cường thêm bằng cách đưa một khóa bí mật mà chỉ bạn biết vào email. Nếu tôi có kế hoạch 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 đó.
Ứng dụng Home Assistant trên máy tính bảng hiển thị thông tin sức khỏe hệ thống Raspberry Pi, tượng trưng cho khả năng giám sát tự động hóa.
Khi bạn gửi email đến địa chỉ Tines cung cấp, tất cả các kết quả kiểm tra bảo mật này đều nằm trong các header. Do đó, chúng ta có thể dễ dàng 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 lỗ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 các bước còn lại của quy trình.
Sơ đồ luồng tự động hóa trong Tines thể hiện các bước xử lý và kích hoạt lệnh từ email, bao gồm kiểm tra bảo mật và trích xuất dữ liệu.
Phần còn lại của luồng khá đơn giản. Trước tiên, chúng ta cần trích xuất các lệnh từ tiêu đề và nội dung email, sau đó thiết lập một luồng chuyển đến các “triggers” (bộ kích hoạt) khác nhau. Các trigger này về cơ bản là một loạt các khối “if-else”, cho phép chúng ta kích hoạt dựa trên một lệnh và có thể kết hợp nhiều trigger dựa trên văn bản đã trích xuấ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ừ biến đã khai báo hoặc trích xuất từ một đối tượng JSON, cùng nhiều tùy chọn khác. 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 trông giống như thế này (dấu ngoặc nhọn đã được thay thế bằng dấu ngoặc vuông thông thường):
"(div dir="ltr")104(/div)n"
Chúng ta chỉ muốn phần “104”, nhưng việc chỉ lấy nội dung bên trong thẻ div là một thách thức. May mắn thay, Tines cũng hỗ trợ regex (biểu thức chính quy), 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 thẻ div một cách nhất quán (dấu ngoặc nhọn đã được thay thế bằng chữ C):
Cdiv[^C]*C s*w+s+(.*?) C/divC
Biểu thức này chỉ lấy văn bản bên trong thẻ div và gán nó vào một biến. Dòng tiêu đề thì đơn giản, và regex duy nhất chúng ta cần là “.*”. Cuối cùng, các trigger chỉ đơn giản 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 đó là “proxmox start”, “proxmox stop”, hay “proxmox reboot.”
Luồng công việc tự động hóa Tines hiển thị các nút kích hoạt (triggers) và hành động HTTP request để gửi lệnh điều khiển đến Home Assistant.
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. Tuy nhiên, ở đây tôi thực hiện một yêu cầu HTTP từ Tines đến webhook Home Assistant của tôi, với khóa của đối tượng JSON được gửi là “start”, “stop” hoặc “reboot”, và giá trị là 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 đi đến đâu đó, vì vậy chúng ta sẽ chuyển sang phần kết nối mọi thứ lại với nhau.
Cấu hình Home Assistant
Chỉ với một tự động hóa đơn giản
Đầu tiên và quan trọng nhất, tôi đang sử dụng tích hợp Proxmox VE HACS, 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ó thể 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 máy ảo (VM) và container LXC của mình từ Home Assistant.
Để bắt đầu, chúng ta tạo một tự động hóa trong Home Assistant, được kích hoạt dựa trên một webhook. Home Assistant sẽ tự động tạo webhook này cho bạn. Ở đây tôi chỉ thiết lập nó cho LXC, nhưng việc chuyển đổi để điều khiển cả máy ảo cũng khá dễ dàng. Chúng ta có thể tận dụng thực tế rằng mọi cảm biến đượ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 của chúng ta, 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ừ Tinesbutton_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 có chứa “number”
status_sensor
: cảm biến liên quan đến dịch vụ, để xác nhận liệu hành động của chúng ta có thành công hay không
Giao diện thiết lập tự động hóa trong Home Assistant, minh họa cách xử lý webhook từ Tines để điều khiển các thiết bị Proxmox LXC.
Với thiết lập này, chúng ta có thể gửi một lệnh như “proxmox start 104” qua email đến Tines. Lệnh này được trích xuất và sau đó được gửi đến webhook Home Assistant của chúng ta. Lệnh được diễn giải, các biến được thiết lập, và chúng ta thực hiện lệnh bằng cách nhấn biến “button_entity”.
Cuối cùng, chúng ta đợi 15 giây, sau đó kiểm tra cảm biến trạng thái. Nếu nó trả về giá trị mong đợi, chúng ta gửi một lệnh rest_command
đến webhook Tines của mình. Lệnh này sẽ kích hoạt một email thông báo hành động có thành công hay không, 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.
Nền tảng tự động hóa: chìa khóa mở khóa tiềm năng Homelab
Rõ ràng, đây là một giải pháp “quá mức cần thiết” cho một vấn đề thực sự không tồn tại. Tuy nhiên, tôi đã thực hiện nó để minh họa cách một công cụ như Tines có thể được sử dụng để tự động hóa việc kiểm soát 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 đám mây Tines, điều này có thể hữu ích theo những 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 vì 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, bạn có thể 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 (Community Edition), mà tôi đang sử dụng ở đây, chỉ lưu trữ nhật ký trong bảy ngày. Điều này có những hạn chế, 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 cũng rất tuyệt vì 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 kích hoạt. Tuy nhiên, nền tảng Tines được xây dựng để cung cấp loại chức năng này 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 họ.
Việc kết hợp Home Assistant và Tines không chỉ mở ra cánh cửa cho các giải pháp điều khiển từ xa sáng tạo mà còn chứng minh rằng ranh giới của tự động hóa chỉ bị giới hạn bởi trí tưởng tượng của chúng ta. Dù bạn chọn giải pháp đám mây hay cục bộ, điều quan trọng là hiểu rõ các nguyên tắc bảo mật và tối ưu hóa quy trình làm việc của mình. Hy vọng bài viết này đã truyền cảm hứng để bạn khám phá những khả năng vô tận của tự động hóa trong chính homelab của mình.
Nếu bạn có bất kỳ câu hỏi nào hoặc muốn chia sẻ những dự án tự động hóa độc đáo của riêng mình, đừng ngần ngại để lại bình luận bên dưới. Hãy tiếp tục theo dõi 123thuthuat.com để cập nhật những thủ thuật công nghệ và kiến thức chuyên sâu mới nhất!