From 9d2fcbe1e108d221824fc5a1ead1c4cfa08e909b Mon Sep 17 00:00:00 2001 From: Andre K Date: Wed, 13 Mar 2024 20:24:49 -0300 Subject: [PATCH 1/2] use decoded packets in public MQTT range test/detection sensor filter (#3404) Co-authored-by: Ben Meadors --- src/mqtt/MQTT.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp index 4250ad5cd..c518bc4b5 100644 --- a/src/mqtt/MQTT.cpp +++ b/src/mqtt/MQTT.cpp @@ -486,9 +486,9 @@ void MQTT::onSend(const meshtastic_MeshPacket &mp, const meshtastic_MeshPacket & auto &ch = channels.getByIndex(chIndex); - if (&mp.decoded && strcmp(moduleConfig.mqtt.address, default_mqtt_address) == 0 && - (mp.decoded.portnum == meshtastic_PortNum_RANGE_TEST_APP || - mp.decoded.portnum == meshtastic_PortNum_DETECTION_SENSOR_APP)) { + if (&mp_decoded.decoded && strcmp(moduleConfig.mqtt.address, default_mqtt_address) == 0 && + (mp_decoded.decoded.portnum == meshtastic_PortNum_RANGE_TEST_APP || + mp_decoded.decoded.portnum == meshtastic_PortNum_DETECTION_SENSOR_APP)) { LOG_DEBUG("MQTT onSend - Ignoring range test or detection sensor message on public mqtt\n"); return; } From 9c37e57e750a72324ea58f6acda53168c4efae50 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 13 Mar 2024 20:27:26 -0500 Subject: [PATCH 2/2] Only allow phone to set time for fixed positions (#3403) --- src/mesh/NodeDB.h | 9 +++++++-- src/modules/PositionModule.cpp | 10 ++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h index e472f7151..20cc5c25b 100644 --- a/src/mesh/NodeDB.h +++ b/src/mesh/NodeDB.h @@ -133,8 +133,13 @@ class NodeDB meshtastic_NodeInfoLite *getMeshNode(NodeNum n); size_t getNumMeshNodes() { return *numMeshNodes; } - void setLocalPosition(meshtastic_Position position) + void setLocalPosition(meshtastic_Position position, bool timeOnly = false) { + if (timeOnly) { + LOG_DEBUG("Setting local position time only: time=%i\n", position.time); + localPosition.time = position.time; + return; + } LOG_DEBUG("Setting local position: latitude=%i, longitude=%i, time=%i\n", position.latitude_i, position.longitude_i, position.time); localPosition = position; @@ -248,4 +253,4 @@ extern uint32_t error_address; #define Module_Config_size \ (ModuleConfig_CannedMessageConfig_size + ModuleConfig_ExternalNotificationConfig_size + ModuleConfig_MQTTConfig_size + \ ModuleConfig_RangeTestConfig_size + ModuleConfig_SerialConfig_size + ModuleConfig_StoreForwardConfig_size + \ - ModuleConfig_TelemetryConfig_size + ModuleConfig_size) + ModuleConfig_TelemetryConfig_size + ModuleConfig_size) \ No newline at end of file diff --git a/src/modules/PositionModule.cpp b/src/modules/PositionModule.cpp index 4634f8fef..59f62bd5c 100644 --- a/src/modules/PositionModule.cpp +++ b/src/modules/PositionModule.cpp @@ -59,9 +59,15 @@ bool PositionModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes // to set fixed location, EUD-GPS location or just the time (see also issue #900) bool isLocal = false; if (nodeDB.getNodeNum() == getFrom(&mp)) { - LOG_DEBUG("Incoming update from MYSELF\n"); isLocal = true; - nodeDB.setLocalPosition(p); + if (config.position.fixed_position) { + LOG_DEBUG("Ignore incoming position update from myself except for time, because position.fixed_position is true\n"); + nodeDB.setLocalPosition(p, true); + return false; + } else { + LOG_DEBUG("Incoming update from MYSELF\n"); + nodeDB.setLocalPosition(p); + } } // Log packet size and data fields