Added telemetry to announce

This commit is contained in:
SebastianObi
2024-10-14 13:57:48 +02:00
parent 2e470fda94
commit dc9ac40d21
10 changed files with 550 additions and 76 deletions

View File

@@ -95,6 +95,10 @@ RNS_CONNECTION = None
LXMF_CONNECTION = None
MATRIX_CONNECTION = None
ANNOUNCE_DATA_CONTENT = 0x00
ANNOUNCE_DATA_FIELDS = 0x01
ANNOUNCE_DATA_TITLE = 0x02
MSG_FIELD_EMBEDDED_LXMS = 0x01
MSG_FIELD_TELEMETRY = 0x02
MSG_FIELD_TELEMETRY_STREAM = 0x03
@@ -1570,11 +1574,29 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
if path is None:
path = PATH
announce_data = CONFIG["lxmf"]["display_name"]
if CONFIG["main"].getboolean("fields_announce"):
fields = {}
if CONFIG["telemetry"].getboolean("location_enabled"):
try:
fields[MSG_FIELD_LOCATION] = [CONFIG["telemetry"].getfloat("location_lat"), CONFIG["telemetry"].getfloat("location_lon")]
except:
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["rns_server"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: fields}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
LXMF_CONNECTION = lxmf_connection(
storage_path=path,
destination_name=CONFIG["lxmf"]["destination_name"],
destination_type=CONFIG["lxmf"]["destination_type"],
display_name=CONFIG["lxmf"]["display_name"],
announce_data=announce_data,
announce_hidden=CONFIG["lxmf"].getboolean("announce_hidden"),
send_delay=CONFIG["lxmf"]["send_delay"],
desired_method=CONFIG["lxmf"]["desired_method"],
@@ -1688,6 +1710,10 @@ auto_save_data = False
periodic_save_data = True
periodic_save_data_interval = 1 #Minutes
# Transport extended data in the announce.
# This is needed for the integration of advanced client apps.
fields_announce = False
#### LXMF connection settings ####
[lxmf]
@@ -1851,6 +1877,16 @@ matrix_to_lxmf_deleted =
any
#2858b7a096899116cd529559cc679ffe
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''

View File

@@ -93,6 +93,50 @@ ANNOUNCE_DATA_CONTENT = 0x00
ANNOUNCE_DATA_FIELDS = 0x01
ANNOUNCE_DATA_TITLE = 0x02
MSG_FIELD_EMBEDDED_LXMS = 0x01
MSG_FIELD_TELEMETRY = 0x02
MSG_FIELD_TELEMETRY_STREAM = 0x03
MSG_FIELD_ICON = 0x04
MSG_FIELD_FILE_ATTACHMENTS = 0x05
MSG_FIELD_IMAGE = 0x06
MSG_FIELD_AUDIO = 0x07
MSG_FIELD_THREAD = 0x08
MSG_FIELD_COMMANDS = 0x09
MSG_FIELD_RESULTS = 0x0A
MSG_FIELD_ANSWER = 0xA0
MSG_FIELD_ATTACHMENT = 0xA1
MSG_FIELD_COMMANDS_EXECUTE = 0xA2
MSG_FIELD_COMMANDS_RESULT = 0xA3
MSG_FIELD_CONTACT = 0xA4
MSG_FIELD_DATA = 0xA5
MSG_FIELD_DELETE = 0xA6
MSG_FIELD_EDIT = 0xA7
MSG_FIELD_GROUP = 0xA8
MSG_FIELD_HASH = 0xA9
MSG_FIELD_ICON_MENU = 0xAA
MSG_FIELD_ICON_SRC = 0xAB
MSG_FIELD_KEYBOARD = 0xAC
MSG_FIELD_KEYBOARD_INLINE = 0xAD
MSG_FIELD_LOCATION = 0xAE
MSG_FIELD_POLL = 0xAF
MSG_FIELD_POLL_ANSWER = 0xB0
MSG_FIELD_REACTION = 0xB1
MSG_FIELD_RECEIPT = 0xB2
MSG_FIELD_SCHEDULED = 0xB3
MSG_FIELD_SILENT = 0xB4
MSG_FIELD_SRC = 0xB5
MSG_FIELD_STATE = 0xB6
MSG_FIELD_STICKER = 0xB7
MSG_FIELD_TELEMETRY_DB = 0xB8
MSG_FIELD_TELEMETRY_PEER = 0xB9
MSG_FIELD_TELEMETRY_COMMANDS = 0xBA
MSG_FIELD_TEMPLATE = 0xBB
MSG_FIELD_TOPIC = 0xBC
MSG_FIELD_TYPE = 0xBD
MSG_FIELD_TYPE_FIELDS = 0xBE
MSG_FIELD_VOICE = 0xBF
##############################################################################################################
# LXMF Class
@@ -1315,11 +1359,29 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
if path is None:
path = PATH
announce_data = CONFIG["lxmf"]["display_name"]
if CONFIG["main"].getboolean("fields_announce"):
fields = {}
if CONFIG["telemetry"].getboolean("location_enabled"):
try:
fields[MSG_FIELD_LOCATION] = [CONFIG["telemetry"].getfloat("location_lat"), CONFIG["telemetry"].getfloat("location_lon")]
except:
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["rns_server"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: fields}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
LXMF_CONNECTION = lxmf_connection(
storage_path=path,
destination_name=CONFIG["lxmf"]["destination_name"],
destination_type=CONFIG["lxmf"]["destination_type"],
display_name=CONFIG["lxmf"]["display_name"],
announce_data=announce_data,
announce_hidden=CONFIG["lxmf"].getboolean("announce_hidden"),
send_delay=CONFIG["lxmf"]["send_delay"],
desired_method=CONFIG["lxmf"]["desired_method"],
@@ -1427,6 +1489,10 @@ name =
# This is controllable with a MQTT message.
power = Yes
# Transport extended data in the announce.
# This is needed for the integration of advanced client apps.
fields_announce = False
#### LXMF connection settings ####
[lxmf]
@@ -1626,6 +1692,16 @@ mqtt_to_lxmf_length_max = 0 #0=any length
any
#2858b7a096899116cd529559cc679ffe
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''

View File

@@ -87,6 +87,54 @@ RNS_CONNECTION = None
LXMF_CONNECTION = None
RIVESCRIPT_CONNECTION = None
ANNOUNCE_DATA_CONTENT = 0x00
ANNOUNCE_DATA_FIELDS = 0x01
ANNOUNCE_DATA_TITLE = 0x02
MSG_FIELD_EMBEDDED_LXMS = 0x01
MSG_FIELD_TELEMETRY = 0x02
MSG_FIELD_TELEMETRY_STREAM = 0x03
MSG_FIELD_ICON = 0x04
MSG_FIELD_FILE_ATTACHMENTS = 0x05
MSG_FIELD_IMAGE = 0x06
MSG_FIELD_AUDIO = 0x07
MSG_FIELD_THREAD = 0x08
MSG_FIELD_COMMANDS = 0x09
MSG_FIELD_RESULTS = 0x0A
MSG_FIELD_ANSWER = 0xA0
MSG_FIELD_ATTACHMENT = 0xA1
MSG_FIELD_COMMANDS_EXECUTE = 0xA2
MSG_FIELD_COMMANDS_RESULT = 0xA3
MSG_FIELD_CONTACT = 0xA4
MSG_FIELD_DATA = 0xA5
MSG_FIELD_DELETE = 0xA6
MSG_FIELD_EDIT = 0xA7
MSG_FIELD_GROUP = 0xA8
MSG_FIELD_HASH = 0xA9
MSG_FIELD_ICON_MENU = 0xAA
MSG_FIELD_ICON_SRC = 0xAB
MSG_FIELD_KEYBOARD = 0xAC
MSG_FIELD_KEYBOARD_INLINE = 0xAD
MSG_FIELD_LOCATION = 0xAE
MSG_FIELD_POLL = 0xAF
MSG_FIELD_POLL_ANSWER = 0xB0
MSG_FIELD_REACTION = 0xB1
MSG_FIELD_RECEIPT = 0xB2
MSG_FIELD_SCHEDULED = 0xB3
MSG_FIELD_SILENT = 0xB4
MSG_FIELD_SRC = 0xB5
MSG_FIELD_STATE = 0xB6
MSG_FIELD_STICKER = 0xB7
MSG_FIELD_TELEMETRY_DB = 0xB8
MSG_FIELD_TELEMETRY_PEER = 0xB9
MSG_FIELD_TELEMETRY_COMMANDS = 0xBA
MSG_FIELD_TEMPLATE = 0xBB
MSG_FIELD_TOPIC = 0xBC
MSG_FIELD_TYPE = 0xBD
MSG_FIELD_TYPE_FIELDS = 0xBE
MSG_FIELD_VOICE = 0xBF
##############################################################################################################
# LXMF Class
@@ -1130,11 +1178,29 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
if path is None:
path = PATH
announce_data = CONFIG["lxmf"]["display_name"]
if CONFIG["main"].getboolean("fields_announce"):
fields = {}
if CONFIG["telemetry"].getboolean("location_enabled"):
try:
fields[MSG_FIELD_LOCATION] = [CONFIG["telemetry"].getfloat("location_lat"), CONFIG["telemetry"].getfloat("location_lon")]
except:
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["rns_server"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: fields}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
LXMF_CONNECTION = lxmf_connection(
storage_path=path,
destination_name=CONFIG["lxmf"]["destination_name"],
destination_type=CONFIG["lxmf"]["destination_type"],
display_name=CONFIG["lxmf"]["display_name"],
announce_data=announce_data,
announce_hidden=CONFIG["lxmf"].getboolean("announce_hidden"),
send_delay=CONFIG["lxmf"]["send_delay"],
desired_method=CONFIG["lxmf"]["desired_method"],
@@ -1236,6 +1302,10 @@ enabled = True
# Name of the program. Only for display in the log or program startup.
name = Echo Test
# Transport extended data in the announce.
# This is needed for the integration of advanced client apps.
fields_announce = False
#### LXMF connection settings ####
[lxmf]
@@ -1353,6 +1423,16 @@ send_length_max = 0 #0=any length
any
#2858b7a096899116cd529559cc679ffe
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''

View File

@@ -85,6 +85,54 @@ CONFIG = None
RNS_CONNECTION = None
LXMF_CONNECTION = None
ANNOUNCE_DATA_CONTENT = 0x00
ANNOUNCE_DATA_FIELDS = 0x01
ANNOUNCE_DATA_TITLE = 0x02
MSG_FIELD_EMBEDDED_LXMS = 0x01
MSG_FIELD_TELEMETRY = 0x02
MSG_FIELD_TELEMETRY_STREAM = 0x03
MSG_FIELD_ICON = 0x04
MSG_FIELD_FILE_ATTACHMENTS = 0x05
MSG_FIELD_IMAGE = 0x06
MSG_FIELD_AUDIO = 0x07
MSG_FIELD_THREAD = 0x08
MSG_FIELD_COMMANDS = 0x09
MSG_FIELD_RESULTS = 0x0A
MSG_FIELD_ANSWER = 0xA0
MSG_FIELD_ATTACHMENT = 0xA1
MSG_FIELD_COMMANDS_EXECUTE = 0xA2
MSG_FIELD_COMMANDS_RESULT = 0xA3
MSG_FIELD_CONTACT = 0xA4
MSG_FIELD_DATA = 0xA5
MSG_FIELD_DELETE = 0xA6
MSG_FIELD_EDIT = 0xA7
MSG_FIELD_GROUP = 0xA8
MSG_FIELD_HASH = 0xA9
MSG_FIELD_ICON_MENU = 0xAA
MSG_FIELD_ICON_SRC = 0xAB
MSG_FIELD_KEYBOARD = 0xAC
MSG_FIELD_KEYBOARD_INLINE = 0xAD
MSG_FIELD_LOCATION = 0xAE
MSG_FIELD_POLL = 0xAF
MSG_FIELD_POLL_ANSWER = 0xB0
MSG_FIELD_REACTION = 0xB1
MSG_FIELD_RECEIPT = 0xB2
MSG_FIELD_SCHEDULED = 0xB3
MSG_FIELD_SILENT = 0xB4
MSG_FIELD_SRC = 0xB5
MSG_FIELD_STATE = 0xB6
MSG_FIELD_STICKER = 0xB7
MSG_FIELD_TELEMETRY_DB = 0xB8
MSG_FIELD_TELEMETRY_PEER = 0xB9
MSG_FIELD_TELEMETRY_COMMANDS = 0xBA
MSG_FIELD_TEMPLATE = 0xBB
MSG_FIELD_TOPIC = 0xBC
MSG_FIELD_TYPE = 0xBD
MSG_FIELD_TYPE_FIELDS = 0xBE
MSG_FIELD_VOICE = 0xBF
##############################################################################################################
# LXMF Class
@@ -1161,11 +1209,29 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
if path is None:
path = PATH
announce_data = CONFIG["lxmf"]["display_name"]
if CONFIG["main"].getboolean("fields_announce"):
fields = {}
if CONFIG["telemetry"].getboolean("location_enabled"):
try:
fields[MSG_FIELD_LOCATION] = [CONFIG["telemetry"].getfloat("location_lat"), CONFIG["telemetry"].getfloat("location_lon")]
except:
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["rns_server"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: fields}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
LXMF_CONNECTION = lxmf_connection(
storage_path=path,
destination_name=CONFIG["lxmf"]["destination_name"],
destination_type=CONFIG["lxmf"]["destination_type"],
display_name=CONFIG["lxmf"]["display_name"],
announce_data=announce_data,
announce_hidden=CONFIG["lxmf"].getboolean("announce_hidden"),
send_delay=CONFIG["lxmf"]["send_delay"],
desired_method=CONFIG["lxmf"]["desired_method"],
@@ -1257,6 +1323,10 @@ enabled = True
# Name of the program. Only for display in the log or program startup.
name = CMD
# Transport extended data in the announce.
# This is needed for the integration of advanced client apps.
fields_announce = False
#### LXMF connection settings ####
[lxmf]
@@ -1374,6 +1444,16 @@ send_length_max = 0 #0=any length
#any
#2858b7a096899116cd529559cc679ffe
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''

View File

@@ -2134,7 +2134,7 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = CONFIG["telemetry"].getint("state_data")
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
@@ -2251,23 +2251,13 @@ DEFAULT_CONFIG_OVERRIDE = '''# This is the user configuration file to override t
# This file can be used to clearly summarize all settings that deviate from the default.
# This also has the advantage that all changed settings can be kept when updating the program.
#### LXMF connection settings ####
[lxmf]
# The name will be visible to other peers
# on the network, and included in announces.
# It is also used in the group description/info.
display_name = Distribution Group
# Set propagation node automatically.
propagation_node_auto = True
# Try to deliver a message via the LXMF propagation network,
# if a direct delivery to the recipient is not possible.
try_propagation_on_fail = Yes
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0

View File

@@ -4226,7 +4226,7 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = CONFIG["telemetry"].getint("state_data")
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
@@ -4391,16 +4391,12 @@ DEFAULT_CONFIG_OVERRIDE = '''# This is the user configuration file to override t
# This also has the advantage that all changed settings can be kept when updating the program.
#### Main program settings ####
[main]
# Default language.
lng = en # en/de
#### LXMF connection settings ####
[lxmf]
# The name will be visible to other peers
# on the network, and included in announces.
# It is also used in the group description/info.
@@ -4414,7 +4410,6 @@ propagation_node_auto = True
try_propagation_on_fail = Yes
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
@@ -4424,9 +4419,7 @@ state_enabled = False
state_data = 0
#### Cluster settings ####
[cluster]
# Enable/Disable this functionality.
enabled = True
@@ -4443,9 +4436,7 @@ type = cluster
display_name = County/Region/City
#### Router settings ####
[router]
# Enable/Disable router functionality.
enabled = True
@@ -4455,9 +4446,7 @@ enabled = True
display_name = Country,Country/Region
#### High availability settings ####
[high_availability]
# Enable/Disable this functionality.
enabled = False
@@ -4468,9 +4457,7 @@ role = master
peer =
#### Statistic/Counter settings ####
[statistic]
# Enable/Disable this functionality.
enabled = True
'''

View File

@@ -87,6 +87,50 @@ ANNOUNCE_DATA_CONTENT = 0x00
ANNOUNCE_DATA_FIELDS = 0x01
ANNOUNCE_DATA_TITLE = 0x02
MSG_FIELD_EMBEDDED_LXMS = 0x01
MSG_FIELD_TELEMETRY = 0x02
MSG_FIELD_TELEMETRY_STREAM = 0x03
MSG_FIELD_ICON = 0x04
MSG_FIELD_FILE_ATTACHMENTS = 0x05
MSG_FIELD_IMAGE = 0x06
MSG_FIELD_AUDIO = 0x07
MSG_FIELD_THREAD = 0x08
MSG_FIELD_COMMANDS = 0x09
MSG_FIELD_RESULTS = 0x0A
MSG_FIELD_ANSWER = 0xA0
MSG_FIELD_ATTACHMENT = 0xA1
MSG_FIELD_COMMANDS_EXECUTE = 0xA2
MSG_FIELD_COMMANDS_RESULT = 0xA3
MSG_FIELD_CONTACT = 0xA4
MSG_FIELD_DATA = 0xA5
MSG_FIELD_DELETE = 0xA6
MSG_FIELD_EDIT = 0xA7
MSG_FIELD_GROUP = 0xA8
MSG_FIELD_HASH = 0xA9
MSG_FIELD_ICON_MENU = 0xAA
MSG_FIELD_ICON_SRC = 0xAB
MSG_FIELD_KEYBOARD = 0xAC
MSG_FIELD_KEYBOARD_INLINE = 0xAD
MSG_FIELD_LOCATION = 0xAE
MSG_FIELD_POLL = 0xAF
MSG_FIELD_POLL_ANSWER = 0xB0
MSG_FIELD_REACTION = 0xB1
MSG_FIELD_RECEIPT = 0xB2
MSG_FIELD_SCHEDULED = 0xB3
MSG_FIELD_SILENT = 0xB4
MSG_FIELD_SRC = 0xB5
MSG_FIELD_STATE = 0xB6
MSG_FIELD_STICKER = 0xB7
MSG_FIELD_TELEMETRY_DB = 0xB8
MSG_FIELD_TELEMETRY_PEER = 0xB9
MSG_FIELD_TELEMETRY_COMMANDS = 0xBA
MSG_FIELD_TEMPLATE = 0xBB
MSG_FIELD_TOPIC = 0xBC
MSG_FIELD_TYPE = 0xBD
MSG_FIELD_TYPE_FIELDS = 0xBE
MSG_FIELD_VOICE = 0xBF
##############################################################################################################
# LXMF Class
@@ -1261,11 +1305,29 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
if path is None:
path = PATH
announce_data = CONFIG["lxmf"]["display_name"]
if CONFIG["main"].getboolean("fields_announce"):
fields = {}
if CONFIG["telemetry"].getboolean("location_enabled"):
try:
fields[MSG_FIELD_LOCATION] = [CONFIG["telemetry"].getfloat("location_lat"), CONFIG["telemetry"].getfloat("location_lon")]
except:
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["rns_server"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: fields}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
LXMF_CONNECTION = lxmf_connection(
storage_path=path,
destination_name=CONFIG["lxmf"]["destination_name"],
destination_type=CONFIG["lxmf"]["destination_type"],
display_name=CONFIG["lxmf"]["display_name"],
announce_data=announce_data,
announce_hidden=CONFIG["lxmf"].getboolean("announce_hidden"),
send_delay=CONFIG["lxmf"]["send_delay"],
desired_method=CONFIG["lxmf"]["desired_method"],
@@ -1349,20 +1411,20 @@ DEFAULT_CONFIG_OVERRIDE = '''# This is the user configuration file to override t
# This file can be used to clearly summarize all settings that deviate from the default.
# This also has the advantage that all changed settings can be kept when updating the program.
#### LXMF connection settings ####
[lxmf]
# The name will be visible to other peers
# on the network, and included in announces.
# It is also used in the group description/info.
display_name = Distribution Group
# Set propagation node automatically.
propagation_node_auto = True
# Try to deliver a message via the LXMF propagation network,
# if a direct delivery to the recipient is not possible.
try_propagation_on_fail = Yes
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''
@@ -1379,6 +1441,10 @@ enabled = True
# Name of the program. Only for display in the log or program startup.
name = Distribution Group
# Transport extended data in the announce.
# This is needed for the integration of advanced client apps.
fields_announce = False
#### LXMF connection settings ####
[lxmf]
@@ -1499,6 +1565,16 @@ timestamp = client #client/server
# Use title/fields.
title = Yes
fields = Yes
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''

View File

@@ -1317,11 +1317,29 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
if path is None:
path = PATH
announce_data = CONFIG["lxmf"]["display_name"]
if CONFIG["main"].getboolean("fields_announce"):
fields = {}
if CONFIG["telemetry"].getboolean("location_enabled"):
try:
fields[MSG_FIELD_LOCATION] = [CONFIG["telemetry"].getfloat("location_lat"), CONFIG["telemetry"].getfloat("location_lon")]
except:
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["rns_server"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: fields}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
LXMF_CONNECTION = lxmf_connection(
storage_path=path,
destination_name=CONFIG["lxmf"]["destination_name"],
destination_type=CONFIG["lxmf"]["destination_type"],
display_name=CONFIG["lxmf"]["display_name"],
announce_data=announce_data,
announce_hidden=CONFIG["lxmf"].getboolean("announce_hidden"),
send_delay=CONFIG["lxmf"]["send_delay"],
desired_method=CONFIG["lxmf"]["desired_method"],
@@ -1426,6 +1444,10 @@ auto_save_data = True
periodic_save_data = True
periodic_save_data_interval = 30 #Minutes
# Transport extended data in the announce.
# This is needed for the integration of advanced client apps.
fields_announce = False
#### LXMF connection settings ####
[lxmf]
@@ -1559,6 +1581,16 @@ fields_remove =
any
#2858b7a096899116cd529559cc679ffe
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''

View File

@@ -754,9 +754,6 @@ def lxmf_message_received_callback(message):
value["timestamp_client"] = message.timestamp
value["timestamp_server"] = time.time()
if "password" in value:
value["password"] = str(base64.b32encode(value["password"]))
CACHE["in"][str(uuid.uuid4())] = value
CACHE_CHANGE = True
except:
@@ -1442,42 +1439,55 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
if path is None:
path = PATH
display_name = CONFIG["lxmf"]["display_name"]
announce_data = None
if CONFIG["features"].getboolean("announce_data"):
section = "data"
if CONFIG.has_section(section):
type_fields = {}
for (key, val) in CONFIG.items(section):
if key == "config_lxm":
try:
if val != "":
val = base64.urlsafe_b64decode(val.replace("lxm://", "").replace("/", "")+"==")
val = msgpack.unpackb(val)
if val and "data" in val:
type_fields["config"] = val["data"]["data"]
except:
pass
else:
if "=" in val or ";" in val:
type_fields[key] = {}
keys = val.split(";")
for val in keys:
val = val.split("=")
if len(val) == 2:
type_fields[key][val[0]] = val_to_val(val[1])
announce_data = CONFIG["lxmf"]["display_name"]
if CONFIG["main"].getboolean("fields_announce"):
fields = {}
if CONFIG["telemetry"].getboolean("location_enabled"):
try:
fields[MSG_FIELD_LOCATION] = [CONFIG["telemetry"].getfloat("location_lat"), CONFIG["telemetry"].getfloat("location_lon")]
except:
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if CONFIG["features"].getboolean("announce_data"):
section = "data"
if CONFIG.has_section(section):
type_fields = {}
for (key, val) in CONFIG.items(section):
if key == "config_lxm":
try:
if val != "":
val = base64.urlsafe_b64decode(val.replace("lxm://", "").replace("/", "")+"==")
val = msgpack.unpackb(val)
if val and "data" in val:
type_fields["config"] = val["data"]["data"]
except:
pass
else:
type_fields[key] = val
if len(type_fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["lxmf"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: {MSG_FIELD_TYPE_FIELDS: type_fields}}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
if "=" in val or ";" in val:
type_fields[key] = {}
keys = val.split(";")
for val in keys:
val = val.split("=")
if len(val) == 2:
type_fields[key][val[0]] = val_to_val(val[1])
else:
type_fields[key] = val
if len(type_fields) > 0:
fields[MSG_FIELD_TYPE_FIELDS] = type_fields
if len(fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["rns_server"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: fields}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
LXMF_CONNECTION = lxmf_connection(
storage_path=path,
destination_name=CONFIG["lxmf"]["destination_name"],
destination_type=CONFIG["lxmf"]["destination_type"],
display_name=display_name,
announce_data=announce_data,
announce_hidden=CONFIG["lxmf"].getboolean("announce_hidden"),
announce_data=announce_data,
send_delay=CONFIG["lxmf"]["send_delay"],
@@ -1564,11 +1574,13 @@ DEFAULT_CONFIG_OVERRIDE = '''# This is the user configuration file to override t
# This file can be used to clearly summarize all settings that deviate from the default.
# This also has the advantage that all changed settings can be kept when updating the program.
[lxmf]
display_name = LXMF Provisioning Server
announce_periodic = Yes
announce_periodic_interval = 15 #Minutes
[features]
announce_data = True
account_add = True
@@ -1577,11 +1589,13 @@ account_del = True
account_prove = True
telemetry = False
[processing]
interval = 60 #Seconds
interval_in = 10 #Seconds
interval_out = 120 #Seconds
[data]
v_s = 0.0.0 #Version software
u_s = #URL Software
@@ -1589,6 +1603,15 @@ i_s = #Info Software
cmd = #CMD
config = #Config
config_lxm = #Config as lxm string
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''
@@ -1605,6 +1628,10 @@ enabled = True
# Name of the program. Only for display in the log or program startup.
name = LXMF Provisioning Server
# Transport extended data in the announce.
# This is needed for the integration of advanced client apps.
fields_announce = True
#### LXMF connection settings ####
[lxmf]
@@ -1726,6 +1753,16 @@ i_s = #Info Software
cmd = #CMD
config = #Config
config_lxm = #Config as lxm string
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''

View File

@@ -92,6 +92,54 @@ LXMF_CONNECTION = None
SESSION = {}
TERMINAL = None
ANNOUNCE_DATA_CONTENT = 0x00
ANNOUNCE_DATA_FIELDS = 0x01
ANNOUNCE_DATA_TITLE = 0x02
MSG_FIELD_EMBEDDED_LXMS = 0x01
MSG_FIELD_TELEMETRY = 0x02
MSG_FIELD_TELEMETRY_STREAM = 0x03
MSG_FIELD_ICON = 0x04
MSG_FIELD_FILE_ATTACHMENTS = 0x05
MSG_FIELD_IMAGE = 0x06
MSG_FIELD_AUDIO = 0x07
MSG_FIELD_THREAD = 0x08
MSG_FIELD_COMMANDS = 0x09
MSG_FIELD_RESULTS = 0x0A
MSG_FIELD_ANSWER = 0xA0
MSG_FIELD_ATTACHMENT = 0xA1
MSG_FIELD_COMMANDS_EXECUTE = 0xA2
MSG_FIELD_COMMANDS_RESULT = 0xA3
MSG_FIELD_CONTACT = 0xA4
MSG_FIELD_DATA = 0xA5
MSG_FIELD_DELETE = 0xA6
MSG_FIELD_EDIT = 0xA7
MSG_FIELD_GROUP = 0xA8
MSG_FIELD_HASH = 0xA9
MSG_FIELD_ICON_MENU = 0xAA
MSG_FIELD_ICON_SRC = 0xAB
MSG_FIELD_KEYBOARD = 0xAC
MSG_FIELD_KEYBOARD_INLINE = 0xAD
MSG_FIELD_LOCATION = 0xAE
MSG_FIELD_POLL = 0xAF
MSG_FIELD_POLL_ANSWER = 0xB0
MSG_FIELD_REACTION = 0xB1
MSG_FIELD_RECEIPT = 0xB2
MSG_FIELD_SCHEDULED = 0xB3
MSG_FIELD_SILENT = 0xB4
MSG_FIELD_SRC = 0xB5
MSG_FIELD_STATE = 0xB6
MSG_FIELD_STICKER = 0xB7
MSG_FIELD_TELEMETRY_DB = 0xB8
MSG_FIELD_TELEMETRY_PEER = 0xB9
MSG_FIELD_TELEMETRY_COMMANDS = 0xBA
MSG_FIELD_TEMPLATE = 0xBB
MSG_FIELD_TOPIC = 0xBC
MSG_FIELD_TYPE = 0xBD
MSG_FIELD_TYPE_FIELDS = 0xBE
MSG_FIELD_VOICE = 0xBF
##############################################################################################################
# Terminal Class
@@ -1317,11 +1365,29 @@ def setup(path=None, path_rns=None, path_log=None, loglevel=None, service=False)
if path is None:
path = PATH
announce_data = CONFIG["lxmf"]["display_name"]
if CONFIG["main"].getboolean("fields_announce"):
fields = {}
if CONFIG["telemetry"].getboolean("location_enabled"):
try:
fields[MSG_FIELD_LOCATION] = [CONFIG["telemetry"].getfloat("location_lat"), CONFIG["telemetry"].getfloat("location_lon")]
except:
pass
if CONFIG["telemetry"].getboolean("state_enabled"):
try:
fields[MSG_FIELD_STATE] = [CONFIG["telemetry"].getint("state_data"), int(time.time())]
except:
pass
if len(fields) > 0:
announce_data = {ANNOUNCE_DATA_CONTENT: CONFIG["rns_server"]["display_name"].encode("utf-8"), ANNOUNCE_DATA_TITLE: None, ANNOUNCE_DATA_FIELDS: fields}
log("LXMF - Configured announce data: "+str(announce_data), LOG_DEBUG)
announce_data = msgpack.packb(announce_data)
LXMF_CONNECTION = lxmf_connection(
storage_path=path,
destination_name=CONFIG["lxmf"]["destination_name"],
destination_type=CONFIG["lxmf"]["destination_type"],
display_name=CONFIG["lxmf"]["display_name"],
announce_data=announce_data,
announce_hidden=CONFIG["lxmf"].getboolean("announce_hidden"),
send_delay=CONFIG["lxmf"]["send_delay"],
desired_method=CONFIG["lxmf"]["desired_method"],
@@ -1417,6 +1483,10 @@ enabled = True
# Name of the program. Only for display in the log or program startup.
name = Terminal
# Transport extended data in the announce.
# This is needed for the integration of advanced client apps.
fields_announce = False
#### LXMF connection settings ####
[lxmf]
@@ -1557,6 +1627,16 @@ replace_unnecessary_characters = True
#any
#2858b7a096899116cd529559cc679ffe
#### Telemetry settings ####
[telemetry]
location_enabled = False
location_lat = 0
location_lon = 0
state_enabled = False
state_data = 0
'''