(OCPP服务器)SteVe编译搭建全过程

news2024/12/21 21:57:32

注意:建议使用3.6.0,我升级到3.7.1,并没有多什么新功能,反而电表的实时数据只能看到累计电能了,我回退了就正常,数据库是兼容的,java版本换位java11,其他不变就好

背景:
国外欧标充电桩开发中,服务器对接是很重要的一环,出国外的基本都是需要支持OCPP功能,基本要求是OCPP1.6,还有些客户已经开始要2.0了,OCPP测试至关重要,目前有两种测试方法,1,使用Monta服务器,去注册一个账号,然后链接调试即可,2.自己在云端搭建一个自己的OCPP平台(SteVe)。
两个平台我都有使用,用得多并且顺手的是SteVe平台。以下是简单总结一下使用后的感受。
Monta平台界面比较单一,下发的命令的应答只能看log里面找到对应的应答数据(json),优点是有认证测试功能,可以免费自己注册一个账号就能使用,免费https://ocpp-toolkit.monta.app/
在这里插入图片描述
在这里插入图片描述

SteVe平台界面丰富,可以管理ocpp tags(充电卡)或者get configration的时候预设很多系统的key使用,应答命令会帮你解析在页面显示出来,目前SteVe平台是最完善的,并且是开源免费的。
在这里插入图片描述
在这里插入图片描述

综上所述,自己搭建一个服务器就很有必要了。

SteVe平台搭建主要流程:

  • 1.先准备一个云服务器,如果没有云服务器,可以考虑用虚拟机安装一个centos7,然后把这个机器映射到外网临时用也行。
  • 2.下载SteVe官方源码包,我这里就用3.17.1举例。官方源码在GitHub https://github.com/steve-community/steve。
  • 3.数据库MYSQL8的安装与配置,因为CentOS使用的是mariadb,但你去编译SteVe的时候你会发现提示非长期支持版,会报错。
  • 4.安装Java17,Centos内置了Java工具,但查看版本发现是1.8的,SteVe3.7.1要求是Java17,删除Java1.8再安装Java17.
  • 5.编译SteVe源码。
  • 6.运行,测试
  • 7.制作开机自启。

详细步骤:
1.下载SteVe源码。并阅读README.md,了解这个平台需要用到的环境,先配置好这些环境,然后了解编译工具和编译运行。经过阅读发现需要使用mysql8,java17,Maven
2.首先来安装数据库,数据库MYSQL8的安装与配置,查看当前mariadb版本信息。

rpm -e --nodeps 上一条命令列出的文件名。
rpm -qa|grep mariadb 用于检查是否卸载干净。

让AI帮忙写了一个centos7安装mysql8的脚步,这样比传统的下载安装更省事

#!/bin/bash

# Exit script on any error
set -e

# Fixed password to be used
fixed_password="Msb666666"

# 1. Add the MySQL Yum repository
echo "Adding the MySQL Yum repository..."
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

echo "Checking the integrity of the downloaded package..."
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql

echo "Installing the MySQL Yum repository..."
yum localinstall mysql80-community-release-el7-3.noarch.rpm -y

# 2. Install the MySQL server
echo "Installing the MySQL server..."
yum install mysql-community-server -y

# 3. Start the MySQL service
echo "Starting the MySQL service..."
systemctl start mysqld
systemctl enable mysqld

# 4. Get the temporary password generated for the root user
echo "Retrieving the temporary password..."
temp_password=$(grep 'temporary password' /var/log/mysqld.log | tail -1 | rev | cut -d" " -f1 | rev)

echo "The temporary MySQL root password is: $temp_password"

# 5. Change the root user's password to the desired fixed password
echo "Changing the root user's password..."

mysql --connect-expired-password -uroot -p"$temp_password" <<-EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '$fixed_password';
FLUSH PRIVILEGES;
EOF

echo "The root password has been successfully changed to the fixed password."

# Optionally, you can run the mysql_secure_installation steps here if you want to automate it further.

echo "MySQL 8 installation is complete."

还有mysql运行脚本

#!/bin/bash

# This script starts the MySQL service and sets it to launch on boot

# Exit script on any error
set -e

# Start the MySQL service
echo "Starting the MySQL service..."
systemctl start mysqld

# Enable the MySQL service to start on boot
echo "Setting the MySQL service to start on boot..."
systemctl enable mysqld

# Confirmation message
echo "MySQL service has been started and set to launch on boot."

安装好了之后通过ssh命令行登陆数据库

mysql -u root

接下来为steve创建相关数据

steve 数据库mysql8
用户名:root
密码:Msb666666@,
Steve数据库用户名:steve
密码:changeme

脚本安装后需要更新默认的随机密码,密码不能太简单,需要带点符合,否则会失败

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Msb666666@,';
FLUSH PRIVILEGES;

