Commit Graph
114 Commits
Author SHA1 Message Date
agessaman 5a004f3770 Refactor timestamp handling in MQTTMessageBuilder
- Introduced a new method `formatIsoTimestampForMqtt` to centralize ISO-like timestamp formatting for MQTT messages, applying timezone preferences.
- Updated `buildStatusMessage`, `buildPacketJSON`, `buildPacketJSONFromRaw`, and `buildRawJSON` methods to utilize the new timestamp formatting function, improving code clarity and reducing redundancy.
- Adjusted `publishStatusToSlot` and `publishStatus` in MQTTBridge to use the new timestamp formatting method, ensuring consistent timestamp handling across status messages.
2026-05-15 10:18:02 -07:00
agessaman daf9ee4798 fix(mqtt): harden TLora MQTT observer and trim MQTT task stack use
- LilyGo T-LoRa V2.1 observer envs: set ESP32_CPU_FREQ=240 and
  MQTT_TASK_STACK_SIZE=16384 only for those targets so classic ESP32
  TLS + JWT connect fits the FreeRTOS task; other boards keep the
  default 8192 B unless overridden.
- MQTTBridge: use large JSON stack fallbacks only for PSRAM builds when
  heap-backed buffers may be null; non-PSRAM paths use the inline
  member buffers only, cutting peak stack in status/packet/raw publish.
- MQTTBridge.h: update the StaticJsonDocument comment (no longer refers
  to an 8 KiB MQTT task stack).
2026-05-13 09:13:17 -07:00
agessaman b9f478c989 Add MQTT origin handling and string utility function
Implemented a new function to strip surrounding quotes from strings in TxtDataHelpers, enhancing string manipulation capabilities. Updated CommonCLI to handle MQTT origin configuration, allowing for both setting and clearing of the mqtt.origin preference. This change improves the flexibility of MQTT origin management in the CLI.
2026-05-09 18:06:18 -07:00
agessaman 303cf8c2bd Enhance MQTT status message to include repeat status
Updated the MQTT message structure to add a new field for repeat status, allowing the indication of forwarding status as "on" or "off". This change includes modifications to the MQTTMessageBuilder and related documentation to reflect the new parameter. Additionally, updated CLI command documentation to clarify flooding behavior in different firmware versions.
2026-05-09 17:40:00 -07:00
agessaman ff031f48bb Refactor MQTT origin handling to use effective origin logic
Updated MyMesh implementations in simple_repeater and simple_room_server to set mqtt_origin to an empty string, allowing the effective origin to follow node_name during publishing. Introduced new functions in MQTTBridge to manage effective origin retrieval and refresh from preferences, ensuring consistent behavior across MQTT operations. This change simplifies the origin management and enhances clarity in the codebase.
2026-05-09 17:06:00 -07:00
agessaman 5a5e53730e fix(mqtt): add missing error codes to MQTTBridge error handling
Enhanced the MQTTBridge error handling by adding several missing error codes for Wi-Fi and TLS errors, improving the clarity of error reporting during connection issues. This update includes new cases for group cipher mismatch, invalid PMKID, and TLS handshake failures, among others.
2026-04-27 19:40:20 -07:00
agessaman 7d0c5bce50 enhance(mqtt): improve QoS handling and retry logic in MQTTBridge
Refactor the MQTTBridge to implement enhanced QoS handling for publish operations. Introduce retry mechanisms for QoS0 packets, allowing for transient failures to be retried with a delay. Update publish methods to return success status, improving error handling and logging. Additionally, adjust the packet queue processing to accommodate new retry logic and ensure better message delivery control.
2026-04-23 21:06:49 -07:00
agessaman ac2662c573 fix(mqtt): align legacy CLI with slot prefs and restore isConfigValid
Map mqtt.server/port/username/password to slot 3 (index 2) and analyzer
toggles to slot presets. Add MQTTBridge::isConfigValid matching bridge
startup rules.

