0255 | ขับเทสล่าไปเชียงใหม่…

Prelude

ซื้อ Tesla Model 3 Long Range มา(ซักพัก)แล้วครับ… จองปุ๊ปเทสล่าประกาศจดบริษัทเทสล่าในไทย… เจ็บปวดมาก 555 ข้ามเรื่องนี้ไปละกัน หรือใครอยากอ่านแบบสั้นๆ เชิญตามใน twitter ได้ครับ

Planning

  • เว็บ/แอพคู่ใจคนใช้ EV ก็ต้อง www.plugshare.com ครับ เว็บเดียวมีข้อมูลที่ชาร์จแทบจะทุกที่ในไทย มี Trip Planner ให้ใช้ด้วยนะ (แต่ไม่ค่อยเวิร์กเท่าไหร่)
  • แนะนำให้กดหาเส้นทางจากใน PlugShare Trip Planner เทียบกับ Google Maps แล้วดูตำแหน่งที่ชาร์จคร่าวๆ ก่อน
  • พบว่าพอ range รถเยอะมากๆ ทำให้ plan ง่ายขึ้นเยอะ ด้วยการปักตามที่ที่กะแวะกินข้าวไปเลย (ทุกๆ ระยะขับรถ 4-5 ชั่วโมงโดยประมาณ)
  • เตรียมแผนสำรองเผื่อที่ชาร์จใช้ไม่ได้, ไม่ว่าง ไว้ด้วย
  • แอพชาร์จรถทุกค่าย ลง+สมัครไว้ให้ครบ (ptt ev station pluz, elexa, pea volta, ea anywhere) — เดี๋ยวเขียนรีวิวแอพกับตู้ชาร์จแยกอีกอัน

วันเดินทางขาไป

  • ออกจากบ้านด้วยแบตเต็ม 100% ตอน 08.43 น.
  • ตามแผนคือแวะชาร์จที่ pea volta ปั๊มบางจากคลองขลุง หน้าปั๊มมีร้านข้าว, แผนสำรอง ขับเลยไปชาร์จที่ ptt ในเมืองกำแพงเพชร, แผนสำรองกว่าคือเลยไปชาร์จที่ elexa ปั๊ม PT ที่ตาก
  • ไปถึงปั๊มบางจากแล้วหาร้านข้าวไม่เจอ (ซึ่งมันอยู่นอกปั๊ม ต้องเดินออกมานิดนึง) เลยเสียบชาร์จ เข้าห้องน้ำ ยืดเส้นยืดสายนิดหน่อยแล้วก็ออกเลย ชาร์จไป 12 นาทีได้แบตมา 11%
    • ตู้บอกว่าจ่ายไฟมา 8.814 หน่วย รถขึ้นว่าได้ไฟ 7.98 หน่วย
  • เลยขับไป ptt กำแพงเพชร เพื่อชาร์จอีกรอบ + ไปหาข้าวกิน (เรื่องนี้ ptt ทำได้ดีจริงๆ ไว้ใจได้ค่อนข้างมากว่าไปแล้วมีของกินแน่ๆ) ปรากฎว่าไปถึงแล้วมีคน(ทะเลาะกับตู้)ชาร์จอยู่ สาย DC ก็เลยไม่ว่าง เราก็เลยเอาสาย AC เสียบ ปรากฎว่าชาร์จไม่เข้า แอพค้างไปเลย คนข้างๆ เค้าโทรคุยกับ cc ให้ cc reset ตู้ให้ ก็เรียบร้อย เสียเวลาไป 15 นาที ชาร์จอีก 23 นาทีได้ไฟมา 5%
    • ตู้จ่ายไฟ 4.04 หน่วย รถได้ไฟ 3.91 หน่วย
  • ระหว่างกินข้าว ความที่มันเป็นชาร์จ AC ไฟเข้าแค่ 11kW ก็คือต้องวางแผนใหม่ ตอนนั้นแบตเหลือ 52% ก็เลยกะว่า ถ้าลากยาวแล้วถึง จะชาร์จที่ลำปางที่ห่างไป 250km แต่!!! ลืมไปว่าระหว่างทางมันขับขึ้นเขา
  • ตอนเลย อ.เมือง ตาก แล้ว ลองสังเกตอัตราการใช้ไฟ กับระยะทางคงเหลือที่ขึ้นมาแล้วก็พบว่าน่าจะเฉียดฉิวเกินไป ก็เลยใช้แผนสำรอง แวะชาร์จที่ ptt เถิน แทน ไปถึงไฟเหลือ 19% ชาร์จ 33 นาที ได้ไฟมา 49% (รวมเป็น 68%)
    • ตู้จ่ายไฟ 40.6 หน่วย รถได้ไฟ 38.47 หน่วย
  • จากเถิน ชาร์จไปขนาดนี้ก็เลยวิ่งยาวถึงเชียงใหม่ 176km ถึงเชียงใหม่ 18.49 น.แบตเหลือ 36%
  • เดินทางไป 681km รถใช้ไฟไป 100.4 หน่วย ใช้เวลาเดินทางประมาณ 10 ชั่วโมง

