Sfoglia il codice sorgente

add 6710 params and settings

Avetisyan Karen 5 anni fa
parent
commit
ca198d590d

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


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


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


+ 4 - 3
web_interface/src/wui-10/getJson.cgi

@@ -26,10 +26,11 @@ JSON = {
   "bat_rem_cap": 92.0,
   "inner_temp": 27.0,
   "bat_time_left": 230.0,
+  "case_temp": 36.0,
   "di1": "1",
-  "ro1": "0",
-  "ro2": "1",
-  "ro3": "1",
+  "di_name1": "Name1",
+  "di2": "0",
+  "di_name2": "Name2",
   "batsym": "Норма",
   "mode": "Профилактика сульфатации",
   "u_alarm": "5",

+ 7 - 11
web_interface/src/wui-10/index.html

@@ -76,24 +76,20 @@
       </div>
     </div>
     <div class="panel panel-default">
-      <div class="panel-heading" id="">Сухие контакты<div id="dstate_icons" style="float: right;"></div></div>
+      <div class="panel-heading" id="">Состояние датчиков Контроллера<div id="dstate_icons" style="float: right;"></div></div>
       <div class="panel-body">
         <table class="table tb-stat">
           <tr>
-            <td>Дискретный вход</td>
-            <td ><span id="di1"></span></td>
+            <td>Температура в шкафу</td>
+            <td ><span id="case_temp"></span></td>
           </tr>
           <tr>
-            <td>Релейный выход 1</td>
-            <td ><span id="ro1"></span></td>
+            <td><span id="di_name1"></span></td>
+            <td><span id="di1"></span></td>
           </tr>
           <tr>
-            <td>Релейный выход 2</td>
-            <td ><span id="ro2"></span></td>
-          </tr>
-          <tr>
-            <td>Релейный выход 3</td>
-            <td ><span id="ro3"></span></td>
+            <td><span id="di_name2"></span></td>
+            <td><span id="di2"></span></td>
           </tr>
         </table>
       </div>

+ 87 - 42
web_interface/src/wui-10/main.js

@@ -93,21 +93,22 @@ function fadeIn(el, display){
 function formValidation(){
   var read_community,write_community,managerIP,managerIP2,managerIP3,managerIP4,managerIP5,
     ups_cell_min, ups_cell_max,
-    ipaddr, gw, mask, tn_port/*, ntpservip*/;
-
-  read_community  = $('read_community'),
-  write_community = $('write_community'),
-  managerIP       = $('managerIP'),
-  managerIP2      = $('managerIP2'),
-  managerIP3      = $('managerIP3'),
-  managerIP4      = $('managerIP4'),
-  managerIP5      = $('managerIP5'),
-  ipaddr          = $('ipaddr'),
-  gw              = $('gw'),
-  mask            = $('mask'),
-  tn_port         = $('tn_port');
+    ipaddr, gw, mask, di_name1, di_name2/*, ntpservip*/;
+
+  read_community  = $('read_community');
+  write_community = $('write_community');
+  managerIP       = $('managerIP');
+  managerIP2      = $('managerIP2');
+  managerIP3      = $('managerIP3');
+  managerIP4      = $('managerIP4');
+  managerIP5      = $('managerIP5');
+  ipaddr          = $('ipaddr');
+  gw              = $('gw');
+  mask            = $('mask');
   ups_cell_min    = +$('ups_cell_min').children[0].value;
   ups_cell_max    = +$('ups_cell_max').children[0].value;
+  di_name1        = $('di_name1');
+  di_name2        = $('di_name2');
   // ntpservip          = $('ntpservip');
 
   var flag = true;
@@ -116,9 +117,6 @@ 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(ups_cell_min > ups_cell_max) {
     var warn = document.createElement('li');
     warn.innerHTML = 'Минимальное напряжение на ячейке не может быть больше максимального!';
@@ -132,6 +130,8 @@ function formValidation(){
   if(!ValidateIPaddress(managerIP3, ' Сервер SNMP 3')) flag = false;
   if(!ValidateIPaddress(managerIP4, ' Сервер SNMP 4')) flag = false;
   if(!ValidateIPaddress(managerIP5, ' Сервер SNMP 5')) flag = false;
+  if(!ValidateAlphanumericMax(di_name1, ' "Название дискретного входа 1"')) flag = false;
+  if(!ValidateAlphanumericMax(di_name2, ' "Название дискретного входа 2"')) flag = false;
 
   if ($('ntp-inp') && !$('ntp-inp').disabled) {
     if(!ValidateIPaddress($('ntp-inp'), ' IP адрес NTP сервера')) flag = false;
@@ -176,6 +176,14 @@ function ValidateAlphanumericPlus(uadd, z) {
   $('validation-box').appendChild(warn);
   return false;
 }
+function ValidateAlphanumericMax(uadd, z) {
+  var warn = document.createElement('li');
+  var letter = /^[0-9a-zA-Z.,/-_*#()[\]+=;:'"@!^%&?|${}`~<>]+$/;
+  warn.innerHTML = 'Поле ' + z + ' может содержать только латинские буквы, цифры и символы .,/-_*#()[]+=;:\'"@!^%&?|${}`~<>';
+  if (letter.test(uadd.value)) {return true;}
+  $('validation-box').appendChild(warn);
+  return false;
+}
 
 function validateUpload(oForm) {
   var file = oForm.elements.datafile.files[0];
@@ -327,13 +335,6 @@ function dhcpState() {
   }
 }
 
-function telnetState() {
-  if (!$('tn_enabled').checked) {
-    $('tn_port').setAttribute('disabled', 'disabled');
-  } else {
-    $('tn_port').removeAttribute('disabled');
-  }
-}
 
 //########## Info Form Validation ############
 
@@ -510,18 +511,17 @@ function paramsRefresh() {
     $('bat_time_left').innerHTML = parseFloat(data.bat_time_left) + ' мин';
     $('bat_time_left').style.color    = bat_low ? ALARM_RED : ALARM_GREEN;
 
+    $('case_temp').innerHTML   = parseFloat(data.case_temp) + ' °C';
+
     // Inputs
+    $('di_name1').innerHTML = data.di_name1;
     $('di1').innerHTML   = +data.di1 ? 'Разомкнут' : 'Замкнут';
     $('di1').style.color = Alarm(ma, 4) ? ALARM_RED : ALARM_GREEN;
 
-    $('ro1').innerHTML   = +data.ro1 ? 'Замкнут' : 'Разомкнут';
-    $('ro1').style.color = +data.ro1 ? ALARM_GREEN : ALARM_RED;
+    $('di_name2').innerHTML = data.di_name2;
+    $('di2').innerHTML   = +data.di2 ? 'Разомкнут' : 'Замкнут';
+    $('di2').style.color = Alarm(ma, 6) ? ALARM_RED : ALARM_GREEN;
 
-    $('ro2').innerHTML   = +data.ro2 ? 'Замкнут' : 'Разомкнут';
-    $('ro2').style.color = +data.ro2 ? ALARM_GREEN : ALARM_RED;
-
-    $('ro3').innerHTML   = +data.ro3 ? 'Замкнут' : 'Разомкнут';
-    $('ro3').style.color = +data.ro3 ? ALARM_GREEN : ALARM_RED;
     // checkState();
     window.setCookie('netsettings_changed', data.netsettings_changed);
     window.setCookie('device-error', Alarm(ma, 2));
@@ -808,6 +808,30 @@ function fillTempRange(id, min, max) {
     obj.appendChild(opt);
   }
 }
+function pgwState() {
+  if (!$('pgw_en').checked) {
+    $('pgw_port').setAttribute('disabled', 'disabled');
+    $('pgw_baud').setAttribute('disabled', 'disabled');
+    $('pgw_par').setAttribute('disabled', 'disabled');
+    $('pgw_ndata').setAttribute('disabled', 'disabled');
+    $('pgw_nstop').setAttribute('disabled', 'disabled');
+  } else {
+    $('pgw_port').removeAttribute('disabled');
+    $('pgw_baud').removeAttribute('disabled');
+    $('pgw_par').removeAttribute('disabled');
+    $('pgw_ndata').removeAttribute('disabled');
+    $('pgw_nstop').removeAttribute('disabled');
+  }
+}
+function changeNData(e) {
+  var num = e.id.split('_')[0];
+  if (e.value == 'no') {
+    $(num+'_ndata').value = '8';
+    $(num+'_ndata').children[0].disabled = true;
+  } else {
+    $(num+'_ndata').children[0].disabled = false;
+  }
+}
 function settingsGET(){
   getJSON('settings.cgi', function(data) {
     //SNMP params
@@ -818,10 +842,13 @@ function settingsGET(){
     $('managerIP3').value = data.managerIP3;
     $('managerIP4').value = data.managerIP4;
     $('managerIP5').value = data.managerIP5;
+    $('di_name1').value = data.di_name1;
     $('di1').value = +data.di1;
-    $('ro1').value = +data.ro1;
-    $('ro2').value = +data.ro2;
-    $('ro3').value = +data.ro3;
+    $('di_name2').value = data.di_name2;
+    $('di2').value = +data.di2;
+    $('type_ts1').value = +data.type_ts1;
+    $('type_ts2').value = +data.type_ts2;
+
     // Network params
     $('ipaddr').value   = data.ipaddr;
     $('gw').value       = data.gw;
@@ -830,11 +857,14 @@ function settingsGET(){
     // Alarms
     fillTempRange('temp_high', 40, 80);
     fillTempRange('temp_low', -40, 0);
-    fillTempRange('loadvolt_high', 60, 120);
+    fillTempRange('case_temp_high', 40, 80);
+    fillTempRange('case_temp_low', -40, 0);
     fillTempRange('mainvolt_low', 110, 200);
     fillTempRange('mainvolt_high', 220, 250);
     $('temp_high').value = data.temp_high;
     $('temp_low').value = data.temp_low;
+    $('case_temp_high').value = data.case_temp_high;
+    $('case_temp_low').value = data.case_temp_low;
     ups_cell_min = new SpinBox('ups_cell_min', {
       'value': data.ups_cell_min,
       'name':'ups_cell_min',
@@ -851,21 +881,36 @@ function settingsGET(){
       'decimals':2,
       'step':0.01
     });
-    temp_hist     = new SpinBox('temp_hist', {
+    temp_hist = new SpinBox('temp_hist', {
       'name':'temp_hist','minimum':0.5,'maximum':2.0,'step':0.1,'decimals':1, 'value': data.temp_hist
     });
-    $('loadvolt_high').value = data.loadvolt_high;
-    loadvolt_hist = new SpinBox('loadvolt_hist', {
-      'name':'loadvolt_hist','minimum':0.5,'maximum':2.0,'step':0.1,'decimals':1, 'value': data.loadvolt_hist
+    case_temp_hist = new SpinBox('case_temp_hist', {
+      'name':'case_temp_hist','minimum':0.5,'maximum':2.0,'step':0.1,'decimals':1, 'value': data.case_temp_hist
     });
     $('mainvolt_low').value = data.mainvolt_low;
     $('mainvolt_high').value = data.mainvolt_high;
     mainvolt_hist = new SpinBox('mainvolt_hist', {
       'name':'mainvolt_hist','minimum':10,'maximum':30,'step':1, 'value': data.mainvolt_hist
     });
-    //
-    $('tn_enabled').checked   = data.tn_enabled;
-    $('tn_port').value        = data.tn_port;
+
+    // PGW params
+    $('pgw_en').checked = data.pgw_en;
+    // $('pgw_port').value = data.pgw_port;
+    pgw_port = new SpinBox('pgw_port',
+      {
+        'value': data.pgw_port,
+        'name':'pgw_port',
+        'minimum':1,
+        'maximum':65535,
+        'step':1
+      }
+    );
+    $('pgw_baud').value = data.pgw_baud;
+    $('pgw_par').value = data.pgw_par;
+    $('pgw_ndata').value = data.pgw_ndata;
+    $('pgw_nstop').value = data.pgw_nstop;
+    changeNData($('pgw_par'));
+
     // DateTime
     if (data.ntpservip != $('ntpservip').options[0].value &&
         data.ntpservip != $('ntpservip').options[1].value &&
@@ -892,7 +937,7 @@ function settingsGET(){
     $('lastsynctime').value = data.lastsynctime;
     $('ntp').value          = data.ntp;
     dhcpState();
-    telnetState();
+    pgwState();
     timesetType($('ntp'));
 
     window.setCookie('netsettings_changed', data.netsettings_changed);

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

@@ -19,25 +19,33 @@ JSON = {
   "temp_high": 45,
   "temp_low": -10,
   "temp_hist": 0.5,
-  "loadvolt_high": 65,
-  "loadvolt_hist": 0.5,
+  "case_temp_high": 45,
+  "case_temp_low": -10,
+  "case_temp_hist": 0.5,
   "mainvolt_low": 112,
-  "mainvolt_high": 120,
+  "mainvolt_high": 228,
   "mainvolt_hist": 12,
   "tempcomp_k_buf":3,
   "tempcomp_k_cycle":4,
   "batsym":False,
+  "ups_cell_min":1.5,
+  "ups_cell_max":2.5,
+  "di_name1":"Name1",
   "di1":1,
-  "di1ns":1,
-  "ro1":1,
-  "ro2":3,
-  "ro3":2,
+  "di_name2":"Name2",
+  "di2":1,
+  "type_ts1": 1,
+  "type_ts2": 2,
   "ipaddr":"192.168.10.254",
   "gw":"192.168.10.1",
   "mask":"255.255.255.0",
   "dhcp":1,
-  "tn_enabled": 1,
-  "tn_port": 23,
+  "pgw_en":True,
+  "pgw_port":"1233",
+  "pgw_baud":"9600",
+  "pgw_par":"no",
+  "pgw_ndata":"7",
+  "pgw_nstop":"1",
   "loadvolt_min":43,
   "loadvolt_min_hist":0.5,
   "pps_min":5.0,

+ 104 - 52
web_interface/src/wui-10/settings.html

@@ -47,9 +47,10 @@
 <div>
   <ul class="tabnavs">
     <li><a href="#snmpt" class="activeTab">SNMP</a></li>
-    <li><a href="#inout">Сухие контакты</a></li>
-    <li><a href="#ups">Аккумуляторы</a></li>
+    <li><a href="#inout">Датчики</a></li>
+    <li><a href="#ups">Аккумуляторы</aДатчики>
     <li><a href="#netw">Сетевые параметры</a></li>
+    <li><a href="#transport">Прозрачный канал</a></li>
     <li><a href="#alarms">Аварии</a></li>
     <li><a href="#service">Сервис</a></li>
     <li><a href="#ntpt">Время</a></li>
@@ -93,7 +94,7 @@
   </div>
 </div>
 <div id="inout" class="tabpane">
-  <div class="panel-heading">Сухие контакты</div>
+  <div class="panel-heading">Датчики</div>
   <div class="panel-body section group">
     <div class="col span_1_of_2">
       <h4 class="col span_2_of_2">Дискретные входы</h4>
@@ -101,12 +102,16 @@
         <thead>
           <tr>
             <th>№</th>
-            <th>Нормальное состояние</th>
+            <th>Название</th>
+            <th>Норм. состояние</th>
           </tr>
         </thead>
         <tbody>
           <tr>
             <td>1</td>
+            <td>
+              <input type="text" name="di_name1" id="di_name1" class="form-control" maxlength="20">
+            </td>
             <td>
               <select name="di1" id="di1" class="form-control">
                 <option value="0">Разомкнут</option>
@@ -114,52 +119,48 @@
               </select>
             </td>
           </tr>
+          <tr>
+            <td>2</td>
+            <td>
+              <input type="text" name="di_name2" id="di_name2" class="form-control" maxlength="20">
+            </td>
+            <td>
+              <select name="di2" id="di2" class="form-control">
+                <option value="0">Разомкнут</option>
+                <option value="1">Замкнут</option>
+              </select>
+            </td>
+          </tr>
         </tbody>
       </table>
     </div>
     <div class="col span_1_of_2">
-      <h4 class="col span_2_of_2">Релейные выходы</h4>
+      <h4 class="col span_2_of_2">Датчики температуры</h4>
       <table class="table">
         <thead>
           <tr>
             <th>№</th>
-            <th>Источник</th>
+            <th>Назначение</th>
           </tr>
         </thead>
         <tbody>
           <tr>
             <td>1</td>
             <td>
-              <select name="ro1" id="ro1" class="form-control">
-                <option value="1">Наличие сети</option>
-                <option value="2">Наличие выходного напряжения</option>
-                <option value="3">Разряд АКБ</option>
-                <option value="4">Отключение АКБ</option>
-                <option value="5">SNMP SET</option>
+              <select name="type_ts1" id="type_ts1" class="form-control">
+                <option value="0">Нет</option>
+                <option value="1">Шкаф</option>
+                <option value="2">АКБ</option>
               </select>
             </td>
           </tr>
           <tr>
             <td>2</td>
             <td>
-              <select name="ro2" id="ro2" class="form-control">
-                <option value="1">Наличие сети</option>
-                <option value="2">Наличие выходного напряжения</option>
-                <option value="3">Разряд АКБ</option>
-                <option value="4">Отключение АКБ</option>
-                <option value="5">SNMP SET</option>
-              </select>
-            </td>
-          </tr>
-          <tr>
-            <td>3</td>
-            <td>
-              <select name="ro3" id="ro3" class="form-control">
-                <option value="1">Наличие сети</option>
-                <option value="2">Наличие выходного напряжения</option>
-                <option value="3">Разряд АКБ</option>
-                <option value="4">Отключение АКБ</option>
-                <option value="5">SNMP SET</option>
+              <select name="type_ts2" id="type_ts2" class="form-control">
+                <option value="0">Нет</option>
+                <option value="1">Шкаф</option>
+                <option value="2">АКБ</option>
               </select>
             </td>
           </tr>
@@ -206,16 +207,60 @@
         <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();"> Включить
-        </label>
+  </div>
+</div>
+<div id="transport" class="tabpane">
+  <div class="panel-heading">Прозрачный канал</div>
+  <div class="panel-body section group">
+    <div class="checkbox col span_2_of_2">
+      <label>
+        <input type="checkbox" name="pgw_en" id="pgw_en" onchange="pgwState()">&nbsp;Включить
+      </label>
+    </div>
+    <div class="col span_1_of_2" >
+      <h4 class="col span_2_of_2">Сетевые параметры</h4>
+      <label for="pgw_port" class="col span_1_of_2">Порт</label>
+      <div class="col span_1_of_2">
+        <span id="pgw_port"></span>
+        <!-- <input type="text" class="form-control" id="pgw_port" name="pgw_port" placeholder="9999" minimum="0" maximum="65535" maxlength="5"> -->
+      </div>
+    </div>
+    <div class="col span_1_of_2" >
+      <h4 class="col span_2_of_2">Настройки порта RS485</h4>
+      <label for="pgw_baud" class="col span_1_of_2">Скорость (бит/с)</label>
+      <div class="col span_1_of_2">
+        <select name="pgw_baud" id="pgw_baud" class="form-control">
+          <option value="1200">1200</option>
+          <option value="2400">2400</option>
+          <option value="4800">4800</option>
+          <option value="9600">9600</option>
+          <option value="19200">19200</option>
+          <option value="38400">38400</option>
+          <option value="57600">57600</option>
+          <option value="115200">115200</option>
+        </select>
+      </div>
+      <label for="pgw_par" class="col span_1_of_2">Четность</label>
+      <div class="col span_1_of_2">
+        <select name="pgw_par" id="pgw_par" class="form-control" onchange="changeNData(this);">
+          <option value="no">Нет</option>
+          <option value="ev">Чет</option>
+          <option value="od">Нечет</option>
+        </select>
+      </div>
+      <label for="pgw_ndata" class="col span_1_of_2">Биты данных</label>
+      <div class="col span_1_of_2">
+        <select name="pgw_ndata" id="pgw_ndata" class="form-control">
+          <option value="7">7</option>
+          <option value="8">8</option>
+        </select>
       </div>
-      <label for="tn_port" class="col span_1_of_2">Порт Telnet</label>
+      <label for="pgw_nstop" class="col span_1_of_2">Стоповые биты</label>
       <div class="col span_1_of_2">
-        <input type="text" class="form-control" id="tn_port" name="tn_port">
+        <select name="pgw_nstop" id="pgw_nstop" class="form-control">
+          <option value="1">1</option>
+          <option value="2">2</option>
+        </select>
       </div>
     </div>
   </div>
@@ -224,7 +269,7 @@
   <div class="panel-heading">Аварии</div>
   <div class="panel-body section group">
     <div class="col span_1_of_2">
-      <h4 class="col span_3_of_3">Температура (°C)</h4>
+      <h4 class="col span_3_of_3">Температура АКБ (°C)</h4>
       <div class="col span_1_of_3">
         <label for="temp_low" class="col span_2_of_2">Нижняя граница</label>
         <div class="col span_2_of_2">
@@ -245,17 +290,23 @@
       </div>
     </div>
     <div class="col span_1_of_2">
-      <h4 class="col span_2_of_2">Нагрузка (%)</h4>
-      <div class="col span_1_of_2">
-        <label for="loadvolt_high" class="col span_2_of_2">Верхняя граница</label>
+      <h4 class="col span_3_of_3">Температура Шкафа (°C)</h4>
+      <div class="col span_1_of_3">
+        <label for="case_temp_low" class="col span_2_of_2">Нижняя граница</label>
         <div class="col span_2_of_2">
-          <select name="loadvolt_high" id="loadvolt_high" class="form-control"></select>
+          <select class="form-control" name="case_temp_low" id="case_temp_low"></select>
         </div>
       </div>
-      <div class="col span_1_of_2">
-        <label for="loadvolt_hist" class="col span_2_of_2">Гистерезис</label>
+      <div class="col span_1_of_3">
+        <label for="case_temp_high" class="col span_2_of_2">Верхняя граница</label>
+        <div class="col span_2_of_2">
+          <select class="form-control" name="case_temp_high" id="case_temp_high"></select>
+        </div>
+      </div>
+      <div class="col span_1_of_3">
+        <label for="case_temp_hist" class="col span_2_of_2">Гистерезис</label>
         <div class="col span_2_of_2">
-          <span id="loadvolt_hist"></span>
+          <span id="case_temp_hist"></span>
         </div>
       </div>
     </div>
@@ -422,12 +473,13 @@ DYN_WEB.Tabs.setup({
   useCookies: true // optional
 });
 var ntpservipValue;
-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 temp_hist     = new SpinBox('temp_hist', {'name':'temp_hist','minimum':0.5,'maximum':2.0,'step':0.1,'decimals':1, 'value': 0.5});
-var loadvolt_hist = new SpinBox('loadvolt_hist', {'name':'loadvolt_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});
-var test_time     = new SpinBox('test_time', {'minimum':1,'maximum':99,'step':1, 'value': 1});
+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 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});
+var test_time      = new SpinBox('test_time', {'minimum':1,'maximum':99,'step':1, 'value': 1});
+var pgw_port       = new SpinBox('pgw_port', {'name':'pgw_port','minimum':1,'maximum':65535,'step':1});
 settingsGET();
 // $('dev-update').onclick = function(){
 //   $('count-wrap').style.display = 'block';