创建SteVe需要用到的数据库stevedb

CREATE DATABASE stevedb CHARACTER SET utf8 COLLATE utf8_unicode_ci;

创建完毕后可以使用命令查看一下,可以看到Stevedb

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| stevedb            |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

再为这个数据创建一个数据库用户steve,这个和SteVe平台README.md默认用户名和密码保持一致,否则两边一起改。

CREATE USER 'steve'@'localhost' IDENTIFIED BY 'changeme';
GRANT ALL PRIVILEGES ON stevedb.* TO 'steve'@'localhost';
GRANT SUPER ON *.* TO 'steve'@'localhost';

然后退出数据库尝试使用新数据库用户登陆

  mysql -u steve -p

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| stevedb            |
+--------------------+
3 rows in set (0.00 sec)

mysql> 

这样就完成了,不需要建表,这个SteVe在打包编译和运行的时候都会自动建表。
编译之前还需要改一下数据库默认时区,解决java编译的时候时区问题。

 vi  /etc/my.cnf

增加default-time-zone=‘+08:00’

重启数据库

 systemctl restart mysqld

数据库好了,还需要Java运行环境

  yum install java-17-openjdk-devel

如果系统里有多个java版本可以使用alternatives来切换

CentOS 支持通过 alternatives 命令来管理多个版本的 Java。您可以按照以下步骤进行设置:

alternatives --install /usr/bin/javac java /usr/lib/jvm/temurin-17-jdk/bin/java 1
alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-17-jdk/bin/javac 1
sudo alternatives --config java

选择Java17即可

修改Steve代码
修改Java代码,改到上海时区东八区,方便测试使用

public class Application implements ApplicationStarter, AutoCloseable {

    private final ApplicationStarter delegate;

