Trong thế giới nhà thông minh ngày càng phát triển, việc tích hợp các thiết bị cũ hoặc độc quyền vào một hệ sinh thái thống nhất như Home Assistant thường gặp nhiều thách thức. Đôi khi, các API chính thức không đủ mạnh mẽ, quá hạn chế hoặc thậm chí không khả dụng cho một số dòng sản phẩm. Đây chính là trường hợp mà nhiều người dùng gặp phải với các thiết bị Govee, và đèn LED Govee H615B của tôi cũng không phải là ngoại lệ. Bài viết này sẽ đi sâu vào hành trình khám phá, phân tích và cuối cùng là kiểm soát hoàn toàn đèn Govee H615B thông qua Bluetooth Low Energy (BLE), mở ra cánh cửa tự động hóa và tích hợp không giới hạn vào hệ thống nhà thông minh của bạn.
Mặc dù Govee cung cấp cả API dựa trên web và API cục bộ, nhưng cả hai đều tồn tại những hạn chế đáng kể. API web bị giới hạn tần suất truy cập rất nhanh chóng, khiến việc điều chỉnh độ sáng hoặc màu sắc trở nên cực kỳ khó chịu. Trong khi đó, API cục bộ lại không thể kích hoạt được trên đèn Govee của tôi – tùy chọn này bị làm mờ hoàn toàn trong ứng dụng. Đối mặt với những rào cản này, một giải pháp triệt để hơn đã được đặt ra: reverse engineering. Mục tiêu cuối cùng là phá vỡ sự phụ thuộc vào các API chính thức và điều khiển trực tiếp đèn H615B bằng các thiết bị Bluetooth thông thường, từ đó tích hợp chúng một cách mượt mà vào Home Assistant. Hành trình này, được trang bị Wireshark và Python, hứa hẹn sẽ mang lại kiến thức sâu sắc về cách các thiết bị IoT giao tiếp và cách chúng ta có thể tự chủ hoàn toàn trải nghiệm công nghệ của mình.
Tất cả mã nguồn được sử dụng trong bài viết này đều là mã nguồn mở và bạn có thể tìm thấy liên kết ở cuối bài viết.
Đánh Giá Vấn Đề: Chuẩn Bị Công Cụ và Xác Định Mục Tiêu
Bước đầu tiên trong bất kỳ dự án reverse engineering nào là đánh giá kỹ lưỡng vấn đề, các công cụ có sẵn và mục tiêu cuối cùng. Đối với việc khám phá cách điều khiển đèn Govee H615B, tôi đã chuẩn bị những công cụ và đặt ra các mục tiêu rõ ràng.
Các công cụ cần thiết cho quá trình Reverse Engineering
Để thực hiện quá trình reverse engineering phức tạp này, tôi đã tập hợp một bộ công cụ đa dạng, từ phần cứng đến phần mềm chuyên dụng:
- MacBook M4 Pro: Một chiếc máy tính mạnh mẽ để chạy các phần mềm phân tích và phát triển.
- Google Pixel 8 Pro: Chiếc điện thoại Android này đóng vai trò quan trọng trong việc thu thập dữ liệu giao tiếp Bluetooth LE nhờ tính năng ghi nhật ký HCI tích hợp.
- Ứng dụng Govee chính thức: Dùng để điều khiển đèn ban đầu, tạo ra các gói tin Bluetooth cần thiết để phân tích.
- Wireshark: Công cụ phân tích mạng hàng đầu, được sử dụng để giải mã và hiểu rõ các gói tin Bluetooth đã thu thập.
- Bleak: Một framework Bluetooth mạnh mẽ trong Python, giúp quét thiết bị và tương tác với các characteristics của Bluetooth LE.
- Milk-V Duo S: Một vi điều khiển nhỏ gọn (SBC) với bộ xử lý Arm và RISC-V, hỗ trợ Wi-Fi/Bluetooth và có khả năng chạy Python. Đây sẽ là nền tảng để triển khai script điều khiển cuối cùng.
MacBook Pro M4 Pro 16 inch – một trong những công cụ để thực hiện reverse engineering Govee H615B
Mục tiêu cốt lõi: Điều khiển đèn Govee H615B bằng Python script
Mục tiêu chính của tôi là tạo ra một script Python có khả năng điều khiển đèn Govee H615B thông qua Bluetooth mà không cần ứng dụng Govee hoặc API chính thức. Để đạt được điều này, tôi đã đặt ra một số yếu tố quan trọng:
- Tránh root điện thoại: Tôi muốn tránh việc root Google Pixel 8 Pro nếu có thể, coi đó là phương án cuối cùng.
- Điều khiển từ xa: Nếu không có cơ chế xác thực phức tạp, tôi có thể phát các lệnh của riêng mình tới đèn.
- Tích hợp Home Assistant: Viết một script Python có thể chạy trên Milk-V Duo S, với một máy chủ chấp nhận các lệnh từ Home Assistant để sau đó phát tới đèn. Điều này sẽ cho phép tôi điều khiển đèn H615B từ Home Assistant như bất kỳ thiết bị thông minh nào khác.
Thu Thập Dữ Liệu Bluetooth LE: Ghi Lại Gói Tin từ Điện Thoại Android
Để hiểu cách đèn Govee giao tiếp, bước quan trọng nhất là thu thập các gói tin Bluetooth được gửi đi và nhận về. May mắn thay, các thiết bị Android, đặc biệt là Google Pixel, làm cho việc này trở nên khá đơn giản.
Kích hoạt Bluetooth HCI Logger trên Google Pixel để ghi log
Thay vì sử dụng phần cứng chuyên dụng để “ngửi” gói tin Bluetooth, Android có một tính năng tích hợp rất hữu ích: Bluetooth HCI logger. HCI (Host Controller Interface) log là bản ghi cấp độ rất thấp của mọi thứ mà điện thoại gửi đi và nhận về qua Bluetooth. Bạn có thể kích hoạt tính năng này trong tùy chọn nhà phát triển trên điện thoại của mình.
Tại sao tôi chọn Google Pixel 8 Pro thay vì các thiết bị khác như Oppo Find N5? Vấn đề nằm ở việc lưu trữ file log. Thông thường, bạn có thể tạo một báo cáo lỗi (bug report) thông qua adb, và file log Bluetooth sẽ được lưu trong thư mục nhật ký Bluetooth. Tuy nhiên, trên chiếc Oppo Find N5 của tôi, file này lại trống rỗng. Nhiều nhà sản xuất tùy biến hệ thống Android, dẫn đến các vấn đề không mong muốn. Do đó, tôi đã chuyển sang Google Pixel 8 Pro để tránh những “trò đùa” từ OEM, và kết quả là tôi đã có thể thu thập một bản ghi Bluetooth HCI có chứa dữ liệu thực sự.
Điện thoại Google Pixel được sử dụng để ghi lại gói tin Bluetooth HCI khi reverse engineering đèn Govee
Các bước thu thập dữ liệu:
- Cài đặt ứng dụng Govee: Cài đặt ứng dụng Govee và đăng nhập vào tài khoản của bạn.
- Tắt Wi-Fi: Đảm bảo Wi-Fi đã được tắt trên điện thoại. Điều này buộc ứng dụng Govee phải sử dụng Bluetooth để điều khiển đèn, đảm bảo mọi giao tiếp đều được ghi vào nhật ký.
- Thực hiện các thao tác điều khiển: Mở ứng dụng Govee, kết nối với đèn H615B và thực hiện nhiều thao tác khác nhau: thay đổi độ sáng, thay đổi màu sắc, bật và tắt đèn nhiều lần.
- Tạo báo cáo lỗi (bug report): Sau khi hoàn tất các thao tác, cắm Pixel 8 Pro vào máy tính và sử dụng adb để kéo báo cáo lỗi về. Lệnh này thường là
adb bugreport
.
Với file log này, chúng ta đã có được “nguyên liệu” thô để bắt đầu quá trình phân tích chuyên sâu.
Phân Tích Cơ Bản với Wireshark: Giải Mã Gói Tin Bluetooth Govee
Sau khi đã thu thập được các gói tin Bluetooth, bước tiếp theo là sử dụng Wireshark để phân tích và hiểu cấu trúc cũng như nội dung của chúng. Đây là giai đoạn quan trọng để chuyển đổi dữ liệu thô thành thông tin có ý nghĩa.
Xác định vị trí và cấu trúc file log Bluetooth HCI
File log Bluetooth HCI sẽ nằm trong thư mục FS/data/misc/bluetooth/logs
và có phần mở rộng .cfa
sau khi bạn giải nén file báo cáo lỗi (bug report). File .cfa
này thực chất là một file BTSnoop chứa các gói L2CAP. Các gói L2CAP cung cấp chi tiết về tất cả các giao tiếp mà thiết bị của bạn thực hiện qua Bluetooth, đặc biệt phổ biến trong các thiết bị Bluetooth Low Energy (BLE) để trao đổi thông tin.
Quét thiết bị và tìm hiểu Characteristics với Bleak
Mặc dù trong trường hợp này việc xác định thiết bị cần xem xét tương đối dễ dàng, tôi vẫn sử dụng thư viện Python Bleak để quét các thiết bị và ID của chúng.
Tôi đã viết một đoạn mã quét đơn giản bằng Bleak. Sau khi xác định UUID của thiết bị Govee H615B, tôi có thể truy vấn nó để tìm các characteristics. Characteristics về cơ bản là các hồ sơ hoặc “kênh” giao tiếp. Một client (như điện thoại hoặc script của chúng ta) có thể khởi tạo các lệnh nhắm mục tiêu vào một characteristic và nhận phản hồi, trong khi một server (như đèn Govee) có thể chấp nhận các lệnh đó và thực hiện chúng.
Sử dụng thư viện Bleak trong Python để quét thiết bị Bluetooth và truy vấn các characteristics của đèn Govee H615B
Lưu ý: macOS và framework CoreBluetooth của nó sẽ cung cấp cho bạn một UUID cho các thiết bị Bluetooth Low Energy thay vì một địa chỉ MAC để giao tiếp. Điều này không sao cả, nhưng cần lưu ý nếu bạn đang viết mã để chuyển sang một thiết bị khác sau này. Địa chỉ MAC mà bạn cần sử dụng (thay vì UUID) sẽ có trong log.
Trong quá trình quét của tôi, đèn Govee H615B hiện lên rất rõ ràng. Tôi đã xác định được một số characteristics, cung cấp thông tin cần thiết để tiếp tục điều tra trong file log đã sao chép từ điện thoại:
- Handle: 0x0009, UUID: 00010203-0405-0607-0809-0a0b0c0d2b10
- Handle: 0x000d, UUID: 00010203-0405-0607-0809-0a0b0c0d2b11
- Handle: 0x0012, UUID: f000ffc1-0451-4000-b000-000000000000
- Handle: 0x0016, UUID: f000ffc2-0451-4000-b000-000000000000
Lưu ý rằng hai characteristics kết thúc bằng “b10” và “b11” có khả năng liên quan đến nhau, tương tự như “c1” và “c2”. Chúng ta sẽ tập trung vào hai characteristic kết thúc bằng b10 và b11, vì theo nghiên cứu về các thiết bị Govee khác, có vẻ như hai characteristic này liên quan đến việc thiết lập trạng thái cho đèn, và các thiết bị khác cũng khớp chính xác các chuỗi này.
Một yếu tố ngữ cảnh quan trọng khác khi nói đến các thiết bị này là mặc dù chúng có cơ chế tương tác tương tự, nhưng cách chúng chấp nhận lệnh lại hơi khác nhau. Một số có các phân đoạn cho các phần khác nhau của dải đèn (để có thể điều khiển riêng lẻ), và một số có cơ chế xác thực trong quá trình ghép nối. Tôi đặc biệt lo lắng về bước xác thực này, nhưng tôi phát hiện ra rằng khi Google Pixel 8 Pro của tôi kết nối (và đó là lần đầu tiên tôi kết nối), không có bất kỳ kiểm tra nào về thiết bị đang gửi lệnh. Điều này hơi giống một lỗ hổng bảo mật (mặc dù trên bề mặt không gây hại lớn), nhưng chúng ta sẽ có thể tận dụng nó.
Phân tích Wireshark cho thấy các gói tin thông báo từ characteristic b10 của đèn Govee H615B
Khám phá cơ chế giao tiếp và gói tin Keep-Alive
Một điều tôi tìm thấy trong quá trình kết nối ban đầu giữa điện thoại và đèn đã trở thành một mảnh ghép quan trọng để thực hiện tất cả những điều này. Hãy nhớ characteristic tôi đã đề cập kết thúc bằng “b10”? Thiết bị client (trong trường hợp này là Pixel 8 Pro) được gửi một thông báo bởi bộ điều khiển Bluetooth thuộc về đèn, và nó đến từ characteristic kết thúc bằng b10. Giờ đây chúng ta biết rằng chúng ta cần lắng nghe dịch vụ này, vì vậy chúng ta sẽ ghi nhớ điều đó khi viết mã để kết nối với nó sau này.
Tiếp theo, tôi nhận thấy nhiều gói tin được gửi từ Pixel của tôi đến đèn có giá trị sau:
aa010000000000000000000000000000000000ab
Đây dường như là các gói tin “keep-alive”, thông báo cho đèn Govee rằng chúng ta vẫn đang muốn gửi và nhận thông tin. Chúng được gửi khoảng hai giây một lần và chiếm phần lớn các bản ghi. Tôi nhận thấy rằng khi tôi kết nối với đèn bình thường bằng Bleak, chúng sẽ ngắt kết nối khỏi máy tính xách tay của tôi chỉ trong vài giây. Vì điện thoại của tôi dường như không có liên hệ nào khác trong thời gian dài ngoài việc gửi các giá trị tương tự, tôi nghĩ rằng chúng phải là các gói tin keep-alive. Điều này cũng khớp với những gì các thiết bị Govee khác dường như làm.
Mặc dù tôi không chắc chắn dữ liệu là gì sau “aa”, byte cuối cùng của chuỗi (tức là hai ký tự cuối cùng) rất quan trọng. Các gói tin Bluetooth LE có độ dài 20 byte (không có MTU mở rộng), và có vẻ như các gói tin này sử dụng đệm số 0 (zero padding) để đạt được độ dài gói tin đó. Chúng ta có thể kết luận tại thời điểm này rằng các gói tin bắt đầu bằng 0xaa
biểu thị một gói tin keep-alive, nhưng còn hai chữ số cuối cùng thì sao? Chúng ta sẽ tìm hiểu chúng sau.
Giải mã lệnh bật/tắt đèn Govee H615B
Tiếp theo, chúng ta sẽ xem xét các lệnh mà tôi đã gửi. Khi tôi mở ứng dụng lần đầu và kết nối với đèn, tôi đã bật và tắt chúng. Trong các bản ghi, dữ liệu đầu tiên được truyền đi và không giống gói tin keep-alive hoặc liên quan đến kết nối ban đầu là gói tin trên. Tôi đã tắt chúng một lần nữa, và tôi tìm thấy một giá trị rất giống với giá trị trên nhưng hơi khác, và điều này khớp với thời gian tôi đã ghi chú. Tôi có thể suy ra rằng hai giá trị để bật và tắt đèn là như sau:
- Bật đèn:
3301010000000000000000000000000000000033
- Tắt đèn:
3301000000000000000000000000000000000032
Gói tin Bluetooth LE khi bật đèn Govee H615B được ghi lại và phân tích bằng Wireshark
Hãy chú ý cấu trúc của gói tin; một lần nữa, chúng ta có rất nhiều byte 0 và hai byte khác nhau ở cuối. Để hiểu rõ hơn, chúng ta nói “0x” để biểu thị một giá trị thập lục phân (hexadecimal), sử dụng cơ số 16. “0x” làm rõ rằng chúng ta đang nói về thập lục phân, chứ không phải một số thập phân thông thường, và 0x33 là “51” trong hệ thập phân. 0x33 dường như biểu thị một lệnh, với dữ liệu sau đó đưa ra chỉ thị để thực thi. Trong trường hợp này, chúng ta có 0x33, 0x01 và 0x01 để bật đèn và 0x33, 0x01 và 0x00 để tắt đèn, cho thấy rằng một giá trị boolean ở byte thứ ba kiểm soát trạng thái bật/tắt. Chúng ta đã có đủ thông tin để thử nghiệm bằng cách thiết lập bộ thu thông báo của mình và về cơ bản lặp lại các lệnh tương tự cho đèn. Chúng ta không cần lo lắng về hai chữ số cuối cùng vì chúng đã được tính toán sẵn cho chúng ta, nhưng chúng ta cũng sẽ tìm hiểu cách tính toán của riêng mình.
Thiết Lập Màu Sắc và Độ Sáng: Nắm Vững Kỹ Thuật Checksum
Với khả năng bật/tắt đèn, chúng ta đã đạt được một bước tiến lớn. Tuy nhiên, đèn thông minh màu sắc như Govee H615B còn có nhiều tính năng hơn là chỉ bật/tắt. Bây giờ chúng ta sẽ tìm hiểu cách điều chỉnh màu sắc và độ sáng của đèn.
Phân tích gói tin màu sắc và thách thức tạo lệnh mới
Tôi đã điều tra các gói tin liên quan đến màu sắc và độ sáng, vì tôi cũng đã thay đổi cả hai trong ứng dụng để xem chúng sẽ trông như thế nào ở cấp độ gói tin. Tôi tìm thấy gói tin sau:
33050dfe0e1f00000000000000000000000d4
Lại là byte khởi đầu 0x33
đó, vì vậy chúng ta biết rằng đây là một lệnh. Tôi không chắc chắn về 050d
, nhưng “fe0e1f” trông giống như một mã hex màu. Khi tôi chuyển đổi nó từ hex sang một màu thực tế, nó hiện ra rất rõ ràng là màu đỏ, và tôi đã đổi đèn sang màu đỏ trong quá trình thử nghiệm của mình. Tôi muốn thử xem liệu tôi có thể thay thế “fe0e1” bằng màu của riêng mình không, nhưng có một vấn đề. Trước đây, chúng ta có thể phát lại các gói tin cho đèn, và chúng sẽ thực hiện lại các lệnh mà chúng ta đã thấy trong nhật ký. Làm cách nào để tạo ra các lệnh mới? Chúng ta không thể chỉ hoán đổi các giá trị hex màu đó cho riêng mình. Lý do chúng ta không thể làm vậy là do có byte cuối cùng.
Gói tin thay đổi màu sắc đèn Govee H615B trong Wireshark, hiển thị mã màu và checksum
Hiểu rõ cơ chế Checksum (phép toán XOR tích lũy)
Byte cuối cùng đó là một checksum, về cơ bản xác nhận rằng dữ liệu đã đến trong tình trạng hoàn chỉnh và không bị lỗi. Nó được tính toán bằng cách thực hiện phép toán XOR tích lũy trên mỗi byte. Phép toán XOR là một loại cổng logic tạo ra ‘1’ khi hai giá trị đầu vào khác nhau. Mỗi byte sau đó được XOR với byte trước đó cho đến khi đạt đến byte thứ 19. Kết quả tính toán cuối cùng được nối vào cuối gói tin thành byte thứ 20, và đây là thứ được gửi đến thiết bị. Cuối cùng, thiết bị thực hiện phép toán XOR của riêng nó trên 19 byte đầu tiên, kiểm tra xem byte cuối cùng có khớp với những gì nó đã tính toán hay không. Nếu có, nó biết rằng dữ liệu đã đến như mong muốn và an toàn để thực thi.
Hãy thử thay đổi đèn thành màu magenta, mã hex #FF00FF. Điều này sẽ trông như sau:
33050d[ff00ff]00000000000000000000000d4[checksum]
ff00ff
(đặt trong ngoặc vuông ở trên để dễ hiểu) là mã màu của chúng ta, và [checksum]
là thứ chúng ta muốn tính toán. Chúng ta bắt đầu với giá trị của một byte trống, hoặc 00000000.
- Bắt đầu với
0x00
(binary:00000000
). - XOR với
0x33
(00110011
), kết quả:0x33
(00110011
). - XOR với
0x05
(00000101
), kết quả:0x36
(00110110
). - Tiếp tục XORing mỗi byte trong thông điệp với byte trước đó.
- Kết quả cuối cùng:
0xff
(binary:11111111
).
Chúng ta tiếp tục thực hiện phép toán trên chuỗi cho đến khi đến cuối cùng. Điều này tạo ra giá trị ff
, với giá trị nhị phân là 11111111
. Giá trị cuối cùng mà chúng ta sẽ gửi cho đèn là:
33050dff00ff00000000000000000000000d4ff
Nhưng việc tính toán này mỗi lần chúng ta muốn thay đổi màu sắc của đèn không hề tiện lợi. Thay vào đó, chúng ta có thể tự động hóa quá trình này, điều mà tôi đã làm trong Python. Tôi đã triển khai một phương thức nhận các giá trị hex RGB, chèn chúng vào chuỗi, sau đó tính toán checksum để nối vào phần còn lại của chuỗi. Tôi sẽ không làm bạn nhàm chán với các chi tiết, vì nó chỉ triển khai phép tính chúng ta đã làm ở trên theo cách lập trình để có được một checksum mới mỗi lần trước khi chúng ta gửi lệnh thay đổi màu sắc.
Giải mã lệnh điều chỉnh độ sáng
Cuối cùng, hãy xem xét độ sáng. Sử dụng quy trình tương tự, tôi phát hiện ra rằng việc đặt độ sáng dường như là lệnh sau:
3304[brightness]00000000000000000000000000000000[checksum]
Độ sáng là một byte duy nhất, từ 00
(0) đến FF
(255). Checksum một lần nữa phải được tính toán, nhưng điều này dễ dàng thực hiện bây giờ khi chúng ta đã tìm ra cách nó được tính toán. Ví dụ, để đặt độ sáng 100%, chỉ cần:
3304ff00000000000000000000000000000000c8
Thành quả: Hoàn toàn kiểm soát đèn Govee H615B
Giờ đây, chúng ta đã hoàn toàn tìm ra cách điều khiển đèn của mình! Chúng ta có thể:
- Bật và tắt đèn H615B
- Đặt màu sắc
- Đặt độ sáng
Và chúng ta có thể làm tất cả những điều này mà không cần sử dụng ứng dụng chính thức! Nó bỏ qua một API dựa trên đám mây, khắc phục vấn đề không thể sử dụng API cục bộ, và có nghĩa là chúng ta có thể tự động hóa việc điều khiển chúng từ một thiết bị khác bằng cách tích hợp chúng vào nhà thông minh của mình.
Hành Trình Reverse Engineering: Kiên Trì và Sáng Tạo
Reverse engineering là một hành trình dài và thú vị, đòi hỏi sự kiên trì và khả năng vượt qua các trở ngại. Bạn sẽ đối mặt với nhiều bức tường gạch, nhưng đừng để chúng làm bạn nản lòng.
Những khó khăn và niềm vui của quá trình Reverse Engineering
Có vô số tài nguyên ngoài kia để cố gắng giúp bạn, nhưng rất có thể, nếu bạn đang reverse engineering một thứ gì đó, thì bạn đang làm điều đó vì chưa ai khác làm. Tôi đã có thể tổng hợp tất cả dữ liệu đã thu thập được thông qua quá trình này và xây dựng một trang web để điều khiển những chiếc đèn này trong trình duyệt của mình, nhưng tôi đã may mắn vì đó là một quá trình tương đối đơn giản để xác định những gì tôi cần thay đổi và cách thức.
Mục tiêu của bài viết này là hướng dẫn bạn các bước cần thiết khi reverse engineering một thứ gì đó tương tự. Có rất nhiều thiết bị thông minh giá rẻ trên thị trường tương tự Govee H615B yêu cầu một ứng dụng độc quyền để điều khiển chúng. Tuy nhiên, không phải là không thể tìm ra cách chúng hoạt động, và với hàng giờ hoặc thậm chí hàng ngày miệt mài bên máy tính, đôi khi bạn có thể vượt qua và tìm ra cách tự mình điều khiển chúng. Đó chính xác là những gì tôi đã làm. Những gì bắt đầu như một dự án cuối tuần nhỏ vui vẻ cuối cùng đã trở thành một công việc kéo dài nhiều ngày mà tôi quyết tâm phải tìm ra tận cùng.
Giao diện điều khiển đèn Govee H615B tùy chỉnh qua trình duyệt web sau khi reverse engineering thành công
Tích hợp đèn Govee H615B vào Home Assistant
Từ điểm này, việc triển khai cơ chế điều khiển từ Home Assistant để bạn có thể sử dụng những chiếc đèn này như bất kỳ thiết bị nào khác của mình là điều tầm thường. Ví dụ, bạn có thể triển khai một REST API trong Flask và sau đó sử dụng tích hợp rest_command
trong Home Assistant để gửi lệnh. Cuối cùng, tạo một script sẽ bật hoặc tắt nó, và bạn có thể xây dựng một template switch, một input slider, hoặc một điều khiển Lovelace tùy chỉnh cho nguồn điện, độ sáng và màu sắc. Đây là những gì tôi đã làm khi triển khai nó trên Milk-V Duo S của mình, và nó hoạt động hoàn hảo. Mặc dù không được khám phá trong bài viết này, bạn cũng có thể đánh giá trạng thái hiện tại của đèn Govee (đang bật hay tắt) bằng cách in dữ liệu được phát ra khi quét.
Khuyến khích cộng đồng và nguồn tài nguyên
Nếu bạn đang sở hữu những chiếc đèn này, bạn có thể kiểm tra kho lưu trữ GitHub của tôi để tự mình điều khiển chúng từ bất kỳ thiết bị hỗ trợ Bluetooth nào của bạn. Tất cả những gì bạn cần là địa chỉ MAC (mà bạn có thể nhận được bằng cách sử dụng một ứng dụng như nRF Connect trên điện thoại của mình), và phần còn lại sẽ hoạt động. Đó là một quá trình học hỏi rất lớn, và tôi hy vọng rằng điều này sẽ truyền cảm hứng cho bạn để xem xét kỹ hơn các thiết bị xung quanh mình để tìm ra cách chúng hoạt động và cách bạn có thể tự mình kiểm soát chúng!
Kết luận
Hành trình reverse engineering đèn LED Govee H615B qua Bluetooth LE là một minh chứng rõ ràng cho việc người dùng có thể giành lại quyền kiểm soát các thiết bị IoT của mình, vượt qua những hạn chế từ các API chính thức. Từ việc thu thập gói tin Bluetooth bằng Google Pixel, phân tích sâu với Wireshark, cho đến việc giải mã các lệnh điều khiển bật/tắt, màu sắc và độ sáng thông qua phép toán checksum XOR, chúng ta đã xây dựng thành công một giải pháp tự chủ hoàn toàn.
Khả năng tích hợp Govee H615B trực tiếp vào Home Assistant mở ra một thế giới tự động hóa và tùy chỉnh, giúp hệ thống nhà thông minh của bạn trở nên linh hoạt và mạnh mẽ hơn. Quá trình này không chỉ mang lại kết quả thiết thực mà còn là một trải nghiệm học hỏi sâu sắc, khám phá các giao thức kỹ thuật phức tạp và cách các thiết bị điện tử giao tiếp với nhau.
Hy vọng bài viết này đã cung cấp cho bạn cái nhìn chi tiết và nguồn cảm hứng để bắt đầu dự án reverse engineering của riêng mình. Đừng ngần ngại khám phá và thử nghiệm, bởi vì khả năng tự chủ công nghệ luôn nằm trong tầm tay bạn. Hãy truy cập kho lưu trữ GitHub đã được cung cấp để bắt đầu hành trình kiểm soát đèn Govee của bạn ngay hôm nay, hoặc chia sẻ những ý tưởng và kinh nghiệm reverse engineering thiết bị IoT của bạn cùng cộng đồng 360congnghe.com!