Files
meshstream/CLAUDE.md

71 lines
2.1 KiB
Markdown

# Meshstream development guide
## Dev commands
- `make build`
- `make gen-proto`
- `make clean`
- `make run` <-- Do not execute the program yourself.
## Meshtastic MQTT Protocol Structure
### Topic Structure
The Meshtastic MQTT topic structure follows this pattern:
```
msh/REGION_PATH/2/e/CHANNELNAME/USERID
```
- `msh`: Fixed prefix for all Meshtastic topics
- `REGION_PATH`: Geographic region path which can include multiple segments (e.g., `US/CA/Motherlode`, `EU`, etc.)
- `2`: Protocol version
- `e`: Encoded packet format (formerly used `c` for channel in versions before 2.3.0)
- `CHANNELNAME`: The channel name used in the Meshtastic network
- `USERID`: Unique identifier for the device, formats include:
- `!` followed by hex characters for MAC address based IDs
- `+` followed by phone number for Signal-based IDs
### Message Types
#### Encoded Messages (ServiceEnvelope)
Topic pattern: `msh/REGION_PATH/2/e/CHANNELNAME/USERID`
- ServiceEnvelope protobuf messages
- Contains:
- A MeshPacket (can be encrypted or unencrypted)
- channel_id: The global channel ID it was sent on
- gateway_id: Node ID of the gateway that relayed the message
#### JSON Messages
Topic pattern: `msh/REGION_PATH/2/json/CHANNELNAME/USERID`
- Structured JSON payloads with fields like:
- `id`: Message ID
- `from`: Node ID of sender
- `to`: Node ID of recipient (or blank for broadcast)
- `payload`: The actual message content
- `timestamp`: Time the message was received
Note: JSON format is not supported on nRF52 platform devices.
#### Special Topics
- MQTT Downlink: `msh/REGION_PATH/2/json/mqtt/`
- Used for sending instructions to gateway nodes
### Important Notes
- The public MQTT server implements a zero-hop policy (only direct messages)
- JSON messages may include specific data types like:
- NodeInfo
- Telemetry
- Text Messages
- Position Updates
- Position data on public servers has reduced precision for privacy
- Binary messages use the protocol buffers format defined in the Meshtastic codebase
This corrects the previous assumption that the topic structure was `msh/REGION/STATE/NAME`, which was incorrect.