    public Application() {
        // For Hibernate validator
        System.setProperty("org.jboss.logging.provider", "slf4j");

        SteveConfiguration sc = SteveConfiguration.CONFIG;
        log.info("Loaded the properties. Starting with the '{}' profile", sc.getProfile());

        // 设置java.util.TimeZone的默认时区为东八区
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));       
        DateTimeZone.setDefault(DateTimeZone.forID("Asia/Shanghai"));


        //TimeZone.setDefault(TimeZone.getTimeZone(sc.getTimeZoneId()));
        //DateTimeZone.setDefault(DateTimeZone.forID(sc.getTimeZoneId()));
        log.info("Date/time zone of the application is set to {}. Current date/time: {}", sc.getTimeZoneId(), DateTime.now());

        switch (sc.getProfile()) {
            case DEV:

默认的配置部署到服务器是无法正常访问的,需要修改一下配置,数据库部分一定要和前面配置的数据库的鞥冷信息和端口一样,网页登录信息建议改为自己的密码,最好还是随机密码,修改的java配置文件在src\main\resources\config\prod\main.properties

# Just to be backwards compatible with previous versions, this is set to "steve",
# since there might be already configured chargepoints expecting the older path.
# Otherwise, might as well be changed to something else or be left empty.
#
context.path = steve

# Database configuration
#
db.ip = 127.0.0.1
db.port = 3306
db.schema = stevedb
db.user = steve
db.password = changeme

# Credentials for Web interface access
#
auth.user = admin
auth.password = 写上你的密码

# The header key and value for Web API access using API key authorization.
# Both must be set for Web APIs to be enabled. Otherwise, we will block all calls.
#
webapi.key = STEVE-API-KEY
webapi.value =

# Jetty configuration
#
server.host = 0.0.0.0
server.gzip.enabled = true

# Jetty HTTP configuration
#
http.enabled = true
http.port = 8080

# Jetty HTTPS configuration
#
https.enabled = false
https.port = 8443
keystore.path =
keystore.password =

# When the WebSocket/Json charge point opens more than one WebSocket connection,
# we need a mechanism/strategy to select one of them for outgoing requests.
# For allowed values see de.rwth.idsg.steve.ocpp.ws.custom.WsSessionSelectStrategyEnum.
#
ws.session.select.strategy = ALWAYS_LAST

# if BootNotification messages arrive (SOAP) or WebSocket connection attempts are made (JSON) from unknown charging
# stations, we reject these charging stations, because stations with these chargeBoxIds were NOT inserted into database
# beforehand. by setting this property to true, this behaviour can be modified to automatically insert unknown
# stations into database and accept their requests.
#
# CAUTION: setting this property to true is very dangerous, because we will accept EVERY BootNotification or WebSocket
# connection attempt from ANY sender as long as the sender knows the URL and sends a valid message.
#
auto.register.unknown.stations = false

# if this field is set, it will take precedence over the default regex we are using in
# de.rwth.idsg.steve.web.validation.ChargeBoxIdValidator.REGEX to validate the format of the chargeBoxId values
#
charge-box-id.validation.regex =

### DO NOT MODIFY ###
steve.version = ${project.version}
git.describe = ${git.commit.id.describe}
db.sql.logging = false
profile = prod

安装Maven工具,这个是编译这个项目必不可少的工具,

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum install -y apache-maven
[root@iZj6cagyhi0qjy83boeqcyZ ~]# mvn -version
Apache Maven 3.0.5 (Red Hat 3.0.5-17)
Maven home: /usr/share/maven
Java version: 17.0.13, vendor: Eclipse Adoptium
Java home: /usr/lib/jvm/temurin-17-jdk
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.114.2.el7.x86_64", arch: "amd64", family: "unix"

编译代码,生成Java应用程序

./mvnw package

在这里插入图片描述

执行并测试

/usr/bin/java -jar /home/steve3.7.1/target/steve.jar

打开网页
在这里插入图片描述
能打开基本就成功了,登陆用户名和密码是src\main\resources\config\prod\main.properties里面的
在这里插入图片描述

# Credentials for Web interface access
#
auth.user = admin
auth.password = 写上你的密码

手工执行通过后,可以制作自启动Steve服务器

vi /etc/systemd/system/steve.service
[Unit]
Description=Steve Java Application

[Service]
User=root# 替换为实际运行该服务的系统用户名
ExecStart=/usr/bin/java -jar /home/steve3.7.1/target/steve.jar
WorkingDirectory=/home/steve3.7.1/target # 确保这是jar文件所在的目录
SuccessExitStatus=143 # java进程退出码为143表示正常退出
TimeoutStopSec=10
Restart=on-failure # 服务失败时进行重启
RestartSec=5 # 重启间隔时间

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable steve.service
systemctl start steve.service
systemctl status steve.service

//重启服务,用户修改了服务源码,重启服务生效。

systemctl restart steve.service

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建Tomcat(四)---Servlet容器

目录 引入 Servlet容器 一、优化MyTomcat ①先将MyTomcat的main函数搬过来&#xff1a; ②将getClass()函数搬过来 ③创建容器 ④连接ServletConfigMapping和MyTomcat 连接&#xff1a; ⑤完整的ServletConfigMapping和MyTomcat方法&#xff1a; a.ServletConfigMappin…

Iris简单实现Go web服务器

package mainimport ("github.com/kataras/iris" )func main() {app : iris.New() // 实例一个iris对象//配置路由app.Get("/", func(ctx iris.Context) {ctx.WriteString("Hello Iris")})app.Get("/aa", func(ctx iris.Context) {ct…

MySql 中的解决某列中多个字段查询是否存在指定某个值, FIND_IN_SET 用法。

简言&#xff1a;今天公司数据库里面有个列是多个数据拼接而成的比如&#xff1a;**“,131113,749932833,749932825,749932826,749932827,749932828,749932829,”**想要通过sql 查找749932833值的列&#xff0c;很多同学第一想到的就是like 模糊匹配&#xff0c;模糊匹配不能保…

Git实用指南(精简版)

目录 读者须知 Git是什么 Git的原理 文件在Git中的几种状态 快速上手 结尾 读者须知 本文章适合从未接触过git,或者需要深度学习Git的用户进行阅读. 文末有详细的文档,读者可以前往Github下载阅读!!三克油 Git是什么 简单来说,Git是一个代码备份工具,你可以使用指令对…

jmeter 接口性能测试 学习笔记

目录 说明工具准备工具配置jmeter 界面汉化配置汉化步骤汉化结果图 案例1&#xff1a;测试接口接口准备线程组添加线程组配置线程组值线程数&#xff08;Number of Threads&#xff09;Ramp-Up 时间&#xff08;Ramp-Up Period&#xff09;循环次数&#xff08;Loop Count&…

小红书关键词搜索采集 | AI改写 | 无水印下载 | 多维表格 | 采集同步飞书

小红书关键词搜索采集 | AI改写 | 无水印下载 | 多维表格 | 采集同步飞书 一、下载影刀&#xff1a; https://www.winrobot360.com/share/activity?inviteUserUuid595634970300317698 二、加入应用市场 https://www.yingdao.com/share/accede/?inviteKeyb2d3f22a-fd6c-4a…

Unbuntu下怎么生成SSL自签证书?

环境&#xff1a; WSL2 Unbuntu 22.04 问题描述&#xff1a; Unbuntu下怎么生成SSL自签证书&#xff1f; 解决方案&#xff1a; 生成自签名SSL证书可以使用OpenSSL工具&#xff0c;这是一个广泛使用的命令行工具&#xff0c;用于创建和管理SSL/TLS证书。以下是生成自签名…

通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统

背景介绍 阿里云向量检索服务Milvus版&#xff08;简称阿里云Milvus&#xff09;是一款云上全托管服务&#xff0c;确保了了与开源Milvus的100%兼容性&#xff0c;并支持无缝迁移。在开源版本的基础上增强了可扩展性&#xff0c;能提供大规模 AI 向量数据的相似性检索服务。相…

打靶记录22——Tomato

靶机&#xff1a; https://download.vulnhub.com/tomato/Tomato.ova 难度&#xff1a; 低 目标&#xff1a; 获得 Root 权限 Flag 攻击方法&#xff1a; 主机发现端口扫描信息收集路径爬取源码分析文件包含写入日志 /var/log/auth.log内核漏洞枚举 les.sh本地提权 主机…

三维引擎cesium学习经验

三维引擎cesium学习经验&#xff1a; 1、初始化viewer对象 2、对entity的操作&#xff1a;添加&#xff0c;隐藏&#xff0c;修改&#xff0c;去除&#xff0c;居中显示 3、去除掉entity的双击事件 4、获取当前视角高度 5、获取经纬度在屏幕上的位置 6、获取三维场景屏幕中心点…

【蓝桥杯】43699-四平方和

四平方和 题目描述 四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a; 每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去&#xff0c;就正好可以表示为 4 个数的平方和。 比如&#xff1a; 502021222 712121222; 对于一个给定的正整数&#xff0c;可…

十、从0开始卷出一个新项目之瑞萨RZN2L rzn-fsp v2.0.0 Release Notes

目录 一、概述 二、Github地址 三、 Features Added 3.1 Developer Assistance feature support added. 3.2 Multiplex interrupts support added. 四、Bug Fixes and Improvements 4.1 Added a noncache section for user applications. 4.2 Unified case of asm inst…

VM16+解压版CentOS7安装和环境配置教程(2024年12月20日)

VM16解压版CentOS7安装和环境配置教程-2024年12月20日 一、下载安装包二、vm安装三、解压版CentOS7安装四、CentOS设置静态IP 因为很多同学觉得配置CentOS7好麻烦&#xff0c;我特地提供了一个已经配置好的现成镜像&#xff0c;来简化操作本篇来记录过程。 如果你在看到这篇文章…

PC寄存器(Program Counter Register)jvm

在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色。以下是对JVM中PC寄存器的详细解释: 一、定义与功能 定义: JVM中的PC寄存器,也被称为程序计数器,是对物理PC寄存器的一种抽象模拟。它用于存储当前线程所执行的字节码指令的地址,即指…

学习threejs,scene.overrideMaterial全局材质效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.2 ☘️THREE.Scene 场景1.2 ☘️…

【原生js案例】前端封装ajax请求及node连接 MySQL获取真实数据

上篇文章&#xff0c;我们封装了ajax方法来请求后端数据&#xff0c;这篇文章将介绍如何使用 Node.js 来连接 MySQL&#xff0c;并对数据库进行操作。 实现效果 代码实现 后端接口处理 const express require("express"); const connection require("../da…

FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.2,RTP协议-RTP协议概述,协议详情

前提: 为什么要学习 RTP&#xff08;Real-time Transport Protocol&#xff09;重点 简介&#xff1a;RTP是一个实时传输媒体数据的协议&#xff0c;通常与RTSP一起使用。它负责在网络上传输音视频数据。特点&#xff1a;RTP通过UDP或TCP传输媒体数据&#xff0c;提供时间戳和序…

Chapter 18 CMOS Processing Technology

Chapter 18 CMOS Processing Technology 这一章介绍CMOS制造工艺, 介绍wafer制作, 光刻, 氧化, 离子注入, 沉淀(deposition)和刻蚀. 然后介绍MOS管制作流程, 最后介绍被动器件和互连接. 18.1 General Considerations sheet resistance为方块电阻. R ρL/(W t), 方块电阻定…

服务器数据恢复—V7000存储中多块磁盘出现故障导致业务中断的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台V7000存储上共12块SAS机械硬盘&#xff08;其中1块是热备盘&#xff09;&#xff0c;组建了2组Mdisk&#xff0c;创建了一个pool。挂载在小型机上作为逻辑盘使用&#xff0c;小型机上安装的AIXSybase。 服务器存储故障&#xff1a; V7…

LabVIEW中的“Synchronize with Other Application Instances“

在LabVIEW中&#xff0c;“Synchronize with Other Application Instances”是一个常见的提示或错误&#xff0c;通常出现在尝试并行运行多个LabVIEW实例时&#xff0c;特别是当你打开多个VI或项目时。这个问题可能影响程序的执行流程&#xff0c;导致不同实例之间的数据同步或…