Meshtastic Modules and Plugins

Telemetry Module: Device, Environment, and Power

The Telemetry module broadcasts sensor data from your node across the mesh - battery voltage, temperature, humidity, barometric pressure, and more. Other nodes receive this data and display it in the app, and it can be forwarded to external systems via MQTT.

Enabling Telemetry

In the Meshtastic app: Radio Config → Modules → Telemetry

Via CLI:

meshtastic --set telemetry.device_update_interval 900
meshtastic --set telemetry.environment_update_interval 900
meshtastic --set telemetry.power_update_interval 900

Intervals are in seconds. Setting to 0 disables that telemetry type. The default of 900 seconds (15 minutes) is appropriate for most deployments.

Device Telemetry

Device telemetry is always available - it reports internal state from the node itself, no external sensors required:

FieldSourceNotes
Battery level (%)Hardware ADCAccuracy varies by board; some boards always report 100% if battery not detected
Voltage (V)Hardware ADCUseful for deriving SoC for LiFePO4 packs
Channel utilization (%)Radio statsPercentage of airtime used; over 25% indicates congestion
Air utilization TX (%)Radio statsPercentage of time this node was transmitting
Uptime (seconds)System clockResets on power cycle

Environment Telemetry

Requires an external I2C sensor. Supported sensors include:

SensorMeasuresI2C AddressNotes
BME280Temp, Humidity, Pressure0x76 or 0x77Most popular; inexpensive; not suitable for air quality
BME680Temp, Humidity, Pressure, VOC/IAQ0x76 or 0x77Adds air quality index; requires 5-minute warmup
SHT31Temp, Humidity0x44 or 0x45High accuracy; ±0.3°C, ±2% RH
MCP9808Temperature only0x18-0x1F±0.25°C accuracy; for precision temperature monitoring
SHTC3Temp, Humidity0x70Low power; used on some integrated boards
meshtastic --set telemetry.environment_measurement_enabled true
meshtastic --set telemetry.environment_screen_enabled true

Power Telemetry

Requires an INA219 or INA260 current sensor on the I2C bus. Reports voltage, current draw, and calculated power consumption - useful for monitoring solar systems and diagnosing battery drain.

meshtastic --set telemetry.power_measurement_enabled true

Telemetry Intervals and Airtime Impact

Every telemetry broadcast consumes airtime. At Long Fast preset, a telemetry packet takes approximately 0.3-0.5 seconds of airtime. At 15-minute intervals with one sensor type, this is negligible. But if you enable all three telemetry types at 5-minute intervals on a busy network, the combined airtime impact becomes meaningful. As a guideline:

Store and Forward Module

The Store and Forward module lets a designated node buffer messages for clients that were offline when a message was sent. When the offline client reconnects to the mesh, it can request the message history and receive messages it missed.

How Store and Forward Works

  1. A node configured as a Store and Forward server (typically a fixed repeater with reliable power) listens to all channel traffic and stores messages in flash memory.
  2. When a client node that was offline reconnects, it sends a heartbeat to indicate it is online.
  3. The client can then request history from the Store and Forward server.
  4. The server replays stored messages to the requesting client.

Enabling on a Server Node (Repeater)

Configure the node that will store messages:

meshtastic --set store_and_forward.enabled true
meshtastic --set store_and_forward.is_server true
meshtastic --set store_and_forward.records 100

records sets the maximum number of messages to store (circular buffer; oldest messages are overwritten). Default 100; increase up to the flash capacity of your device (ESP32 has more flash than nRF52840 for this purpose).

Enabling on a Client Node

Client nodes that want to receive history need the module enabled:

meshtastic --set store_and_forward.enabled true
meshtastic --set store_and_forward.is_server false

The client will automatically request history when it comes online and can see the server node.

Limitations and Considerations

Best Deployment Practice

Deploy Store and Forward on your highest-uptime fixed node - typically the primary community repeater with mains or solar power. This is the node most likely to have been online and collecting messages during the period a user was offline.

Range Test Module

The Range Test module automates signal strength measurement for deployment validation - letting you map exactly where in your coverage area packets arrive successfully, and at what SNR and RSSI values.

What the Range Test Module Does

Range Test operates as a sender/receiver pair:

Setting Up a Range Test

Configure the Sender Node

meshtastic --set range_test.enabled true
meshtastic --set range_test.sender 60

sender is the interval in seconds between test packets. 60 seconds works well for driving tests; 30 seconds for walking tests where you move slower.

Configure the Receiver

meshtastic --set range_test.enabled true
meshtastic --set range_test.save true

With save true, received packets are logged to a file called rangetest.csv in the root of the device's SD card (if equipped) or internal storage.

Conducting a Range Test Drive

  1. Place the sender node at your repeater location or test deployment point. Ensure it has GPS lock and is transmitting.
  2. Configure your phone/portable node as the receiver.
  3. Drive or walk through your intended coverage area.
  4. After the test, retrieve the CSV file. Each row contains: timestamp, GPS lat/lon, SNR, RSSI, sequence number.
  5. Import the CSV into Google Maps (My Maps), QGIS, or any mapping tool to visualize coverage.

Interpreting Results

