如何通过 JavaScript 通过 OCPP 1.6 建立与电动汽车充电器的连接

问题描述 投票:0回答:1
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 充电器建立通信,但尝试建立连接时出现错误。我不知道如何重置或重新生成它以便建立连接。

javascript websocket
1个回答
0
投票

我看到您在 BootNotification 之后立即开始 StartRemoteTransaction,但是,我知道您首先需要处理 StatusNotification,然后是 RemoteStartTrasaction (RST)。

现在你还需要处理Authorize(A)和StartTransaction(ST),我不知道你是否实现了,因为我可以看到它们(A和ST)。

这是因为 RST 使用这两个消息/事件来完成其工作。

© www.soinside.com 2019 - 2024. All rights reserved.