เราจะเขียน OCPP server อย่างไร
ตอนนี้กระแส EV กำลังมา เวลาเราไปตามปั๊มน้ำมันเราก็จะเห็นจุด charge ev กันใช่ไหมครับ เราเคยสงสัยไหมว่า จุด charge ติดต่อกับ server และ mobile app ของเราอย่างไร เค้าสื่อสารผ่าน OCPP protocol กัน เราลองมาทำความเข้าใจกันดีกว่า
OCPP ( Open Charge Point Protocol ) คือมาตรฐานการสื่อสารระหว่าง OCPP client ( charger station ) และ OCPP server ( server ที่มีหน้าที่จัดการและรับส่งข้อมูลระหว่าง OCPP client ) สำหรับคนที่ยังไม่เคยชินกับ server - client architecture จะอธิบายให้เข้าใจง่ายๆ คือ ในระบบจะแบ่งกลุ่มของหน้าที่การทำงานในระบบออกเป็น สองกลุ่ม 1. Client คือกลุ่มของผู้รับบริการจาก server 2. Server คือกลุ่มของผู้ให้บริการในระบบ
กลับมาที่ OCPP server-client ที่เรากำลังสนใจอยู่
OCPP client จะอยู่ใน Charging point โดยผ่าน OCPP protocol ( ตอนนี้ 1.6 และ 2.0.1 )
คนที่เขียน program พอจะนึกภาพออกว่า ถ้าเราจะทำให้การสื่อสารระหว่าง client - server ให้ใกล้เคียงกับ realtime เราจะต้องใช้ web socket https://simplico.net/2022/04/30/web-socket-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/
ให้คิดง่ายๆว่า เราเขียน web socket server - client ที่มี flow การทำงาน และ message ที่แลกเปลี่ยนกันระหว่าง server - client ให้เป็นไปตาม OCPP protocol แล้วเราจะรู้ได้อย่างไรว่าจะต้องเขียนอะไรบ้าง เราก็ไปดูที่
https://openchargealliance.org/my-oca/ocpp/ เราก็เลือก version ที่เราต้องการจะเขียน
ผมขอยกตัวอย่าง sequence diagram ใน pdf นะครับ
Charge Point คือฝั่ง client และ Central System คือฝั่งของ server
Charge Point ส่ง Authorize request มา โดยใน diagram นี้อ้างอิง message ที่ส่งมาใน request คือ idTag ( id ของ Charge point ในระบบของเรา ที่จะต้องไม่ซ้ำกับเครื่องไหนเลย ) พอ central system รับ request ก็จะทำ process หลังบ้านอะไรก็ตาม ( ตรงนี้ขึ้นอยู่กับว่าเราจะเขียนอย่างไร ต้องเข้าใจว่า protocol คือการกำหนดข้อตกลงการสื่อสาร แต่ไม่ได้ระบุว่าระบบที่เราบอกว่ารองรับ protocol นั้นๆ จะมีรายละเอียดการทำงานด้านหลังการสื่อสารนั้นๆ อย่างไร
จาก digram , central system ก็จะส่ง Authorize.conf กลับไปให้ client พร้อมกับ idTagInfo แล้ว idTagInfo เราก็ต้องไปค้นหาดูใน pdf เราก็จะพบว่า
มี data field แบบนี้ สำหรับคนเขียน python ก็ให้คิดว่าเป็น dictionary datatype เราจะสนใจ field ที่ required กันก่อนนะครับ ในที่นี้คือ status เราก็ต้องดูว่าต่อว่า AuthorizationStatus มีค่าอะไรบ้าง
เริ่มพอเห็นแสงสว่างกันแล้วใช่ไหมครับ ในส่วนนี้เราก็ลองคิดง่ายๆ ว่าเราจะ implement เป็น code อย่างไรดี
ผมว่า Accepted, Blocked, … พวกนี้เราก็เขียนเป็น enum ดีกว่า
ผมใช้ project นี้ตั้งต้น https://github.com/mobilityhouse/ocpp เราลองมาดู schema ของ project นี้ดีกว่าว่าเค้าเขียน idTagInfo และ authorizationStatus อย่างไร
พอเราเริ่มเห็น message schema แล้ว ขั้นต่อไปเราจะเขียน logic code อย่างไร
Code ด้านบนเป็น code ที่ผมลองเขียนเอง ลองไปศึกษา https://openchargealliance.org/my-oca/ocpp/ แต่ code ที่สำคัญคือพวก @on(ActionName) decorator ครับ จากในภาพเช่น @on(Action.Authorize) เราก็เขียน function ที่อย่างน้อยต้อง return idTagInfo พร้อมกับ authorize status ในที่นี้ผมใช้ accepted
ถ้าเราเขียนระบบจริงๆ code ส่วนนี้เราควรจะต้องทำอะไรล่ะ อย่างแรกเลยต้องตรวจว่า id_tag นี้อยู่ในระบบของเราหรือไม่ ถ้าใช่ก็ return status = accepted ไปครับ
วันนี้ผมจะพอแค่นี้ก่อนแล้วกันครับ ผมใช้อะไรในการ simulate charging point ครับ ผมใช้ตัวนี้ครับ
https://github.com/vasyas/charger-simulator ลองไปเล่นกันดูนะครับ
Articles
- OCPPシステムをゼロから構築するための包括的ガイド
- การสร้างระบบ OCPP จากศูนย์: คู่มือที่ครอบคลุม
- Building an OCPP System from Scratch: A Comprehensive Guide
- วิทยาศาสตร์และวิศวกรรมเบื้องหลัง NEWater
- The Science and Engineering Behind NEWater
- 使用 Rasa 构建支持中文的聊天机器人
- การสร้างแชทบอทด้วย Rasa ที่รองรับภาษาไทย
- 日本語でのRasaを使用したチャットボットの作成
- Creating a Chatbot with Rasa to Support Japanese for Big Camera Sales
- ทำไมการเข้าใจ Design Pattern จึงสำคัญสำหรับโครงการขนาดใหญ่เช่น Odoo
- なぜOdooのような大規模プロジェクトでデザインパターンを理解する必要があるのか
- Why Understanding Design Patterns is Essential in Large Projects Like Odoo
- 日本文化に合った現代的な開発プロセス
- 2025年的AI趋势:深入探索技术的未来
- 定制软件 vs 商用软件:哪种更适合您的企业?
- カスタムソフトウェア vs パッケージソフトウェア:どちらがあなたのビジネスに適している?
- ซอฟต์แวร์แบบกำหนดเอง (Custom Software) กับซอฟต์แวร์สำเร็จรูป (Off-the-Shelf Software): อันไหนเหมาะกับธุรกิจของคุณ?
- Custom Software vs. Off-the-Shelf Solutions: Which Is Right for Your Business?
- 2025年のAIトレンド:技術の未来を深掘り
- แนวโน้ม AI ในปี 2025: เจาะลึกอนาคตของเทคโนโลยี
Our Products
Articles
- OCPPシステムをゼロから構築するための包括的ガイド
- การสร้างระบบ OCPP จากศูนย์: คู่มือที่ครอบคลุม
- Building an OCPP System from Scratch: A Comprehensive Guide
- วิทยาศาสตร์และวิศวกรรมเบื้องหลัง NEWater
- The Science and Engineering Behind NEWater
- 使用 Rasa 构建支持中文的聊天机器人
- การสร้างแชทบอทด้วย Rasa ที่รองรับภาษาไทย
- 日本語でのRasaを使用したチャットボットの作成
- Creating a Chatbot with Rasa to Support Japanese for Big Camera Sales
- ทำไมการเข้าใจ Design Pattern จึงสำคัญสำหรับโครงการขนาดใหญ่เช่น Odoo
- なぜOdooのような大規模プロジェクトでデザインパターンを理解する必要があるのか
- Why Understanding Design Patterns is Essential in Large Projects Like Odoo
- 日本文化に合った現代的な開発プロセス
- 2025年的AI趋势:深入探索技术的未来
- 定制软件 vs 商用软件:哪种更适合您的企业?
- カスタムソフトウェア vs パッケージソフトウェア:どちらがあなたのビジネスに適している?
- ซอฟต์แวร์แบบกำหนดเอง (Custom Software) กับซอฟต์แวร์สำเร็จรูป (Off-the-Shelf Software): อันไหนเหมาะกับธุรกิจของคุณ?
- Custom Software vs. Off-the-Shelf Solutions: Which Is Right for Your Business?
- 2025年のAIトレンド:技術の未来を深掘り
- แนวโน้ม AI ในปี 2025: เจาะลึกอนาคตของเทคโนโลยี