วันเดินทางขากลับ

  • จริงๆ ต้องพูดถึงคืนก่อนหน้านั้นก่อน เพราะเอารถไปชาร์จจนแบต 80% ไว้ 5555
  • ออกจากโรงแรม 08.52 น. วางแผนขับ 278km ไปชาร์จที่ ptt ตาก คำนวณเวลาแล้วถึงตอนเที่ยงพอดีเป๊ะ จะได้ชาร์จให้ปริ่มๆ 80-90% ปรากฎว่า แอพไม่ให้จอง slot ชาร์จตอนเที่ยง แถมไปถึงแล้วมีน้องแมวชาร์จไฟอยู่คันนึงอีกต่างหาก
  • ก็เลยซื้อของกินเซเว่น แล้วขับเลยไปอีกนิด ไปชาร์จตู้ Elexa ที่ปั๊ม PT แทน ถึงที่ชาร์จ แบตเหลือ 24% ชาร์จ 29 นาที ได้ไฟมา 56% (รวมเป็น 80%)
    • ตู้จ่ายไฟ 46.83 หน่วย รถได้ไฟ 43.46 หน่วย
  • หน้าจอรถขึ้นว่าวิ่งได้อีกเกือบๆ 500km แต่คำนวณเองน่าจะประมาณ 400km ระยะทางถึงบ้าน 410km ก็เลยเล็งที่ชาร์จที่ปั๊ม ptt นครสวรรค์ ไว้อีกที่
  • แล้วก็ลืมนึกไปอีกว่ามันขับลงเนิน ตอนเลยเมืองกำแพงเพชรก็เลยลองคำนวณระยะใหม่อีกรอบพบว่าน่าจะพอแบบพอดีมากๆ (ถึงบ้านอาจจะเหลือ 2-3%) แต่ยังสองจิตสองใจ เลยแวะที่ปั๊ม ptt นครสวรรค์เผื่อๆ ไว้ แต่ไม่ได้ชาร์จเพราะมีคนชาร์จอยู่ ก็เลยตัดสินใจว่ายิงยาวเลยละกัน ระหว่างทางก็ส่อง range รถเทียบกับระยะทางใน google maps ตลอดเลย
  • สรุปว่าขับถึงบ้านได้จริงๆ ด้วย ตอน 17.52 น. แบตเหลือ 3% จริงๆ
  • เดินทางไป 692km รถใช้ไฟไป 104.2 หน่วย ใช้เวลาเดินทางประมาณ 9 ชั่วโมง

Conclusion

  • Range รถเยอะๆ ช่วยให้ชีวิตดีขึ้นจริงๆ ตอนวางแผนเคยลองคำนวณแบบรถแบตเต็มขับได้ 300km ก็คือแทบต้องแวะชาร์จทุก 2 ชั่วโมง แถมแทบพลาดไม่ได้เลยด้วย เพราะที่ชาร์จแต่ละที่ยังห่างกันค่อนข้างเยอะอยู่ (เฉลี่ยๆ ห่างกันทุกๆ 100km)
  • รถ MG แอบได้เปรียบ ตรงที่สามารถชาร์จที่ศูนย์ MG ได้ด้วย ที่รถอื่นไม่มี — รอเทสลาเปิด Supercharger บ้าง

0254 | ต่อ Sofar Inverter HYD 6000-EP เข้า Home Assistant

วิธีนี้สำหรับ Sofar Inverter ที่ตัว logger มี serial ขึ้นต้นด้วย 23xxxxxxxx นะครับ

[แก้ไข]

สิ่งที่ต้องมีก่อน

  • home assistant
  • mqtt broker (ใช้ public หรือ private ก็ได้ตามสะดวก)
  • linux x86 ซักเครื่องที่เชื่อมต่อไปหา inverter wifi interface ได้ (ใช้บน raspberry pi/arm ไม่ได้เนื่องจากคนเขียนเค้าบอกว่าเขียนรีบๆ มาใช้เอง)
  • โปรแกรม fetch data => load ได้จาก XtheOne/Inverter-Data-Logger issue #37 ดู link sofar-export.zip
  • docker compose

