Browse Source

multideviceFix

main
gsd 4 months ago
parent
commit
fe2b46fff0
  1. 16
      dbService.py
  2. 20
      packet_test.py
  3. 1
      pb.py

16
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 число его юзов

20
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))

1
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:

Loading…
Cancel
Save