Closes IPP-42. Trip and Warning History

This commit is contained in:
Patrick McDonagh
2016-06-14 19:02:11 -05:00
parent 1b9b5e1623
commit 9d97df075b
2 changed files with 214 additions and 32 deletions

View File

@@ -147,6 +147,49 @@
</div>
</div>
<div class="row row-flex">
<div class='col-xs-12' style="padding-top: 1em; margin-bottom: 1em;">
<div class="input-daterange input-group" id="datepicker">
<input data-chartid="dynamicChart" id="fromDate" data-daysofhistory="2" type="text" class="form-control" name="start">
<span class="input-group-addon">to</span>
<input class="form-control" data-chartid="dynamicChart" id="toDate" type="text" name="end">
<span class='input-group-btn'>
<a href="#!" data-chartid="dynamicChart" data-otherchartids="statusTimeline" class="btn chart-update btn-theme" id="runButton">Run</a>
</span>
</div>
</div>
<hr>
<div class="col-md-6">
<h1>TRIP HISTORY</h1>
<table class="table table-responsive" id="triptable">
<thead>
<tr>
<th>Timestamp</th>
<th>Condition</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="col-md-6">
<h1>WARNING HISTORY</h1>
<table class="table table-responsive" id="warningtable">
<thead>
<tr>
<th>Timestamp</th>
<th>Condition</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<style>
@@ -199,3 +242,163 @@
flex-direction: column;
}
</style>
<script>
var tripData = [];
var maps = {
current: {
0: 'None',
1: 'Overload',
2: 'Phase Loss',
4: 'Ground Fault',
8: 'Stall',
16: 'Jam',
32: 'Underload',
64: 'Current Imbalance',
128: 'L1 Undercurrent',
256: 'L2 Undercurrent',
512: 'L3 Undercurrent',
1024: 'L1 Overcurrent',
2048: 'L2 Overcurrent',
4096: 'L3 Overcurrent',
8192: 'L1 Line Loss',
16384: 'L2 Line Loss',
32768: 'L3 Line Loss'
},
voltage: {
0: 'None',
1: 'Undervoltage',
2: 'Overvoltage',
4: 'Voltage Unbalance',
8: 'Phase Rotation',
16: 'Overfrequency'
},
control: {
0: 'None',
1: 'Test Trip',
2: 'DLX Trip',
4: 'PTC Trip',
8: 'Operator Station Trip',
16: 'Remote Trip',
32: 'Blocked Start Trip',
64: 'Hardware Fault Trip',
128: 'Config Trip',
256: 'Option Match Trip',
512: 'DLX FB Timeout Trip',
1024: 'Expansion Bus Trip',
2048: 'Reserved',
4096: 'Reserved',
8192: 'NVS Trip',
16384: 'Test Mode Trip'
},
power: {
0: 'None',
1: 'Under kW',
2: 'Over kW',
4: 'Under kVAR Consumed',
8: 'Over kVAR Consumed',
16: 'Under kVAR Generated',
32: 'Over kVAR Generated',
64: 'Under kVA',
128: 'Over kVA',
256: 'Under PF Lag',
512: 'Over PF Lag',
1024: 'Under PF Lead',
2048: 'Over PF Lead'
},
};
var nodeID = <%= node.nodeId %>;
var nodeType = '<%= node.nodetypeName %>';
var channelData = {
tripstatuscurrentint: {channelId: <%= channels['ipp.tripstatuscurrentint'].channelId %>, typ: 'current', table: 'triptable'},
tripstatuscontrolint: {channelId: <%= channels['ipp.tripstatuscontrolint'].channelId %>, typ: 'control', table: 'triptable'},
tripstatusvoltageint: {channelId: <%= channels['ipp.tripstatusvoltageint'].channelId %>, typ: 'voltage', table: 'triptable'},
tripstatuspowerint: {channelId: <%= channels['ipp.tripstatuspowerint'].channelId %>, typ: 'power', table: 'triptable'},
warningstatuscurrentint: {channelId: <%= channels['ipp.warningstatuscurrentint'].channelId %>, typ: 'current', table: 'warningtable'},
warningstatuscontrolint: {channelId: <%= channels['ipp.warningstatuscontrolint'].channelId %>, typ: 'control', table: 'warningtable'},
warningstatusvoltageint: {channelId: <%= channels['ipp.warningstatusvoltageint'].channelId %>, typ: 'voltage', table: 'warningtable'},
warningstatuspowerint: {channelId: <%= channels['ipp.warningstatuspowerint'].channelId %>, typ: 'power', table: 'warningtable'}
}
var pad2 = function(str){
return ("00" + str).slice(-2);
}
var formatDate = function(d){
return pad2(d.getUTCMonth() + 1) + "/" + pad2(d.getUTCDate()) + "/" + d.getUTCFullYear() + " " + pad2(d.getUTCHours()) + ":" + pad2(d.getUTCMinutes()) + ":" + pad2(d.getUTCSeconds());
};
var getDate = function(str){
var c1 = new Date(str);
var c2 = (c1.getTime() / 1000);
c2 = Math.floor(c2);
return c2.toString();
};
var updateTable = function(chData, chName){
// var endDate = new Date();
// var end = Math.floor(endDate.getTime() / 1000);
// var start = end - 86400;
var start = $('#datepicker').find('#fromDate');
//console.log({start:start.val()});
dateString = start.val().replace(/-/g, "/");
start = getDate(dateString);
var end = $('#datepicker').find('#toDate');
//console.log({end:end.val()});
dateString = end.val().replace(/-/g, "/");
end = parseInt(getDate(dateString)) + 86400;
var apiData = "&nodelist[0][nodeId]=" + nodeID.toString() + "&nodelist[0][channelId]=" + chData['channelId'].toString();
apiData += "&start=" + start + "&end=" + end;
console.log(apiData);
$.ajax({
url: "http://www.pocloud.io/api2/Nodechannels",
data: apiData,
dataType: "json",
type: "GET",
success: function(data) {
var dataPoints = data.listofstreams[0];
for(var i = dataPoints.stream.length-1; i > 0; i--){
var dpt = dataPoints.stream[i];
var timestamp = new Date(dpt.x * 1000);
var val = maps[chData.typ][parseInt(dpt.y)];
if (val !== 'None'){
// channelData[chName]['values'].push({t:timestamp, val:val});
tripData.push({t:timestamp, val:val, table: chData.table});
}
}
}
});
};
var prepTable = function(){
// tripData = [];
for (var channel in channelData){
if(channelData.hasOwnProperty(channel)){
updateTable(channelData[channel], channel);
}
}
var sortedTripData = tripData.sort(function(a,b){return b.t-a.t;});
$('#triptable > tbody:last-child').html("");
$('#warningtable > tbody:last-child').html("");
for (var i = 0; i < sortedTripData.length; i++){
// console.log(sortedTripData[i]);
$('#'+ sortedTripData[i].table + ' > tbody:last-child').append("<tr><td>" + formatDate(sortedTripData[i].t) + '</td><td>' + sortedTripData[i].val + '</td></tr>');
}
return true;
};
$(document).ready(function(){
$("#runButton").click(function(){
// tripData = [];
prepTable();
});
prepTable();
console.log(tripData);
});
</script>