Made-with: Cursor
2026-04-21 21:44:03 -07:00
agessaman e9ff1ae055 Refactor PsychicMqttClient to improve memory management and callback handling. Replace dynamic memory allocations with fixed-size arrays for callbacks, enhancing performance and reducing fragmentation. Introduce inline storage for topics and optimize buffer allocation during connection setup. Update version to 0.2.2 to reflect changes. 2026-04-21 20:43:09 -07:00
agessaman 1ff9437f73 Enhance MQTTBridge with improved memory management and logging. Introduce deferred logging for connection attempts based on heap availability, and implement QoS support in publish methods for better message delivery control. Add mechanisms to handle low memory conditions, including a gray-zone detection for TLS viability and a post-recovery escalation strategy to ensure system stability. 2026-04-19 15:33:38 -07:00
agessaman f4a4fd7c80 Enhance MQTTBridge memory management by introducing critical heap monitoring and deferred TLS connection attempts based on available heap size. Implement a hard restart mechanism for prolonged low memory conditions to prevent fragmentation. Preserve backoff state during MQTT client recreation to improve recovery from connection failures.
Made-with: Cursor
2026-04-17 08:56:59 -07:00
agessaman ab6685a1a7 Update MQTTBridge to optimize memory management by replacing dynamic JSON document allocations with inline StaticJsonDocument instances. Adjust authentication token handling to use inline buffers, reducing heap fragmentation. Modify PSRAM allocation logic for raw data and JSON buffers to enhance performance on PSRAM-enabled boards. Update related comments for clarity. 2026-04-16 07:56:45 -07:00
agessaman ff2df2b712 Refactor MQTTMessageBuilder to accept external JsonDocument parameters for status and packet messages, reducing stack usage and improving memory management. Update MQTTBridge to allocate and reuse DynamicJsonDocument instances for JSON serialization, enhancing performance and efficiency during publish operations. 2026-04-14 18:07:02 -07:00
agessaman 0c190dac50 Refactor MQTTBridge to eliminate raw data mutex usage, simplifying raw data handling. Introduce core-specific staging for raw radio data, ensuring thread safety without mutexes. Adjust MAX_QUEUE_SIZE for memory efficiency and update related comments for clarity. 2026-04-14 16:55:55 -07:00
agessaman 7e4f75c9a5 Add radio diagnostics support in MyMesh and CommonCLI
Implement a new method `formatRadioDiagReply` in MyMesh to format and return radio diagnostic information. Update CommonCLI to handle the new command for retrieving radio diagnostics. Enhance the Dispatcher class with a radio watchdog feature to monitor and recover from silent radio states. Introduce new error flags and methods in the Dispatcher and RadioLibWrapper classes to support these diagnostics, improving overall radio management and troubleshooting capabilities.
2026-04-10 08:48:22 -07:00
agessaman 74e45a795c Enhance MQTTMessageBuilder to include internal heap memory statistics in status messages. Update function signature and JSON serialization to accommodate the new internal_heap parameter, improving diagnostics for memory management in MQTTBridge. 2026-04-06 18:00:50 -07:00
agessaman 3b46e9eeed Enhance MQTT bridge implementation by adding support for the TennMesh preset, including fixed username/password authentication. Update documentation to reflect new preset details and modify error messages in CommonCLI for improved clarity. Adjust MQTTBridge to handle new authentication methods and ensure proper connection management across all slots. 2026-04-05 22:38:56 -07:00
agessaman 47b632aaa9 Refactor MQTT bridge handling in MyMesh to support RX and TX packet logging based on MQTT settings. Introduce mqtt_rx_enabled preference for default RX packet handling and update related logic in CommonCLI and MQTTBridge for improved configuration management. Enhance MQTTMessageBuilder to conditionally include SNR and RSSI for RX packets only. 2026-04-04 16:01:35 -07:00
agessaman 258a0d724c Update MQTTBridge to use runtime-configurable MQTT slot limits based on PSRAM availability. Modify related logic in MQTTBridge.cpp and MQTTBridge.h to replace static MAX_MQTT_SLOTS with RUNTIME_MQTT_SLOTS. Adjust platformio.ini to reduce verbosity of debug logging for improved performance. 2026-04-04 13:48:34 -07:00
agessaman f0962efff4 Remove obsolete CoolTerm capture file and enhance MQTTBridge diagnostics by adding disconnect count and first disconnect time tracking. Update MQTTBridge.h and MQTTBridge.cpp to support new diagnostic features, and modify platformio.ini files to adjust WiFi transmission power settings for various variants. Update MQTT_IMPLEMENTATION.md with new TLS timeout build profiles for improved logging and troubleshooting. 2026-04-02 06:40:34 -07:00
agessaman cf4ec3f6b4 Enhance MQTTBridge memory management by introducing a pre-allocated status JSON buffer in PSRAM, reducing allocation overhead during status publish operations. Update NTP synchronization to use a lightweight, non-blocking refresh method, and improve memory pressure handling by adjusting thresholds for publish operations. Update platformio.ini to reflect changes in SSL certificate source configuration. 2026-03-31 19:46:52 -07:00
agessaman 0e82271eb1 Implement WiFi disconnect diagnostics in MQTTBridge and CommonCLI. Add functionality to retrieve and format last WiFi disconnect reasons for improved troubleshooting. Update CommonCLI to handle diagnostic commands and enhance error reporting in MQTTBridge, ensuring better visibility into connection issues. 2026-03-31 14:45:47 -07:00
agessaman 1263e71d31 Enhance MQTT implementation by adding support for JWT audience configuration in custom slots. Update MQTTBridge and CommonCLI to handle audience settings, enabling JWT authentication for custom brokers. Modify documentation to reflect changes in command usage and provide examples for custom broker setup with JWT authentication. 2026-03-30 21:44:05 -07:00
agessaman da775bb281 Enhance MQTT implementation with updated partition table guidance and merged firmware flashing instructions. Add support for new SSL certificate sources in the generate_cert_bundle script, and integrate embedded CA bundle handling in MQTTBridge and CommonCLI. Update platformio.ini files across multiple variants to include new certificate bundle configurations and scripts for improved SSL support. 2026-03-30 17:05:01 -07:00
agessaman 202acacfe1 Enhance MQTT implementation by adding optional SNMP support, allowing for monitoring and management of MQTT statistics. Update configuration options to include SNMP settings, and modify the MQTTBridge to integrate SNMP agent functionality. Additionally, improve documentation for the MQTT observer setup and expand the number of concurrent MQTT connection slots from 3 to 5, enhancing overall flexibility and performance. 2026-03-28 17:08:32 -07:00
agessaman 3eacf56e36 Update MQTT presets to add 'meshomatic' and enhance error handling in MQTTBridge. Modify custom preset logic to disable slots with no server configured, and improve error logging for connection issues, ensuring clearer diagnostics during MQTT operations. 2026-03-27 15:20:54 -07:00
agessaman 47dd218275 Enhance MQTTBridge memory management by introducing a pre-allocated JSON publish buffer in PSRAM. This change reduces allocation overhead during publish operations and improves overall efficiency. Additionally, update teardown logic to free the new buffer and refine broker URI handling for custom slots, ensuring proper connection management. 2026-03-26 21:10:44 -07:00
agessaman 1b5884bd35 Add reconnect method to PsychicMqttClient for improved MQTT client management
This commit introduces a new `reconnect` method in the `PsychicMqttClient` class, allowing for re-establishing a connection to the MQTT broker without needing to disconnect first. The method checks if the client is initialized, updates the configuration if necessary, and attempts to reconnect, enhancing the overall connection management. Additionally, the MQTT slot management has been updated to support up to 6 configurable slots, improving flexibility in connection handling.
2026-03-25 21:39:51 -07:00
agessaman af52a989c4 Enhance MQTTBridge connection handling for JWT authentication by implementing lightweight reconnect logic. This allows for token refresh without full teardown when tokens are still valid, improving efficiency. Full teardown is retained for expired or near-expiry tokens to ensure fresh TLS state and credentials. Update debug logging for clarity on reconnect attempts and token status. 2026-03-25 17:42:04 -07:00
agessaman e29c3d96bc Refactor MQTTBridge connection handling for JWT authentication. Implement full teardown and setup for JWT slots to ensure fresh TLS state and credentials during reconnect attempts. Preserve circuit breaker and backoff states across teardown to enhance connection stability and reliability. 2026-03-24 20:35:37 -07:00
agessaman 2bbca20648 Refactor MQTTBridge logging to standardize slot output format. Update debug messages to include 'MQTT' prefix and slot numbering for improved clarity in logs. This change enhances readability and consistency across the MQTTBridge's logging functionality. 2026-03-24 18:55:30 -07:00
agessaman eaf5fcbc9b Update MQTT presets to include 'cascadiamesh' and enhance error messaging in CLI. Introduce keepalive configuration for MQTT presets and improve slot management in MQTTBridge for better token handling and connection stability. 2026-03-24 16:58:26 -07:00
agessaman 1c98d1c605 Update MQTTBridge to adjust minimum valid epoch time for NTP synchronization and enhance slot management. Implement logic to re-create JWT tokens for slots if time correction indicates stale tokens after NTP sync. 2026-03-24 05:54:38 -07:00
agessaman 4a60f16683 Refactor logging and error handling in MyMesh and MQTTBridge. Implement checks for Serial availability before printing logs to prevent potential blocking. Update MQTTBridge to include circuit breaker logic for managing reconnect attempts and enhance slot management with new state tracking. Expand MQTTPresetDef to include a new preset with configurable token lifetime and retain options. 2026-03-23 20:21:47 -07:00
agessaman 95874f0c24 Enhance MQTT bridge implementation to support a new MeshRank preset, allowing for token-based authentication and custom topic templates. Update CLI commands for slot management, including new commands for setting tokens and topics. Improve documentation to reflect these changes and provide examples for configuring the new preset. 2026-03-22 11:06:37 -07:00
agessaman 542f8a31ee Enhance MQTTBridge to manage active connection slots based on available memory. Introduced psram_calloc for memory allocation with PSRAM support, limiting active slots to 3 with PSRAM and 2 without. Updated slot setup logic to prevent exceeding active slot limits during MQTT operations. 2026-03-20 22:50:39 -07:00
agessaman b43e9618db Refactor MQTT bridge implementation to support up to 3 configurable connection slots with built-in presets for LetsMesh Analyzer (US/EU) and MeshMapper. Update CLI commands for slot management and enhance configuration migration from legacy settings. Adjust related documentation and code structure for improved clarity and functionality. 2026-03-20 22:41:41 -07:00
agessaman 2d4b7a647a Enhance MQTT client configuration by setting keepalive interval to 45 seconds to maintain WebSocket connections through Cloudflare proxy. 2026-02-16 09:41:53 -08:00
Adam Gessaman f98c663406 Refine memory pressure management in MQTTBridge
- Updated pressure window and threshold constants to differentiate between critical and moderate memory pressure scenarios.
- Enhanced recovery logic to trigger based on specific pressure conditions, improving responsiveness to memory fragmentation.
- Added explicit calls to recreate analyzer client objects during recovery, ensuring proper setup after memory management actions.

