рефакторинг кода обновления параметров, изменения в логике работы получения статуса насосной
This commit is contained in:
parent
250a4361ee
commit
5dde84ce0a
@ -19,14 +19,15 @@ class LogsServiceConfig(AppConfig):
|
|||||||
# защита от двойного запуска
|
# защита от двойного запуска
|
||||||
if os.environ.get('RUN_MAIN', None) == 'true':
|
if os.environ.get('RUN_MAIN', None) == 'true':
|
||||||
return
|
return
|
||||||
|
print(f"Running logger service in process with pid={os.getpid()}")
|
||||||
|
|
||||||
from .services import MbTankService, MbPumpService
|
from .services import MbTankService, MbPumpService
|
||||||
# включение/выключение сервисов
|
# включение/выключение сервисов
|
||||||
mb_tank_service_enable = os.getenv('ENABLE_MB_TANK_SERVICE', '1')
|
mb_tank_service_enable = os.getenv('ENABLE_MB_TANK_SERVICE', '1')
|
||||||
LogsServiceConfig.mb_tank_service_enable = int(mb_tank_service_enable)
|
LogsServiceConfig.mb_tank_service_enable = int(mb_tank_service_enable) != 0
|
||||||
|
|
||||||
mb_pump_service_enable = os.getenv('ENABLE_MB_PUMP_SERVICE', '1')
|
mb_pump_service_enable = os.getenv('ENABLE_MB_PUMP_SERVICE', '1')
|
||||||
LogsServiceConfig.mb_pump_service_enable = int(mb_pump_service_enable)
|
LogsServiceConfig.mb_pump_service_enable = int(mb_pump_service_enable) != 0
|
||||||
|
|
||||||
save_days = int(os.getenv('LOGGER_SAVE_DAYS'))
|
save_days = int(os.getenv('LOGGER_SAVE_DAYS'))
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ class MbClearHistoryService(Thread):
|
|||||||
|
|
||||||
class MbService(Thread):
|
class MbService(Thread):
|
||||||
def __init__(self, ip_addr, port, scan_rate, poll_time_ms=60000, save_days=60):
|
def __init__(self, ip_addr, port, scan_rate, poll_time_ms=60000, save_days=60):
|
||||||
super().__init__()
|
super().__init__(daemon=True)
|
||||||
self._poll_time_ms = poll_time_ms
|
self._poll_time_ms = poll_time_ms
|
||||||
self._scan_rate = scan_rate
|
self._scan_rate = scan_rate
|
||||||
|
|
||||||
@ -107,6 +107,8 @@ class MbTankService(MbService):
|
|||||||
# D1: radar_high_reg
|
# D1: radar_high_reg
|
||||||
# D2: radar_low_reg
|
# D2: radar_low_reg
|
||||||
values = self.mb.read_holding_registers(0, 6)
|
values = self.mb.read_holding_registers(0, 6)
|
||||||
|
if values is None:
|
||||||
|
return
|
||||||
self._curr_state = {
|
self._curr_state = {
|
||||||
"level": values[0],
|
"level": values[0],
|
||||||
"status": values[5],
|
"status": values[5],
|
||||||
@ -148,10 +150,12 @@ class MbPumpService(MbService):
|
|||||||
# D26: vfd_current
|
# D26: vfd_current
|
||||||
# D27: vfd_error
|
# D27: vfd_error
|
||||||
off = 16
|
off = 16
|
||||||
values = self.mb.read_holding_registers(16, 35 - off)
|
values = self.mb.read_holding_registers(16, 36 - off)
|
||||||
|
if values is None:
|
||||||
|
return
|
||||||
with self._lock:
|
with self._lock:
|
||||||
# определение запущенного насоса
|
# определение запущенного насоса
|
||||||
pr = None
|
pr = -1
|
||||||
if values[33 - off] & (1 << 14):
|
if values[33 - off] & (1 << 14):
|
||||||
pr = 1
|
pr = 1
|
||||||
elif values[33 - off] & (1 << 15):
|
elif values[33 - off] & (1 << 15):
|
||||||
@ -159,15 +163,15 @@ class MbPumpService(MbService):
|
|||||||
|
|
||||||
self._curr_state = {
|
self._curr_state = {
|
||||||
'alarms': values[35 - off],
|
'alarms': values[35 - off],
|
||||||
'flow_meter': values[16 - off],
|
'flow_meter': values[16 - off] / 100,
|
||||||
'last_update': int(datetime.now().timestamp()),
|
'last_update': int(datetime.now().timestamp()),
|
||||||
'pump_stage': values[28 - off],
|
'pump_stage': values[28 - off],
|
||||||
'vfd_curr': values[26 - off],
|
'vfd_curr': values[26 - off] / 100,
|
||||||
'vfd_err': values[27 - off],
|
'vfd_err': values[27 - off],
|
||||||
'vfd_freq': values[25 - off],
|
'vfd_freq': values[25 - off] / 100,
|
||||||
'pump_running': pr,
|
'pump_running': pr,
|
||||||
'pump_moto_watch_1': values[31 - off],
|
'moto_watch_1': values[31 - off],
|
||||||
'pump_moto_watch_2': values[32 - off],
|
'moto_watch_2': values[32 - off],
|
||||||
'half_auto_control': values[30 - off]
|
'half_auto_control': values[30 - off]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,8 +190,8 @@ class MbPumpService(MbService):
|
|||||||
'vfd_err': None,
|
'vfd_err': None,
|
||||||
'vfd_freq': None,
|
'vfd_freq': None,
|
||||||
'pump_running': None,
|
'pump_running': None,
|
||||||
'pump_moto_watch_1': None,
|
'moto_watch_1': None,
|
||||||
'pump_moto_watch_2': None,
|
'moto_watch_2': None,
|
||||||
'half_auto_control': None
|
'half_auto_control': None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
|
import os
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from django.http import HttpResponse, HttpResponseBadRequest
|
from django.http import HttpResponse, HttpResponseBadRequest
|
||||||
from django.contrib.auth.decorators import permission_required
|
from django.contrib.auth.decorators import permission_required
|
||||||
@ -8,11 +9,12 @@ from .apps import LogsServiceConfig
|
|||||||
|
|
||||||
@permission_required(perm='logs_service.view_mbtankrecord', raise_exception=True)
|
@permission_required(perm='logs_service.view_mbtankrecord', raise_exception=True)
|
||||||
def view_stats(request):
|
def view_stats(request):
|
||||||
|
print(f"Executing view_stats in process with pid={os.getpid()}")
|
||||||
tank = MbTankRecord.load_stats()
|
tank = MbTankRecord.load_stats()
|
||||||
pump = None
|
pump = {}
|
||||||
if request.user.has_perm('logs_service.view_pump_stats'):
|
if request.user.has_perm('logs_service.view_pump_stats'):
|
||||||
if LogsServiceConfig.mb_tank_service is not None and LogsServiceConfig.mb_tank_service_enable:
|
if LogsServiceConfig.mb_pump_service is not None and LogsServiceConfig.mb_pump_service_enable:
|
||||||
pump = LogsServiceConfig.mb_tank_service.get_stats()
|
pump = LogsServiceConfig.mb_pump_service.get_stats()
|
||||||
|
|
||||||
out = {
|
out = {
|
||||||
'stats': {
|
'stats': {
|
||||||
|
@ -5,6 +5,8 @@ const RELOAD_STATS_INTERVAL = 10000
|
|||||||
|
|
||||||
const DATETIME_FORMAT = "DD MMM YYYY HH:mm:ss"
|
const DATETIME_FORMAT = "DD MMM YYYY HH:mm:ss"
|
||||||
|
|
||||||
|
const UNDEFINED_FIELD_TEXT = '(?)'
|
||||||
|
|
||||||
function unpackBits(num, desc) {
|
function unpackBits(num, desc) {
|
||||||
let out = ""
|
let out = ""
|
||||||
for (let i = 0; i < desc.length; i++) {
|
for (let i = 0; i < desc.length; i++) {
|
||||||
@ -90,6 +92,10 @@ async function loadLastUpdates() {
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
function _setIndicatorClass(element, good) {
|
function _setIndicatorClass(element, good) {
|
||||||
|
if (good === null) {
|
||||||
|
element.classList.remove("value-good")
|
||||||
|
element.classList.remove("value-bad")
|
||||||
|
} else if (good !== undefined) {
|
||||||
if (good) {
|
if (good) {
|
||||||
element.classList.remove("value-bad")
|
element.classList.remove("value-bad")
|
||||||
element.classList.add("value-good")
|
element.classList.add("value-good")
|
||||||
@ -98,71 +104,101 @@ function _setIndicatorClass(element, good) {
|
|||||||
element.classList.add("value-bad")
|
element.classList.add("value-bad")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const updateFunctions = {
|
const updateFunctions = {
|
||||||
// последнее обновление резервуара
|
// последнее обновление резервуара
|
||||||
'tank-last-update': (element, dataset) => {
|
'tank-last-update': {
|
||||||
|
'get_val': (dataset) => { return dataset['tank']['last_update'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
const now = Date.now() / 1000
|
const now = Date.now() / 1000
|
||||||
element.innerHTML = moment(new Date(dataset['tank']['last_update'] * 1000)).format(DATETIME_FORMAT)
|
element.innerHTML = moment(new Date(value * 1000)).format(DATETIME_FORMAT)
|
||||||
// для резервуара нормально, если обновление было меньше получаса назад
|
// для резервуара нормально, если обновление было меньше получаса назад
|
||||||
_setIndicatorClass(element, now - dataset['tank']['last_update'] < 1800)
|
return now - value < 1800
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// последнее обновление насосной
|
// последнее обновление насосной
|
||||||
'pump-last-update': (element, dataset) => {
|
'pump-last-update': {
|
||||||
|
'get_val': (dataset) => { return dataset['pump']['last_update'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
const now = Date.now() / 1000
|
const now = Date.now() / 1000
|
||||||
element.innerHTML = moment(new Date(dataset['pump']['last_update'] * 1000)).format(DATETIME_FORMAT)
|
element.innerHTML = moment(new Date(value * 1000)).format(DATETIME_FORMAT)
|
||||||
// для насосной можно допустить последнее обновление 10 минут назад
|
// для насосной можно допустить последнее обновление 10 минут назад
|
||||||
_setIndicatorClass(element, now - dataset['pump']['last_update'] < 600)
|
return now - value < 600
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Уровень воды <span id="tank-level-dir"></span>
|
// Уровень воды <span id="tank-level-dir"></span>
|
||||||
'tank-level-dir': (element, dataset) => {
|
'tank-level-dir': {
|
||||||
const last_radar_values = dataset['tank']['last_radar_values']
|
'get_val': (dataset) => { return dataset['tank']['last_radar_values'] },
|
||||||
if (last_radar_values.length < 3) {
|
'handler': (element, value) => {
|
||||||
element.innerHTML = "(?)"
|
if (value.length < 3) {
|
||||||
|
element.innerHTML = UNDEFINED_FIELD_TEXT
|
||||||
} else {
|
} else {
|
||||||
let ap = approximateWithTimestamps(last_radar_values)
|
let ap = approximateWithTimestamps(value)
|
||||||
if (Math.abs(ap) < 0.02) {
|
if (Math.abs(ap) < 0.02) {
|
||||||
element.innerHTML = '→'
|
element.innerHTML = '→'
|
||||||
} else {
|
} else {
|
||||||
element.innerHTML = ap < 0 ? '↘' : '↗'
|
element.innerHTML = ap < 0 ? '↘' : '↗'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Текущий уровень воды: <span id="tank-level-now"></span>%
|
// Текущий уровень воды: <span id="tank-level-now"></span>%
|
||||||
'tank-level-now': (element, dataset) => {
|
'tank-level-now': {
|
||||||
element.innerHTML = dataset['tank']['level']
|
'get_val': (dataset) => { return dataset['tank']['level'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
element.innerHTML = value
|
||||||
// тут все хорошо если влезаем в установленные рамки +-2% (69-80%)
|
// тут все хорошо если влезаем в установленные рамки +-2% (69-80%)
|
||||||
_setIndicatorClass(element, 67 <= dataset['tank']['last_percentage'] <= 82)
|
return 67 <= value <= 82
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Текущее значение с радара
|
// Текущее значение с радара
|
||||||
'tank-raw-now': (element, dataset) => {
|
'tank-raw-now': {
|
||||||
element.innerHTML = dataset['tank']['radar']
|
'get_val': (dataset) => { return dataset['tank']['radar'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
element.innerHTML = value
|
||||||
|
return null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Статус: <span id="tank-status"></span>
|
// Статус: <span id="tank-status"></span>
|
||||||
'tank-status': (element, dataset) => {
|
'tank-status': {
|
||||||
|
'get_val': (dataset) => { return dataset['tank']['status'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
const shur_status_bits = ['нужна вода', 'поплавок нижний', 'поплавок верхний', 'поплавок аварийный']
|
const shur_status_bits = ['нужна вода', 'поплавок нижний', 'поплавок верхний', 'поплавок аварийный']
|
||||||
element.innerHTML = unpackBits(dataset['tank']['status'], shur_status_bits) + " (" + dataset['tank']['status'] + ")"
|
element.innerHTML = unpackBits(value, shur_status_bits) + " (" + value + ")"
|
||||||
// тут все хорошо, пока нет аварийного поплавка
|
// тут все хорошо, пока нет аварийного поплавка
|
||||||
_setIndicatorClass(element, (dataset['tank']['status'] & 0x8) === 0)
|
return (value & 0x8) === 0
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Частота ПЧ: <span id="pump-vfd-freq"></span>Гц
|
// Частота ПЧ: <span id="pump-vfd-freq"></span>Гц
|
||||||
'pump-vfd-freq': (element, dataset) => {
|
'pump-vfd-freq': {
|
||||||
element.innerHTML = dataset['pump']['vfd_freq']
|
'get_val': (dataset) => { return dataset['pump']['vfd_freq'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
element.innerHTML = value
|
||||||
|
return null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Ток ПЧ: <span id="pump-vfd-curr"></span>А
|
// Ток ПЧ: <span id="pump-vfd-curr"></span>А
|
||||||
'pump-vfd-curr': (element, dataset) => {
|
'pump-vfd-curr': {
|
||||||
document.getElementById("pump-vfd-curr").innerHTML = dataset['pump']['vfd_curr']
|
'get_val': (dataset) => { return dataset['pump']['vfd_curr'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
element.innerHTML = value
|
||||||
|
return null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Ошибка ПЧ: <span id="pump-vfd-error"></span>
|
// Ошибка ПЧ: <span id="pump-vfd-error"></span>
|
||||||
'pump-vfd-error': (element, dataset) => {
|
'pump-vfd-error': {
|
||||||
|
'get_val': (dataset) => { return dataset['pump']['vfd_err'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
const vfdErrorsDescription = {
|
const vfdErrorsDescription = {
|
||||||
5: "превышение напряжения",
|
5: "превышение напряжения",
|
||||||
8: "пониженное напряжение",
|
8: "пониженное напряжение",
|
||||||
@ -174,16 +210,19 @@ const updateFunctions = {
|
|||||||
34: "перегрузка по току"
|
34: "перегрузка по току"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dataset['pump']['vfd_err'] in vfdErrorsDescription) {
|
if (value in vfdErrorsDescription) {
|
||||||
element.innerHTML = dataset['pump']['vfd_err'] + " (" + vfdErrorsDescription[dataset['pump']['vfd_err']] + ")"
|
element.innerHTML = value + " (" + vfdErrorsDescription[value] + ")"
|
||||||
} else {
|
} else {
|
||||||
element.innerHTML = dataset['pump']['vfd_err']
|
element.innerHTML = value
|
||||||
|
}
|
||||||
|
return value === 0
|
||||||
}
|
}
|
||||||
_setIndicatorClass(element, dataset['pump']['vfd_err'] === 0)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Регистр аварий: <span id="pump-alarms"></span>
|
// Регистр аварий: <span id="pump-alarms"></span>
|
||||||
'pump-alarms': (element, dataset) => {
|
'pump-alarms': {
|
||||||
|
'get_val': (dataset) => { return dataset['pump']['alarms'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
const pumpAlarmRegister = [
|
const pumpAlarmRegister = [
|
||||||
"общая авария",
|
"общая авария",
|
||||||
"реле контроля фаз",
|
"реле контроля фаз",
|
||||||
@ -195,29 +234,32 @@ const updateFunctions = {
|
|||||||
"задвижки"
|
"задвижки"
|
||||||
]
|
]
|
||||||
|
|
||||||
if (dataset['pump']['alarms'] === 0) {
|
if (value === 0) {
|
||||||
element.innerHTML = "ok"
|
element.innerHTML = "ok"
|
||||||
} else {
|
} else {
|
||||||
element.innerHTML = unpackBits(dataset['pump']['alarms'], pumpAlarmRegister) + " (" + dataset['pump']['alarms'] + ")"
|
element.innerHTML = unpackBits(value, pumpAlarmRegister) + " (" + value + ")"
|
||||||
|
}
|
||||||
|
return value === 0
|
||||||
}
|
}
|
||||||
_setIndicatorClass(element, dataset['pump']['alarms'] === 0)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Состояние КА: <span id="pump-stage"></span>
|
// Состояние КА: <span id="pump-stage"></span>
|
||||||
'pump-stage': (element, dataset) => {
|
'pump-stage': {
|
||||||
|
'get_val': (dataset) => { return dataset['pump']['pump_stage'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
const pumpStageDescription = {
|
const pumpStageDescription = {
|
||||||
0: "отключен",
|
0: "отключен",
|
||||||
2: "инициализация: установка задвижек в начальное состояние",
|
2: "инициализация: установка задвижек в начальное состояние",
|
||||||
21: "инициализация: закрытие задвижек 23.5 и 23.6",
|
21: "инициализация: закрытие задвижек 23.5 и 23.6",
|
||||||
31: "инициализация: открытие задвижек 23.5 и 23.6",
|
31: "инициализация: открытие задвижек 23.5 и 23.6",
|
||||||
99: "<span class=\"value-bad\">авария</span>",
|
99: "авария",
|
||||||
100: "ожидание сигнала на перекачку воды",
|
100: "ожидание сигнала на перекачку воды",
|
||||||
102: "запуск: открытие задвижки 23.6",
|
102: "запуск: открытие задвижки 23.6",
|
||||||
110: "запуск: ожидание сигнала от датчика уровня поз.36",
|
110: "запуск: ожидание сигнала от датчика уровня поз.36",
|
||||||
121: "запуск: открытие задвижек насоса",
|
121: "запуск: открытие задвижек насоса",
|
||||||
131: "запуск: закрытие задвижки 23.6",
|
131: "запуск: закрытие задвижки 23.6",
|
||||||
141: "запуск: пуск ПЧ",
|
141: "запуск: пуск ПЧ",
|
||||||
200: "<span class=\"value-good\">работает</span>",
|
200: "работает",
|
||||||
202: "остановка: закрытие задвижек 23.3 и 23.4",
|
202: "остановка: закрытие задвижек 23.3 и 23.4",
|
||||||
211: "остановка: ожидание остановки ПЧ",
|
211: "остановка: ожидание остановки ПЧ",
|
||||||
221: "остановка: перевод запорной арматуры в исходное состояние",
|
221: "остановка: перевод запорной арматуры в исходное состояние",
|
||||||
@ -225,19 +267,82 @@ const updateFunctions = {
|
|||||||
235: "остановка: сброс конденсата клапанами 25.*"
|
235: "остановка: сброс конденсата клапанами 25.*"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dataset['pump']['pump_stage'] in pumpStageDescription) {
|
if (value in pumpStageDescription) {
|
||||||
element.innerHTML = dataset['pump']['pump_stage'] + " (" + pumpStageDescription[dataset['pump']['pump_stage']] + ")"
|
element.innerHTML = value + " (" + pumpStageDescription[value] + ")"
|
||||||
} else {
|
} else {
|
||||||
element.innerHTML = dataset['pump']['pump_stage']
|
element.innerHTML = value
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value === 99) {
|
||||||
|
return false
|
||||||
|
} else if (value === 200) {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Текущий расход: <span id="pump-flow-meter"></span>м³
|
// Текущий расход: <span id="pump-flow-meter"></span>м³
|
||||||
'pump-flow-meter': (element, dataset) => {
|
'pump-flow-meter': {
|
||||||
element.innerHTML = dataset['pump']['flow_meter']
|
'get_val': (dataset) => { return dataset['pump']['flow_meter'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
element.innerHTML = value
|
||||||
|
return null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// 'id': (element, dataset) => {},
|
// Запущенный насос: <span id="pump-running"></span>
|
||||||
|
'pump-running': {
|
||||||
|
'get_val': (dataset) => { return dataset['pump']['pump_running'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
if (value <= -1) {
|
||||||
|
element.innerHTML = '-'
|
||||||
|
} else {
|
||||||
|
element.innerHTML = value
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Моточасы насоса 1: <span id="pump-moto-watch-1"></span>
|
||||||
|
'pump-moto-watch-1': {
|
||||||
|
'get_val': (dataset) => { return dataset['pump']['moto_watch_1'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
element.innerHTML = value
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Моточасы насоса 2: <span id="pump-moto-watch-2"></span>
|
||||||
|
'pump-moto-watch-2': {
|
||||||
|
'get_val': (dataset) => { return dataset['pump']['moto_watch_2'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
element.innerHTML = value
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Дистанционный режим: <span id="pump-remote-mode"></span>
|
||||||
|
'pump-remote-mode': {
|
||||||
|
'get_val': (dataset) => { return dataset['pump']['half_auto_control'] },
|
||||||
|
'handler': (element, value) => {
|
||||||
|
if ((value & (1 << 2)) === 0) {
|
||||||
|
element.innerHTML = 'не используется'
|
||||||
|
} else {
|
||||||
|
element.innerHTML = 'насос ' + (((value & 1) === 0) ? '1 ' : '2 ') + (((value & (1 << 1)) !== 0) ? 'включен' : 'выключен')
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 'id': {
|
||||||
|
// 'get_val': (dataset) => { return dataset['...']['...'] },
|
||||||
|
// 'handler': (element, value) => {
|
||||||
|
// element.innerHTML = value
|
||||||
|
// return null
|
||||||
|
// }
|
||||||
|
// },
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateStatus() {
|
async function updateStatus() {
|
||||||
@ -246,7 +351,17 @@ async function updateStatus() {
|
|||||||
for (let id in updateFunctions) {
|
for (let id in updateFunctions) {
|
||||||
let element = document.getElementById(id)
|
let element = document.getElementById(id)
|
||||||
if (element !== null) {
|
if (element !== null) {
|
||||||
updateFunctions[id](element, dataset)
|
try {
|
||||||
|
const value = updateFunctions[id]['get_val'](dataset)
|
||||||
|
if (value === undefined || value === null) {
|
||||||
|
element.innerHTML = UNDEFINED_FIELD_TEXT
|
||||||
|
_setIndicatorClass(element, false)
|
||||||
|
} else {
|
||||||
|
_setIndicatorClass(element, updateFunctions[id]['handler'](element, value))
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,9 +79,10 @@
|
|||||||
<p>Текущее значение с радара: <span id="tank-raw-now"></span></p>
|
<p>Текущее значение с радара: <span id="tank-raw-now"></span></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="params-group">
|
<div class="params-group">
|
||||||
<p>Запущенный насос: <span id="pump-running" class="value-bad">NI</span></p>
|
<p>Запущенный насос: <span id="pump-running"></span></p>
|
||||||
<p>Моточасы насоса 1: <span id="pump-moto-watch-1" class="value-bad">NI</span></p>
|
<p>Моточасы насоса 1: <span id="pump-moto-watch-1"></span></p>
|
||||||
<p>Моточасы насоса 2: <span id="pump-moto-watch-2" class="value-bad">NI</span></p>
|
<p>Моточасы насоса 2: <span id="pump-moto-watch-2"></span></p>
|
||||||
|
<p>Дистанционный режим: <span id="pump-remote-mode"></span></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user