Merge pull request #59 from iz1kga/Feature-requested-20210218

Feature requested 20210218
This commit is contained in:
Kevin Hester
2021-03-08 10:26:39 +08:00
committed by GitHub
2 changed files with 31 additions and 17 deletions

View File

@@ -15,6 +15,7 @@ import pyqrcode
import traceback
import pkg_resources
from datetime import datetime
import timeago
from easy_table import EasyTable
from google.protobuf.json_format import MessageToJson
@@ -107,11 +108,13 @@ def formatFloat(value, formatStr="{:.2f}", unit="", default="N/A"):
def getLH(ts, default="N/A"):
return datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') if ts else default
# Print Nodes
#Returns time ago for the last heard
def getTimeAgo(ts, default="N/A"):
return timeago.format(datetime.fromtimestamp(ts), datetime.now()) if ts else default
def printNodes(nodes):
# Create the table and define the structure
#Print Nodes
def printNodes(nodes, myId):
#Create the table and define the structure
table = EasyTable("Nodes")
table.setCorners("/", "\\", "\\", "/")
table.setOuterStructure("|", "-")
@@ -119,17 +122,28 @@ def printNodes(nodes):
tableData = []
for node in nodes:
# aux var to get not defined keys
LH = getLH(node['position'].get("time"))
lat = formatFloat(node['position'].get("latitude"), "{:.4f}", "°")
lon = formatFloat(node['position'].get("longitude"), "{:.4f}", "°")
alt = formatFloat(node['position'].get("altitude"), "{:.0f}", " m")
batt = formatFloat(node['position'].get("batteryLevel"), "{:.2f}", "%")
snr = formatFloat(node.get("snr"), "{:.2f}", " dB")
tableData.append({"User": node['user']['longName'],
"Position": "Lat:"+lat+", Lon:"+lon+", Alt:"+alt,
"Battery": batt, "SNR": snr, "LastHeard": LH})
table.setData(tableData)
if node['user']['id'] == myId:
continue
#aux var to get not defined keys
lat=formatFloat(node['position'].get("latitude"), "{:.4f}", "°")
lon=formatFloat(node['position'].get("longitude"), "{:.4f}", "°")
alt=formatFloat(node['position'].get("altitude"), "{:.0f}", " m")
batt=formatFloat(node['position'].get("batteryLevel"), "{:.2f}", "%")
snr=formatFloat(node.get("snr"), "{:.2f}", " dB")
LH= getLH(node['position'].get("time"))
timeAgo = getTimeAgo(node['position'].get("time"))
tableData.append({"N":0, "User":node['user']['longName'],
"AKA":node['user']['shortName'], "ID":node['user']['id'],
"Position":lat+", "+lon+", "+alt,
"Battery":batt, "SNR":snr,
"LastHeard":LH, "Since":timeAgo})
Rows = sorted(tableData, key=lambda k: k['LastHeard'], reverse=True)
RowsOk = sorted(Rows, key=lambda k:k ['LastHeard'].startswith("N/A"))
for i in range(len(RowsOk)):
RowsOk[i]['N'] = i+1
table.setData(RowsOk)
table.displayTable()
@@ -289,7 +303,7 @@ def onConnected(interface):
if args.nodes:
closeNow = True
printNodes(interface.nodes.values())
printNodes(interface.nodes.values(), interface.getMyNodeInfo()['user']['id'])
if args.qr:
closeNow = True

View File

@@ -29,7 +29,7 @@ setup(
include_package_data=True,
install_requires=["pyserial>=3.4", "protobuf>=3.13.0",
"pypubsub>=4.0.3", "dotmap>=1.3.14", "pexpect>=4.6.0", "pyqrcode>=1.2.1",
"pygatt>=4.0.5", "easy-table==0.0.4"],
"pygatt>=4.0.5", "easy-table==0.0.4", "timeago==1.0.15"],
extras_require={
'tunnel': ["pytap2>=2.0.0"]
},