- Trong bối cảnh dịch vụ di động của hệ thống intercom Doorking hiện có bị ngừng, khiến chức năng mở cổng không còn hoạt động, một bản hack phần cứng đã được thực hiện để khôi phục điều khiển từ xa
- Sử dụng bo mạch relay Wi‑Fi ESP32 để điều khiển trực tiếp đường điều khiển solenoid, đồng thời cấu hình như một client giao thức Matter tích hợp với Apple Home
- Firmware viết bằng Rust được thiết kế để chỉ mở cổng trong một khoảng thời gian nhất định rồi tự động khóa lại, nhằm duy trì tính bảo mật
- Để giải quyết xung đột bộ nhớ giữa Wi‑Fi và Bluetooth, hai stack được vận hành theo kiểu loại trừ lẫn nhau, và sau khi provisioning xong thì được tối ưu để chỉ dùng Wi‑Fi
- Kết quả là hoàn thiện một ví dụ mở rộng IoT kín đáo cho phép điều khiển cổng bằng smartphone mà không làm hỏng hệ thống hiện có
Dự án hộp bí mật tích hợp intercom chung cư với Apple Home
- Dự án bắt đầu khi intercom chung cư của một người bạn dùng hệ thống Doorking 1834-080, nhưng do quản lý lỏng lẻo nên dịch vụ di động bị ngắt, khiến chức năng mở cổng không còn hoạt động
- Khi khách đến không thể gọi điện để xin vào, một giải pháp hack phần cứng dựa trên ESP32 đã được triển khai để có thể mở cổng từ xa trong Apple Home
Khảo sát ban đầu và những thử nghiệm đầu tiên
- Kiểm tra tại chỗ cho thấy hộp phía trên của intercom không bị khóa nên có thể xem cấu trúc bên trong, và router Wi‑Fi/di động vẫn để mật khẩu mặc định
- Sau khi tải file cấu hình của router, đã phát hiện một lỗ hổng cho phép đặt lại mật khẩu root, nhưng cuối cùng từ bỏ vì phải phân tích giao thức serial tùy biến của hệ thống quá phức tạp
- Ở thử nghiệm thứ hai, tác giả định dùng đầu nối đường dây điện thoại (
PH LINE) để giả lập tín hiệu DTMF, nhưng dừng lại vì nhiều khả năng hộp điều khiển sẽ bỏ qua lệnh khi không ở trạng thái chờ nhận cuộc gọi
Cách tiếp cận thứ ba: điều khiển ở giữa mạch
- Khi mở hộp nối dây (junction box) nằm giữa hộp thoại và bộ điều khiển chính, tác giả phát hiện đường điều khiển solenoid dùng để vận hành khóa cổng đi qua đây
- Solenoid có cấu trúc đơn giản: cấp điện thì mở, ngắt điện thì khóa, nên từ đó hình thành ý tưởng cấp nguồn trực tiếp để mở cổng
- Kế hoạch được lập ra là lấy nguồn phụ 12V DC từ hộp thoại để chạy bo relay Wi‑Fi ESP32, rồi tích hợp nó với Apple Home
- Tách nhánh đường điều khiển solenoid và nối vào relay ESP32
- Viết firmware bằng Rust để hoạt động như client giao thức Matter
- Thiết kế mạch để có thể điều khiển song song mà vẫn giữ nguyên hoạt động bình thường của hệ thống hiện có
Cấu hình phần mềm
- Sử dụng thư viện Matter nền Rust để kết nối ESP32 với Apple Home
- Sau khi kết nối mạng, khi nhận lệnh thì cổng sẽ được mở trong một khoảng thời gian nhất định (mặc định 10 giây) rồi tự động khóa lại
- Điều này giúp ngăn cổng bị mở quá lâu và duy trì tính bảo mật
- Mã nguồn công khai: GitHub - ImTheSquid/doorbell2
Vấn đề bộ nhớ và cách giải quyết
- Do thiếu RAM trên ESP32, việc chạy đồng thời stack Wi‑Fi và Bluetooth gây hỏng bộ nhớ và dẫn tới reset
- Bản triển khai Matter đang dùng lại sử dụng stack Bluedroid, khiến vấn đề càng nghiêm trọng hơn
- Giải pháp là chỉ kích hoạt Wi‑Fi và Bluetooth theo kiểu loại trừ lẫn nhau, đồng thời áp dụng các tùy chọn tiết kiệm bộ nhớ trong file cấu hình (
sdkconfig.defaults)
- Bluetooth chỉ được bật tạm thời trong lúc provisioning, sau đó hệ thống được chuyển sang chỉ dùng Wi‑Fi để ổn định hơn
- Trong Apple Home, khóa cổng hiển thị bình thường và cả thông tin nhà sản xuất cũng có thể được đặt tùy ý
Cài đặt và xử lý vấn đề nguồn điện
- Bo ESP32 vừa khít hoàn toàn trong hộp dây, nên từ bên ngoài không thể nhìn thấy
- Ban đầu kéo dây nguồn từ hộp thoại sang nhưng không hoạt động, nên tác giả tạm thời thử bằng pin máy khoan không dây 20V và đã thành công
- Sau đó kiểm tra tài liệu mới phát hiện đầu 12V của hộp thoại là đầu vào, không phải đầu ra
- Vấn đề nguồn được giải quyết bằng cách thêm bộ điều áp chỉnh lưu để chuyển đầu vào 18V AC thành 12V DC
- Cuối cùng, toàn bộ linh kiện được sắp xếp gọn bên trong hộp dây và hoàn thiện
Kết quả và ý nghĩa
- Giờ đây có thể điều khiển cổng từ xa bằng smartphone thông qua Apple Home, và khách đến cũng có thể mở đồng thời cổng và cửa căn hộ ngay trong ứng dụng
- Bản lắp đặt là một cấu trúc kín đáo chỉ gồm bo ESP32 và một bộ nguồn nhỏ, không can thiệp vào hệ thống kiểm soát ra vào hiện có
- Với một bản hack mạch đơn giản và tích hợp dựa trên tiêu chuẩn mở, đây là một ví dụ IoT thực dụng giúp mở rộng chức năng của phần cứng cũ
- Dự án cũng giúp tích lũy kinh nghiệm hack mạch và có thể tái hiện khá dễ dàng trong các môi trường tương tự
1 bình luận
Ý kiến trên Hacker News
Chỉ ra đây là hành vi rất mập mờ về mặt pháp lý và đạo đức
Việc kết nối vào hộp bên trong căn hộ riêng thì còn có thể hiểu được, nhưng nối vào bộ điều khiển cửa ra vào chung rồi chia quyền truy cập cho bạn bè thì bị xem là có vấn đề
Việc đã nhiều lần cố tránh bị phát hiện cho thấy có lẽ chính người làm cũng biết đó là sai
Hành vi này có thể mở rộng bề mặt tấn công số và tạo cơ hội cho tội phạm
Vì vậy, người làm có thể phải chịu ít nhất một phần trách nhiệm, bao gồm cả trách nhiệm hình sự lẫn dân sự
Tuy nhiên, nếu đó là tài sản của chính mình và mọi bên liên quan đều đồng ý, thì việc nối dây solenoid để sửa đổi hệ thống có thể là phù hợp
Họ cho rằng việc cấp điện vào dây solenoid lộ ra ngoài như OP làm không phải chuyện gì quá lớn
Tôi cũng từng triển khai một kiểu tích hợp Apple HomeKit tương tự nhưng đơn giản hơn
Intercom được nối với điện thoại bàn có dây riêng của nhà, chiếc điện thoại đó tự động chuyển sang hộp thư thoại, và tin nhắn thoại này sẽ phát âm báo mở cửa
Nguồn điện được điều khiển bằng ổ cắm thông minh; bật lên thì vào được ngay, tắt đi thì chặn lại
Khi intercom gọi vào số VoIP của tôi, hệ thống yêu cầu khách nhập mã; nếu đúng thì gửi DTMF 9 để mở cửa
Cũng có thông báo qua email·SMS, và có thể cấp nhiều mã khác nhau để biết ai đã vào
Vì vậy có lẽ tôi sẽ cấu hình để sau khi phát tin nhắn thoại xong thì ổ cắm tự tắt
Tôi cũng gặp đúng vấn đề này, và sau hơn một năm tìm kiếm thì đã thấy một người ở Romania bán bo mạch reverse engineering làm sẵn
Có thể lắp với chi phí dưới 30 euro, cách làm thô sơ nhưng đầy sức hút
Liên kết
Việc kéo điện từ đường 24V có thể bị coi là “trộm điện”, nên tôi bỏ cuộc
Cuối cùng tôi chuyển sang Nuki Opener, ổn định hơn hẳn và phù hợp cho cả gia đình dùng
Mấy bản chế thử nghiệm thô sơ thì vui thật, nhưng không hợp để dùng thực tế
Tham khảo thêm, kho mã nguồn ở GitHub link
Tôi ngạc nhiên vì hệ sinh thái intercom dạo này quá lạc hậu
Không hiểu sao lại không có một sản phẩm nửa thông minh nào chỉ đơn giản để báo kiểu “bữa tối sẵn sàng rồi”
Các sản phẩm không dây giá rẻ vô danh thì ngay cả liên lạc giữa các phòng còn không ra hồn, nên rốt cuộc dùng Asterisk với điện thoại VoIP giá rẻ vẫn là cách duy nhất
Có thể gửi nhận âm thanh hoặc phát vào bất kỳ thời điểm nào muốn
Người này đã thử nhiều tổ hợp như Sonos, Wiim, Acrylic, nhưng cuối cùng vẫn chấp nhận chất lượng tầm trung của Sonos và đang dùng nó
Một số intercom ở châu Âu có giải pháp tên là Doorman
Nó reverse engineer giao thức Koch rồi triển khai bằng ESP32 + Home Assistant, và tính năng party mode rất hữu ích khi có sự kiện
Trang Doorman / Hướng dẫn Ring-to-open
Tôi làm theo cách còn đơn giản hơn: đưa số Twilio cho quản lý tòa nhà, rồi trong ứng dụng đặt phản hồi theo từng mã
Mã hợp lệ sẽ gửi DTMF “9” để mở cửa, còn “1” sẽ chuyển cuộc gọi tới điện thoại di động của tôi
Tôi cũng gặp sự bất tiện tương tự với việc điều khiển sưởi ở nhà nghỉ
Bộ điều nhiệt treo tường chạy pin điều khiển sưởi sàn bằng tín hiệu radio, nhưng nếu muốn điều khiển từ xa thì phải mua thiết bị mới giá hơn 2.000 USD
Đáng lẽ chỉ cần mô phỏng lại tín hiệu hiện có, nhưng công nghệ lại đóng kín một cách không cần thiết nên rất bực bội
Tôi còn nghĩ thà dùng bộ truyền động điều khiển từ xa để xoay núm còn hơn
Có người từng dùng Home Assistant để ghi và phát lại tín hiệu nhằm điều khiển quạt trần hoặc thiết bị hồng ngoại
Phần lớn nồi hơi thực ra chỉ cần ba tín hiệu đơn giản: quạt gió, sưởi và làm mát
Họ có thiết bị bấm nút hoặc xoay thanh rèm, nên có thể ứng dụng để xoay núm
Có thể giải quyết bằng cách dùng ESP32 nối song song vào đường điều khiển solenoid 24V
Có người đùa rằng khách của Frank chỉ cần chìa khóa mặc định Doorking 16120 là được
Sau đó họ kể lại một giai thoại thời đại học, khi câu lạc bộ điện tử giải quyết vấn đề cửa ra vào
Họ dùng Raspberry Pi + relay để mắc song song vào mạch nút mở cửa, sao cho chỉ cần SSH qua Wi‑Fi là cửa mở
Cuối cùng không bị phát hiện, và khi tòa nhà cải tạo thì chứng cứ cũng biến mất luôn
Có ý kiến nhắc đến khả năng relay bị hỏng
Nếu vượt quá dòng định mức thì relay có thể bị dính và kẹt ở trạng thái đóng
Việc dùng hai SPDT mắc song song thay cho DPDT có thể khiến nếu chỉ một cái hoạt động thì cửa sẽ bị khóa mãi
Cũng không có cầu chì hay snubber
Thay vào đó, họ khuyên dùng dòng Relay In A Box — có chứng nhận UL·CE, tuổi thọ 10 triệu lần, và có thể qua được kiểm tra mã
Datasheet / Trang sản phẩm
Tôi cũng tự làm một thứ tương tự
Liên kết dự án
Tôi mua BTicino BT 344232 trên eBay với giá 32 euro, hàn 4 sợi dây và thêm một vi điều khiển
Giờ nó hoạt động như một intercom thông minh, tích hợp với Nuki Opener + MQTT Pub/Sub