Sonoff-diy-ota-firmware
กระบวนการบรรทัดคำสั่งเพื่ออัปโหลดเฟิร์มแวร์ใหม่ผ่านอุปกรณ์ Sonoff DIY โดยใช้ REST API http://developers.sonoff.tech/basicr3-rfr3-mini-http-api.html
สร้างขึ้นโดยใช้ Python 3.8 บน Ubuntu 20.04 และทดสอบบน Sonoff Basic R3 และ Sonoff Mini
อุปกรณ์ Sonoff ต้องอยู่ในโหมด DIY และบนเครือข่ายเดียวกัน (Sonoffdiy) โดยใช้คอมพิวเตอร์ที่ใช้สคริปต์นี้
สิ่งนี้ต้องการ:
- DIY 1.0:
- จัมเปอร์บนพินที่กำหนด
- เครือข่าย wifi กับ SSID: Sonoffdiy และรหัสผ่าน: 20170618SN
- DIY 2.0: ตรวจสอบ http://developers.sonoff.tech/sonoff-diy-mode-api-protocol.html
การใช้งานที่แนะนำ:
Appimage:
- หากบน Linux ให้ดาวน์โหลดและดำเนินการ appimage จากหน้าเผยแพร่
Python Virtual Environment (Linux & Windows):
- สร้างสภาพแวดล้อมเสมือนจริง (venv หรือ conda หรืออย่างอื่น):
python3 -m venv /path/to/new/virtual/environment
หรือ
conda create -n <environment_name> python=3.8
- เปิดใช้งานสภาพแวดล้อมตามสภาพแวดล้อมเสมือนจริงของคุณ
- ติดตั้งการอ้างอิง:
pip3 install -r requirements.txt
- เรียกใช้สคริปต์:
คำสั่งอาจแตกต่างจาก Windows
อย่าพยายามแฟลชเฟิร์มแวร์ที่มีขนาดใหญ่กว่า 508KB ใช้บางอย่างเช่น tasmota-lite.bin และต่อมาจากภายใน tasmota แฟลชเฟิร์มแวร์ที่สมบูรณ์
ขั้นตอนการดำเนินการ:
- ดาวน์โหลดไฟล์เฟิร์มแวร์ (เช่น tasmota-lite.bin)
- เรียกใช้สคริปต์ main.py
- รอจนกว่าอุปกรณ์ของคุณจะถูกค้นพบ ถ้าเป็นเช่นนั้นการค้นพบจะหยุดโดยการกด Enter กระบวนการตรวจจับอุปกรณ์ Ewelink ทั้งหมดในเครือข่ายโดยใช้ MDNS (ขอบคุณ Zeroconf https://pypi.org/project/zeroconf)
- เลือกอุปกรณ์เพื่ออัปโหลดเฟิร์มแวร์ใหม่
- เซิร์ฟเวอร์ HTTP เริ่มต้น (ขอบคุณ rangehttpserver https://github.com/danvk/rangehttpserver) เพื่อให้บริการไดเรกทอรีของเฟิร์มแวร์ที่เลือก
- กระบวนการทำให้แน่ใจว่าฟังก์ชันการทำงานของ OTA นั้นถูกปลดล็อคโดยใช้คำขอ REST ที่เหมาะสม
- ส่งคำขอโพสต์ไปยังอุปกรณ์ที่ให้ลิงก์เซิร์ฟเวอร์ HTTP ของเฟิร์มแวร์ใหม่
- นอนหลับ 10 นาทีเพื่อให้แน่ใจว่าการส่งผ่านสิ้นสุดลง หากคุณเห็นว่ามันจบลง (Tasmota Wifi ปรากฏขึ้น) ให้ฆ่า proceess ด้วย Ctrl-C
หมายเหตุ:
- หากอุปกรณ์ไม่ตอบสนองต่อข้อความ MDNS ให้ลบแหล่งพลังงานและเชื่อมต่ออีกครั้งในขณะที่การค้นพบกำลังดำเนินการอยู่
การพึ่งพา:
- https://pypi.org/project/rangehttpserver/
- https://pypi.org/project/zeroconf
- https://pypi.org/project/requests/
- https://pypi.org/project/simple-term-menu/
สิ่งที่ต้องทำ:
- จัดการรหัสข้อผิดพลาดคำขอ
- เพิ่ม Dockerfile
สคริปต์เหล่านี้ได้รับการพัฒนาอย่างรวดเร็วสำหรับความต้องการของฉันเองในการแฟลชเฟิร์มแวร์ใหม่ลงในอุปกรณ์ Sonoff เนื่องจากเครื่องมือที่มีอยู่นั้นดูซับซ้อนเกินไปและไม่สามารถใช้งานกับ Linux ได้ ฉันไม่รับประกันว่าจะใช้งานได้ในทุกกรณี โปรดใช้ตามความเสี่ยงของคุณเอง