OCPP学习日记--2协议开发

#认证
认证报文如下:
[2,“3VFfYCu5ZFP7ZHhDKvRoYUMqFeM8jFDxBkuE”,“Authorize”,{“idTag”:“FFFFFFFEEEEEEEEE”}]
[3,“3VFfYCu5ZFP7ZHhDKvRoYUMqFeM8jFDxBkuE”,{“idTagInfo”:{“status”:“Accepted”,“expiryDate”:“2024-06-30T00:00:00.000Z”,“parentIdTag”:“PATFFFFFFF”}}]
在这里插入图片描述

--- ocpp 1.6的认证报文
-- @string req_msg.id_tag 充电卡片的ID
-- @string 
-- @return int result 1 - 成功允许充电,2 - 认证失败不允许充电,
-- @usage   
ocpp_local_func.authorize = function (ocpp_obj, req_msg, ret_msg)
    -- statements
    local msg_ranid = random_str(16)
    local masking_key = math.random(1, 0xffffffff)
    local msg = "[2,"
    local authorinfo = {
        idTag = req_msg.id_tag, 
    }
    local authorinfo_json = json.encode(authorinfo)
    local msg = "[2,\"" .. msg_ranid .. "\"," .. "\"Authorize\"," .. authorinfo_json .. "]"
    print("author msg:", msg, masking_key)
    websocket.write(ocpp_obj.ws_id, msg, "text", masking_key)
    local data = websocket.read(ocpp_obj.ws_id)
    if not data then
        return -100
    end
    local ret_id, ret_ranid, ret_s = string.match(data, '%[(%d),%"(%w+)%",(.*)%]')
    --print("ret_id:", ret_id, "ret_ranid:", ret_ranid, "ret_s:", ret_s)
    if ret_id and ret_ranid == msg_ranid then
        print("ret_id:", ret_id, "ret_ranid:", ret_ranid, "ret_s:", ret_s)
        local ret_msg = json.decode(ret_s)
        --errorinfo.print_tab(ret_json["idTagInfo"])
        --print("ret_json.idTagInfo.status:", ret_json["idTagInfo"]["status"])
        if ret_msg["idTagInfo"]["status"] == "Accepted" then
            return 1
        else
            return 2
        end
    end
    return -1
end

#boot_notification
[2,“7egoQNk0PfgFw92WDWp5bWUhwHdTlJgnte8u”,“BootNotification”,{“chargePointVendor”:“hiddd”,“chargePointModel”:“elmo-vir1”,“firmwareVersion”:“0.9.89”,“iccid”:“4567890”,“imsi”:“1111111”,“meterType”:“elm acpp”,“meterSerialNumber”:“elm.0.0.1112”}]
[3,“7egoQNk0PfgFw92WDWp5bWUhwHdTlJgnte8u”,{“status”:“Accepted”,“currentTime”:“2024-06-23T00:19:56.011Z”,“interval”:14400}]
在这里插入图片描述

chargePointServ.resp.boot_notification = function(source)
    -- 充电桩向终点站发起认证请求,每个充电头单独认证
    local req_msg = {
        ["req_obj"] = {
            ["chargePointVendor"] = chargecfg.getValueByKey("chargePointVendor"),
            ["chargePointModel"] = chargecfg.getValueByKey("chargePointModel"),
            ["chargePointSerialNumber"] = chargecfg.getValueByKey("chargePointSerialNumber"),
            ["firmwareVersion"] = chargecfg.getValueByKey("firmwareVersion"),
            ["iccid"] = chargecfg.getValueByKey("iccid"),
            ["imsi"] = chargecfg.getValueByKey("imsi"),
            ["meterType"] = chargecfg.getValueByKey("meterType"),
            ["meterSerialNumber"] = chargecfg.getValueByKey("meterSerialNumber")
        } 
    }
    local ret_msg = {}
    local f, result = ocpp_protocol.call("boot_notification", req_msg, ret_msg)
    print("boot_notification result:", result, f)
    if not f then
        return -2
    end
    
    return result
end
--- ocpp 充电桩信息上报
-- @string 
-- @return int result 1 - 上报成功,-100 网络不可达读取返回值失败
-- @usage   
ocpp_local_func.boot_notification = function (self, req_msg, ret_msg)
    -- statements
    local msg_ranid = random_str(16)
    local boot_json = json.encode(req_msg.req_obj)
    local msg = "[2,\"" .. msg_ranid .. "\"," .. "\"BootNotification\"," .. boot_json .. "]"
    print("boot msg:", msg)
    websocket.write(self.ws_id, msg, "text", 0)
    local data = websocket.read(self.ws_id)
    if not data then
        return -100
    end
    local ret_id, ret_ranid, ret_s = string.match(data, '%[(%d),%"(%w+)%",(.*)%]')
    --print("ret_id:", ret_id, "ret_ranid:", ret_ranid, "ret_s:", ret_s)
    if ret_id and ret_ranid == msg_ranid then
        print("ret_id:", ret_id, "ret_ranid:", ret_ranid, "ret_s:", ret_s)
        local ret_msg = json.decode(ret_s)
        --errorinfo.print_tab(ret_json["idTagInfo"])
        --print("ret_json.idTagInfo.status:", ret_json["idTagInfo"]["status"])
        if ret_msg["status"] == "Accepted" then
            return 1
        else
            return 2
        end
    end
end

#心跳
[2,“c6VuHI1z5tvH1okM5uH9OcHvwgTAjo2dJMNS”,“Heartbeat”,{}]
[3,“c6VuHI1z5tvH1okM5uH9OcHvwgTAjo2dJMNS”,{“currentTime”:“2024-06-23T00:20:08.437Z”}]
在这里插入图片描述

--- ocpp 心跳
-- @string 
-- @return int result 1 - 成功允许充电,2 - 认证失败不允许充电,-100 网络不可达读取返回值失败
-- @usage   
ocpp_local_func.heart_beat = function (self, req_msg, ret_msg)
    -- statements
    local msg_ranid = random_str(16)
    local msg = "[2,\"" .. msg_ranid .. "\"," .. "\"BootNotification\"," .. boot_json .. "]"
    print("boot msg:", msg)
    websocket.write(self.ws_id, msg, "text", 0)
    local data = websocket.read(self.ws_id)
    if not data then
        return -100
    end
    local ret_id, ret_ranid, ret_s = string.match(data, '%[(%d),%"(%w+)%",(.*)%]')
    --print("ret_id:", ret_id, "ret_ranid:", ret_ranid, "ret_s:", ret_s)
    if ret_id and ret_ranid == msg_ranid then
        --print("ret_id:", ret_id, "ret_ranid:", ret_ranid, "ret_s:", ret_s)
        local ret_msg = json.decode(ret_s)
        if not ret_msg["currentTime"] then
            return 2
        else
            return 1
            -- statements
        end
    else
        return 2
    end
end
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值