Browse Source

move 6709mts params and settings to 6710

Avetisyan Karen 2 years ago
parent
commit
acff706f2c

BIN
web_interface/dist/wui-10/index.html


BIN
web_interface/dist/wui-10/main.js


BIN
web_interface/dist/wui-10/role.js


BIN
web_interface/dist/wui-10/settings.html


BIN
web_interface/dist/wui-10/snmp.html


+ 5 - 0
web_interface/src/wui-10/getJson.cgi

@@ -18,6 +18,8 @@ bitmask = A0 + A1 + A2 + A3 + A4 + A5 + A6 + A7
 JSON = {
   "AC": 218.8,
   "DC": 230.4,
+  "in_cur": 48.0,
+  "out_cur": 42.5,
   "in_freq": 50.0,
   "out_freq": 50.0,
   "pwr": 40.0,
@@ -26,6 +28,9 @@ JSON = {
   "bat_rem_cap": 92.0,
   "inner_temp": 27.0,
   "bat_time_left": 230.0,
+  "bat_volt": 210,
+  "bat_cap": 1200,
+  "bat_exp": "12.12.2021",
   "case_temp": 36.0,
   "di1": "1",
   "di_name1": "Name1",

+ 20 - 0
web_interface/src/wui-10/index.html

@@ -33,6 +33,14 @@
           <td>Выходное напряжение (VAC)</td>
           <td ><span id="DC"></span></td>
         </tr>
+        <tr>
+          <td>Входная сила тока (А)</td>
+          <td ><span id="in_cur"></span></td>
+        </tr>
+        <tr>
+          <td>Выходная сила тока (А)</td>
+          <td ><span id="out_cur"></span></td>
+        </tr>
         <tr>
           <td>Входная частота</td>
           <td ><span id="in_freq"></span></td>
@@ -60,6 +68,14 @@
       <div class="panel-heading" id="sBattery">Аккумуляторные батареи<div id="bstate_icons" style="float: right;"></div></div>
       <div class="panel-body">
         <table class="table tb-stat">
+          <tr>
+            <td>Емкость батареи</td>
+            <td ><span id="bat_cap"></span></td>
+          </tr>
+          <tr>
+            <td>Напряжение батареи</td>
+            <td ><span id="bat_volt"></span></td>
+          </tr>
           <tr>
             <td>Оставшаяся емкость батареи</td>
             <td ><span id="bat_rem_cap"></span></td>
@@ -72,6 +88,10 @@
             <td>Оставшееся время работы</td>
             <td ><span id="bat_time_left"></span></td>
           </tr>
+          <tr>
+            <td>Дата следующей замены</td>
+            <td ><span id="bat_exp"></span></td>
+          </tr>
         </table>
       </div>
     </div>

+ 93 - 2
web_interface/src/wui-10/main.js

@@ -27,12 +27,15 @@ function fadeIns(el){
 
 var ac          = $('AC'),
   dc            = $('DC'),
+  in_cur       = $('in_cur'),
+  out_cur      = $('out_cur'),
   in_freq       = $('in_freq'),
   out_freq      = $('out_freq'),
   pwr           = $('pwr'),
-  bat_rem_cap       = $('bat_rem_cap'),
+  bat_cap       = $('bat_cap'),
   inner_temp    = $('inner_temp'),
   battimeleft   = $('bat_time_left'),
+  bat_rem_cap   = $('bat_rem_cap'),
   // alarm         = $('alarm'),
   sPower        = $('sPower'),
   sBattery      = $('sBattery');
@@ -42,9 +45,12 @@ function dataFadeIn(){
   var x = [
     ac,
     dc,
+    in_cur,
+    out_cur,
     in_freq,
     out_freq,
     pwr,
+    bat_cap,
     bat_rem_cap,
     inner_temp,
     battimeleft,
@@ -105,6 +111,8 @@ function formValidation(){
   ipaddr          = $('ipaddr');
   gw              = $('gw');
   mask            = $('mask');
+  tn_port         = $('tn_port');
+  ssh_port        = $('ssh_port');
   ups_cell_min    = +$('ups_cell_min').children[0].value;
   ups_cell_max    = +$('ups_cell_max').children[0].value;
   di_name1        = $('di_name1');
@@ -117,6 +125,20 @@ function formValidation(){
     if(!ValidateIPaddress(gw,     ' IP-адрес шлюза')) flag = false;
     if(!ValidateIPaddress(mask,   'а Маска подсети')) flag = false;
   }
+  if ($('tn_enabled').checked) {
+    if(!ValidateNumber(tn_port, ' Порт Telnet')) flag = false;
+  }
+  if ($('ssh_enabled').checked) {
+    if(!ValidateNumber(ssh_port, ' Порт SSH')) flag = false;
+  }
+  if ($('ssh_enabled').checked && $('tn_enabled').checked) {
+    if (ssh_port.value == tn_port.value) {
+      var warn = document.createElement('li');
+      warn.innerHTML = 'Одинаковые поты Telnet и SSH!';
+      $('validation-box').appendChild(warn);
+      flag = false;
+    }
+  }
   if(ups_cell_min > ups_cell_max) {
     var warn = document.createElement('li');
     warn.innerHTML = 'Минимальное напряжение на ячейке не может быть больше максимального!';
@@ -335,6 +357,21 @@ function dhcpState() {
   }
 }
 
+function telnetState() {
+  if (!$('tn_enabled').checked) {
+    $('tn_port').setAttribute('disabled', 'disabled');
+  } else {
+    $('tn_port').removeAttribute('disabled');
+  }
+}
+
+function sshState() {
+  if (!$('ssh_enabled').checked) {
+    $('ssh_port').setAttribute('disabled', 'disabled');
+  } else {
+    $('ssh_port').removeAttribute('disabled');
+  }
+}
 
 //########## Info Form Validation ############
 
@@ -406,6 +443,9 @@ function updatepage(){
   case 'settings':
     setTimeout(settingsGET, 1000);
     break;
+  case 'snmp':
+    createSNMP('snmp_list');
+    break;
   case 'history':
     getPage($('currentpage').value);
     break;
@@ -469,7 +509,8 @@ function paramsRefresh() {
       ups_standby  = Alarm(alrm, 3),
       ups_shutdown = Alarm(alrm, 1),
       bat_low      = Alarm(alrm, 6),
-      bat_test     = Alarm(alrm, 2);
+      bat_test     = Alarm(alrm, 2),
+      bat_exp      = Alarm(ma, 6);
     // PPS
     $('AC').innerHTML         = parseFloat(data.AC) + ' В';
     $('AC').style.color       = Alarm(alrm, 7) ? ALARM_RED : ALARM_GREEN;
@@ -477,6 +518,12 @@ function paramsRefresh() {
     $('DC').innerHTML         = parseFloat(data.DC) + ' В';
     $('DC').style.color       = Alarm(ma, 7) ? ALARM_RED : ALARM_GREEN;
 
+    $('in_cur').innerHTML    = parseFloat(data.in_cur) + ' А';
+    $('in_cur').style.color  = Alarm(alrm, 7) ? ALARM_RED : ALARM_GREEN;
+
+    $('out_cur').innerHTML   = parseFloat(data.out_cur) + ' А';
+    $('out_cur').style.color = Alarm(ma, 7) ? ALARM_RED : ALARM_GREEN;
+
     $('in_freq').innerHTML    = parseFloat(data.in_freq) + ' Гц';
     $('in_freq').style.color  = Alarm(alrm, 7) ? ALARM_RED : ALARM_GREEN;
 
@@ -502,6 +549,14 @@ function paramsRefresh() {
     setIcons('bstate_icons', bstate);
 
     // ACB
+    $('bat_cap').innerHTML      = parseFloat(data.bat_cap) + ' А·ч';
+
+    $('bat_volt').innerHTML      = parseFloat(data.bat_volt) + ' В';
+    $('bat_volt').style.color    = bat_low ? ALARM_RED : ALARM_GREEN;
+
+    $('bat_exp').innerHTML      = data.bat_exp;
+    $('bat_exp').style.color    = bat_exp ? ALARM_RED : ALARM_GREEN;
+
     $('bat_rem_cap').innerHTML      = parseFloat(data.bat_rem_cap) + ' %';
     $('bat_rem_cap').style.color    = bat_low ? ALARM_RED : ALARM_GREEN;
 
@@ -884,6 +939,21 @@ function settingsGET(){
     $('temp_low').value = data.temp_low;
     $('case_temp_high').value = data.case_temp_high;
     $('case_temp_low').value = data.case_temp_low;
+
+    $('tn_enabled').checked   = data.tn_enabled;
+    $('tn_port').value        = data.tn_port;
+    $('ssh_enabled').checked  = data.ssh_enabled;
+    $('ssh_port').value       = data.ssh_port;
+    sshState();
+    telnetState();
+    $('bat_prod').value       = data.bat_prod;
+    ups_max_power = new SpinBox('ups_max_power', {
+      'value': data.ups_max_power,
+      'name':'ups_max_power',
+      'minimum':400,
+      'maximum':10000,
+      'step':50
+    });
     ups_cell_min = new SpinBox('ups_cell_min', {
       'value': data.ups_cell_min,
       'name':'ups_cell_min',
@@ -900,6 +970,27 @@ function settingsGET(){
       'decimals':2,
       'step':0.01
     });
+    bat_exp = new SpinBox('bat_exp', {
+      'value': data.bat_exp,
+      'name':'bat_exp',
+      'minimum':1,
+      'maximum':10,
+      'step':1
+    });
+    bat_cap = new SpinBox('bat_cap', {
+      'value': data.bat_cap,
+      'name':'bat_cap',
+      'minimum':1,
+      'maximum':200,
+      'step':1
+    });
+    bat_charge = new SpinBox('bat_charge', {
+      'value': data.bat_charge,
+      'name':'bat_charge',
+      'minimum':12,
+      'maximum':240,
+      'step':12
+    });
     temp_hist = new SpinBox('temp_hist', {
       'name':'temp_hist','minimum':0.5,'maximum':2.0,'step':0.1,'decimals':1, 'value': data.temp_hist
     });

+ 152 - 1
web_interface/src/wui-10/role.js

@@ -36,7 +36,7 @@ function createMainNavigation() {
   var nav = [
     {name: 'Параметры', link: 'index.html', child:['/index.html', '/'], access: 2},
     {name: 'Настройки', link: 'settings.html', child: '/settings.html', access: 1},
-    // {name: 'Уведомления', link: 'snmp.html', access: 1},
+    {name: 'Уведомления', link: 'snmp.html', child: '/snmp.html', access: 1},
     {name: 'Информация', link: 'info.html', child: '/info.html', access: 2},
     {name: 'Журнал', link: 'history.html', child: ['/history.html', '/ups_history.html'], access: 2}
   ];
@@ -257,6 +257,157 @@ function getParam(e,x) {
   }
 }
 
+var snmpArray = [];
+function snmpPush(e){
+  var index = snmpArray.indexOf(e);
+  if (index !== -1) {
+    snmpArray.splice(index, 1);
+  } else {
+    snmpArray.push(e);
+  }
+  if (snmpArray.length > 0){
+    $('sa').style.height = 'auto';
+    $('sa').style.opacity = 1;
+    $('sa_length').textContent = snmpArray.length;
+  } else {
+    $('sa').style.height = 0;
+    $('sa').style.opacity = 0;
+  }
+  checkAllStates();
+}
+
+function rowsToSubmit(array){
+  var rows = [];
+  for (var i = 0; i < array.length; i++) {
+    var parent = $(array[i]).parentNode.parentNode;
+    array[i];
+    var index = rows.indexOf(parent.id);
+    if (index !== -1) {
+      rows[index] = parent.id;
+    } else {
+      rows.push(parent.id);
+    }
+  }
+  return rows;
+}
+
+function createSNMP(id){
+  getJSON('snmp.cgi', function(data) {
+    $(id).innerHTML = '';
+    for (var i = 0; i < data.params.length; i++) {
+      var param = data.params[i];
+      var param_row = document.createElement('tr');
+      param_row.id = param.name;
+      var param_name = document.createElement('td');
+      param_name.textContent = param.label;
+      param_row.appendChild(param_name);
+      for (var x = 0; x < 1; x++) {
+        var cb_td = document.createElement('td');
+        var cb_input = document.createElement('input');
+        cb_input.type = 'checkbox';
+        cb_input.checked = getParam(param,x);
+        cb_input.id = 'cb'+x+param.name;
+        cb_input.className = 'checkbox';
+        cb_input.setAttribute('onchange', 'snmpPush(this.id)');
+        cb_td.appendChild(cb_input);
+        param_row.appendChild(cb_td);
+      }
+      var param_snmp = document.createElement('td');
+      $(id).appendChild(param_row);
+    }
+    utcParam = data.utc;
+    // clockinit(data.utm);
+    checkAllStates();
+    setCookie('netsettings_changed', data.netsettings_changed);
+    setCookie('profilaction_changed', data.profilaction_changed);
+    setCookie('need_confirm', data.need_confirm);
+    checkNotify();
+  }, function(error){});
+}
+
+function snmpSaSubmit(){
+  var url = 'snmp.cgi?';
+  var string = '';
+  for (var i = 0; i < rowsToSubmit(snmpArray).length; i++) {
+    if(i == rowsToSubmit(snmpArray).length-1) {
+      string+= $(rowsToSubmit(snmpArray)[i]).id + '=' + arrayToBitMask(rowsToSubmit(snmpArray)[i]);
+    } else {
+      string+= $(rowsToSubmit(snmpArray)[i]).id + '=' + arrayToBitMask(rowsToSubmit(snmpArray)[i]) + '&';
+    }
+  }
+  if (string){
+    loadXMLDoc( url + string, 'GET', updatepage);
+  } else {
+    updatepage();
+  }
+  $('sa').style.height = 0;
+  $('sa').style.opacity = 0;
+  snmpArray = [];
+  return false;
+}
+
+function snmpChangeCancel(){
+  updatepage();
+  $('sa').style.height = 0;
+  $('sa').style.opacity = 0;
+  snmpArray = [];
+}
+
+function checkAll(e,id){
+  var rows = $('snmp_list').getElementsByTagName('tr');
+  if ($(id).checked && !$(id).indeterminate){
+    for (var i = 0; i < rows.length; i++) {
+      var input = rows[i].children[e].getElementsByTagName('input')[0];
+      if (!input.checked) {
+        input.checked = true;
+        snmpPush(input.id);
+      }
+    }
+  } else if (!$(id).checked && !$(id).indeterminate) {
+    for (var i = 0; i < rows.length; i++) {
+      var input = rows[i].children[e].getElementsByTagName('input')[0];
+      input.checked = false;
+      snmpPush(input.id);
+    }
+  } else if ($(id).checked) {
+    for (var i = 0; i < rows.length; i++) {
+      var input = rows[i].children[e].getElementsByTagName('input')[0];
+      input.checked = true;
+      snmpPush(input.id);
+    }
+  }
+}
+
+function checkAllStates(){
+  allCheckboxStates(1,'cb_snmp');
+  // allCheckboxStates(2,'cb_sms');
+  // allCheckboxStates(3,'cb_email');
+}
+
+function allCheckboxStates(e,id){
+  var rows = $('snmp_list').getElementsByTagName('tr');
+  var c = [];
+  var nc = [];
+  for (var i = 0; i < rows.length; i++) {
+    var input = rows[i].children[e].getElementsByTagName('input')[0];
+    if (input.checked){
+      c.push(input.id);
+    } else {
+      nc.push(input.id);
+    }
+  }
+  if (c.length && nc.length) {
+    $(id).checked = false;
+    $(id).indeterminate = true;
+  } else if (c.length == rows.length) {
+    $(id).checked = true;
+    $(id).indeterminate = false;
+  } else {
+    $(id).checked = false;
+    $(id).indeterminate = false;
+  }
+}
+
 function decimalToBinary(decimal) {
   return (decimal >>> 0).toString(2);
 }

+ 9 - 0
web_interface/src/wui-10/settings.cgi

@@ -14,6 +14,9 @@ JSON = {
   "batvoltage_min":42,
   "batvoltage_min_hist":0.25,
   "batcap":7,
+  "bat_exp": 5,
+  "bat_cap": 100,
+  "bat_charge": 228,
   "batcharge_volt":2.275,
   "tempcomp":False,
   "temp_high": 45,
@@ -27,7 +30,9 @@ JSON = {
   "mainvolt_hist": 12,
   "tempcomp_k_buf":3,
   "tempcomp_k_cycle":4,
+  "bat_prod":"2016-12-26",
   "batsym":False,
+  "ups_max_power": 550,
   "ups_cell_min":1.5,
   "ups_cell_max":2.5,
   "di_name1":"Name1",
@@ -40,6 +45,10 @@ JSON = {
   "gw":"192.168.10.1",
   "mask":"255.255.255.0",
   "dhcp":1,
+  "tn_enabled": 1,
+  "tn_port": 23,
+  "ssh_enabled": 0,
+  "ssh_port": 22,
   "pgw_en":True,
   "pgw_port":"1233",
   "pgw_baud":"9600",

+ 51 - 0
web_interface/src/wui-10/settings.html

@@ -173,6 +173,28 @@
   <div class="panel-heading">Аккумуляторные батареи</div>
   <div class="panel-body section group">
     <div class="col span_1_of_2">
+      <label for="bat_prod" class="col span_1_of_2">Дата установки</label>
+      <div class="col span_1_of_2">
+        <input type="date" class="form-control" id="bat_prod" name="bat_prod">
+      </div>
+      <label for="bat_exp" class="col span_1_of_2">Срок службы (лет)</label>
+      <div class="col span_1_of_2">
+        <span id="bat_exp"></span>
+      </div>
+      <label for="bat_cap" class="col span_1_of_2">Емкость (А·ч)</label>
+      <div class="col span_1_of_2">
+        <span id="bat_cap"></span>
+      </div>
+      <label for="bat_charge" class="col span_1_of_2">Номинальное напряжение (В)</label>
+      <div class="col span_1_of_2">
+        <span id="bat_charge"></span>
+      </div>
+    </div>
+    <div class="col span_1_of_2">
+      <label for="ups_max_power" class="col span_1_of_2">Полная мощность ИБП (ВА)</label>
+      <div class="col span_1_of_2">
+        <span id="ups_max_power"></span>
+      </div>
       <label for="ups_cell_min" class="col span_1_of_2">Мин. напряжение ячейки (В)</label>
       <div class="col span_1_of_2">
         <span id="ups_cell_min"></span>
@@ -207,6 +229,31 @@
         <input type="text" class="form-control" id="mask" name="mask">
       </div>
     </div>
+    <div class="col span_1_of_2">
+      <h4 class="col span_2_of_2">Telnet</h4>
+      <div class="checkbox col span_2_of_2">
+        <label>
+          <input type="checkbox" name="tn_enabled" id="tn_enabled" onchange="telnetState();">&nbsp;Включить
+        </label>
+      </div>
+      <label for="tn_port" class="col span_1_of_2">Порт Telnet</label>
+      <div class="col span_1_of_2">
+        <input type="text" class="form-control" id="tn_port" name="tn_port">
+      </div>
+    </div>
+    <div class="col span_1_of_2">
+      <h4 class="col span_2_of_2">SSH</h4>
+      <div class="checkbox col span_2_of_2">
+        <span style="color:#f0ad4e">При смене данных параметров контроллер будет перезагружен.</span><br />
+        <label>
+          <input type="checkbox" name="ssh_enabled" id="ssh_enabled" onchange="sshState();">&nbsp;Включить
+        </label>
+      </div>
+      <label for="ssh_port" class="col span_1_of_2">Порт SSH</label>
+      <div class="col span_1_of_2">
+        <input type="text" class="form-control" id="ssh_port" name="ssh_port">
+      </div>
+    </div>
   </div>
 </div>
 <div id="transport" class="tabpane">
@@ -473,8 +520,12 @@ DYN_WEB.Tabs.setup({
   useCookies: true // optional
 });
 var ntpservipValue;
+var ups_max_power = new SpinBox('ups_max_power', {'name':'ups_max_power','minimum':400,'maximum':10000,'step':50});
 var ups_cell_min   = new SpinBox('ups_cell_min', {'name':'ups_cell_min','minimum':0,'maximum':3,'step':0.01});
 var ups_cell_max   = new SpinBox('ups_cell_max', {'name':'ups_cell_max','minimum':0,'maximum':3,'step':0.01});
+var bat_exp       = new SpinBox('bat_exp', {'name':'bat_exp','minimum':1,'maximum':10,'step':1});
+var bat_cap       = new SpinBox('bat_cap', {'name':'bat_cap','minimum':1,'maximum':200,'step':1});
+var bat_charge    = new SpinBox('bat_charge', {'name':'bat_charge','minimum':12,'maximum':240,'step':12});
 var temp_hist      = new SpinBox('temp_hist', {'name':'temp_hist','minimum':0.5,'maximum':2.0,'step':0.1,'decimals':1, 'value': 0.5});
 var case_temp_hist = new SpinBox('case_temp_hist', {'name':'case_temp_hist','minimum':0.5,'maximum':2.0,'step':0.1,'decimals':1, 'value': 0.5});
 var mainvolt_hist  = new SpinBox('mainvolt_hist', {'name':'mainvolt_hist','minimum':10,'maximum':30,'step':1});

+ 135 - 0
web_interface/src/wui-10/snmp.cgi

@@ -0,0 +1,135 @@
+#!C:\Python34\python.exe
+# -*- coding: utf-8 -*-
+import json
+import time
+print("Content-Type: text/html")
+print("")
+JSON = ({
+  "params": [
+    {
+      "name":"0",
+      "label":"Нормализация напряжения на АКБ",
+      "snmp":"true",
+      "sms":"true",
+      "email":"false"
+    },
+    {
+      "name":"1",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"false",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"2",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"3",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"4",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"5",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"6",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"7",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"8",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"9",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"10",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"11",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"12",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"13",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"14",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"15",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"16",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    }
+  ],
+  "utc": "3.0",
+  "utm": time.time(),
+  "netsettings_changed": "false",
+  "profilaction_changed":"false",
+  "need_confirm":"false",
+})
+print(json.dumps(JSON))

+ 53 - 0
web_interface/src/wui-10/snmp.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="">
+<head>
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+<title>Уведомления</title>
+<link href="main.css" rel="stylesheet">
+<script type="text/javascript" src="role.js"></script>
+</head>
+<body>
+  <div class="navbar navbar-default navbar-fixed-top">
+    <div class="navbar-header">
+      <div><a href="index.html" class="logo"></a></div>
+    </div>
+    <a href="#" id="menu-icon"></a>
+    <ul class="nav navbar-nav" id="nav">
+      <script>createMainNavigation();</script>
+    </ul>
+  </div>
+<div class="wrapper" id="content">
+<!--START-->
+<h1>Уведомления</h1>
+<table class="table wrapper-default">
+  <thead>
+    <tr>
+      <th class="ph">Описание</th>
+      <th class="ph"><input type="checkbox" id="cb_snmp" onclick="checkAll(1, this.id)">&nbsp;SNMP</th>
+      <!-- <th class="ph"><input type="checkbox" id="cb_sms" onclick="checkAll(2, this.id)">&nbsp;SMS</th> -->
+      <!-- <th class="ph"><input type="checkbox" id="cb_email" onclick="checkAll(3, this.id)">&nbsp;E-Mail</th> -->
+    </tr>
+  </thead>
+  <tbody id="snmp_list"></tbody>
+  <script>createSNMP('snmp_list');</script>
+</table>
+<!--END-->
+</div>
+<div class="float-reminder" id="sa">
+  <div class="wrapper">
+    <p style="display:inline-block;">Параметров: <span id="sa_length">0</span></p>
+    <div style="float: right; margin:8px 0;" class="btn-group">
+    <button class="btn btn-primary-inverted" onclick="snmpSaSubmit();">Сохранить</button>
+    <button class="btn btn-danger-inverted" onclick="snmpChangeCancel();">Отмена</button>
+
+    </div>
+  </div>
+</div>
+</body>
+<script type="text/javascript" src="main.js"></script>
+<script type="text/javascript">
+// snmpGET();
+</script>
+</html>