ขั้นตอน

  • แตกไฟล์ sofar-export.zip แล้วเข้าไปใน folder ที่เก็บไฟล์
  • แก้ไฟล์ Dockerfile เป็นตามนี้
FROM golang:1.19-bullseye

ADD . /src

RUN apt update && apt install -y ca-certificates tzdata && \
  cd /src && go build && cp -av /src/sofar /

CMD ["/sofar"]
  • สร้างไฟล์ docker-compose.yml ตามด้านล่าง ใน folder เดียวกัน แก้ค่าสามจุดตามนี้
    • 23xxxxxxxx เป็นเลข serial ที่โชว์ในหน้าเว็บที่เข้าไปดู inverter (login user admin/admin)
    • แก้ค่า tcp://user:pass@mqttserverip:mqttport ตาม mqtt broker ที่ใช้
    • แก้ sofarinverterip เป็นเลข IP ของตัว inverter
services:
  sofar-export:
    image: sofar-export
    build: ./
    restart: unless-stopped
    command: /sofar -logger-serial 23xxxxxxxx -mqtt-url tcp://user:pass@mqttserverip:mqttport -port sofarinverterip:8899
  • เสร็จแล้วสั่ง start docker service ขึ้นมา
docker compose up -d
  • แล้วไปเซ็ต mqtt sensor ใน home assistant (ใส่ใน configuration.yaml) ประมาณนี้ *** parameter ยังไม่ได้ทดสอบ แก้ไขเองตามสะดวก ***
mqtt:
  sensor:
    - name: inverter_Frequency_Grid
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.Frequency_Grid / 100 }}"
      unit_of_measurement: "Hz"
      state_class: "measurement"
      device_class: "frequency"
    - name: inverter_PV_Generation_Today
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.PV_Generation_Today * 10}}"
      unit_of_measurement: "Wh"
      state_class: "measurement"
      device_class: "energy"
    - name: inverter_PV_Generation_Total
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.PV_Generation_Total * 100}}"
      unit_of_measurement: "Wh"
      state_class: "measurement"
      device_class: "energy"
    - name: inverter_ActivePower_Load_Sys
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.ActivePower_Load_Sys * 10}}"
      unit_of_measurement: "W"
      state_class: "measurement"
      device_class: "power"
    - name: inverter_ActivePower_PV_Ext
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.ActivePower_PV_Ext * 10}}"
      unit_of_measurement: "W"
      state_class: "measurement"
      device_class: "power"
    - name: inverter_ActivePower_Output_R
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.ActivePower_Output_R * 10}}"
      unit_of_measurement: "W"
      state_class: "measurement"
      device_class: "power"
    - name: inverter_ActivePower_Output_Total
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.ActivePower_Output_Total * 10}}"
      unit_of_measurement: "W"
      state_class: "measurement"
      device_class: "power"
    - name: inverter_ActivePower_PCC_R
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.ActivePower_PCC_R * 10}}"
      unit_of_measurement: "W"
      state_class: "measurement"
      device_class: "power"
    - name: inverter_ActivePower_PCC_Total
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.ActivePower_PCC_Total * 10}}"
      unit_of_measurement: "W"
      state_class: "measurement"
      device_class: "power"
    - name: inverter_Voltage_Phase_R
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.Voltage_Phase_R / 10}}"
      unit_of_measurement: "V"
      state_class: "measurement"
      device_class: "voltage"
    - name: inverter_Voltage_PV1
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.Voltage_PV1 / 10}}"
      unit_of_measurement: "V"
      state_class: "measurement"
      device_class: "voltage"
    - name: inverter_Voltage_PV2
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.Voltage_PV2 / 10}}"
      unit_of_measurement: "V"
      state_class: "measurement"
      device_class: "voltage"
    - name: inverter_Current_PV1
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.Current_PV1 / 100 }}"
      unit_of_measurement: "A"
      state_class: "measurement"
      device_class: "current"
    - name: inverter_Current_PV2
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.Current_PV2 / 100}}"
      unit_of_measurement: "A"
      state_class: "measurement"
      device_class: "current"
    - name: inverter_Current_Output_R
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.Current_Output_R / 100 }}"
      unit_of_measurement: "A"
      state_class: "measurement"
      device_class: "current"
    - name: inverter_Temperature_Env1
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.Temperature_Env1 }}"
      unit_of_measurement: "C"
      state_class: "measurement"
      device_class: "temperature"
    - name: inverter_Temperature_HeatSink1
      state_topic: "/sensors/energy/inverter2/All"
      value_template: "{{ value_json.HeatSink1 }}"
      unit_of_measurement: "C"
      state_class: "measurement"
      device_class: "temperature"