ต่อรถ BYD ATTO 3 กับ Home Assistant

หลังจากขับ ATTO 3 มาได้ประมาณ 1 เดือนก็เริ่มหาของเล่น อย่างแรกที่อยากทำคือทำให้รถสามารถส่งค่าต่างๆ เข้ามาที่ Home Assistant เพื่อเก็บไว้เผื่อทำ Tracking กับ Dashboard ดูรถ ถึงแม้ว่าในแอป BYD จะดูได้ และมี Widget ให้แล้วก็เถอะ แต่รู้สึกมีข้อมูลเก็บไว้เองก็ทำอะไรเล่นต่อได้เยอะกว่า

พอเริ่มหาข้อมูลว่ามีคนทำ Vehicle Dashboard ใน Home Assistant กันบ้างไหม ก็เจอว่าเยอะมาก แต่เท่าที่หาง่ายๆ ก็จะเป็นคนขับ Tesla (เค้าน่าจะมี API ให้ต่อ)

Dashboard ที่ใฝ่ฝัน (https://community.home-assistant.io/t/generic-vehicle-card/397844/116)

หาวิธีส่งข้อมูลจากตัวรถ

เท่าที่หาข้อมูลมาก็พบว่า ตัวรถและทาง BYD เองไม่มี API ให้เชื่อมต่อเลย และมีคนพยายาม reverse engineer แอป BYD เอง แต่ก็ยังไม่สำเร็จ จะเขียนแอปไปติดตั้งใน Center Screen แล้วใช้ Gearbox API ก็เหมือนจะต้องเป็นแอปที่ BYD Signed (จะ Root ก็กระไรอยู่ รถทั้งคัน 🌝)

ลองหาข้อมูลจากฝั่งคอมมูนิตี้ Home Assistant ดูบ้าง ว่าเค้าอ่าน Vehicle Telemetry กันยังไงบ้าง ก็ไปเจอท่า OBD2 ต่อกับแอป Torque Pro แล้วใช้ฟังก์ชั่น Logging/Data Upload ส่งเข้าไปที่ Torque Integration ที่ built-in มาใน Home Assistant แต่วิธีนี้ก็เป็นการทำงานทางเดียวไม่สามารถควบคุมรถผ่าน HA ได้ (ซึ่งไม่ว่ายังไงก็ไม่น่าจะทำได้ ถ้าไม่มี API จาก BYD เอง)

ทางเลือกที่ดูจะเป็นไปได้ที่สุดและง่ายที่สุดตอนนี้ก็คงต้องใช้ OBD2 ไปก่อน จนกว่าจะมีวิธีที่ดีกว่านี้

สรุป Flow การเชื่อมต่อ ก็คือ OBD2 Reader เสียบกับพอร์ต OBD2 ใต้พวงมาลัย → แอป Torque Pro ที่ติดตั้งใน Center Screen → Home Assistant

ตั้งเป้าหมายกันก่อน

  1. อยากให้รถส่งข้อมูลกลับมาที่ Home Assistant ที่บ้านได้ โดยต้องมีข้อมูลอย่างน้อยๆ คือ
    • ตำแหน่งรถ (GPS)
    • แบตเตอร์รี่ปัจจุบัน
    • ความเร็ว
    • อัตราการใช้พลังงาน (Consumption)
  2. อยากให้ทุกอย่างทำงานโดยอัตโนมัติ ใครก็ขับได้ ไม่ต้องเปิดมาแอปหรือกดนู่นนี่ทุกครั้งที่จะขับ
    ** สำคัญมาก

เตรียมอุปกรณ์

  1. รถ BYD และจอ Center Screen ที่ลงแอปได้ (ลง PackageInstallerUnlocked ไว้แล้วตั้งแต่ FW 1.6)
  2. OBD2 Reader/Scanner (เราเริ่มจากซื้อ Nexpeak NX101 มาลองก่อน)
  3. แอป Torque Pro
  4. Home Assistant ที่ต่อจาก Center Screen ถึง (ผ่าน Public Access หรือ VPN ก็ตามสะดวก)

ระวัง: รู้สึกว่า OBD2 อันที่ซื้อมานี้จะไม่มี Auto On/Off (เวลาดับรถแล้วมันจะยังติดอยู่ แล้วกินไฟตลอดเวลา) แล้วมัน drain battery ประมาณ 1-2% ต่อคืนที่เสียบค้างไว้เลย ไม่รู้คิดไปเองไหม เดี๋ยวไว้จะหาอันที่มี Auto On/Off มาลองอีกที

ติดตั้งกันเลย

ตอนติดตั้งก็แค่เสียบ OBD2 Reader เข้ากับตัวรถ ติดตั้งแอป Torque Pro ในจอกลาง แล้วเชื่อมต่อ Bluetooth OBD2 กับตัวรถ เปิดแอป Torque Pro > Adapter Status ดูว่าเชื่อมต่อได้ไหมก็สำเร็จในขั้นแรก

พอลองกด Realtime Information ในแอปดูว่ามีค่าอะไรที่น่าสนใจบ้าง (ที่แอปมี PID มาแล้ว) ก็เจอว่าอ่านอะไรไม่ได้เลย แม้กระทั่งค่าที่คิดว่าน่าจะอ่านได้อย่าง Speed เลยไปลองกับแอปอื่นที่เห็นคนใช้กันเยอะๆ อย่าง Car Scanner ซึ่งก็ทำได้ดีอย่างเค้าว่า มีค่าแบตเตอร์รี่ ความเร็วล้อ ความเร็วรถ ขึ้นมาให้เห็นโดยไม่ต้องเซ็ตอะไรเพิ่มเติม

แต่ปัญหาก็คือแอปนี้มันส่งข้อมูลไป HA ตรงๆ ไม่ได้ ดังนั้นก็คงต้องกลับไปใช้ Torque Pro อย่างหลีกเลี่ยงไม่ได้ แต่ก็ต้องทำให้มันอ่านค่าที่เราสนใจให้ได้ก่อน

ค่า PIDs ของ BYD ATTO 3

หลังจากการหาข้อมูล ลองผิดลองถูก แกะแอปนั้นแอปนี้ ก็ได้ PID ที่น่าสนใจมาประมาณนี้

ประเภทค่าPID CodeEquation
Battery State of Charge (SoC)7E7220005A
Battery Total Voltage7E7220008((A*256)+B)
Battery Total Current7E7220009((B*256)+A)*0.1-500
รวบรวมมาจาก OVMS และแกะเอง

จากของในตารางเราก็พอจะคำนวณหา Consumption (Power หน่วยเป็น kW) ได้จากสูตร Power (kW) = (Voltage / Current) / 1000 ซึ่ง Torque Pro ก็สร้าง Virtual PID ได้ โดยการตั้งชื่อและใส่สูตร ไม่ต้องใส่ OBD Command

ตั้งค่าให้ Torque กับ HA รับส่งข้อมูลกันได้

ใน HA จะมี Integration ชื่อ Torque built-in มาให้แล้ว เราแค่ทำตาม configuration guide ใน Wiki ของ HA เอง ตามลิงก์ https://www.home-assistant.io/integrations/torque ก็จะได้รับข้อมูลจาก Torque มาที่ Home Assistant แล้ว

ตัวอย่างกราฟที่เห็นใน Home Assistant
States จาก sensors ที่ Torque ส่งมาให้ Home Assistant

เทคนิคตั้งค่าให้ Torque Auto Start บนรถได้

ในแอป Torque ใน General Settings เราสามารถเปิด Auto start และ Auto connect ได้ ซึ่งจะทำให้แอปรันขึ้นมาเองทุกครั้งที่สตาร์ทรถ (แต่ไม่ขึ้นหน้าแอป ขึ้นมาแค่ persistant notification เท่านั้น)

นอกจากตั้งค่าในแอป Torque เองแล้ว ใน​ Android ของ BYD ก็มีอีกด่านที่ต้องปรับ ก็คือในแอป “Disable Auto Start” ที่มากับรถ ให้ปิดตรง Torque เพื่อให้เค้าสามารถเปิดตัวเองได้ แล้วไม่โดน kill ทิ้ง

เพียงเท่านี้ก็แค่ขึ้นรถ กดสตาร์ท แล้วก็ขับออกไปได้เลย พอ Torque เริ่มได้สัญญาณ GPS ก็จะเริ่มส่งข้อมูลเข้า Home Assistant โดยอัตโนมัติ

สรุปจบ

Dashboard ที่ใฝ่ฝันก็ใกล้ความจริงขึ้น เพราะมาถึงตรงนี้เราได้ค่าแบตกับตำแหน่งมาอยู่ใน HA แล้ว แต่ก็ยังไม่ได้เริ่มทำต่อจริงจัง คงปล่อยให้มันรันไปแบบนี้สักพักก่อน เดี๋ยวค่อยๆ ทำต่อไปเรื่อย

ยังมีเรื่องที่ต้องหา OBD2 อันใหม่ที่ปิดเปิดเองได้ ไม่กินแบตรถจนเกินไปมาแทนอันที่ใช้อยู่นี้อีก

กว่าจะมาถึงตรงนี้ได้ เหนื่อยมาก โดยเฉพาะกว่าจะหา OBD2 PID ออกมาได้ แทบพลิกแผ่นดิน ภาษาจีนก็ไม่มีความรู้ ภาษาอังกฤษก็ไม่มีคนแกะเลย