- เฟิร์มแวร์แบบกำหนดเองสำหรับอุปกรณ์ Nest Thermostat รุ่น 1 และ 2 โดยใช้โครงสร้างที่เปลี่ยนบูตโหลดเดอร์และเคอร์เนลผ่านอินเทอร์เฟซ OMAP DFU
- หลังแฟลชแล้ว อุปกรณ์จะ หยุดเชื่อมต่อกับเซิร์ฟเวอร์ Nest/Google และเปลี่ยนไปสื่อสารกับ แพลตฟอร์ม NoLongerEvil ที่ทำงานอย่างอิสระ
- รีไดเรกต์ทราฟฟิกเครือข่ายไปยัง เซิร์ฟเวอร์ API ที่ทำ reverse engineering ไว้ เพื่อคงฟังก์ชันเดิม พร้อมให้ผู้ใช้ควบคุมข้อมูลและการตั้งค่าได้อย่างสมบูรณ์
- ขั้นตอนการติดตั้งประกอบด้วยการเข้าโหมด DFU, การแฟลชบูตโหลดเดอร์ (
x-load, u-boot) และเคอร์เนล (uImage) รวมถึงการลงทะเบียนบัญชีและเชื่อมโยงอุปกรณ์
- มีเป้าหมายเพื่อ ปลดการพึ่งพาคลาวด์และกู้คืนความเป็นเจ้าของอุปกรณ์ พร้อมประกาศสนับสนุนการเปิดซอร์สและ ขบวนการ right-to-repair
ภาพรวม
- โปรเจ็กต์นี้จัดเตรียมเครื่องมือและอิมเมจสำหรับติดตั้ง เฟิร์มแวร์แบบกำหนดเอง บน Nest Thermostat
- ใช้อินเทอร์เฟซ OMAP DFU (Device Firmware Update) เพื่อเปลี่ยนบูตโหลดเดอร์และเคอร์เนล
- สามารถรับเฟิร์มแวร์ใหม่ได้เฉพาะในโหมด DFU เท่านั้น
- หลังจากแฟลชแล้ว อุปกรณ์จะ ไม่สื่อสารกับเซิร์ฟเวอร์ Nest/Google และเชื่อมต่อกับ แพลตฟอร์ม NoLongerEvil
- ทำให้ผู้ใช้มีสิทธิ์ควบคุมการทำงานและข้อมูลของเทอร์โมสแตตได้อย่างสมบูรณ์
วิธีการทำงาน
- เฟิร์มแวร์แบบกำหนดเองนี้ แก้ไของค์ประกอบของบูตโหลดเดอร์และเคอร์เนล เพื่อรีไดเรกต์ทราฟฟิกเครือข่ายไปยังเซิร์ฟเวอร์ที่กำหนด
- เซิร์ฟเวอร์ดังกล่าวเป็น เซิร์ฟเวอร์จำลองที่สร้างจากการ reverse engineering ของ Nest API ทำให้อุปกรณ์ทำงานได้อย่างอิสระ
- ดักชั้นการสื่อสารเพื่อให้อุปกรณ์รับรู้ราวกับว่ายังเชื่อมต่อกับโครงสร้างพื้นฐาน Nest อย่างเป็นทางการ
- วิธีนี้ช่วย คงความเข้ากันได้กับซอฟต์แวร์เดิม และ ตัดการพึ่งพา Google Cloud
ขั้นตอนการติดตั้ง
- หลังโคลนรีโพซิทอรี ให้ติดตั้ง แพ็กเกจที่จำเป็น (เช่น libusb) ตามระบบปฏิบัติการ
- Linux:
build-essential, libusb-1.0-0-dev, gcc, pkg-config
- macOS: Xcode Command Line Tools และการติดตั้ง libusb ผ่าน Homebrew
- รัน
build.sh เพื่อให้ตรวจจับระบบปฏิบัติการอัตโนมัติและ สร้างเครื่องมือ omap_loader
- ก่อนรัน
install.sh ต้องเปลี่ยนอุปกรณ์เข้าสู่โหมด DFU
- ตรวจสอบระดับแบตเตอรี่ (50% ขึ้นไป), ถอดออกจากผนัง, เชื่อมต่อ USB, รีบูต (กดค้าง 10~15 วินาที)
- เมื่อเข้าโหมด DFU แล้ว จะทำการแฟลช x-load, u-boot, uImage โดยอัตโนมัติ
- หลังบูตเสร็จจะ แสดงโลโก้ NoLongerEvil ใช้เวลาประมาณ 3~4 นาที
- ลงทะเบียนบัญชีบนเว็บไซต์ nolongerevil.com แล้วเชื่อมโยงอุปกรณ์
- บนอุปกรณ์ Nest ไปที่ Settings → Nest App → Get Entry Code เพื่อดูโค้ด
- เมื่อกรอกโค้ดในแดชบอร์ดแล้ว การเชื่อมต่ออุปกรณ์จะเสร็จสมบูรณ์
องค์ประกอบที่ถูกแฟลช
- ระหว่างการติดตั้งจะมีการแฟลชไบนารีหลัก 3 รายการ
- x-load.bin – บูตโหลดเดอร์ขั้นที่ 1 (X-Loader for OMAP)
- u-boot.bin – บูตโหลดเดอร์ขั้นที่ 2 (Das U-Boot, ที่อยู่ 0x80100000)
- uImage – อิมเมจเคอร์เนล Linux (ที่อยู่ 0x80A00000)
- หลังแฟลชแล้ว อุปกรณ์จะเริ่มรันจาก 0x80100000 (
u-boot)
ความปลอดภัยและข้อควรระวัง
- เครื่องมือนี้ให้ การเข้าถึงระดับต่ำต่อกระบวนการบูตของอุปกรณ์
- แนะนำให้ใช้กับอุปกรณ์ที่ผู้ใช้เป็นเจ้าของเท่านั้น
- เฟิร์มแวร์ที่ไม่ถูกต้องมีความเสี่ยงทำให้อุปกรณ์เสียหายถาวร (brick)
- เป็นซอฟต์แวร์เชิงทดลอง จึงแนะนำว่า ไม่ควรใช้กับอุปกรณ์ที่จำเป็นต่อระบบทำความร้อนหรือความเย็น
เครดิตและคำมั่นเรื่องโอเพนซอร์ส
- เทคโนโลยีพื้นฐานอาศัยงานวิจัยจากนักวิจัยด้านความปลอดภัยหลายราย
- grant-h / ajb142: เครื่องมือ OMAP USB bootloader
omap_loader
- exploiteers (GTVHacker) : งานวิจัย Nest DFU Attack ที่พิสูจน์ความเป็นไปได้ของเฟิร์มแวร์แบบกำหนดเองสำหรับอุปกรณ์รุ่น 1 และ 2
- FULU และผู้สนับสนุน: การสนับสนุน bug bounty สำหรับ Nest Learning Thermostat Gen 1/2
- โปรเจ็กต์นี้สนับสนุน ความโปร่งใสและขบวนการ right-to-repair
- มีแผนจะเปิดซอร์สโค้ดของอิมเมจเฟิร์มแวร์และโค้ดเซิร์ฟเวอร์ backend API ในเร็ว ๆ นี้
- เพื่อให้ชุมชนสามารถตรวจสอบ ปรับปรุง และโฮสต์โครงสร้างพื้นฐานของตนเองได้
เอกสารอ้างอิง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้าหม้อไอน้ำของคุณรองรับ OpenTherm ขอแนะนำให้ลองใช้ โปรเจ็กต์ SAT Thermostat
สามารถทำ weather compensation, low-load compensation และการควบคุมแบบ PID ได้ จึงควบคุมได้ตามความละเอียดที่เซ็นเซอร์อุณหภูมิรองรับ (กรณีของฉันคือ ±0.02°C)
ควบคุมผ่าน Home Assistant และได้ทั้งการประหยัดพลังงานกับความสบายไปพร้อมกัน
ดูข้อมูลแบบเรียลไทม์ได้ที่ Grafana dashboard หรือ Emoncms
ตัวอย่างเช่น Ecobee ไม่รองรับการควบคุมหลายระดับของหม้อไอน้ำ และก็ไม่เชื่อมกับฮีตปั๊มด้วย ทำให้อุณหภูมิในแต่ละห้องไม่สมดุล
สักวันหนึ่งอยากติดตั้ง เซ็นเซอร์อุณหภูมิ HA ทั่วทั้งบ้าน เพื่อให้ระบบตัดสินใจอัตโนมัติได้ว่าในแต่ละช่วงเวลาควรเดินระบบไหนก่อน
สุดท้ายก็จบการลอง OpenTherm ไว้แค่นั้น
มันดูเหมือนแค่เปลี่ยนจาก Google ไปใช้บริการปิดอีกเจ้าที่ชื่อ NoLongerEvil เท่านั้น
ไม่ว่าชื่อจะเป็นอะไร เราก็ไม่รู้ว่าพวกเขาเชื่อถือได้แค่ไหน
ถ้าจะให้น่าเชื่อถือจริง ๆ ฉันคิดว่าต้องมี เฟิร์มแวร์และแบ็กเอนด์ที่เป็นโอเพนซอร์สทั้งหมด
ตอนนี้ยังเป็นแค่การแฮ็กเฟิร์มแวร์ของ Google แล้วเปลี่ยนทราฟฟิกไปยังเซิร์ฟเวอร์อื่น เลยหวังว่าจะมีการเปิดเผยทั้ง แบ็กเอนด์ที่โฮสต์เองได้ และกระบวนการบิลด์
แก้ไข: ได้ยินมาว่ามีแผนจะเปิดซอร์สแบ็กเอนด์เร็ว ๆ นี้ เลยตั้งตารออยู่
แม้จะไม่สมบูรณ์แบบ แต่การทำให้อุปกรณ์ที่ตายไปแล้วกลับมาใช้งานได้อีกก็มีความหมาย
ตั้งแต่คอนโทรลเลอร์ Nest ไปจนถึง Minecraft server จัดการด้วย lightweight Kubernetes และเปลี่ยนโหนดได้ตามต้องการ
ตอนนี้มันก็เป็นแค่ อิมเมจเฟิร์มแวร์ที่เชื่อมต่อกับบริการปิด เท่านั้น
เปลี่ยนปลายทางที่เชื่อมต่อก็ไม่ได้ และก็ไม่มี นโยบายความเป็นส่วนตัว ด้วย
การล็อกอินใช้บัญชี GitHub ที่เป็นของ Microsoft และการยืนยันตัวตนจัดการโดย clerk.com
ได้ยินว่าจะเปิดซอร์สในเร็ว ๆ นี้ ก็เลยรอดูต่อไป
เรื่องที่ยังไม่มีนโยบายความเป็นส่วนตัวก็คงพอเข้าใจได้ว่าเพราะยังอยู่ช่วงเริ่มต้น
หน้า "Open Source" ของเว็บไซต์แดชบอร์ดมีแค่เฟิร์มแวร์ แต่ไม่มี โค้ดฝั่งเซิร์ฟเวอร์
ถ้ามีแค่เฟิร์มแวร์อย่างเดียวก็คงเรียกว่าซอฟต์แวร์เสรีเต็มรูปแบบได้ยาก
แก้ไข: พอดูละเอียดแล้วเหมือนมีระบุไว้ว่าจะเปิดซอร์สแบ็กเอนด์ในเร็ว ๆ นี้ด้วย
GitHub issue ที่เกี่ยวข้อง
มีคำเตือนว่า “อย่าใช้เฟิร์มแวร์นี้กับเทอร์โมสตัทที่จำเป็นต่อระบบทำความร้อน/ความเย็น”
ฉันเคยมีประสบการณ์ที่เทอร์โมสตัทเสียจน อุณหภูมิในบ้านขึ้นไปถึงระดับอันตราย มาก่อน เลยคิดว่าคำเตือนแบบนี้ต้องเอาจริงเอาจัง
ฉันตั้งใจจะใช้ เทอร์โมสตัท Honeywell แบบวงกลมอะนาล็อก ที่ทำงานดีมาหลายสิบปีต่อไป
ฉันเลือกวิธีอื่นด้วยการ ออกแบบ PCB ใหม่เอง
ทำให้ควบคุมด้วยเฟิร์มแวร์ได้ 100% และได้แชร์ กระบวนการรีเวิร์สเอนจิเนียร์อินเทอร์เฟซ LCD ไว้แล้ว
หวังว่า exploit ของ Cody จะทำให้เขียนเฟิร์มแวร์ใหม่ได้อย่างสมบูรณ์
หวังว่าโปรเจ็กต์นี้จะสำเร็จจริง ๆ
ฉันเคยทำงานร่วมกับ ทีมพัฒนา Nest รุ่น 1 และ 2 มาก่อน และทีมนั้นใส่ใจกับผลิตภัณฑ์นี้จริง ๆ
พวกเขาคงไม่มีทางเป็นคนตัดสินใจปิดบริการแบบนี้
ต่อให้ตอนที่เรายังอยู่ ความคิดเห็นของเราก็ไม่ได้ถูกรับฟัง
อ่านประโยคที่บอกว่า “เราทุ่มเทให้กับ ความโปร่งใสและขบวนการสิทธิในการซ่อม” แล้วก็เริ่มมีความหวัง
บริษัทที่ชอบพูดว่าใส่ใจสิ่งแวดล้อม แต่กลับ ทำอุปกรณ์ของผู้ใช้ให้กลายเป็นขยะ แบบนี้ มันน่าขันจริง ๆ
ดูเหมือนเป็นการตัดสินใจเพื่อประหยัดค่า cloud หรือไม่ก็เพื่อขายผลิตภัณฑ์ใหม่
บริษัทพวกนี้สนใจแต่กำไร ไม่ได้สนใจสิ่งแวดล้อม
แถมบางแห่งยัง พัวพันกับความขัดแย้งระหว่างประเทศและปัญหาสิทธิมนุษยชน อีกด้วย
ลิงก์รายงาน UN
ฉันกำลังหา เทอร์โมสตัทที่พึ่งพา cloud น้อยกว่า
ตอนนี้ใช้ Nest สองตัวอยู่และรู้สึกอึดอัดมาก เลยอยากได้ผลิตภัณฑ์ที่เชื่อมกับ Home Assistant ได้โดยตรง
ผลิตภัณฑ์ที่รองรับทั้ง WiFi + API แทบไม่มีเลย มีแค่ Venstar ที่พอได้ แต่ก็เลิกใช้เพราะ โมดูล WiFi ไม่เสถียร
โครงสร้างเฟิร์มแวร์ก็แปลก ๆ เลยไม่ลองต่อแล้ว
ใน Home Assistant ก็ใช้งานได้ดีผ่านการเชื่อมต่อ HomeKit