From b8d0ce72c47a782f56a1cfdf71d5ae48e679cf59 Mon Sep 17 00:00:00 2001 From: VladislavOstapov Date: Mon, 26 Feb 2024 16:47:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BA=D0=BE=D0=BF=D0=BB=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=85=D0=BE=D0=B4=D0=B0=20=D1=81=20HART=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B5=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logs_service/services.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/logs_service/services.py b/logs_service/services.py index 5c3083a..7fe4332 100644 --- a/logs_service/services.py +++ b/logs_service/services.py @@ -4,6 +4,7 @@ from threading import Thread import time from datetime import datetime, timedelta from pyModbusTCP.client import ModbusClient +from pyModbusTCP.utils import decode_ieee from threading import Lock @@ -190,18 +191,25 @@ class MbHartService(MbService): def _load_current_state(self): # D?: flow_meter - values = self.mb.read_holding_registers(600, 1) + values = self.mb.read_input_registers(1304, 2) if values is None: raise AssertionError('failed to load current state') + + def swap_bytes(source): + return (source & 0xFF) << 8 | (source & 0xFF00) >> 8 + + decoded = decode_ieee((swap_bytes(values[0]) << 16) | swap_bytes(values[1])) # тут еще ебаный byte-swap with self._lock: self._curr_state = { - 'accumulated_flow': values[0] + 'accumulated_flow': int(decoded), + 'last_update': int(datetime.now().timestamp()), } def get_stats(self): with self._lock: # копируем данные, если они есть в текущем состоянии (иначе пустые поля) return self._curr_state or { - 'accumulated_flow': None + 'accumulated_flow': None, + 'last_update': None, }