Home Assistant, một phần mềm tuyệt vời đã cho phép tôi tự động hóa mọi thứ trong ngôi nhà của mình nhờ vô số tích hợp có sẵn. Nó có thể làm được tất cả, từ những điều kỳ lạ và thú vị như phát hiện bàn chải đánh răng để khởi đầu ngày mới, cho đến việc tự động hóa toàn bộ hệ thống chiếu sáng xung quanh tôi. Ồ, và bây giờ tôi đang sử dụng nó để biến đèn của mình thành bộ truyền tin Mã Morse. Điều đó… cũng hữu ích, tôi đoán vậy?
Tất nhiên, tôi nói vậy một cách nửa đùa nửa thật. Tôi thực sự đã dùng Home Assistant để biến đèn thông minh của mình thành bộ đàm Mã Morse, nhưng không phải vì bất kỳ lý do cụ thể nào. Ý tưởng này nảy sinh chủ yếu từ sự nhàm chán, sau khi tôi cấu hình tích hợp Tuya Local (không nhầm lẫn với LocalTuya) để có thể điều khiển đèn của mình trên mạng LAN. Thấy rằng mình có thể hoàn toàn bỏ qua mọi giới hạn tốc độ có thể xảy ra, tôi bắt đầu nghĩ ra những cách ngớ ngẩn để lạm dụng “quyền lực” mới của mình.
Và thế là, ý tưởng về một bộ truyền tin Mã Morse xuất hiện. Tôi cũng đang tìm hiểu về tích hợp Pyscript, cho phép bạn viết các script Python để điều khiển ngôi nhà của mình, vì vậy tôi nghĩ đây là thời điểm hoàn hảo để thử nghiệm và xem mình có thể đạt được những gì. Hóa ra nó hoạt động rất tốt, vì vậy bây giờ tôi có thể giao tiếp với hàng xóm thông qua một ánh đèn nhấp nháy trong phòng khách của mình, với giả định họ đang nhìn đúng thời điểm đó. Ồ, và với giả định họ biết đó là Mã Morse và có thể hiểu được… Vâng, nghĩ lại thì, nó có thể không thực sự hữu ích lắm.
Tuy nhiên, đây là một dự án thú vị, và có thể bạn có thể lấy một số điều tôi học được ở đây để biến nó thành thứ gì đó có ích. Phần giao tiếp Mã Morse thực tế sẽ hiếm khi hữu ích, nhưng một số khái niệm thì chắc chắn sẽ như vậy.
Pyscript Home Assistant là gì?
Tích hợp tùy chỉnh mạnh mẽ cho tự động hóa bằng Python
Pyscript, được cài đặt qua HACS, là một tích hợp tùy chỉnh có thể được sử dụng để viết các hàm và script Python cho tự động hóa và logic trong Home Assistant. Bạn có thể viết một dịch vụ có thể được gọi từ bất kỳ tích hợp nào khác trong Home Assistant, cho phép bạn tạo chức năng tùy chỉnh của riêng mình mà không cần biết cách viết một tích hợp hoàn chỉnh. Các hàm có thể “ngủ” hoặc chờ các thay đổi và sự kiện bổ sung, và Pyscript có thể tích hợp với các giao diện Jupyter như Notebook.
Giao diện Pyscript trong Home Assistant hiển thị mã Python để tạo tự động hóa và điều khiển thiết bị thông minh.
Với tư cách là một người thành thạo Python, việc thử nghiệm Pyscript và xem nó có thể làm gì dường như là điều không cần suy nghĩ. Tôi đã tự xây dựng tích hợp Home Assistant của riêng mình để điều khiển đèn Govee B615 mà tôi đã đảo ngược kỹ thuật, nhưng nếu Pyscript có thể giúp việc điều khiển nhà thông minh của tôi dễ dàng hơn mà không cần một tích hợp hoàn chỉnh, thì rất đáng để dành thời gian tìm hiểu nó. Xây dựng một tích hợp có thể tốn thời gian, nhưng một script Python, nếu bạn biết mình đang làm gì, có thể chỉ mất vài phút.
Tất nhiên, nhiều điều bạn muốn làm với Pyscript có thể được thực hiện đơn giản bằng cách sử dụng tích hợp “command_line” thay thế, một tích hợp cũ cho phép bạn định nghĩa các lệnh shell để thực thi dựa trên các tiêu chí cụ thể. Tuy nhiên, không phải tất cả mọi thứ đều có thể. Với Pyscript, bạn có thể tự động hóa việc điều khiển từng thiết bị thông qua code trong chính Home Assistant một cách linh hoạt hơn.
Triển khai kịch bản đèn mã Morse bằng Pyscript cho Home Assistant
Cách thực hiện đơn giản, hiệu quả
Việc xây dựng và triển khai dự án này khá đơn giản, mặc dù tôi đã mắc một sai lầm nhỏ trên đường đi mà lẽ ra mọi thứ có thể dễ dàng hơn nếu tôi tránh được. Đó chủ yếu là việc tôi sử dụng các tác vụ bất đồng bộ (async tasks), nơi tôi viết một tác vụ async bằng cách sử dụng await
để ngăn vòng lặp sự kiện chính của Home Assistant “ngủ”. Hóa ra, điều này không cần thiết khi sử dụng Pyscript, và việc sử dụng async bị khuyến cáo không nên dùng khi nói đến AppDaemon của Home Assistant trừ khi bạn biết mình đang làm gì, vì mỗi Pyscript đều chạy bất đồng bộ rồi. Mặc dù tôi quen thuộc với async, điều này có thể đã gây ra các vấn đề khó sửa chữa, mặc dù may mắn thay nó vẫn hoạt động.
Về việc viết và triển khai script, ngoài việc tôi lầm lạc với các tác vụ async, nó thực sự rất đơn giản. Có một bản đồ ký tự ở đầu để ánh xạ mọi chữ cái và số với tổ hợp Mã Morse tương đương của nó (dấu chấm và dấu gạch ngang), sau đó định nghĩa hành vi về thời gian chờ cho dấu chấm và dấu gạch ngang. Sau đó, chúng ta định nghĩa một khoảng cách giữa các ký tự và từ, được nhân với thời gian của một dấu chấm. Bởi vì đèn tắt ở cuối một dấu chấm, điều này không có nghĩa là đèn sẽ bật trong suốt thời gian đó; đây chỉ là một cách để liên kết logic lại với nhau và làm cho mọi thứ tương đối, đặc biệt là vì độ trễ có thể khác nhau giữa các thiết bị. Điều này giúp script có thể hoạt động trên bất kỳ loại đèn nào với một vài thay đổi.
Mã nguồn Python của kịch bản đèn mã Morse được viết bằng Pyscript trong Home Assistant, với bảng ký tự và logic điều khiển đèn.
Điều tôi yêu thích ở Pyscript là cách đơn giản để xem và điều khiển các thực thể (entities) trong phiên bản Home Assistant của bạn. Chỉ cần định nghĩa đèn của tôi là “light.office_light” và gọi nó bằng entity_id
sẽ khiến nó có thể điều khiển ngay lập tức, để tôi có thể sử dụng các hàm như “light.turn_on” và nó chỉ… hoạt động. Trong suốt quá trình thử nghiệm, tôi đã sử dụng công cụ phát triển của Home Assistant, đặc biệt là tab “Action”, để kiểm tra script của mình và đảm bảo các tính năng hoạt động. Khi một script đã được Pyscript nhận diện trong thư mục /config/pyscript
của bạn sau khi khởi động lại Home Assistant, bạn chỉ cần tải lại tích hợp Pyscript mỗi khi bạn thực hiện thay đổi, giúp bạn không cần phải khởi động lại liên tục.
Vượt xa dự án “vô dụng”: Ứng dụng thực tế của Pyscript
Tôi không thể nhấn mạnh đủ rằng đây là một dự án khá ngớ ngẩn đối với hầu hết mọi người, nhưng có những ứng dụng thực sự cho một cái gì đó tương tự như thế này đối với những người muốn biến đèn của họ thành một phần cốt lõi của nhà thông minh. Bạn có thể làm cho đèn của mình nhấp nháy dựa trên các tiêu chí cụ thể, chẳng hạn như khi hệ thống lab tại nhà của bạn gặp sự cố. Nếu bạn tạo một tự động hóa sử dụng Uptime Kuma để sau đó gọi một script nhấp nháy một số lần nhất định, đại diện cho dịch vụ nào bị lỗi, điều đó sẽ thực sự hữu ích. Và chúng ta không chỉ nói về đèn trần ở đây, nó có thể là bất kỳ loại đèn nào mà bạn có thể điều khiển.
Giao diện Developer Tools của Home Assistant hiển thị cách gọi dịch vụ Pyscript để kích hoạt kịch bản đèn mã Morse.
Hơn nữa, trong các ngữ cảnh trợ năng, những người có thể bị suy giảm khả năng nói có thể thích sử dụng một chiếc đèn có thể nhấp nháy một lần cho “có” hoặc hai lần cho “không”. Và loại điều khiển tự động này mở rộng ra ngoài đèn; Mã Morse chỉ là một ví dụ ngớ ngẩn, nhưng cùng một khái niệm được áp dụng ở đây để triển khai dự án này có thể được áp dụng trên nhiều công cụ và thiết bị khác nhau.
Nếu bạn đang suy nghĩ về điều gì tiếp theo để thử nghiệm, Pyscript chắc chắn là một cái gì đó đáng để cân nhắc. Nó có sẵn trong HACS, dễ sử dụng, và bạn có thể kiểm soát nhà thông minh của mình một cách tinh vi hơn thông qua code thay vì YAML, đặc biệt khi thực hiện những điều không phải lúc nào cũng dễ dàng thực hiện thông qua các tự động hóa mặc định của Home Assistant.
Pyscript mở ra một chân trời mới cho những người yêu thích tự động hóa và lập trình, mang đến khả năng tùy biến gần như không giới hạn. Hãy khám phá và biến những ý tưởng táo bạo nhất của bạn thành hiện thực với công cụ mạnh mẽ này!