วิธีเชื่อมต่อระบบยืนยันตัวตนจากแอปกับ OCPP Central System
ในยุคที่สถานีชาร์จรถยนต์ไฟฟ้ากำลังขยายตัว แอปมือถือและแดชบอร์ดผู้ดูแลเป็นเครื่องมือสำคัญในการควบคุมระบบ แต่เราจะ ยืนยันตัวตนผู้ใช้ และเชื่อมโยงการสั่งงานของผู้ใช้กับสถานีชาร์จ (EVSE) อย่างปลอดภัยได้อย่างไร?
บทความนี้จะแนะนำวิธีผสานระบบยืนยันตัวตนจากแอปเข้ากับ OCPP Central System (CSMS) ได้อย่างราบรื่น
🧩 ภาพรวมของระบบ
องค์ประกอบหลัก:
- แอปมือถือ / แดชบอร์ด – ผู้ใช้ล็อกอินและควบคุมการชาร์จ
- Central System API (Flask) – REST API สำหรับเชื่อมต่อกับระบบ
- OCPP WebSocket Server – ติดต่อกับ EVSE ผ่าน OCPP 1.6
- MongoDB – เก็บข้อมูลผู้ใช้และสถานีชาร์จ
📊 แผนภาพ Sequence Diagram: เริ่มชาร์จจากแอป
sequenceDiagram
participant User as Mobile App
participant API as Flask API Server
participant CSMS as OCPP Central System
participant EVSE as Charger (EVSE)
User->>API: POST /api/login (username, password)
API-->>User: JWT token + idTag
User->>API: POST /api/start_charging (evse_id, connector_id, token)
API->>CSMS: RemoteStartTransaction(idTag, connectorId)
CSMS->>EVSE: RemoteStartTransaction.req
EVSE-->>CSMS: RemoteStartTransaction.conf
CSMS-->>API: status = Accepted
API-->>User: {"status": "Accepted"}
🔑 1. การยืนยันตัวตนผู้ใช้ด้วย JWT
เราใช้ Flask-JWT-Extended
สำหรับจัดการ token authentication
ติดตั้ง
pip install flask flask-jwt-extended pymongo werkzeug
ตัวอย่างโค้ด API /signup
และ /login
:
@flask_app.route("/api/signup", methods=["POST"])
def signup():
...
token = create_access_token(identity=user["username"])
return jsonify(access_token=token, idTag=user["idTag"])
@flask_app.route("/api/login", methods=["POST"])
def login():
...
token = create_access_token(identity=user["username"])
return jsonify(access_token=token, idTag=user["idTag"])
⚡ 2. การสั่งเริ่มชาร์จจาก API ไปยัง EVSE
@flask_app.route("/api/start_charging", methods=["POST"])
@jwt_required()
def start_charging():
cp = connected_charge_points.get(evse_id)
payload = call.RemoteStartTransactionPayload(id_tag=id_tag, connector_id=connector_id)
future = asyncio.run_coroutine_threadsafe(cp.call(payload), main_loop)
result = future.result(timeout=10)
return jsonify({"status": result.status})
🧠 แนวปฏิบัติที่แนะนำ
- เก็บรหัสผ่านแบบเข้ารหัส (
generate_password_hash
) - ใช้ JWT พร้อมกำหนดอายุ token
- ใช้
idTag
เชื่อมโยงกับบัญชีผู้ใช้หรือยานพาหนะ - ใช้สิทธิ์ผู้ใช้ (
role
: user, admin, root) ควบคุมการเข้าถึง - ใช้ QR code สำหรับจับคู่กับ EVSE
🛠️ เครื่องมือที่ใช้
เครื่องมือ | หน้าที่ |
---|---|
Flask | พัฒนา REST API |
Flask-JWT | จัดการ token auth |
PyMongo | เชื่อมต่อ MongoDB |
asyncio | ประมวลผล async / WebSocket |
OCPP 1.6 | ติดต่อกับสถานีชาร์จ (EVSE) |
🚀 ฟีเจอร์เพิ่มเติมที่คุณสามารถเพิ่มได้
- สแกน QR code เพื่อเชื่อมต่อ EVSE →
ocpp://CP001?connector=1
- ส่งคำสั่ง update firmware หรือขอ diagnostic log
- รองรับหลาย role: ผู้ใช้ทั่วไป, เจ้าหน้าที่, แอดมิน
ต้องการ source code ตัวอย่าง, Postman collection หรือให้เราช่วย set up โปรเจกต์ของคุณ?
แค่แจ้งมา แล้วเราจะช่วยต่อยอดให้คุณได้ทันที! 🙌
Get in Touch with us
Related Posts
- วิธีสร้างโปรเจกต์ที่ทนทานต่อ AI: ไอเดียที่เน้นการปฏิสัมพันธ์ของมนุษย์
- สร้างห้องทดลองความปลอดภัยไซเบอร์ด้วย GNS3 + Wazuh + Docker ฝึก ตรวจจับ และป้องกันภัยคุกคามในระบบเดียว
- วิธีจำลองและฝึกฝนการตั้งค่าอุปกรณ์เครือข่ายด้วย GNS3
- LMS คืออะไร? และทำไมคุณควรรู้จัก Frappe LMS
- Agentic AI ในโรงงานอุตสาหกรรม: ระบบที่คิดเอง ปรับตัวเอง และทำงานได้อัตโนมัติ
- ควบคุมยานยนต์ไฟฟ้าได้อย่างชาญฉลาด ปลอดภัย และทันสมัย ด้วยระบบ Geo-Fencing และติดตามแบบเรียลไทม์
- วิธีเชื่อมต่อระบบ Single Sign-On (SSO) ด้วย Google OAuth ใน FastAPI
- สร้างแอปจองแท็กซี่ของคุณเองกับ Simplico: ปลอดภัย ขยายได้ และพร้อมเปิดตัวทันที
- วางระบบ Backend สำหรับสถานีชาร์จ EV ที่พร้อมขยายตัว — ออกแบบโดย Simplico
- วิธีจัดการราคาซับซ้อนสำหรับสินค้าสั่งทำพิเศษ (Made-to-Order) ใน Odoo
- วิธีสร้างระบบสั่งผลิตสินค้าเฉพาะลูกค้า (Made-to-Order) เพื่อเพิ่มยอดขายและความพึงพอใจ
- ปรับธุรกิจให้ฉลาดขึ้นด้วย Agentic AI อัตโนมัติเต็มรูปแบบ
- จัดการเครื่องทดสอบใยแก้วนำแสง EXFO อย่างง่าย ด้วยระบบ Admin Panel น้ำหนักเบา
- ยกระดับความพร้อมปฏิบัติการทางเรือ ด้วยการจำลอง EMI: ลดความเสี่ยงอย่างคุ้มค่า ด้วย MEEP และ Python
- เสริมความมั่นคงปลอดภัยทางไซเบอร์ด้วย Wazuh: ระบบ SIEM แบบโอเพ่นซอร์สที่ปรับขนาดได้และคุ้มค่า
- ข้อเสนอโซลูชัน OCPP Central System + Mobile App
- ระบบ TAK กับการเปลี่ยนแปลงภารกิจรักษาความมั่นคงชายแดน
- เปรียบเทียบ ChatGPT‑4o vs GPT‑4.1 vs GPT‑4.5 – เลือกรุ่นไหนดีที่สุด?
- ลูกค้าสามารถถอดรหัสข้อมูลจากเซิร์ฟเวอร์ได้หรือไม่หากไม่มี Private Key? (สรุป: ไม่ได้ — และนี่คือเหตุผล)
- การจัดการ JWT Authentication ระหว่างหลายเฟรมเวิร์ก