RSSISNRConnection Quality
-80 to -100 dBm>5 dBExcellent - reliable delivery
-100 to -115 dBm0 to 5 dBGood - occasional packet loss
-115 to -125 dBm-5 to 0 dBMarginal - 20-40% packet loss
Below -125 dBmBelow -10 dBEdge of range - unreliable

Note: LoRa can decode packets at negative SNR values (down to approximately -20 dB depending on Spreading Factor) - this is one of its most remarkable properties. RSSI alone is not the full picture; low RSSI with high SNR can still be a reliable link.

Using Range Test for Repeater Placement Decisions

Deploy a temporary repeater at a candidate site, run a range test drive across the intended coverage area, then compare the CSV output against a test from your next-best candidate site. This gives objective, data-driven evidence for repeater placement decisions rather than guessing based on map topology alone.

External Notification and Canned Messages

External Notification Module

The External Notification module triggers a visual or audio alert on the node hardware when a message is received - useful for heads-up awareness without constantly watching a screen.

Configuration

meshtastic --set external_notification.enabled true
meshtastic --set external_notification.output_ms 1000
meshtastic --set external_notification.active true
meshtastic --set external_notification.alert_message true

output_ms is how long to activate the output in milliseconds. active sets the logic level (true = active high output). alert_message triggers on incoming text messages; alert_bell triggers on all message types.

Hardware Outputs

The module drives a GPIO pin that can trigger:

Most T-Beam and Heltec boards have accessible GPIO pins; consult your board's pinout documentation for safe GPIO numbers (avoid pins used by LoRa, I2C, and UART).

Canned Messages Module

The Canned Messages module allows quick message sending from the device hardware without using the phone app - ideal for when you have a dedicated node with a small rotary encoder or button input.

Use Case

Deploy a node in a fixed location (workshop, vehicle, equipment room) with a rotary encoder. The user can navigate a pre-programmed list of messages and send them with a button press, without needing to open a phone app. Useful for sending routine status messages in situations where opening a phone is inconvenient.

Configuration

meshtastic --set canned_message.enabled true
meshtastic --set canned_message.messages "OK|On my way|Need help|ETA 10 min|Stand by"

Messages are separated by pipe characters. Maximum total length is limited by protobuf message size; keep individual messages short.

Input Hardware

Requires a rotary encoder connected to GPIO pins, or can use UP/DOWN/SELECT button inputs. Configure the GPIO pin assignments:

meshtastic --set canned_message.inputbroker_pin_a 39
meshtastic --set canned_message.inputbroker_pin_b 40
meshtastic --set canned_message.inputbroker_event_cw MSG_INPUT_EVENT_NEXT
meshtastic --set canned_message.inputbroker_event_ccw MSG_INPUT_EVENT_PREV

Pin numbers are board-specific. The RAK WisBlock Input module provides a pre-built button/encoder input board compatible with the WisBlock system.

Serial, MQTT, and Ambient Light Modules

Serial Module

The Serial module lets external hardware send and receive Meshtastic messages over a UART serial connection - enabling integration with microcontrollers, GPS units, custom sensors, and computer software.

Modes of Operation

ModeDescriptionUse Case
DEFAULTRaw bytes in/out, app-layer messagesArduino/ESP32 integration
SIMPLENewline-delimited text in/outSimple text message bridging
PROTOProtobuf framingFull programmatic access
NMEAOutputs NMEA sentences from node GPSFeeding position to chartplotters
CALTOPOCalTopo-compatible position formatSAR map integration

Configuration

meshtastic --set serial.enabled true
meshtastic --set serial.mode SIMPLE
meshtastic --set serial.rxd 16
meshtastic --set serial.txd 17
meshtastic --set serial.baud BAUD_9600

RXD/TXD pin numbers are board-specific. In SIMPLE mode, text sent to the serial port (terminated with newline) is broadcast as a mesh message; received mesh messages are printed as text to the serial port.

MQTT Module

The MQTT module directly connects a Meshtastic node to an MQTT broker (internet required), enabling cloud integration without a separate gateway computer.

meshtastic --set mqtt.enabled true
meshtastic --set mqtt.address "mqtt.meshtastic.org"
meshtastic --set mqtt.username "meshdev"
meshtastic --set mqtt.password "large4cats"
meshtastic --set mqtt.root "msh"
meshtastic --set mqtt.uplink_enabled true
meshtastic --set mqtt.downlink_enabled false

Topic Structure

Meshtastic publishes to: msh/{region}/{channel_name}/{packet_type}

Example: msh/US/LongFast/text for text messages on the LongFast channel in the US region. Subscribe with wildcards: msh/US/# to receive all traffic from US nodes.

Ambient Light Sensor Module

When a supported ambient light sensor (BH1750, VEML7700, or TSL2591) is connected via I2C, this module adjusts the screen backlight brightness automatically based on ambient light conditions - reducing battery drain in dark environments and ensuring readability in sunlight.

meshtastic --set ambient_lighting.led_state true
meshtastic --set ambient_lighting.current 10

Also works with RGB LED hardware (NeoPixel/WS2812) to set a status color. current is the LED current in milliamps (for current-controlled LEDs). For the screen backlight use case, no explicit configuration is needed beyond enabling the module - brightness is automatically managed.