近期参与ISO15118充电协议的开发,主要涉及车与桩的PLC通信。但是桩与平台端却是使用OCPP,本人对OCPP知之甚少。故而网上找了些开源项目,运行起来看看OCPP的样子,揭开OCPP的神秘面纱。
运行环境:Ubuntu 22.04 虚拟机
OCPP客户端:MicroOcpp. 项目地址:
OCPP服务端:SteVe. 项目地址:
- 先下载需要用到的库以及编译依赖:
bash
# 安装 git
sudo apt install git -y
# 安装 OpenJDK 21 和 Maven
sudo apt install openjdk-21-jdk maven -y
# 安装 MySQL 服务器
sudo apt install mysql-server -y
# 安装编译工具
sudo apt install cmake libssl-dev build-essential
# 检查安装的版本
java --version
mvn --version
mysql --version
- 下载代码
bash
# 下载MicroOcpp
git clone --recurse-submodules https://github.com/matth-x/MicroOcppSimulator
cd MicroOcppSimulator
# 下载SteVe
git clone https://github.com/steve-community/steve.git
- 编译
- 编译MicroOcpp
bash
cmake -S . -B ./build
cmake --build ./build -j 16 --target mo_simulator
- 编译SteVe
bash
# 登录 MySQL
sudo mysql -u root -p
登陆数据库后,执行以下命令
bash
-- 创建数据库,使用 utf8 字符集
CREATE DATABASE stevedb CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-- 创建本地用户 steve,并设置密码
CREATE USER 'steve'@'localhost' IDENTIFIED BY 'xxxx';
-- 授予用户对 stevedb 数据库的所有权限
GRANT ALL PRIVILEGES ON stevedb.* TO 'steve'@'localhost';
-- 使权限生效
FLUSH PRIVILEGES;
-- 退出 MySQL
EXIT;
修改src/main/resources/application-prod.properties 连接数据库
bash
# Database configuration
#
db.ip = localhost
db.port = 3306
db.schema = stevedb
db.user = steve
db.password = xxxx
最后编译
bash
# 使用项目自带的 Maven 包装器进行编译
./mvnw clean package
- 运行
bash
# 运行steve生成的 jar 文件
java -jar target/steve.war
# 运行MicroOcpp生成的bin 文件
./build/mo_simulator
然后就可以通过浏览器打开页面查看控制台了。
MicroOcpp: http://127.0.0.1:8000

Steve: http://127.0.0.1:8080/steve/
登录密码为src/main/resources/application-prod.properties配置项里

- 运行配置
对于ocpp服务端steve而言,需要新建充电站点。登录后依次点击DATA MANAGENT/CHARGE POINTS,点击Add New进行添加,注意密码设置为16~20个字符;


这样steve端就设置好了,然后需要将ocpp服务端URI设置到ocpp客户端。

这样就可以在steve上看到桩的信息了。

接着需要在steve端创建ID Tag,这个操作类似于先将ID卡录入平台,然后桩和车插好电后,然后刷卡,卡信息进入平台比对。如果验证通过则开始充电。操作过程如下:登录steve后,DATA MANAGENT/OCPP TAGS,点击Add New进行添加


这样就完成了。
- 启动充电
点击Connectors,然后进入Connector 1控制台,打开EVSE Options,然后修改状态为Ready,最后点击Update EVSE就可以了。也可以在点击页面上的Fetch All就可以看到状态更新了。


然后在Transaction Options页面输入我们刚创建的ID Tag,最后点击Update Transaction,就看到开始充电了。
- 最后刷新一下MicroOcpp与Steve的状态


至此,完成充电交互模拟。接下来再进行抓包分析吧。