MeshAutoResponder (MAR)
Systron, LLC · Firmware 1.1.1
Designed and tested originally on an ESP32-S3 N16R8 development board: 16 MB flash and 8 MB octal PSRAM. MAR is a separate accessory; the radio node retains Meshtastic firmware.
Quick start
- Join
MeshAutoResponder-Setupwith passwordESP32MESH. - Open
http://192.168.4.1/wifi. Web login:admin/ESP32MESHon a new unit, or your saved password. - Save your 2.4 GHz Wi-Fi network. Rejoin that network and open the OLED IP or
http://meshautoresponder.local/. mDNS may not work on every network; the IP remains available. - Change the web password and configure your commands. Keep MAR and the radio node in matching serial modes.
Primary-channel responses are restricted by default in PROTO mode. MAR responds to DMs and private/secondary channels without enabling Primary. Dedicated infrastructure-node operators can enable Primary responses in the firmware dashboard by confirming the infrastructure-node checkbox and turning on the Primary option. This safer default reduces unwanted automated traffic from general-purpose nodes.
Wi-Fi and weather location start blank. Fresh installs contain four disabled command examples. Configure and enable only the commands you want to answer. Existing saved commands (including an intentionally empty list) are preserved by updates; Load example rows restores a preview for review and saving.
iOS blank captive window
The automatic login window can fail to show the browser authentication prompt. This does not mean Wi-Fi or the clock has failed.
- Stay connected to
MeshAutoResponder-Setup. Choose Without Internet if offered. Simply cancelling may disconnect you. - Open Safari and type
http://192.168.4.1/wifi(not HTTPS). - Sign in as admin with your current web password and save your network.
No erase is needed. See Apple captive Wi-Fi guidance.
PROTO versus TEXTMSG
| Feature | PROTO | TEXTMSG |
|---|---|---|
| Custom replies / help / weather | Yes | Yes |
| DM and incoming-channel routing | DM in → DM out; channel in → same channel out | No reliable addressing; all replies use node default channel |
| Ping hop count | When packet metadata permits | Custom text only, no hops |
| Node and sensor telemetry | Cached data, when reported | Unavailable; telemetry actions skipped |
| Status action | Node metrics plus MAR/Wi-Fi | MAR uptime and Wi-Fi only |
| Terminal receive filter | Primary channel 0 only; no DMs | UART text only; source channel/DM unknown |
PROTO is recommended for dedicated infrastructure nodes. It exposes structured packets and supports advanced actions, but uses the client API and can compete with another phone/client for API data depending on node firmware. It does not inherently turn off Bluetooth, but simultaneous phone use is not guaranteed. Test your node/firmware combination. The radio continues normal mesh relaying according to its configured role; choosing a serial mode does not itself set a router role.
TEXTMSG is simpler and does not use MAR's protobuf client polling. It is useful for basic public keyword replies, but loses addresses, channel IDs, hop metadata and telemetry. Sender short names are not verified identities; rate limits group matching short names together.
PROTO response policy: the safe default accepts DMs and private/secondary channels while ignoring Primary. Replies return by DM or on the same private channel. Primary commands and replies require both an explicit infrastructure-node confirmation and the Primary opt-in. TEXTMSG cannot enforce this policy because destination and channel identity are unavailable.
TEXTMSG may expose incoming DM text on UART. MAR cannot identify that it was private: an automatic reply is public on the default channel. Do not use sensitive replies in this mode. Incoming behavior varies with node firmware. Keep Echo off to avoid loops.
- In the dashboard expand Protocol and choose the mode.
- Save mode & restart. MAR saves the choice without deleting commands or credentials.
- Separately change the node's Serial module to the same mode at 38400 baud. The dashboard switch does not reconfigure the radio.
- Test a known command from another node. If the link fails, return to the portal and select the former mode.
Reference: Meshtastic Serial implementation and client API implementation.
Commands and actions
| Disabled example | Action |
|---|---|
| !ping | “Received” plus RX hops in PROTO; custom text only in TEXTMSG. |
| !status | Node/MAR status, limited to MAR/Wi-Fi in TEXTMSG. |
| !weather | Current internet weather for the saved city/state. |
| !help | Lists enabled commands supported in the active mode. |
Choose unique names such as !myrelay, *myweather, or %mystatus. Avoid common words and do not use #. Names: 2–16 characters; prefix !, * or %, then lowercase letters, digits or underscore. Text: 1–200 UTF-8 bytes. Up to 12 commands. Matching ignores letter case and surrounding spaces, not extra words. Unknown/disabled commands are silent.
Editing does not save until Save changes is pressed. Load example rows replaces the editor preview only after confirmation; no automatic overwrite of saved commands occurs. Telemetry actions remain saved but inactive in TEXTMSG.
PROTO telemetry actions use the latest received device, PowerMetrics CH1/CH2/CH3, or environment report; these can come from a remote node and the reply identifies its node ID. CH1–CH3 are telemetry fields, not extra MAR GPIOs or mesh channels. INA219 mapping depends on node firmware; do not assume CH3 on every board. Cached data can be stale; these are not safety-critical readings.
Rate limits: one accepted command per sender per 15 seconds, at least 3 seconds globally, and 10 per minute. Manual sends also have a 15-second limit. All outgoing text shares a 3-second/10-per-minute limit. A pending weather request blocks more commands and manual sends. Lost UART data or radio delivery is not automatically retried by MAR.
Dashboard terminal, counters and clock
The Primary terminal sends broadcasts only, never manual DMs. In PROTO it shows only channel 0 broadcasts. In TEXTMSG, received lines cannot be filtered by channel or destination and are explicitly labeled as unknown. Last 24 messages are kept in RAM and cleared on reboot. It is not a raw serial or debug terminal.
“Handed to node” means the serial write succeeded, not that another node received the transmission. Session counters reset on reboot. Lifetime text RX/TX is saved roughly once per minute; sudden power loss can lose the last minute. It excludes non-text LoRa traffic and other transmissions the node sends independently. The internet clock displays local browser time after NTP synchronization. Waiting for time during setup/offline operation is normal.
Heard Nodes (PROTO only)
MAR records up to 1,000 packet senders actually observed through the attached node, newest first. It shows identity when NodeInfo is available, last-heard time, packet count, signal metadata, channel, hops and reported battery. Relayed reception is not direct RF range; MQTT and unknown hops are labeled instead of guessed. Records save about every ten minutes, so sudden power loss can lose the latest interval. The oldest entry is replaced at capacity. Clear history permanently removes this database but does not erase commands or Wi-Fi.
Meshtastic node setup
- Connect your phone/client to the node and open Settings → Module Configuration → Serial (menu names vary).
- Enabled: on. Mode: PROTO or Text Message, matching MAR. Baud: 38400. Echo: off. Override Console Serial Port: off.
- Choose unused node RX/TX GPIOs based on its exact schematic. Save, allow reboot and read back settings.
- Power down before wiring. Cross TX and RX and connect ground. Test from another mesh node.
Do not use GPS, radio, display, flash, USB or boot-strapping pins without verifying conflicts. There is no universal node GPIO pair.
Station G2 example only
Node RX=17, TX=18: G2 IO18 → MAR GPIO17/RX; G2 IO17 ← MAR GPIO18/TX; ground to ground. Use IO17/IO18 connector positions—not TXD0/RXD0. Verify board revision before wiring.
Hardware reference and used pins


