diff --git a/MQTT_IMPLEMENTATION.md b/MQTT_IMPLEMENTATION.md index 5cbc7cbd..0053223d 100644 --- a/MQTT_IMPLEMENTATION.md +++ b/MQTT_IMPLEMENTATION.md @@ -478,7 +478,8 @@ Minimal raw packet data for map integration. "model": "device_model", "firmware_version": "firmware_version", "radio": "radio_info", - "client_version": "meshcore-custom-repeater/{build_date}" + "client_version": "meshcore-custom-repeater/{build_date}", + "repeat": "on|off" } ``` diff --git a/docs/cli_commands.md b/docs/cli_commands.md index 05c7b4c5..c5403861 100644 --- a/docs/cli_commands.md +++ b/docs/cli_commands.md @@ -766,6 +766,8 @@ This document provides an overview of CLI commands that can be sent to MeshCore - `name`: Region name - `parent_name`: Parent region name (optional, defaults to wildcard) +**Note:** In firmware **v1.15.0** and later, `region put` enables flooding for that region by default (you do not need a separate `region allowf ` after each `put`). On **v1.14.0** and earlier, new regions may still require `region allowf` for flooding—see [`region allowf`](#allow-a-region). + --- #### Remove a region diff --git a/src/helpers/MQTTMessageBuilder.cpp b/src/helpers/MQTTMessageBuilder.cpp index b784f595..d4e9ae86 100644 --- a/src/helpers/MQTTMessageBuilder.cpp +++ b/src/helpers/MQTTMessageBuilder.cpp @@ -24,7 +24,8 @@ int MQTTMessageBuilder::buildStatusMessage( int tx_air_secs, int rx_air_secs, int recv_errors, - int internal_heap + int internal_heap, + const char* repeat ) { // doc is provided by the caller (heap-allocated DynamicJsonDocument in MQTTBridge), // keeping this 768-byte scratch space off the MQTT task stack. @@ -39,7 +40,10 @@ int MQTTMessageBuilder::buildStatusMessage( root["firmware_version"] = firmware_version; root["radio"] = radio; root["client_version"] = client_version; - + if (repeat != nullptr) { + root["repeat"] = repeat; + } + // Add stats object if any stats are provided if (battery_mv >= 0 || uptime_secs >= 0 || errors >= 0 || queue_len >= 0 || noise_floor > -999 || tx_air_secs >= 0 || rx_air_secs >= 0 || recv_errors >= 0 || diff --git a/src/helpers/MQTTMessageBuilder.h b/src/helpers/MQTTMessageBuilder.h index 4930bbaa..17c649bc 100644 --- a/src/helpers/MQTTMessageBuilder.h +++ b/src/helpers/MQTTMessageBuilder.h @@ -39,6 +39,7 @@ public: * @param rx_air_secs RX air time in seconds (optional, -1 to omit) * @param recv_errors Radio receive/CRC errors (optional, -1 to omit) * @param internal_heap Internal heap free bytes (optional, -1 to omit) + * @param repeat Repeat/forwarding status ("on" or "off"); nullptr omits the field * @return Length of JSON string, or 0 on error */ static int buildStatusMessage( @@ -61,7 +62,8 @@ public: int tx_air_secs = -1, int rx_air_secs = -1, int recv_errors = -1, - int internal_heap = -1 + int internal_heap = -1, + const char* repeat = nullptr ); /** diff --git a/src/helpers/bridges/MQTTBridge.cpp b/src/helpers/bridges/MQTTBridge.cpp index dae7e053..a706f45a 100644 --- a/src/helpers/bridges/MQTTBridge.cpp +++ b/src/helpers/bridges/MQTTBridge.cpp @@ -1736,7 +1736,8 @@ void MQTTBridge::publishStatusToSlot(int index) { _origin, origin_id, _board_model, _firmware_version, radio_info, client_version, "online", timestamp, json_buffer, STATUS_JSON_BUFFER_SIZE, battery_mv, uptime_secs, errors, _queue_count, noise_floor, - tx_air_secs, rx_air_secs, recv_errors, internal_heap_free + tx_air_secs, rx_air_secs, recv_errors, internal_heap_free, + _prefs->disable_fwd ? "off" : "on" ); if (len > 0) { @@ -2425,7 +2426,8 @@ bool MQTTBridge::publishStatus() { _origin, origin_id, _board_model, _firmware_version, radio_info, client_version, "online", timestamp, json_buffer, STATUS_JSON_BUFFER_SIZE, battery_mv, uptime_secs, errors, _queue_count, noise_floor, - tx_air_secs, rx_air_secs, recv_errors, internal_heap_free + tx_air_secs, rx_air_secs, recv_errors, internal_heap_free, + _prefs->disable_fwd ? "off" : "on" ); if (len > 0) {