From fe2b46fff078eb45a31645af9acea6dd202158b9 Mon Sep 17 00:00:00 2001 From: gsd Date: Sun, 15 Feb 2026 17:10:14 +0300 Subject: [PATCH] multideviceFix --- dbService.py | 16 ++++++++++------ packet_test.py | 20 ++++++++++++++++++++ pb.py | 1 + 3 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 packet_test.py diff --git a/dbService.py b/dbService.py index a2d4a3c..19195ed 100644 --- a/dbService.py +++ b/dbService.py @@ -5,11 +5,14 @@ from entities.PacketGroup import PacketGroup from entities.PacketSignal import PacketSignal class NodeDbService: - def __init__(self, dbStore): + def __init__(self, dbStore, core): self.dbStore:AsyncDatabase = dbStore + self.core = core + #self.core.defaultDeviceUUID async def listOfNodes(self): pipeline = [ #ai slooop + {"$match": {"device_uuid": self.core.defaultDeviceUUID}}, # Сортировка для каждого num по убыванию ts {"$sort": {"num": 1, "ts": -1}}, # Группировка по num и взятие первого (последнего) документа @@ -29,7 +32,7 @@ class NodeDbService: async def listOfDirectNodes(self): pipeline = [ #ai slooop - {"$match": {"hops_away": 0}}, # Фильтруем по списку + {"$match": {"hops_away": 0, "device_uuid": self.core.defaultDeviceUUID}}, # Фильтруем по списку # Сортировка для каждого num по убыванию ts {"$sort": {"num": 1, "ts": -1}}, # Группировка по num и взятие первого (последнего) документа @@ -50,14 +53,14 @@ class NodeDbService: async def oneNode(self, num: int): collection = self.dbStore['node_info'] c = await collection.find_one( - {"num":int(num)}, + {"num":int(num), "device_uuid": self.core.defaultDeviceUUID}, sort=[("ts", -1)] ) return c async def listOfSelectedNodes(self, nums: List[int]): pipeline = [ - {"$match": {"num": {"$in": nums}}}, # Фильтруем по списку + {"$match": {"num": {"$in": nums}, "device_uuid": self.core.defaultDeviceUUID}}, # Фильтруем по списку {"$sort": {"num": 1, "ts": -1}}, # Сортируем по num и ts (по убыванию) { "$group": { @@ -74,7 +77,7 @@ class NodeDbService: async def listOfFindLikeName(self, long_name): pipeline = [ - {"$match": {"long_name": {"$regex":long_name ,'$options' : 'i'}}}, # Фильтруем по списку + {"$match": {"long_name": {"$regex":long_name ,'$options' : 'i'}, "device_uuid": self.core.defaultDeviceUUID}}, # Фильтруем по списку {"$sort": {"num": 1, "ts": -1}}, # Сортируем по num и ts (по убыванию) { "$group": { @@ -98,7 +101,7 @@ class PacketDbService: before: float = -1, nums: List[int] = []): pipeline = [] - match = {} + match = {"device_uuid": self.core.defaultDeviceUUID} if after != -1 or before != -1: match["ts"] = {} if after != -1: @@ -145,6 +148,7 @@ class PacketDbService: match["portnums"] = {"$in":portnums} if match: + match.update({"device_uuid": self.core.defaultDeviceUUID}) pipeline.append({"$match":match}) #групировка по количеству на выхлопе _id номер портнума и count число его юзов diff --git a/packet_test.py b/packet_test.py new file mode 100644 index 0000000..e880e7f --- /dev/null +++ b/packet_test.py @@ -0,0 +1,20 @@ +import base64 + +packet = "CpIBDSCUdp4V2Dh3niJiCAQSVwoJITllNzY5NDIwEhZIb215YWtvdm8gfCByOkhNSyB8IExGGgRITUtWIgbwnp52lCAoK0IgLteZHp7hflxY+t/85xLZOs5AGE++1jgpayn8KH8rxBtIATXyqzt5SAA18Lv0/T2XyZFpRQAAUMFIB2Cb//////////8BeAeYASCoAQESCExvbmdGYXN0GgkhOWU3NzM4ZDg=" +data = base64.b64decode(packet) + +import pb +from mesht_device import FROMRADIO_SCHEMA, NODEINFO_SCHEMA, USER_SCHEMA, MESHPACKET_SCHEMA + +'''decoded = pb.decode(data, USER_SCHEMA) +print(decoded) +decoded["id"] = 1 + +packet = pb.encode({"payload": {decoded}}, MESHPACKET_SCHEMA) + +encoded = pb.encode({"id": 0, "packet": packet}, FROMRADIO_SCHEMA)''' + +## +packet = "Em414jjW0ApSDdApp7IV/////yIiCEMSHA2+0JFpEhUIZRWTGIxAHcovCkElgprlPCj+9ChIADX3/LZnPczQkWlFAAAcwUgDYJv//////////wF4B5gBIKgBARIITG9uZ0Zhc3QaCSE5ZTc3MzhkOA==ClIN0CmnshX/////IiIIQxIcDb7QkWkSFQhlFZMYjEAdyi8KQSWCmuU8KP70KEgANff8tmc9zNCRaUUAABzBSANgm///////////AXgHmAEgqAEBEghMb25nRmFzdBoJITllNzczOGQ4" +data = base64.b64decode(packet) +print(pb.decode(data, FROMRADIO_SCHEMA)) \ No newline at end of file diff --git a/pb.py b/pb.py index 0b5e70f..89e9456 100644 --- a/pb.py +++ b/pb.py @@ -295,6 +295,7 @@ def encode(values, schema=None): else: field = ns["names"].get(key) if field is None: + print(ns["names"]) raise KeyError(f"unknown field name '{key}' in schema") spec = ns["fields"].get(field) if not spec: