import { WebSocketServer } from "ws";
import { v4 as uuidv4 } from "uuid";
import express from "express";
const app = express();
class CSM {
constructor() {}
get_current_time() {
return new Date().toISOString();
}
init() {
this.port = 8090;
this.ws = new WebSocketServer({ port: this.port });
this.ws.on("listening", () => {
console.log(`Listen on port ${this.port}`);
});
this.ws.on("connection", (ws) => {
ws.on("message", (data) => {
console.log("%s", data);
try {
const [MessageTypeId, UniqueId, Action, Payload] = JSON.parse(
data.toString()
);
switch (Action) {
case "BootNotification":
ws.send([
3,
uuidv4(),
Action,
{
status: "Accepted",
currentTime: this.get_current_time(),
interval: 14400,
},
]);
ws.send([
2,
uuidv4(),
"RemoteStartTransaction",
{
connectorId: 1,
idTag: "738961FE",
},
]);
break;
case "Heartbeat":
ws.send([
3,
uuidv4(),
Action,
{ currentTime: this.get_current_time() },
]);
break;
case "StatusNotification":
ws.send([3, uuidv4(), Action, {}]);
break;
default:
console.log("%", data);
}
} catch (error) {
console.error("Error: ", error);
}
});
ws.on("error", (error) => {
console.log(error);
ws.send([
4,
uuidv4(),
"BootNotification",
{
status: "Accepted",
currentTime: this.get_current_time(),
interval: 14400,
},
]);
});
});
}
}
const csm = new CSM();
csm.init();
错误信息:
[2,"170870499378","BootNotification",{"chargePointModel":"c8","chargePointSerialNumber":"SN1120620007","chargePointVendor":"crev","firmwareVersion":"V00.49.15"}] RangeError:无效的 WebSocket 帧:有效负载长度 1 无效 在 Receiver.getInfo (C:\Users\Fabian\Desktop\ocpp ode_modules.pnpm\[电子邮件受保护] ode_modules\ws\lib 接收器.js:303:28) 在 Receiver.startLoop (C:\Users\Fabian\Desktop\ocpp ode_modules.pnpm\[电子邮件受保护] ode_modules\ws\lib 接收器.js:159:16) 在 Receiver._write (C:\Users\Fabian\Desktop\ocpp ode_modules.pnpm\[电子邮件受保护] ode_modules\ws\lib 接收器.js:98:10) 在 writeOrBuffer (节点:内部/流/可写:399:12) 在_write(节点:内部/流/可写:340:10) 在 Writable.write (节点:内部/流/可写:344:10) 在 Socket.socketOnData (C:\Users\Fabian\Desktop\ocpp ode_modules.pnpm\[电子邮件受保护] ode_modules\ws\lib\websocket.js:1303:35) 在 Socket.emit (节点:事件:514:28) 在addChunk(节点:内部/流/可读:343:12) 在 readAddChunk (节点:内部/流/可读:316:9) { 代码:'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH', [符号(状态代码)]:1002
我尝试通过 OCPP.16 与 EV 充电器建立通信,但尝试建立连接时出现错误。我不知道如何重置或重新生成它以便建立连接。
我看到您在 BootNotification 之后立即开始 StartRemoteTransaction,但是,我知道您首先需要处理 StatusNotification,然后是 RemoteStartTrasaction (RST)。
现在你还需要处理Authorize(A)和StartTransaction(ST),我不知道你是否实现了,因为我可以看到它们(A和ST)。
这是因为 RST 使用这两个消息/事件来完成其工作。