Added new map report opt-in for compliance and limit map report (and default) to one hour (#6813)

* Added new map report opt-in for compliance and limit map report (and default) to one hour

* Trunk
This commit is contained in:
Ben Meadors 2025-05-14 15:31:28 -05:00 committed by GitHub
parent fc64bea698
commit 7cffd9ba70
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 12 additions and 4 deletions

View File

@ -21,6 +21,7 @@
#define default_neighbor_info_broadcast_secs 6 * 60 * 60
#define min_node_info_broadcast_secs 60 * 60 // No regular broadcasts of more than once an hour
#define min_neighbor_info_broadcast_secs 4 * 60 * 60
#define default_map_publish_interval_secs 60 * 60
#define default_mqtt_address "mqtt.meshtastic.org"
#define default_mqtt_username "meshdev"

View File

@ -328,6 +328,11 @@ NodeDB::NodeDB()
moduleConfig.telemetry.health_update_interval = Default::getConfiguredOrMinimumValue(
moduleConfig.telemetry.health_update_interval, min_default_telemetry_interval_secs);
}
if (moduleConfig.mqtt.has_map_report_settings &&
moduleConfig.mqtt.map_report_settings.publish_interval_secs < default_map_publish_interval_secs) {
moduleConfig.mqtt.map_report_settings.publish_interval_secs = default_map_publish_interval_secs;
}
// Ensure that the neighbor info update interval is coerced to the minimum
moduleConfig.neighbor_info.update_interval =
Default::getConfiguredOrMinimumValue(moduleConfig.neighbor_info.update_interval, min_neighbor_info_broadcast_secs);

View File

@ -504,7 +504,7 @@ void AdminModule::handleSetOwner(const meshtastic_User &o)
sendWarning(licensedModeMessage);
}
}
if (owner.has_is_unmessagable != o.has_is_unmessagable ||
if (owner.has_is_unmessagable != o.has_is_unmessagable ||
(o.has_is_unmessagable && owner.is_unmessagable != o.is_unmessagable)) {
changed = 1;
owner.has_is_unmessagable = o.has_is_unmessagable || o.has_is_unmessagable;

View File

@ -769,7 +769,8 @@ void MQTT::onSend(const meshtastic_MeshPacket &mp_encrypted, const meshtastic_Me
void MQTT::perhapsReportToMap()
{
if (!moduleConfig.mqtt.map_reporting_enabled || !(moduleConfig.mqtt.proxy_to_client_enabled || isConnectedDirectly()))
if (!moduleConfig.mqtt.map_reporting_enabled || !moduleConfig.mqtt.map_report_settings.should_report_location ||
!(moduleConfig.mqtt.proxy_to_client_enabled || isConnectedDirectly()))
return;
if (Throttle::isWithinTimespanMs(last_report_to_map, map_publish_interval_msecs))
@ -801,6 +802,7 @@ void MQTT::perhapsReportToMap()
mapReport.region = config.lora.region;
mapReport.modem_preset = config.lora.modem_preset;
mapReport.has_default_channel = channels.hasDefaultChannel();
mapReport.has_opted_report_location = true;
// Set position with precision (same as in PositionModule)
if (map_position_precision < 32 && map_position_precision > 0) {

View File

@ -1,5 +1,6 @@
#pragma once
#include "Default.h"
#include "configuration.h"
#include "concurrency/OSThread.h"
@ -105,8 +106,7 @@ class MQTT : private concurrency::OSThread
std::string mapTopic = "/2/map/"; // For protobuf-encoded MapReport messages
// For map reporting (only applies when enabled)
const uint32_t default_map_position_precision = 14; // defaults to max. offset of ~1459m
const uint32_t default_map_publish_interval_secs = 60 * 15; // defaults to 15 minutes
const uint32_t default_map_position_precision = 14; // defaults to max. offset of ~1459m
uint32_t last_report_to_map = 0;
uint32_t map_position_precision = default_map_position_precision;
uint32_t map_publish_interval_msecs = default_map_publish_interval_secs * 1000;