These changes aim to optimize memory handling and recovery processes in the MQTTBridge, enhancing overall stability.
2026-02-09 09:48:34 -08:00
agessaman ba4243b525 Enhance NTP synchronization in MQTTBridge
- Improved NTP sync logic by implementing retry attempts for NTP updates, enhancing reliability on various hardware.
- Added a fallback mechanism to use ESP32's built-in SNTP if NTPClient fails, ensuring time synchronization continuity.
- Updated the handling of epoch time validation to ensure it meets a minimum threshold before proceeding with time updates.
- Streamlined the process of setting the system timezone and updating the RTC clock, improving overall time management efficiency.
2026-02-06 20:57:18 -08:00
Adam Gessaman 2640127049 Enhance NTP sync handling in MQTTBridge
- Updated the logic for JWT token timestamp validation to allow reconnection if the system clock is set, even when NTP sync is not confirmed. This change prevents unnecessary connection blocks after a successful NTP sync at boot.
- Introduced a check to determine if the system clock is clearly set, improving the robustness of the connection maintenance process.
2026-02-06 05:54:19 -08:00
Adam Gessaman bebde37fb7 Refactor MQTTBridge memory management with unified critical check
- Introduced a new method `runCriticalMemoryCheckAndRecovery()` to streamline memory checks and recovery processes.
- Added member variables to track fragmentation pressure and the last critical check run time.
- Removed redundant critical memory check logic from `mqttTaskLoop()` and `loop()`, enhancing code clarity and maintainability.
- Improved logging and pressure tracking for better diagnostics during memory management.
2026-02-05 21:45:23 -08:00
agessaman 26aaace9e9 Enhance MQTTBridge with improved WiFi management and fragmentation recovery
- Added new member variables to track WiFi connection state and implement exponential backoff for reconnection attempts.
- Refactored WiFi monitoring logic into a dedicated function to streamline the mqttTaskLoop.
- Introduced fragmentation recovery logic to handle memory pressure more effectively, ensuring MQTT clients are recreated when necessary.
- Reset reconnect backoff attempts upon successful connection to the main broker.

