Добавил еще одно устройство в проект: HART модем, получающий накопленный расход от расходометра.
This commit is contained in:
@@ -11,9 +11,11 @@ class LogsServiceConfig(AppConfig):
|
||||
|
||||
mb_tank_service = None
|
||||
mb_pump_service = None
|
||||
mb_hart_service = None
|
||||
|
||||
mb_tank_service_enable = True
|
||||
mb_pump_service_enable = True
|
||||
mb_tank_service_enable = False
|
||||
mb_pump_service_enable = False
|
||||
mb_hart_service_enable = False
|
||||
|
||||
def ready(self):
|
||||
# защита от двойного запуска
|
||||
@@ -21,13 +23,16 @@ class LogsServiceConfig(AppConfig):
|
||||
return
|
||||
print(f"Running logger service in process with pid={os.getpid()}")
|
||||
|
||||
from .services import MbTankService, MbPumpService
|
||||
from .services import MbTankService, MbPumpService, MbHartService
|
||||
# включение/выключение сервисов
|
||||
mb_tank_service_enable = os.getenv('ENABLE_MB_TANK_SERVICE', '1')
|
||||
LogsServiceConfig.mb_tank_service_enable = int(mb_tank_service_enable) != 0
|
||||
_en = os.getenv('ENABLE_MB_TANK_SERVICE', '1')
|
||||
LogsServiceConfig.mb_tank_service_enable = int(_en) != 0
|
||||
|
||||
mb_pump_service_enable = os.getenv('ENABLE_MB_PUMP_SERVICE', '1')
|
||||
LogsServiceConfig.mb_pump_service_enable = int(mb_pump_service_enable) != 0
|
||||
_en = os.getenv('ENABLE_MB_PUMP_SERVICE', '1')
|
||||
LogsServiceConfig.mb_pump_service_enable = int(_en) != 0
|
||||
|
||||
_en = os.getenv('ENABLE_MB_HART_SERVICE', '1')
|
||||
LogsServiceConfig.mb_hart_service_enable = int(_en) != 0
|
||||
|
||||
save_days = int(os.getenv('LOGGER_SAVE_DAYS'))
|
||||
|
||||
@@ -44,6 +49,12 @@ class LogsServiceConfig(AppConfig):
|
||||
scan_rate=int(os.getenv('MB_PUMP_SCAN_RATE_MS')),
|
||||
save_days=save_days)
|
||||
|
||||
if LogsServiceConfig.mb_hart_service_enable:
|
||||
LogsServiceConfig.mb_hart_service = MbHartService(ip_addr=os.getenv('MB_HART_ADDRESS'),
|
||||
port=int(os.getenv('MB_HART_PORT')),
|
||||
scan_rate=int(os.getenv('MB_HART_SCAN_RATE_MS')),
|
||||
save_days=save_days)
|
||||
|
||||
# запуск сервисов
|
||||
if LogsServiceConfig.mb_tank_service_enable:
|
||||
if DEBUG:
|
||||
@@ -55,6 +66,11 @@ class LogsServiceConfig(AppConfig):
|
||||
print('Creating service MbPumpService...')
|
||||
LogsServiceConfig.mb_pump_service.start()
|
||||
|
||||
if LogsServiceConfig.mb_hart_service_enable:
|
||||
if DEBUG:
|
||||
print('Creating service MbHartService...')
|
||||
LogsServiceConfig.mb_hart_service.start()
|
||||
|
||||
return True
|
||||
|
||||
|
||||
|
@@ -181,3 +181,27 @@ class MbPumpService(MbService):
|
||||
'half_auto_control': None
|
||||
}
|
||||
|
||||
|
||||
class MbHartService(MbService):
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self._lock = Lock()
|
||||
self._curr_state = None
|
||||
|
||||
def _load_current_state(self):
|
||||
# D?: flow_meter
|
||||
values = self.mb.read_holding_registers(600, 1)
|
||||
if values is None:
|
||||
raise AssertionError('failed to load current state')
|
||||
with self._lock:
|
||||
self._curr_state = {
|
||||
'accumulated_flow': values[0]
|
||||
}
|
||||
|
||||
def get_stats(self):
|
||||
with self._lock:
|
||||
# копируем данные, если они есть в текущем состоянии (иначе пустые поля)
|
||||
return self._curr_state or {
|
||||
'accumulated_flow': None
|
||||
}
|
||||
|
||||
|
@@ -10,16 +10,30 @@ from .apps import LogsServiceConfig
|
||||
@permission_required(perm='logs_service.view_mbtankrecord', raise_exception=True)
|
||||
def view_stats(request):
|
||||
print(f"Executing view_stats in process with pid={os.getpid()}")
|
||||
tank = MbTankRecord.load_stats()
|
||||
|
||||
# данные резервуара
|
||||
tank = {}
|
||||
if request.user.has_perm('logs_service.view_mbtankrecord'):
|
||||
if LogsServiceConfig.mb_pump_service is not None and LogsServiceConfig.mb_pump_service_enable:
|
||||
tank = MbTankRecord.load_stats()
|
||||
|
||||
# данные насосной
|
||||
pump = {}
|
||||
if request.user.has_perm('logs_service.view_pump_stats'):
|
||||
if LogsServiceConfig.mb_pump_service is not None and LogsServiceConfig.mb_pump_service_enable:
|
||||
pump = LogsServiceConfig.mb_pump_service.get_stats()
|
||||
|
||||
# данные HART-модема, он же расходометр
|
||||
hart = {}
|
||||
if request.user.has_perm('logs_service.view_accumulated_flow'):
|
||||
if LogsServiceConfig.mb_hart_service is not None and LogsServiceConfig.mb_hart_service_enable:
|
||||
hart = LogsServiceConfig.mb_hart_service.get_stats()
|
||||
|
||||
out = {
|
||||
'stats': {
|
||||
'tank': tank,
|
||||
'pump': pump
|
||||
'pump': pump,
|
||||
'hart': hart
|
||||
}
|
||||
}
|
||||
response = HttpResponse(json.dumps(out))
|
||||
|
Reference in New Issue
Block a user