전기 자동차(EV)의 세계에서 EV 운전자에게 가장 마법 같은 경험 중 하나는 모바일 앱에서 '시작'을 탭하고 충전기가 작동하는 모습을 지켜보는 것입니다.
그런데 어떻게 그런 마법이 일어날까요?
EV 충전기와 모바일 앱의 통신 방식에 대한 비하인드 스토리를 살펴보겠습니다.
게임 속 플레이어
- 모바일 앱: 사용자가 충전 세션 시작 또는 중지와 같은 작업을 시작하는 곳입니다.
- 백엔드 서버: 작업 뒤에 있는 두뇌로서 앱과 충전기 간의 통신을 조정합니다.
- EV 충전기: EV에 활력을 전달하는 하드웨어.
이러한 플레이어 간의 통신은 OCPP(Open Charge Point Protocol)라는 표준화된 프로토콜을 따릅니다. 특히 대부분의 시스템은 안정적인 실시간 통신을 보장하는 WebSocket을 통한 OCPP를 사용합니다.
충전 프로세스 시작
1단계: 사용자가 앱에서 '시작'을 누릅니다.
사용자가 '시작' 버튼을 탭하면 프로세스가 시작됩니다. 백엔드 서버는 다음 세부 정보를 사용하여 RemoteStartTransaction 명령을 준비합니다.
{ "connectorId": 1, "idTag": "remote-11902", "chargingProfile": { "transactionId": 11902, "chargingProfileId": 1, "stackLevel": 1, "chargingProfilePurpose": "TxProfile", "chargingProfileKind": "Relative", "chargingSchedule": { "chargingRateUnit": "A", "chargingSchedulePeriod": [ ... ] } } }
이 명령은 RPC 호출을 사용하여 백엔드를 통해 충전기로 전송됩니다.
await client.call( 'RemoteStartTransaction', remoteStartTransactionBody );
2단계: 충전기가 응답함
충전기는 응답으로 명령을 승인합니다.
{"status": "Accepted"}
이는 충전기가 거래를 시작할 준비가 되었음을 나타냅니다.
3단계: 충전기에서 StartTransaction 전송
충전기가 완전히 준비되면 StartTransaction 메시지를 백엔드로 다시 보냅니다.
{ "connectorId": 1, "idTag": "remote-11902", "meterStart": 0, "timestamp": "2025-01-15T02:09:54.000Z" }
충전 세션 모니터링
충전 세션 내내 충전기는 전압, 전류, 전달된 에너지와 같은 지표가 포함된 MeterValues 업데이트를 주기적으로 보냅니다. 이러한 업데이트는 30초마다 또는 다른 간격으로 발생하도록 구성할 수 있습니다.
{ "connectorId": 1, "transactionId": 11902, "meterValue": [ { "timestamp": "2025-01-15T02:09:54.000Z", "sampledValue": [ { "value": "241.10", "measurand": "Voltage", "unit": "V" }, { "value": "0.00", "measurand": "Current.Import", "unit": "A" }, { "value": "0", "measurand": "Power.Active.Import", "unit": "W" }, { "value": "32", "measurand": "Current.Offered", "unit": "A" } ] } ] }
충전 프로세스 중지
1단계: 사용자가 앱에서 '중지'를 누릅니다.
사용자가 '중지'를 탭하면 백엔드는 RemoteStopTransaction 명령을 충전기에 보냅니다.
await client.call( 'RemoteStopTransaction', { transactionId: 11902 } );
2단계: 충전기가 응답함
충전기는 다음과 같이 인식합니다.
{"status": "Accepted"}
3단계: 충전기에서 StopTransaction을 보냅니다.
종료가 완료된 후 충전기는 전달된 총 에너지와 같은 세부정보가 포함된 StopTransaction 메시지를 보냅니다.
{ "connectorId": 1, "idTag": "remote-11902", "chargingProfile": { "transactionId": 11902, "chargingProfileId": 1, "stackLevel": 1, "chargingProfilePurpose": "TxProfile", "chargingProfileKind": "Relative", "chargingSchedule": { "chargingRateUnit": "A", "chargingSchedulePeriod": [ ... ] } } }
커넥터란 무엇입니까?
가스 펌프에 디젤이나 휘발유용 노즐이 다를 수 있는 것처럼 EV 충전기에도 여러 개의 커넥터가 있을 수 있습니다. 일반적인 유형은 다음과 같습니다.
- CCS2: 유럽과 북미에서 인기가 높습니다.
- CHAdeMO: 일본에서 흔히 볼 수 있는
- 메네케스(유형 2): 유럽에서 널리 사용됩니다.
각 커넥터는 독립적으로 작동하므로 하나의 충전기를 여러 차량에 사용할 수 있습니다.
OCPP
OCPP(Open Charge Point Protocol)는 전기차(EV) 충전소(충전소)와 중앙 관리 시스템(종종 백엔드 시스템 또는 충전소 관리 시스템이라고도 함) 간의 상호 작용을 위해 설계된 개방형 통신 표준입니다.
다른 제조업체의 충전 인프라와 소프트웨어 제공업체 간의 상호 운용성을 가능하게 합니다.
OCPP 버전:
- OCPP 1.5: 초기 버전, 일부 이전 시스템에서 아직 사용 중입니다.
- OCPP 1.6: 널리 채택되었으며 SOAP 및 WebSocket 통신을 모두 지원합니다.
- OCPP 2.0 및 2.0.1: 향상된 보안(TLS), 스마트 충전 지원, 향상된 진단 및 펌웨어 관리와 같은 더 많은 기능을 갖춘 향상된 버전입니다.
주요 사용 사례:
- 충전소 관리: 충전소에 대한 원격 모니터링, 문제 해결 및 펌웨어 업데이트.
- 스마트 충전: 부하 분산, 예약/사전 예약 및 에너지 그리드와의 통합이 가능합니다.
- 결제 통합: 충전소에서 결제 대행사와 상호 작용하고 사용자 계정을 관리할 수 있습니다.
- 분석 및 보고: 운영자가 사용 패턴을 분석하고 운영을 최적화하는 데 도움이 됩니다.
OCPP 작동 방식:
OCPP는 충전소와 중앙 시스템 간의 메시지 구조와 통신 프로토콜을 정의합니다. 예:
- 충전소는 상태, 에너지 소비 또는 오류에 대한 메시지를 보냅니다.
- 중앙 시스템은 충전 시작/중지, 펌웨어 업데이트, 진단 수행 등의 명령을 보낼 수 있습니다.
OCPP는 OCA(Open Charge Alliance)에서 관리하며 계속해서 프로토콜을 개발하고 홍보하고 있습니다.
패키지
- Python: 모빌리티하우스/ocpp
- 자바스크립트: mikuso/ocpp-rpc
마무리
앱에서 충전을 시작하거나 중지할 때마다 일련의 정확한 실시간 메시지가 앱, 백엔드, 충전기 간에 흐릅니다.
OCPP 프로토콜은 이 모든 것을 가능하게 하며 다양한 제조업체의 충전기와 앱이 원활하게 함께 작동할 수 있도록 보장합니다.
다음번에 EV를 연결하고 '시작'을 탭하면 숨겨진 마법에 대해 좀 더 알게 될 것입니다!
저는 LiveAPI라는 매우 편리한 도구를 개발해왔습니다.
개발자가 쉽게 API 문서를 작성할 수 있도록 설계되었습니다.
LiveAPI를 사용하면 사용자가 브라우저에서 직접 API를 실행할 수 있는 대화형 API 문서를 빠르게 생성할 수 있습니다.
API용 문서를 수동으로 작성하는 데 지쳤다면 이 도구를 사용하면 작업이 더 쉬워질 수 있습니다.


