Added ability to associate individual devices with tags
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
var tsCtrlrs = angular.module('tsCtrlrs', ['ngJustGage', 'n3-line-chart', "ngQuickDate", "ngSails"]);
|
||||
var poconsole = angular.module('poconsole', ['ngJustGage', 'n3-line-chart', "ngQuickDate", "ngSails"]);
|
||||
|
||||
function isValidDate(d) {
|
||||
if ( Object.prototype.toString.call(d) !== "[object Date]" )
|
||||
@@ -6,7 +6,9 @@ function isValidDate(d) {
|
||||
return !isNaN(d.getTime());
|
||||
}
|
||||
|
||||
tsCtrlrs.config(function(ngQuickDateDefaultsProvider) {
|
||||
var colors = ['#d7191c','#fdae61','#abdda4','#2b83ba'];
|
||||
|
||||
poconsole.config(function(ngQuickDateDefaultsProvider) {
|
||||
// Configure with icons from font-awesome
|
||||
return ngQuickDateDefaultsProvider.set({
|
||||
closeButtonHtml: "<i class='fa fa-times'></i>",
|
||||
@@ -73,7 +75,7 @@ var mysqlDate = function(d){
|
||||
return "".concat(year, "-", month, "-", day, " ", hour, ":", min, ":", sec);
|
||||
};
|
||||
|
||||
tsCtrlrs.factory('Page', function($log) {
|
||||
poconsole.factory('Page', function($log) {
|
||||
var title = 'default';
|
||||
var page = 'default';
|
||||
return {
|
||||
@@ -92,25 +94,7 @@ tsCtrlrs.factory('Page', function($log) {
|
||||
};
|
||||
});
|
||||
|
||||
tsCtrlrs.factory('Alerts', function($log) {
|
||||
var alerts = [];
|
||||
return {
|
||||
add: function(alt) {
|
||||
alerts.push(alt);
|
||||
},
|
||||
remove: function(indx) {
|
||||
alerts.splice(indx, 1);
|
||||
},
|
||||
clear: function() {
|
||||
alerts = [];
|
||||
},
|
||||
get: function() {
|
||||
return alerts;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
tsCtrlrs.factory('tags',function($q, $http, $log){
|
||||
poconsole.factory('tags',function($q, $http, $log){
|
||||
var getTag = function(id) {
|
||||
var deferred = $q.defer();
|
||||
var w ={"where":{"id":id}};
|
||||
@@ -124,7 +108,7 @@ tsCtrlrs.factory('tags',function($q, $http, $log){
|
||||
|
||||
var getTagList = function() {
|
||||
var deferred = $q.defer();
|
||||
$http.get('/tag/').success(function(data) {
|
||||
$http.get('/tag').success(function(data) {
|
||||
deferred.resolve({
|
||||
tags:data
|
||||
});
|
||||
@@ -132,6 +116,16 @@ tsCtrlrs.factory('tags',function($q, $http, $log){
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
var getDataTypes = function() {
|
||||
var deferred = $q.defer();
|
||||
$http.get('/data_type').success(function(data) {
|
||||
deferred.resolve({
|
||||
data_types:data
|
||||
});
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
var getTagHistoryBetween = function(id, start, end){
|
||||
var deferred = $q.defer();
|
||||
var w = {'where':{'tagID': id, 'createdAt': {">":mysqlDate(start), "<": mysqlDate(end)}}};
|
||||
@@ -157,6 +151,8 @@ tsCtrlrs.factory('tags',function($q, $http, $log){
|
||||
$http.post('/tag/create', {
|
||||
tag: tag.tag,
|
||||
name: tag.name,
|
||||
tag_class:5,
|
||||
deviceID: tag.deviceID,
|
||||
units: tag.units,
|
||||
minExpected: tag.minExpected,
|
||||
maxExpected: tag.maxExpected,
|
||||
@@ -171,10 +167,11 @@ tsCtrlrs.factory('tags',function($q, $http, $log){
|
||||
|
||||
var updateTag = function(tag){
|
||||
$log.info("updateTag called with "+ JSON.stringify(tag));
|
||||
$http.post('/tag/update/1', {
|
||||
id: tag.id,
|
||||
$http.post('/tag/update/'+ tag.id, {
|
||||
tag: tag.tag,
|
||||
name: tag.name,
|
||||
tag_class:5,
|
||||
deviceID: tag.deviceID,
|
||||
units: tag.units,
|
||||
minExpected: tag.minExpected,
|
||||
maxExpected: tag.maxExpected,
|
||||
@@ -225,6 +222,7 @@ tsCtrlrs.factory('tags',function($q, $http, $log){
|
||||
return {
|
||||
getTag: getTag,
|
||||
getTagList: getTagList,
|
||||
getDataTypes: getDataTypes,
|
||||
getTagHistoryBetween: getTagHistoryBetween,
|
||||
getCurrentValues: getCurrentValues,
|
||||
createTag: createTag,
|
||||
@@ -235,28 +233,48 @@ tsCtrlrs.factory('tags',function($q, $http, $log){
|
||||
};
|
||||
});
|
||||
|
||||
tsCtrlrs.factory('config',function($q, $http, $log){
|
||||
poconsole.factory('devices', function($q, $http, $log){
|
||||
var getAllDevices = function(){
|
||||
var deferred = $q.defer();
|
||||
$http.get('/device').success(function(data) {
|
||||
deferred.resolve({
|
||||
devices:data
|
||||
});
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
var getDevice = function(id){
|
||||
var deferred = $q.defer();
|
||||
$http.get('/device/'+ id).success(function(data) {
|
||||
deferred.resolve({
|
||||
devices:data
|
||||
});
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
return {
|
||||
getAllDevices : getAllDevices,
|
||||
getDevice: getDevice,
|
||||
|
||||
};
|
||||
});
|
||||
|
||||
poconsole.factory('config',function($q, $http, $log){
|
||||
|
||||
var getConfig = function(){
|
||||
var deferred = $q.defer();
|
||||
$http.get('/json/config/').success(function(data) {
|
||||
if(data.status == "OK"){
|
||||
deferred.resolve({
|
||||
config:data.config,
|
||||
status: data.status
|
||||
});
|
||||
} else {
|
||||
deferred.resolve({
|
||||
status:data.status,
|
||||
message: data.message
|
||||
});
|
||||
}
|
||||
$http.get('/config').success(function(data) {
|
||||
deferred.resolve({
|
||||
config:data
|
||||
});
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
var submitParameter = function(entry){
|
||||
$http.post('/json/config', {
|
||||
$http.post('/config', {
|
||||
parameter: entry.parameter,
|
||||
val: entry.val
|
||||
}).success(function(data){
|
||||
@@ -311,12 +329,11 @@ tsCtrlrs.factory('config',function($q, $http, $log){
|
||||
|
||||
});
|
||||
|
||||
tsCtrlrs.controller('mainCtrl', function($scope, Page, Alerts) {
|
||||
poconsole.controller('mainCtrl', function($scope, Page) {
|
||||
$scope.Page = Page;
|
||||
$scope.Alerts = Alerts;
|
||||
});
|
||||
|
||||
tsCtrlrs.controller('dashboardCtrl', function($scope, $route, $http, $sails, Page, $log, tags) {
|
||||
poconsole.controller('dashboardCtrl', function($scope, $route, $http, $sails, Page, $log, tags) {
|
||||
Page.setTitle('Dashboard');
|
||||
Page.setPage('dashboard');
|
||||
$scope.loadDashboard = function(){
|
||||
@@ -353,7 +370,7 @@ tsCtrlrs.controller('dashboardCtrl', function($scope, $route, $http, $sails, Pag
|
||||
|
||||
});
|
||||
|
||||
tsCtrlrs.controller('tagsCtrl', function($scope, $route, $http, $routeParams, Page, Alerts, $log, tags) {
|
||||
poconsole.controller('tagsCtrl', function($scope, $route, $http, $routeParams, Page, $log, tags, devices) {
|
||||
Page.setTitle('Tags');
|
||||
Page.setPage('tags');
|
||||
$scope.loadTagList = function(){
|
||||
@@ -366,6 +383,16 @@ tsCtrlrs.controller('tagsCtrl', function($scope, $route, $http, $routeParams, Pa
|
||||
};
|
||||
$scope.loadTagList();
|
||||
|
||||
var getDataTypes = tags.getDataTypes();
|
||||
getDataTypes.then(function(d){
|
||||
$scope.data_types = d.data_types;
|
||||
});
|
||||
|
||||
var getAllDevices = devices.getAllDevices();
|
||||
getAllDevices.then(function(d){
|
||||
$scope.devices = d.devices;
|
||||
});
|
||||
|
||||
$scope.submitAddTag = function(){
|
||||
var createStatus = tags.createTag($scope.newTag);
|
||||
$scope.createStatus = createStatus.status;
|
||||
@@ -412,7 +439,7 @@ tsCtrlrs.controller('tagsCtrl', function($scope, $route, $http, $routeParams, Pa
|
||||
var getTag = tags.getTag(id);
|
||||
getTag.then(function(data){
|
||||
$scope.error = false;
|
||||
$scope.editTag = data.tag;
|
||||
$scope.editTag = data.tag[0];
|
||||
$log.info("Started editing tag with parameters: "+ JSON.stringify($scope.editTag));
|
||||
});
|
||||
};
|
||||
@@ -436,7 +463,7 @@ tsCtrlrs.controller('tagsCtrl', function($scope, $route, $http, $routeParams, Pa
|
||||
|
||||
});
|
||||
|
||||
tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams, Page, Alerts, $log, tags) {
|
||||
poconsole.controller('tagValsCtrl', function($scope, $route, $http, $routeParams, Page, $log, tags) {
|
||||
Page.setTitle('Tag Series');
|
||||
Page.setPage('tags');
|
||||
|
||||
@@ -459,7 +486,6 @@ tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams,
|
||||
var getTag = tags.getTag(tags_to_get);
|
||||
getTag.then(function(tagData){
|
||||
$scope.tag = tagData.tag;
|
||||
Page.setTitle('Tag Series: '+ tagData.tag.tagName);
|
||||
var getTagHistoryBetween = tags.getTagHistoryBetween(tags_to_get, sDTime, eDTime);
|
||||
getTagHistoryBetween.then(function(data) {
|
||||
|
||||
@@ -495,7 +521,7 @@ tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams,
|
||||
all_datetimes.push(data.vals[i].createdAt);
|
||||
}
|
||||
}
|
||||
$scope.data.vals = [{dtime:new Date(all_datetimes[0])}]
|
||||
$scope.data.vals = [{dtime:new Date(all_datetimes[0])}];
|
||||
for (var ta in split_vals){
|
||||
$scope.data.vals[0][ta] = split_vals[ta].vals[0];
|
||||
}
|
||||
@@ -504,7 +530,7 @@ tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams,
|
||||
var newOb = {dtime: new Date(all_datetimes[j])};
|
||||
for(var tag in split_vals){
|
||||
if(split_vals[tag].ob[all_datetimes[j]] === undefined){
|
||||
newOb[tag] = $scope.data.vals[j][tag]
|
||||
newOb[tag] = $scope.data.vals[j][tag];
|
||||
} else {
|
||||
newOb[tag] = split_vals[tag].ob[all_datetimes[j]];
|
||||
}
|
||||
@@ -540,7 +566,7 @@ tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams,
|
||||
key: $scope.tag[i2].name,
|
||||
label: $scope.tag[i2].name,
|
||||
// color: "#1f77b4",
|
||||
color: '#'+Math.floor(Math.random()*16777215).toString(16),
|
||||
color: colors[i2 % colors.length],
|
||||
type: ['line'],
|
||||
drawDots:false
|
||||
});
|
||||
@@ -552,7 +578,7 @@ tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams,
|
||||
$scope.loadTagVals($scope.startDatetime, $scope.endDatetime);
|
||||
});
|
||||
|
||||
tsCtrlrs.controller('configCtrl', function($scope, Page, Alerts, $log, config) {
|
||||
poconsole.controller('configCtrl', function($scope, Page, $log, config, devices) {
|
||||
Page.setTitle('Configuration');
|
||||
Page.setPage('configuration');
|
||||
|
||||
@@ -563,12 +589,7 @@ tsCtrlrs.controller('configCtrl', function($scope, Page, Alerts, $log, config) {
|
||||
var getConfig = config.getConfig();
|
||||
getConfig.then(function(data) {
|
||||
$scope.loading = false;
|
||||
if (data.status == "OK"){
|
||||
$scope.config = data.config;
|
||||
$scope.error = false;
|
||||
} else {
|
||||
$scope.error = data.message;
|
||||
}
|
||||
$scope.config = data.config;
|
||||
});
|
||||
};
|
||||
$scope.loadConfig();
|
||||
@@ -607,7 +628,7 @@ tsCtrlrs.controller('configCtrl', function($scope, Page, Alerts, $log, config) {
|
||||
}
|
||||
});
|
||||
};
|
||||
$scope.checkLogger();
|
||||
// $scope.checkLogger();
|
||||
|
||||
$scope.restartLogger = function(){
|
||||
var restartLogger = config.restartLogger();
|
||||
@@ -620,18 +641,31 @@ tsCtrlrs.controller('configCtrl', function($scope, Page, Alerts, $log, config) {
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$scope.getDevices = function(){
|
||||
var getDevices = devices.getAllDevices();
|
||||
getDevices.then(function(d){
|
||||
$scope.devices = d.devices;
|
||||
});
|
||||
};
|
||||
$scope.getDevices();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
//*---- FILTERS -----*//
|
||||
tsCtrlrs.filter('dString', function myDateFormat($filter){
|
||||
poconsole.filter('dString', function myDateFormat($filter){
|
||||
return function(text){
|
||||
var tempdate= new Date(text);
|
||||
return $filter('date')(tempdate, "yyyyMMdd'_'HHmmss");
|
||||
};
|
||||
});
|
||||
|
||||
tsCtrlrs.filter('sqlite_to_local', function sqliteformat($filter){
|
||||
poconsole.filter('sqlite_to_local', function sqliteformat($filter){
|
||||
return function(text){
|
||||
var utcdate= new Date(text + " UTC");
|
||||
return $filter('date')(utcdate, "yyyy-MM-dd hh:mm:ss a");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var tagserver = angular.module('tagserver', ['ngRoute', 'tsCtrlrs']);
|
||||
var tagserver = angular.module('tagserver', ['ngRoute', 'poconsole']);
|
||||
|
||||
tagserver.config([
|
||||
'$routeProvider', function($routeProvider) {
|
||||
|
||||
@@ -31,25 +31,51 @@
|
||||
<button class="btn btn-primary btn-large" ng-click="checkLogger()">Check Logger</button> <button class="btn btn-warning btn-large" ng-click="restartLogger()">Restart Logger</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<h1>Configuration Parameters</h1>
|
||||
<button ng-click="loadConfig()" class="btn btn-large btn-success"><i class="fa fa-refresh"></i> Reload Config</button>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr ng-repeat="param in config">
|
||||
<td>{{param.parameter}}</td>
|
||||
<td>{{param.val}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<h1>Devices</h1>
|
||||
<button ng-click="getDevices()" class="btn btn-large btn-success"><i class="fa fa-refresh"></i> Reload Devices</button>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Address</th>
|
||||
<th>Type</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr ng-repeat="device in devices">
|
||||
<td>{{device.id}}</td>
|
||||
<td>{{device.address}}</td>
|
||||
<td>{{device.device_type.dType}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<h1>Configuration Parameters</h1>
|
||||
<button ng-click="loadConfig()" class="btn btn-large btn-success"><i class="fa fa-refresh"></i> Reload Config</button>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr ng-repeat="param in config">
|
||||
<td>{{param.parameter}}</td>
|
||||
<td>{{param.val}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row well">
|
||||
<h2>New Parameter</h2>
|
||||
<form>
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
<div class="modal-body">
|
||||
<div class="well" ng-if="message"><h3 class="text-danger">{{message}}</h3></div>
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="data_source">Data Source</label>
|
||||
<select ng-model="newTag.deviceID" ng-options="d as d.address for d in devices track by d.id" class="form-control" id="data_source"></select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="tag">Tag</label>
|
||||
<input type="text" ng-model="newTag.tag" class="form-control" id="tag" placeholder="Tag Name Here">
|
||||
@@ -22,11 +26,7 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="data_type">Data Type</label>
|
||||
<select ng-model="newTag.data_type" class="form-control" id="data_type">
|
||||
<option value="REAL">Floating Point</option>
|
||||
<option value="DINT">Integer</option>
|
||||
<option value="BOOL">Boolean</option>
|
||||
</select>
|
||||
<select ng-model="newTag.data_type" ng-options="t as t.data_type for t in data_types track by t.id" class="form-control" id="data_type"></select>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<div class="form-group">
|
||||
@@ -79,6 +79,10 @@
|
||||
<div class="modal-body">
|
||||
<div class="well" ng-if="message"><h3 class="text-danger">{{message}}</h3></div>
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="data_source">Data Source</label>
|
||||
<select ng-model="editTag.deviceID" ng-options="d as d.address for d in devices track by d.id" class="form-control" id="data_source"></select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="tag">Tag Name</label>
|
||||
<input type="text" ng-model="editTag.tag" class="form-control" id="tag" placeholder="Tag Name Here">
|
||||
@@ -93,11 +97,7 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="data_type">Data Type</label>
|
||||
<select ng-model="editTag.data_type.id" class="form-control" id="data_type">
|
||||
<option value=1>Floating Point</option>
|
||||
<option value=2>Integer</option>
|
||||
<option value=3>Boolean</option>
|
||||
</select>
|
||||
<select ng-model="editTag.data_type" ng-options="t as t.data_type for t in data_types track by t.id" class="form-control" id="data_type"></select>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<div class="form-group">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html ng-app="tagserver" ng-controller="mainCtrl">
|
||||
<head>
|
||||
<title><%=typeof title == 'undefined' ? 'New Sails App' : title%></title>
|
||||
<title>TagServer: {{ Page.title() }}</title>
|
||||
|
||||
<!-- Viewport mobile tag for sensible mobile support -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
|
||||
Reference in New Issue
Block a user