View File

@@ -1,14 +1,8 @@
from pycomm_micro.ab_comm.clx import Driver as u800Driver
import logging
import sys
def readMicroTag(addr, tag):
logging.basicConfig(
filename="u800Driver.log",
format="%(levelname)-10s %(asctime)s %(message)s",
level=logging.DEBUG
)
c = u800Driver()
if c.open(addr):
@@ -16,47 +10,38 @@ def readMicroTag(addr, tag):
v = c.read_tag(tag)
# print(v)
return v
except Exception as e:
except Exception:
err = c.get_status()
c.close()
print err
pass
c.close()
def getTagType(addr, tag):
logging.basicConfig(
filename="u800Driver.log",
format="%(levelname)-10s %(asctime)s %(message)s",
level=logging.DEBUG
)
c = u800Driver()
def getTagType(addr, tag):
c = u800Driver()
if c.open(addr):
try:
return c.read_tag(tag)[1]
except Exception as e:
except Exception:
err = c.get_status()
c.close()
print err
pass
c.close()
def writeMicroTag(addr, tag, val):
logging.basicConfig(
filename="u800Driver.log",
format="%(levelname)-10s %(asctime)s %(message)s",
level=logging.DEBUG
)
c = u800Driver()
def writeMicroTag(addr, tag, val):
c = u800Driver()
if c.open(addr):
try:
#typ = getTagType(addr, tag)
# typ = getTagType(addr, tag)
cv = c.read_tag(tag)
wt = c.write_tag(tag, val, cv[1])
# print(wt)
return wt
except Exception as e:
except Exception:
err = c.get_status()
c.close()
print err
@@ -65,22 +50,16 @@ def writeMicroTag(addr, tag, val):
def readMicroTagList(addr, tList):
logging.basicConfig(
filename="u800Driver.log",
format="%(levelname)-10s %(asctime)s %(message)s",
level=logging.DEBUG
)
c = u800Driver()
if c.open(addr):
vals = []
try:
for t in tList:
v = c.read_tag(t)
vals.append({"tag":t,"val":v[0], "type":v[1]})
vals.append({"tag": t, "val": v[0], "type": v[1]})
# print(v)
# print("{0} - {1}".format(t, v))
except Exception as e:
except Exception:
err = c.get_status()
c.close()
print err