- Firmware tùy chỉnh cho thiết bị Nest Thermostat thế hệ 1·2, hoạt động bằng cách thay thế bootloader và kernel thông qua giao diện OMAP DFU
- Sau khi flash, thiết bị sẽ ngừng kết nối với máy chủ Nest/Google và chuyển sang giao tiếp với nền tảng NoLongerEvil độc lập
- Chuyển hướng lưu lượng mạng tới máy chủ API được reverse engineer để duy trì các chức năng hiện có đồng thời cho phép kiểm soát hoàn toàn dữ liệu và cài đặt của người dùng
- Quá trình cài đặt gồm các bước vào chế độ DFU, flash bootloader (
x-load, u-boot) và kernel (uImage), đăng ký tài khoản và liên kết thiết bị
- Mục tiêu là thoát phụ thuộc vào đám mây và khôi phục quyền sở hữu thiết bị, đồng thời nêu rõ việc công khai mã nguồn mở và ủng hộ phong trào right-to-repair
Tổng quan
- Dự án này cung cấp công cụ và image để cài đặt firmware tùy chỉnh cho Nest Thermostat
- Sử dụng giao diện OMAP DFU (Device Firmware Update) để thay bootloader và kernel
- Chỉ có thể nhận firmware mới khi ở chế độ DFU
- Sau khi flash, thiết bị không giao tiếp với máy chủ Nest/Google mà kết nối với nền tảng NoLongerEvil
- Nhờ đó người dùng có thể giành quyền kiểm soát hoàn toàn đối với hoạt động và dữ liệu của thermostat
Cách hoạt động
- Firmware tùy chỉnh sửa đổi các thành phần bootloader và kernel để chuyển hướng lưu lượng mạng tới máy chủ được chỉ định
- Máy chủ này là máy chủ sao chép đã reverse engineer từ Nest API, cho phép thiết bị hoạt động độc lập
- Bằng cách chặn tầng giao tiếp, thiết bị được khiến cho nhận biết như thể vẫn đang kết nối với hạ tầng Nest chính thức
- Cách làm này giúp duy trì khả năng tương thích với phần mềm hiện có và loại bỏ sự phụ thuộc vào đám mây của Google
Quy trình cài đặt
- Sau khi clone repository, cài các gói cần thiết (như libusb) theo từng hệ điều hành
- Linux:
build-essential, libusb-1.0-0-dev, gcc, pkg-config
- macOS: Xcode Command Line Tools và cài libusb bằng Homebrew
- Chạy
build.sh để tự động nhận diện hệ điều hành rồi build công cụ omap_loader
- Trước khi chạy
install.sh, cần chuyển thiết bị sang chế độ DFU
- Kiểm tra pin/sạc (trên 50%), tháo khỏi tường, kết nối USB, khởi động lại (nhấn giữ 10~15 giây)
- Khi vào chế độ DFU, hệ thống sẽ tự động flash
x-load, u-boot, uImage
- Sau khi khởi động xong, logo NoLongerEvil sẽ hiển thị, mất khoảng 3~4 phút
- Đăng ký tài khoản trên nolongerevil.com rồi liên kết thiết bị
- Trên thiết bị Nest, vào Settings → Nest App → Get Entry Code để xem mã
- Nhập mã vào dashboard là hoàn tất kết nối thiết bị
Các thành phần được flash
- Khi cài đặt sẽ flash ba binary chính
- x-load.bin – bootloader giai đoạn 1 (X-Loader for OMAP)
- u-boot.bin – bootloader giai đoạn 2 (Das U-Boot, địa chỉ
0x80100000)
- uImage – image kernel Linux (địa chỉ
0x80A00000)
- Sau khi flash, thiết bị bắt đầu thực thi từ
0x80100000 (u-boot)
Bảo mật và lưu ý
- Công cụ này cung cấp truy cập mức thấp vào tiến trình khởi động của thiết bị
- Chỉ nên dùng trên thiết bị do chính người dùng sở hữu
- Firmware sai có nguy cơ làm hỏng thiết bị (brick)
- Đây là phần mềm mang tính thử nghiệm, khuyến cáo không dùng cho thiết bị thiết yếu đối với sưởi ấm hoặc làm mát
Ghi nhận và cam kết mã nguồn mở
- Công nghệ nền tảng dựa trên nghiên cứu của nhiều nhà nghiên cứu bảo mật
- grant-h / ajb142: công cụ bootloader USB OMAP
omap_loader
- exploiteers (GTVHacker): nghiên cứu Nest DFU Attack, chứng minh khả năng chạy firmware tùy chỉnh trên thiết bị thế hệ 1·2
- FULU và các nhà tài trợ: hỗ trợ bug bounty cho Nest Learning Thermostat Gen 1/2
- Dự án ủng hộ tính minh bạch và phong trào right-to-repair
- Image firmware và mã máy chủ API backend sẽ sớm được công khai mã nguồn mở
- Hỗ trợ cộng đồng tự kiểm toán, cải tiến và tự vận hành hạ tầng riêng
Tài liệu tham khảo
1 bình luận
Ý kiến trên Hacker News
Nếu nồi hơi hỗ trợ OpenTherm thì nên thử dự án thermostat SAT
Có bù theo thời tiết, bù tải thấp và điều khiển PID, nên có thể điều khiển theo đúng độ chính xác mà cảm biến nhiệt độ hỗ trợ (trong trường hợp của tôi là ±0.02°C)
Vận hành bằng Home Assistant, nên vừa tiết kiệm năng lượng vừa giữ được sự thoải mái
Có thể xem dữ liệu thời gian thực trên bảng điều khiển Grafana hoặc Emoncms
Ví dụ, Ecobee không hỗ trợ điều khiển đa cấp của nồi hơi, cũng không tích hợp với bơm nhiệt nên nhiệt độ giữa các phòng bị mất cân bằng
Một ngày nào đó tôi muốn lắp cảm biến nhiệt độ HA cho cả nhà, để hệ thống tự quyết định nên ưu tiên chạy hệ nào theo từng khung giờ
Cuối cùng tôi dừng luôn ý định dùng OpenTherm ở đó
Cái này trông chỉ như dùng một dịch vụ đóng khác tên là NoLongerEvil thay cho Google
Dù tên là gì thì cũng không thể biết họ có đáng tin hay không.
Muốn thật sự tin được thì tôi nghĩ cần có firmware và backend mã nguồn mở hoàn chỉnh
Hiện tại mới chỉ ở mức hack firmware của Google rồi chuyển lưu lượng sang máy chủ khác, nên tôi mong sẽ có backend có thể tự host và quy trình build được công khai
Sửa: nghe nói backend sắp được công bố mã nguồn mở, nên tôi đang chờ xem
Không hoàn hảo, nhưng việc giúp thiết bị đã chết dùng lại được vẫn rất có ý nghĩa
Từ bộ điều khiển Nest đến máy chủ Minecraft, tôi muốn quản lý bằng Kubernetes nhẹ rồi thay node khi cần theo kiểu đó
Hiện tại nó chỉ là một ảnh firmware kết nối tới dịch vụ đóng
Bạn cũng không thể đổi nó kết nối tới đâu, và cũng không có chính sách quyền riêng tư
Đăng nhập dùng tài khoản GitHub thuộc sở hữu của Microsoft, còn xác thực do clerk.com xử lý
Nghe nói sắp mã nguồn mở nên cứ chờ thêm
Việc chưa có chính sách quyền riêng tư ở giai đoạn đầu cũng có thể hiểu được
Trang "Open Source" trên website dashboard chỉ có firmware chứ không có mã phía máy chủ
Chỉ riêng firmware thì khó mà xem là phần mềm tự do hoàn chỉnh
Sửa: xem kỹ hơn thì có ghi là backend cũng sẽ sớm được công bố mã nguồn mở
GitHub issue liên quan
Có cảnh báo rằng không nên dùng firmware này cho thermostat thiết yếu với hệ thống sưởi/làm mát
Trước đây tôi từng gặp sự cố thermostat khiến nhiệt độ trong nhà tăng lên mức nguy hiểm, nên loại cảnh báo này cần được xem trọng
Tôi vẫn định tiếp tục dùng thermostat tròn analog Honeywell đã hoạt động tốt hàng chục năm nay
Tôi chọn cách khác và tự thiết kế PCB mới
Tôi làm nó để có thể kiểm soát firmware 100%, và đã chia sẻ quá trình reverse engineering giao diện LCD
Tôi hy vọng exploit của Cody sẽ cho phép ghi hẳn firmware mới
Tôi thật sự mong dự án này thành công
Trước đây tôi từng làm việc với đội phát triển Nest thế hệ 1 và 2, và họ rất tâm huyết với sản phẩm
Họ hẳn sẽ không đưa ra quyết định ngừng dịch vụ theo cách này
Ngay cả khi chúng tôi còn ở đó thì ý kiến của chúng tôi cũng không được lắng nghe
Tôi đang kỳ vọng vì thấy câu “chúng tôi cam kết với sự minh bạch và phong trào quyền được sửa chữa”
Thật khó chấp nhận khi một công ty từng nói quan tâm tới môi trường lại biến thiết bị của người dùng thành rác theo cách này
Có vẻ đây chỉ là quyết định để tiết kiệm chi phí cloud hoặc bán thêm sản phẩm mới
Những công ty kiểu này chỉ theo đuổi lợi nhuận chứ không phải môi trường.
Hơn nữa, một số bên còn liên quan đến xung đột quốc tế và vấn đề nhân quyền
Liên kết báo cáo của UN
Tôi đang tìm một thermostat ít phụ thuộc cloud hơn
Tôi dùng hai chiếc Nest mà thấy quá bức bối, nên muốn một sản phẩm tích hợp trực tiếp với Home Assistant
Sản phẩm hỗ trợ cả WiFi lẫn API hầu như không có, Venstar là bên hiếm hoi làm được nhưng tôi đã bỏ vì module WiFi không ổn định
Cấu trúc firmware của nó cũng khá lạ nên tôi không thử nữa
Trong Home Assistant nó cũng hoạt động tốt qua tích hợp HomeKit