add lxmf rssi, snr and quality to database
This commit is contained in:
13
database.py
13
database.py
@@ -3,7 +3,7 @@ from datetime import datetime, timezone
|
||||
from peewee import *
|
||||
from playhouse.migrate import migrate as migrate_database, SqliteMigrator
|
||||
|
||||
latest_version = 2 # increment each time new database migrations are added
|
||||
latest_version = 3 # increment each time new database migrations are added
|
||||
database = DatabaseProxy() # use a proxy object, as we will init real db client inside meshchat.py
|
||||
migrator = SqliteMigrator(database)
|
||||
|
||||
@@ -18,6 +18,14 @@ def migrate(current_version):
|
||||
migrator.add_column("lxmf_messages", 'next_delivery_attempt_at', LxmfMessage.next_delivery_attempt_at),
|
||||
)
|
||||
|
||||
# migrate to version 3
|
||||
if current_version < 3:
|
||||
migrate_database(
|
||||
migrator.add_column("lxmf_messages", 'rssi', LxmfMessage.rssi),
|
||||
migrator.add_column("lxmf_messages", 'snr', LxmfMessage.snr),
|
||||
migrator.add_column("lxmf_messages", 'quality', LxmfMessage.quality),
|
||||
)
|
||||
|
||||
return latest_version
|
||||
|
||||
|
||||
@@ -71,6 +79,9 @@ class LxmfMessage(BaseModel):
|
||||
content = TextField()
|
||||
fields = TextField() # json string
|
||||
timestamp = FloatField() # timestamp of when the message was originally created (before ever being sent)
|
||||
rssi = IntegerField(null=True)
|
||||
snr = FloatField(null=True)
|
||||
quality = FloatField(null=True)
|
||||
created_at = DateTimeField(default=lambda: datetime.now(timezone.utc))
|
||||
updated_at = DateTimeField(default=lambda: datetime.now(timezone.utc))
|
||||
|
||||
|
||||
26
meshchat.py
26
meshchat.py
@@ -999,6 +999,9 @@ class ReticulumMeshChat:
|
||||
"content": db_lxmf_message.content,
|
||||
"fields": json.loads(db_lxmf_message.fields),
|
||||
"timestamp": db_lxmf_message.timestamp,
|
||||
"rssi": db_lxmf_message.rssi,
|
||||
"snr": db_lxmf_message.snr,
|
||||
"quality": db_lxmf_message.quality,
|
||||
"created_at": db_lxmf_message.created_at,
|
||||
"updated_at": db_lxmf_message.updated_at,
|
||||
})
|
||||
@@ -1429,6 +1432,21 @@ class ReticulumMeshChat:
|
||||
# convert 0.0-1.0 progress to 0.00-100 percentage
|
||||
progress_percentage = round(lxmf_message.progress * 100, 2)
|
||||
|
||||
# get rssi
|
||||
rssi = lxmf_message.rssi
|
||||
if rssi is None:
|
||||
rssi = self.reticulum.get_packet_rssi(lxmf_message.hash)
|
||||
|
||||
# get snr
|
||||
snr = lxmf_message.snr
|
||||
if snr is None:
|
||||
snr = self.reticulum.get_packet_snr(lxmf_message.hash)
|
||||
|
||||
# get quality
|
||||
quality = lxmf_message.q
|
||||
if quality is None:
|
||||
quality = self.reticulum.get_packet_q(lxmf_message.hash)
|
||||
|
||||
return {
|
||||
"hash": lxmf_message.hash.hex(),
|
||||
"source_hash": lxmf_message.source_hash.hex(),
|
||||
@@ -1442,6 +1460,9 @@ class ReticulumMeshChat:
|
||||
"content": lxmf_message.content.decode('utf-8'),
|
||||
"fields": fields,
|
||||
"timestamp": lxmf_message.timestamp,
|
||||
"rssi": rssi,
|
||||
"snr": snr,
|
||||
"quality": quality,
|
||||
}
|
||||
|
||||
# convert lxmf state to a human friendly string
|
||||
@@ -1479,7 +1500,7 @@ class ReticulumMeshChat:
|
||||
|
||||
# handle an lxmf delivery from reticulum
|
||||
# NOTE: cant be async, as Reticulum doesn't await it
|
||||
def on_lxmf_delivery(self, lxmf_message):
|
||||
def on_lxmf_delivery(self, lxmf_message: LXMF.LXMessage):
|
||||
try:
|
||||
|
||||
# upsert lxmf message to database
|
||||
@@ -1532,6 +1553,9 @@ class ReticulumMeshChat:
|
||||
"content": lxmf_message_dict["content"],
|
||||
"fields": json.dumps(lxmf_message_dict["fields"]),
|
||||
"timestamp": lxmf_message_dict["timestamp"],
|
||||
"rssi": lxmf_message_dict["rssi"],
|
||||
"snr": lxmf_message_dict["snr"],
|
||||
"quality": lxmf_message_dict["quality"],
|
||||
"updated_at": datetime.now(timezone.utc),
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user