[OCPP Charge Point #1] Steve와 Websocket 연결 테스트

2024. 1. 10. 20:56프로젝트 로그/OCPP 프로젝트

반응형

 

mobilityhouse/ocpp 프로젝트

OCPP(Open Charge Point Protocol)와 관련된 Python 라이브러리르 제공하는 GitHub 프로젝트입니다.

 

https://github.com/mobilityhouse/ocpp

 

GitHub - mobilityhouse/ocpp: Python implementation of the Open Charge Point Protocol (OCPP).

Python implementation of the Open Charge Point Protocol (OCPP). - GitHub - mobilityhouse/ocpp: Python implementation of the Open Charge Point Protocol (OCPP).

github.com

 

 

Steve OCPP Server와 Websocket 연결 테스트

mobilityhouse/ocpp 프로젝트를 Steve OCPP Server와 연동하는 방법 및 테스트 과정을 문서로 정리 합니다.

 

Steve OCPP Server에 Charge Point 등록

[Number of Charge Points]-[Add New] 버튼 클릭 하여 테스트 할 Charge Point(충전기 측 OCPP)를 등록 합니다.

 

 

아래와 같이 ChargeBox ID를 입력하고 Add 버튼을 눌러 Charge Box를 등록 합니다.

 

정상적으로 등록되면 아래 사진과 같이 Number of Charge points 메뉴에 1개의 ChargeBoxID를 출력됩니다.

 

 

mobilityhouse/ocpp Websocket 연결 테스트

프로젝트를 github에서 다운로드 합니다.

$ git clone https://github.com/mobilityhouse/ocpp.git

 

OCPP/examples/v16/charge_point.py를 아래와 같이 수정 합니다.

아래 코드의 ws://Steve IP Address 부분에 Steve Server의 공인 IP 주소를 입력하고 해당 코드를 수행 합니다.

import asyncio
import logging

try:
    import websockets
except ModuleNotFoundError:
    print("This example relies on the 'websockets' package.")
    print("Please install it by running: ")
    print()
    print(" $ pip install websockets")
    import sys

    sys.exit(1)


from ocpp.v16 import ChargePoint as cp
from ocpp.v16 import call
from ocpp.v16.enums import RegistrationStatus

logging.basicConfig(level=logging.INFO)


class ChargePoint(cp):
    async def send_boot_notification(self):
        request = call.BootNotificationPayload(
            charge_point_model="Optimus", charge_point_vendor="The Mobility House"
        )

        response = await self.call(request)

        if response.status == RegistrationStatus.accepted:
            print("Connected to central system.")


async def main():
    async with websockets.connect(
        "ws://Steve IP Address:8080/steve/websocket/CentralSystemService/CP-Test1", subprotocols=["ocpp1.6"]
    ) as ws:

        cp = ChargePoint("CP-Test1", ws)

        await asyncio.gather(cp.start(), cp.send_boot_notification())


if __name__ == "__main__":
    # asyncio.run() is used when running this example with Python >= 3.7v
    asyncio.run(main())

 

정상적으로 수행 되었다면 아래와 같은 로그 메시지를 볼 수 있습니다.

(venv_ocpp) C:\Workspace\git_ocpp\ocpp>python examples\v16\charge_point.py
INFO:ocpp:CP-Test1: send [2,"e027aeb1-0367-4485-b4a4-82570c362f30","BootNotification",{"chargePointModel":"Optimus","chargePointVendor":"The Mobility House"}]
INFO:ocpp:CP-Test1: receive message [3,"e027aeb1-0367-4485-b4a4-82570c362f30",{"status":"Accepted","currentTime":"2024-01-07T04:53:49.979Z","interval":14400}]
Connected to central system.

 

그리고 Steve Server에서도 아래 화면과 같이 OCPP Protocol과 Last Heartbeat 시간이 업데이트 된 것을 확인 할 수 있습니다.

 

 

반응형