Lama2에서 LiveAPI까지: 매우 편리한 API 문서 작성(2부)
개발자가 EV 충전기가 모바일 앱과 통신할 수 있도록 하는 방법의 Athreya(일명 Maneshwar) ・ 2024년 12월 14일
위 내용은 개발자가 EV 충전기가 모바일 앱과 통신할 수 있도록 하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Tomergelistsinpython, youcanusethe operator, extendmethod, listcomprehension, oritertools.chain, 각각은 각각의 지위를 불러 일으킨다

Python 3에서는 다양한 방법을 통해 두 개의 목록을 연결할 수 있습니다. 1) 작은 목록에 적합하지만 큰 목록에는 비효율적입니다. 2) 메모리 효율이 높지만 원래 목록을 수정하는 큰 목록에 적합한 확장 방법을 사용합니다. 3) 원래 목록을 수정하지 않고 여러 목록을 병합하는 데 적합한 * 운영자 사용; 4) 메모리 효율이 높은 대형 데이터 세트에 적합한 itertools.chain을 사용하십시오.

join () 메소드를 사용하는 것은 Python의 목록에서 문자열을 연결하는 가장 효율적인 방법입니다. 1) join () 메소드를 사용하여 효율적이고 읽기 쉽습니다. 2)주기는 큰 목록에 비효율적으로 운영자를 사용합니다. 3) List Comprehension과 Join ()의 조합은 변환이 필요한 시나리오에 적합합니다. 4) READE () 방법은 다른 유형의 감소에 적합하지만 문자열 연결에 비효율적입니다. 완전한 문장은 끝납니다.

pythonexecutionissprocessoftransformingpythoncodeintoExecutableInstructions.1) the -interreadsTheCode, ConvertingItintoByTecode, thethepythonVirtualMachine (pvm)을 실행합니다

Python의 주요 특징은 다음과 같습니다. 1. 구문은 간결하고 이해하기 쉽고 초보자에게 적합합니다. 2. 개발 속도 향상, 동적 유형 시스템; 3. 여러 작업을 지원하는 풍부한 표준 라이브러리; 4. 광범위한 지원을 제공하는 강력한 지역 사회와 생태계; 5. 스크립팅 및 빠른 프로토 타이핑에 적합한 해석; 6. 다양한 프로그래밍 스타일에 적합한 다중-파라 디그 지원.

Python은 해석 된 언어이지만 편집 프로세스도 포함됩니다. 1) 파이썬 코드는 먼저 바이트 코드로 컴파일됩니다. 2) 바이트 코드는 Python Virtual Machine에 의해 해석되고 실행됩니다. 3)이 하이브리드 메커니즘은 파이썬이 유연하고 효율적이지만 완전히 편집 된 언어만큼 빠르지는 않습니다.

USEAFORLOOPHENTERATINGOVERASERASERASPECIFICNUMBEROFTIMES; USEAWHILLOOPWHENTINUTIMONDITINISMET.FORLOOPSAREIDEALFORKNOWNSEDINGENCENCENS, WHILEWHILELOOPSSUITSITUATIONS WITHERMINGEDERITERATIONS.

Pythonloopscanleadtoerrors likeinfiniteloops, modifyinglistsdizeration, off-by-by-byerrors, zero-indexingissues, andnestedloopineficiencies.toavoidthese : 1) aing'i


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Dreamweaver Mac版
시각적 웹 개발 도구