アプリの認証を OCPP 中央システムに統合する方法

EV充電インフラの拡大とともに、ユーザー向けのモバイルアプリや管理用ダッシュボードの重要性が増しています。では、アプリでのユーザー認証をどのようにOCPPの中央システムと連携すればよいのでしょうか?

この記事では、アプリからの認証と制御を OCPP Central System (CSMS) に安全かつスムーズに統合する方法を解説します。


🧩 システム構成の概要

主なコンポーネント:

  • モバイルアプリ / ダッシュボード – ユーザーのログインと充電制御
  • Flask Central API – REST API サーバー
  • OCPP WebSocket サーバー – EVSEとの通信 (OCPP 1.6)
  • MongoDB – ユーザーおよび充電器情報のデータベース

📊 シーケンス図: アプリから充電開始

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 を使用してトークンベースの認証を構築します。

パッケージインストール

pip install flask flask-jwt-extended pymongo werkzeug

認証APIの例

@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経由でOCPPコマンドを実行

@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に有効期限を設定
  • idTag をユーザーアカウントや車両と紐づけ
  • ユーザーの役割(user, admin, root)によってアクセス制御
  • QRコードスキャンでEVSEとのペアリングも可能

🛠️ 使用技術

技術 用途
Flask REST API 開発
Flask-JWT 認証トークンの生成
PyMongo MongoDBとの連携
asyncio 非同期処理とWebSocket制御
OCPP 1.6 EVSEとの通信標準プロトコル

🚀 発展的な機能

  • QRコード: ocpp://CP001?connector=1 を読み取ってEVSEと接続
  • リモートによるファームウェア更新・診断ログ取得
  • 管理画面でユーザー管理や充電記録の確認

📦 Postman用テストコレクションや、プロジェクトのスターターコードが必要な場合はお気軽にお知らせください!

Related Posts

Our Products


Related Posts

Our Products


Get in Touch with us

Speak to Us or Whatsapp(+66) 83001 0222

Chat with Us on LINEiiitum1984

Our HeadquartersChanthaburi, Thailand