This schematic identifies only the connections MAR uses; it is not a physical header-position drawing.
| MAR pin | Connection |
|---|---|
| GPIO17 RX | Node's configured TX (3.3 V logic). |
| GPIO18 TX | Node's configured RX (3.3 V logic). |
| GPIO8 SDA / GPIO9 SCL | Display SDA / SCL respectively. |
| 3V3 / GND | Display VCC / GND, only if the display is rated for 3.3 V. |
| GND | Common ground with node, display and selected supply. |
| 3V3 input, conditional | Node VCC → MAR 3V3 only after verifying a regulated 3.3 V rail and enough spare current for ESP32 Wi-Fi peaks plus display. This bypasses the MAR regulator. |
| 5V input, alternative | Verified regulated 5 V supply → MAR 5V pin, only if supported by that dev board. Never connect 5 V to 3V3 or a GPIO. |
“VCC” is not a voltage specification. Do not connect an unverified node VCC or a raw battery to MAR. If the node cannot supply sufficient power, use a separate regulated supply and common ground. Use one power source at a time; disconnect node power while USB powers MAR unless the board's power-isolation design is verified. Power off before continuity testing or rewiring.
Espressif documents mutually exclusive USB, 5V-header and 3V3-header supply options; third-party boards require their own schematic check.
Errors, LEDs and troubleshooting
| Indication | Explanation / next check |
|---|---|
| Blinking red / PROTO waiting | No recent node contact. Check crossed UART pins, common ground, matching mode and 38400 baud. It does not necessarily mean Wi-Fi is offline. |
| Dim blue-green / TEXTMSG | Wi-Fi ready, but no protocol handshake exists to prove the radio connection. Test an actual command. |
| Cyan blink / amber blink | Setup hotspot active / Wi-Fi offline. Saved credentials are retained. |
| Green / blue / purple | PROTO node plus Wi-Fi ready / command accepted / text handed to UART (not RF delivery confirmation). |
| Send blocked / UART failed | Rate limit, restart pending, PROTO not ready or write failure. Wait and verify wiring/mode. Terminal network error means outcome may be unknown—check before retrying. |
| Weather unavailable | WIFI OFFLINE: connect internet. SET LOCATION: save city/state. SERVICE/REQUEST: provider or network failure. DATA/NO CURRENT DATA: response was invalid or missing values. Retry later; do not erase settings. |
| Telemetry unavailable | No matching report received. Enable the node's telemetry/sensor module and use PROTO. CH values absent from the node cannot be invented. |
| Suppressed | Rate limit, weather request pending, restart pending, or unsupported TEXTMSG action. Not a lost setting. |
| Storage degraded / save failed | Nonvolatile save or recovery copy failed. Export commands and inspect logs; do not erase before preserving data. |
| Wrong firmware / partition mismatch | Updater rejected the image to protect existing data. Use the correct N16R8 MAR package and keep full/update filenames distinct. |
| Clock waiting | No NTP time yet. Normal during virgin setup or without internet; commands do not require a clock. |
| Garbled USB log | USB debug log uses 115200 baud. PROTO UART is binary at 38400 and should not look like readable text. |
Updates and saved settings
After this update, use http://meshautoresponder.local/ or the display IP. If setup is needed, join MeshAutoResponder-Setup. Saved home Wi-Fi credentials and other settings are unchanged.
Use MeshAutoResponder-update.bin in the portal to retain commands, Wi-Fi, web password, weather, protocol mode and counters. For an older portal that rejects the new name, rename a copy of the application/update BIN to MAutoSponder-update.bin or the exact update filename that portal expects. Never rename a full image as an update image.
The new updater accepts current and previous filename aliases. The full image belongs at USB address 0x0 with flash mode Keep or DIO, not QIO. Application QIO/OPI configuration is separate. Existing working devices need only the portal update. To make a previously configured unit genuinely virgin, both NVS and recovery filesystem must be erased; normal updates intentionally preserve them.
Settings use nonvolatile storage with recovery copies. Command JSON backups contain commands only. Keep power on during upload/restart; source modifications must be rebuilt into a new application.
Security: HTTP on a trusted LAN only; never port-forward. Shared hotspot password is not a strong access boundary. Weather TLS certificate verification remains disabled. Images are checked for board/project/layout, not publisher signatures.