These changes aim to improve the stability and performance of the MQTTBridge under varying network conditions.
2026-02-04 21:40:16 -08:00
agessaman 1d0d33f939 Add PSRAM support for memory management in MQTTBridge
- Introduced PSRAM-aware memory allocation functions (`psram_malloc` and `psram_free`) to optimize memory usage on ESP32 boards with external RAM.
- Updated MQTTBridge initialization to allocate JWT token buffers and raw data storage in PSRAM when available.
- Enhanced FreeRTOS queue creation to utilize PSRAM for storage, improving memory efficiency.
- Implemented dynamic allocation for JSON buffers in PSRAM during status publishing and packet handling, reducing stack usage.
- Ensured proper memory cleanup for PSRAM allocations in the `end` method to prevent memory leaks.

This update aims to enhance performance and stability in memory-constrained environments by leveraging available PSRAM resources.
2026-02-04 20:02:32 -08:00
agessaman abcfe60948 Add PSRAM diagnostics to MQTTBridge initialization
- Implemented PSRAM availability checks and logging to assist in debugging memory fragmentation on boards with external RAM.
- Enhanced logging to provide detailed information about PSRAM size, free memory, and initialization status.
- Updated platformio.ini files across multiple variants to remove obsolete mbedTLS configuration flags, streamlining the build process.
2026-02-04 18:59:19 -08:00
Adam Gessaman ccaaa534ff Added MQTTBridge memory management and debugging capabilities
- Added memory debugging features to log heap usage and fragmentation recovery for MQTT clients.
- Introduced `recreateMqttClientsForFragmentationRecovery()` to manage MQTT client lifecycles and reduce memory fragmentation.
- Updated critical memory checks to log detailed heap statistics and active MQTT client counts.
- Included new debug logging for memory status every 60 seconds when memory debugging is enabled.

