inital
This commit is contained in:
400
Simulators/simple simulator1.6_mod.html
Normal file
400
Simulators/simple simulator1.6_mod.html
Normal file
@@ -0,0 +1,400 @@
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
background: #000;
|
||||
color: white;
|
||||
font-family: Arial;
|
||||
}
|
||||
|
||||
button, input, select {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin-bottom: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button {
|
||||
background: #369;
|
||||
color: #fff;
|
||||
padding: 5px 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
ul {
|
||||
background: #000;
|
||||
color: #eee;
|
||||
}
|
||||
|
||||
#red, #green, #blue {
|
||||
min-width: 10px;
|
||||
}
|
||||
|
||||
#red {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
#green {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
#blue {
|
||||
background-color: blue;
|
||||
}
|
||||
|
||||
#yellow {
|
||||
background-color: yellow;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Simple OCPP 1.6 Chargebox Simulator</h1>
|
||||
<select style="display:none;"><option value="">OCPP-J1.6</option></select>
|
||||
<label>Central Station</label><input id="CP" type="text" placeholder="Id Station" value="ws://localhost:8081/OCPP/Test1234" value_old="ws://192.168.1.253:8080/steve/websocket/CentralSystemService/WB-Dallmann"/>
|
||||
<label>Tag</label><input id="TAG" type="text" placeholder="Tag" value="B4A63CDF"/>
|
||||
<h2>Actions</h2>
|
||||
<button id="connect">Connect</button>
|
||||
<button id="send">Authorize</button>
|
||||
<button id="start">Start Transaction</button>
|
||||
<button id="stop">Stop Transaction</button>
|
||||
<button id="heartbeat">Heartbeat</button>
|
||||
<label>Meter value</label><input id="metervalue" type="text" placeholder="Meter value" value="1"/>
|
||||
<button id="mv">Send Meter Values</button>
|
||||
<button id="status">Status Notification</button>
|
||||
<button id="data_transfer">Data Tranfer</button>
|
||||
|
||||
<div>
|
||||
<span class="indicator" id="red">____</span>
|
||||
<span class="indicator" id="green">____</span>
|
||||
<span class="indicator" id="blue">____</span>
|
||||
<span class="indicator" id="yellow">____</span>
|
||||
</div>
|
||||
<ul id="console"></ul>
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
var c = 0;
|
||||
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
var id = randomId();
|
||||
var _websocket = null;
|
||||
var connector_locked = false;
|
||||
|
||||
function formatDate(date) {
|
||||
var day = String(date.getUTCDate());
|
||||
if (day.length <2){
|
||||
day = ('0' + day.slice(-2));
|
||||
}
|
||||
|
||||
var monthIndex = String(date.getUTCMonth()+1);
|
||||
if (monthIndex.length <2){
|
||||
monthIndex = ('0' + monthIndex.slice(-2));
|
||||
}
|
||||
var year = date.getUTCFullYear();
|
||||
var h = String(date.getUTCHours());
|
||||
var m = String(date.getUTCMinutes());
|
||||
var s = String(date.getUTCSeconds());
|
||||
|
||||
|
||||
if (h.length <2){
|
||||
h = ('0' + h.slice(-2));
|
||||
}
|
||||
if (m.length <2){
|
||||
m = ('0' + m.slice(-2));
|
||||
}
|
||||
if (s.length <2){
|
||||
s = ('0' + s.slice(-2));
|
||||
}
|
||||
return year + '-' + monthIndex + '-' + day+"T"+h+":"+m+":"+s+"Z";
|
||||
}
|
||||
|
||||
function randomId() {
|
||||
id = "";
|
||||
for (var i = 0; i < 36; i++) {
|
||||
id += possible.charAt(Math.floor(Math.random() * possible.length));
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
function wsConnect() {
|
||||
var wsurl = $('select').val();
|
||||
var CP = $('#CP').val();
|
||||
|
||||
if (_websocket) {
|
||||
$('#red').show();
|
||||
_websocket.close(3001);
|
||||
} else {
|
||||
_websocket = new WebSocket(wsurl + "" + CP, ["ocpp1.6", "ocpp1.5"]);
|
||||
_websocket.onopen = function (authorizationData) {
|
||||
|
||||
sessionStorage.setItem('LastAction', "BootNotification");
|
||||
$('#yellow').show();
|
||||
BootNotification();
|
||||
|
||||
$('#connect').text('Disconnect').css('background', 'green');
|
||||
|
||||
};
|
||||
|
||||
_websocket.onmessage = function (msg) {
|
||||
c++;
|
||||
var ddata = (JSON.parse(msg.data));
|
||||
|
||||
if(c==1){
|
||||
var hb_interval = handleData(ddata);
|
||||
sessionStorage.setItem("Configuration",hb_interval);
|
||||
startHB(hb_interval*1000);
|
||||
}
|
||||
|
||||
if (ddata[0] === 3) {
|
||||
la = getLastAction();
|
||||
|
||||
if (la == "startTransaction"){
|
||||
|
||||
var dd = ddata[2];
|
||||
logMsg("Data exchange successful!");
|
||||
var array = $.map(dd, function (value, index) {
|
||||
return [value];
|
||||
});
|
||||
//var TransactionId = (array[0]);
|
||||
var TransactionId = (array[1]);
|
||||
sessionStorage.setItem('TransactionId', TransactionId);
|
||||
|
||||
}
|
||||
logMsg("Response: " + JSON.stringify(ddata[2]));
|
||||
} else if ((JSON.parse(msg.data))[0] === 4) {
|
||||
logMsg("Data exchange failed - JSON is not accepted!");
|
||||
} else if ((JSON.parse(msg.data))[0] === 2) {
|
||||
logMsg((JSON.parse(msg.data))[2]);
|
||||
id = (JSON.parse(msg.data))[1];
|
||||
|
||||
switch (ddata[2]) {
|
||||
case "Reset":
|
||||
//Reset type SOFT, HARD
|
||||
var ResetS = JSON.stringify([3, id, {"status": "Accepted"}]);
|
||||
_websocket.send(ResetS);
|
||||
location.reload();
|
||||
break;
|
||||
case "RemoteStopTransaction":
|
||||
//TransactionID
|
||||
var remStp = JSON.stringify([3, id, {"status": "Accepted"}]);
|
||||
_websocket.send(remStp);
|
||||
|
||||
var stop_id = (JSON.parse(msg.data)[3].transactionId);
|
||||
|
||||
stopTransaction(stop_id);
|
||||
$('.indicator').hide();
|
||||
$('#yellow').show();
|
||||
break;
|
||||
case "RemoteStartTransaction":
|
||||
//Need to get idTag, connectorId (map - ddata[3])
|
||||
|
||||
var remStrt = JSON.stringify([3, id, {"status": "Accepted"}]);
|
||||
_websocket.send(remStrt);
|
||||
startTransaction();
|
||||
|
||||
break;
|
||||
case "UnlockConnector": /////////ERROR!!!!!!!!
|
||||
//connectorId
|
||||
var UC = JSON.stringify([3, id, {"status": "Unlocked"}]);
|
||||
_websocket.send(UC);
|
||||
connector_locked = false;
|
||||
$('.indicator').hide();
|
||||
$('#yellow').show();
|
||||
logMsg("Connector status changed to: "+connector_locked);
|
||||
break;
|
||||
default:
|
||||
var error = JSON.stringify([4, id]);
|
||||
_websocket.send(error);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
_websocket.onclose = function (evt) {
|
||||
$('#connect').text('Connect').css('background', '#369');
|
||||
if (evt.code == 3001) {
|
||||
logMsg('ws closed');
|
||||
_websocket = null;
|
||||
} else {
|
||||
logMsg('ws connection error: ' + evt.code);
|
||||
$('#console').html("");
|
||||
_websocket = null;
|
||||
wsConnect();
|
||||
}
|
||||
};
|
||||
|
||||
_websocket.onerror = function (evt) {
|
||||
if (_websocket.readyState == 1) {
|
||||
$('#red').show();
|
||||
logMsg('ws normal error: ' + evt.type);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function logMsg(err) {
|
||||
console.log(err);
|
||||
$('#console').append('<li>' + err + '</li>');
|
||||
}
|
||||
|
||||
function Authorize(){
|
||||
sessionStorage.setItem('LastAction', "Authorize");
|
||||
var Auth = JSON.stringify([2, id, "Authorize", {"idTag": $("#TAG").val()}]);
|
||||
_websocket.send(Auth);
|
||||
}
|
||||
|
||||
function startTransaction(){
|
||||
sessionStorage.setItem('LastAction', "startTransaction");
|
||||
$('.indicator').hide();
|
||||
$('#green').show();
|
||||
connector_locked = true;
|
||||
logMsg("Connector status changed to: " + connector_locked);
|
||||
var strtT = JSON.stringify([2, id, "StartTransaction", {
|
||||
"connectorId": 2,
|
||||
"idTag": $("#TAG").val(),
|
||||
"timestamp": formatDate(new Date()),
|
||||
"meterStart": 0,
|
||||
"reservationId": 0
|
||||
}]);
|
||||
_websocket.send(strtT);
|
||||
}
|
||||
|
||||
function stopTransaction(transaction_id = false){
|
||||
sessionStorage.setItem('LastAction', "stopTransaction");
|
||||
transaction_id == false ? ssid = sessionStorage.getItem('TransactionId') : ssid = transaction_id;
|
||||
$('.indicator').hide();
|
||||
connector_locked = false;
|
||||
logMsg("Connector status changed to: " + connector_locked);
|
||||
$('#yellow').show();
|
||||
var stpT = JSON.stringify([2, id, "StopTransaction",{
|
||||
"transactionId": parseInt(ssid),
|
||||
"idTag": $("#TAG").val(),
|
||||
"timestamp": formatDate(new Date()),
|
||||
"meterStop": 20
|
||||
}]);
|
||||
_websocket.send(stpT);
|
||||
}
|
||||
|
||||
function handleData(data, request = false){
|
||||
var lastAction = getLastAction();
|
||||
if(lastAction = "BootNotification"){
|
||||
data = data[2];
|
||||
heartbeat_interval = data.interval;
|
||||
return heartbeat_interval;
|
||||
}else if(lastAction = "StartTransaction"){
|
||||
return "StartTransaction";
|
||||
}else if (1==2){
|
||||
alert("else");
|
||||
}
|
||||
}
|
||||
|
||||
function getLastAction(){
|
||||
var LastAction = sessionStorage.getItem("LastAction");
|
||||
return LastAction;
|
||||
}
|
||||
|
||||
function BootNotification(){
|
||||
var BN = JSON.stringify([2, id, "BootNotification", {
|
||||
"chargePointVendor": "AVT-Company",
|
||||
"chargePointModel": "AVT-Express",
|
||||
"chargePointSerialNumber": "avt.001.13.1",
|
||||
"chargeBoxSerialNumber": "avt.001.13.1.01",
|
||||
"firmwareVersion": "0.9.87",
|
||||
"iccid": "",
|
||||
"imsi": "",
|
||||
"meterType": "AVT NQC-ACDC",
|
||||
"meterSerialNumber": "avt.001.13.1.01"
|
||||
}]);
|
||||
|
||||
logMsg('ws connected');
|
||||
|
||||
_websocket.send(BN);
|
||||
}
|
||||
|
||||
function startHB(interval){
|
||||
logMsg("Setting heartbeat interval to "+interval);
|
||||
setInterval(send_heartbeat,interval);
|
||||
}
|
||||
|
||||
function send_heartbeat() {
|
||||
sessionStorage.setItem('LastAction', "Heartbeat");
|
||||
var HB = JSON.stringify([2, id, "Heartbeat", {}]);
|
||||
_websocket.send(HB);
|
||||
}
|
||||
|
||||
$( document ).ready(function() {
|
||||
$('.indicator').hide();
|
||||
$('#red').show();
|
||||
|
||||
//bind controls
|
||||
$('#connect').click(function () {
|
||||
$('.indicator').hide();
|
||||
$('#console').html("");
|
||||
wsConnect();
|
||||
});
|
||||
|
||||
$('#send').click(function () {
|
||||
Authorize();
|
||||
});
|
||||
|
||||
$('#start').click(function () {
|
||||
startTransaction();
|
||||
});
|
||||
|
||||
$('#stop').click(function () {
|
||||
stopTransaction();
|
||||
});
|
||||
|
||||
$('#mv').click(function () {
|
||||
sessionStorage.setItem('LastAction', "MeterValues");
|
||||
ssid = sessionStorage.getItem('TransactionId');
|
||||
var val = String($("#metervalue").val());
|
||||
var MV;
|
||||
if (ssid == null)
|
||||
MV = JSON.stringify([2, id, "MeterValues", {"connectorId": 2, "meterValue": [{"timestamp": formatDate(new Date()), "sampledValue": [{"value": val, "measurand": "Energy.Active.Import.Register"},{"value": "800", "measurand": "Power.Active.Import"},{"value": "47", "measurand": "SoC"}]}]}]);
|
||||
else
|
||||
MV = JSON.stringify([2, id, "MeterValues", {"connectorId": 2, "transactionId": ssid, "meterValue": [{"timestamp": formatDate(new Date()), "sampledValue": [{"value": val, "measurand": "Energy.Active.Import.Register"},{"value": "800", "measurand": "Power.Active.Import"},{"value": "47", "measurand": "SoC"}]}]}]);
|
||||
_websocket.send(MV);
|
||||
|
||||
});
|
||||
$('#heartbeat').click(function () {
|
||||
send_heartbeat();
|
||||
});
|
||||
|
||||
$('#status').click(function () {
|
||||
sessionStorage.setItem('LastAction', "StatusNotification");
|
||||
var SN = JSON.stringify([2, id, "StatusNotification", {
|
||||
"connectorId": 2,
|
||||
"status": "Available",
|
||||
"errorCode": "NoError",
|
||||
"info": "",
|
||||
"timestamp": formatDate(new Date()),
|
||||
"vendorId": "",
|
||||
"vendorErrorCode": ""
|
||||
}]);
|
||||
_websocket.send(SN);
|
||||
});
|
||||
|
||||
$('#data_transfer').click(function () {
|
||||
sessionStorage.setItem('LastAction', "DataTransfer");
|
||||
var DT = JSON.stringify([2, id, "DataTransfer", {
|
||||
"vendorId": "rus.avt.cp",
|
||||
"messageId": "GetChargeInstruction",
|
||||
"data": ""
|
||||
}]);
|
||||
_websocket.send(DT);
|
||||
});
|
||||
|
||||
$('#connect').on('change', function () {
|
||||
if (_websocket) {
|
||||
_websocket.close(3001);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user