This update aims to improve stability and performance in memory-constrained environments.
2026-02-04 18:28:17 -08:00
agessaman 498566e6c9 MQTT bridge: fix memory use, improve status reporting
- Main broker: only allocate _mqtt_client when custom broker configured
  (analyzer-only saves one PsychicMqttClient). Reconnect main broker after
  forced disconnect with 30s throttle; set last_attempt on disconnect so
  throttle applies and avoids reconnect storms on flaky WiFi.
- Analyzer clients: call disconnect() when WiFi transitions to disconnected
  so ESP-IDF frees MQTT buffers (it does not free on WiFi drop). Reduces
  fragmentation and Max drop after disconnect/reconnect cycles.
- get wifi.status: report WiFi uptime (Xd Xh Xm Xs) when WITH_MQTT_BRIDGE.
  Track connect time in bridge; backfill when already connected at first check.
- get mqtt.status: show msgs on/off, broker (connected/disconnected/n/a),
  analyzer US/EU (connected/disconnected/off), and queue count.

Note: PsychicMqttClient change (register event only on first client creation)
belongs in the library repo if committed separately.
2026-02-02 19:09:31 -08:00
agessaman f91b715e51 Refactor MQTTBridge packet handling to clarify ownership and memory management
- Updated comments to specify that the Dispatcher owns the packet memory and should handle freeing.
- Removed unnecessary calls to free queued packets in the MQTTBridge, ensuring only references are discarded.
- Enhanced code clarity regarding packet lifecycle management in the end and processPacketQueue methods.
2026-01-31 22:19:19 -08:00
agessaman ee57731441 Add receive error tracking to Dispatcher and MQTT message builder
- Introduced `getPacketsRecvErrors()` method in `Dispatcher` to track receive errors.
- Updated `buildStatusMessage()` in `MQTTMessageBuilder` to include `recv_errors` parameter.
- Modified `publishStatus()` in `MQTTBridge` to retrieve and send receive error statistics.
- Adjusted `RadioLibWrappers` to override `getPacketsRecvErrors()` for consistency.
2026-01-29 19:18:52 -08:00
agessaman 9e1ce23ed1 Optimize MQTTBridge memory usage and NTP synchronization handling
- Updated NTP synchronization logic to prevent multiple simultaneous syncs, enhancing stability.
- Optimized buffer allocation for JSON messages, reducing stack memory usage by using size-adaptive buffers.
- Improved publish functions to utilize active buffers based on packet size, ensuring efficient memory management.
2026-01-24 17:19:26 -08:00