MeshCore berichtformaten & payloads
Technische deep-dive in de structuur van MeshCore berichten, Protobuf encoding en payload formats voor efficiënte LoRa communicatie
Hoe MeshCore berichten zijn opgebouwd
MeshCore gebruikt een efficiënte berichtstructuur om data over het LoRa mesh-netwerk te versturen. Elk bericht bestaat uit een header met metadata en een payload met de daadwerkelijke inhoud. Door Protocol Buffers (Protobuf) te gebruiken, blijven berichten compact en gestructureerd.
De berichtformaten zijn ontworpen voor low-bandwidth communicatie. LoRa heeft beperkte doorvoer (meestal 100-300 bytes per bericht), dus efficiëntie is cruciaal. MeshCore comprimeert data slim en gebruikt binaire encoding in plaats van tekst-gebaseerde formats zoals JSON.
In deze technische gids leggen we uit hoe MeshCore berichten zijn gestructureerd, welke berichttypen er zijn, en hoe payloads worden geëncodeerd voor optimale prestaties in het mesh-netwerk.
Protocol Buffers (Protobuf) structuur
MeshCore gebruikt Google's Protocol Buffers voor message serialization. Protobuf is een binair format dat veel efficiënter is dan JSON of XML. Een voorbeeld van een MeshCore message definitie:
message MeshPacket {
uint32 from = 1; // Node ID verzender
uint32 to = 2; // Node ID ontvanger
uint32 id = 3; // Uniek bericht ID
bytes payload = 4; // Geëncodeerde data
uint32 hop_limit = 5; // Max aantal hops
bool want_ack = 6; // ACK verzoek
uint32 rx_time = 7; // Ontvangst timestamp
}
Elk veld heeft een tag number (1, 2, 3, etc.) voor compacte encoding. Protobuf slaat alleen velden op die een waarde hebben (optionals), wat ruimte bespaart. Een typisch MeshCore bericht is slechts 20-50 bytes groot zonder payload.
MeshCore berichttypen
TEXT_MESSAGE
Tekstberichten tussen gebruikers. Max 200 karakters plain text. Meest gebruikte berichttype voor communicatie.
POSITION
GPS coördinaten (latitude, longitude, altitude). Updates locatie van nodes op de kaart. Periodiek verzonden.
TELEMETRY
Sensor data: batterijspanning, temperatuur, luchtvochtigheid. Voor monitoring van nodes en omgevingsdata.
NODEINFO
Node informatie: naam, hardware model, firmware versie. Verzonden bij opstarten en periodiek voor netwerk discovery.
ROUTING
Routing informatie en netwerk topologie updates. Gebruikt door het flooding algoritme voor efficient message delivery.
ADMIN
Administratieve commando's: configuratie wijzigen, reboot, channel settings. Alleen voor geauthoriseerde nodes.
Payload structuur en encoding
Packet header (overhead)
Elke MeshCore packet heeft een header van ~20 bytes met metadata:
- <strong>From/To</strong> - Node IDs (32-bit integers)
- <strong>Packet ID</strong> - Uniek nummer voor duplicate detection
- <strong>Hop limit</strong> - Aantal resterende hops (default 3, max 7)
- <strong>Flags</strong> - want_ack, encrypted, etc.
Payload data
De payload bevat de daadwerkelijke inhoud, geëncodeerd als Protobuf bytes. Maximale payload grootte is ~230 bytes (afhankelijk van LoRa spreading factor). Encrypted payloads gebruiken AES-256 met een shared channel key.
Technische specificaties
| Parameter | Waarde | Beschrijving |
|---|---|---|
| Max packet size | 256 bytes | LoRa PHY layer limiet (SF7/8) |
| Header overhead | ~20 bytes | Protobuf header met routing info |
| Max payload | ~230 bytes | Na aftrek header overhead |
| Text message max | 200 chars | UTF-8 encoded, praktische limiet |
| Encoding format | Protobuf 3 | Binair, backward compatible |
| Encryption | AES-256-CTR | Per-channel PSK encryption |
Voordelen van MeshCore berichtformaten
Extreem compact
Protobuf encoding is 3-10x kleiner dan JSON. Essentieel voor low-bandwidth LoRa communicatie.
Backward compatible
Nieuwe velden kunnen worden toegevoegd zonder oude clients te breken. Protobuf schema evolutie.
Type-safe
Strikte type checking voorkomt parsing errors. Minder bugs dan loosely-typed formats.
Snel parsing
Binair format is veel sneller te parsen dan tekst-gebaseerde formats. Belangrijk voor low-power devices.
Multi-platform
Protobuf libraries beschikbaar voor C++, Python, JavaScript, Go, etc. Eenvoudig om clients te bouwen.
Uitbreidbaar
Custom payload types kunnen eenvoudig worden toegevoegd voor specifieke use cases.
Veelgestelde vragen
Waarom gebruikt MeshCore Protobuf in plaats van JSON?
Protobuf is 3-10x compacter dan JSON en sneller te parsen. LoRa heeft zeer beperkte bandwidth (~300 bytes/s), dus elke byte telt. JSON zou te veel overhead hebben voor een mesh-netwerk.
Wat is de maximale lengte van een tekstbericht?
Tekstberichten zijn gelimiteerd tot 200 karakters. Dit past comfortabel binnen de ~230 byte payload limiet (UTF-8 encoding). Langere berichten moeten worden gesplitst.
Zijn alle berichten versleuteld?
Nee, alleen berichten op private channels met een PSK (Pre-Shared Key) zijn encrypted met AES-256. Public channels zijn onversleuteld. Je kunt per channel instellen of encryption aan staat.
Kan ik custom berichttypen toevoegen?
Ja, MeshCore ondersteunt custom port numbers voor eigen payloads. Je kunt eigen Protobuf messages definiëren en versturen via port numbers 256-511. Zie de plugin ontwikkeling documentatie.
Hoe weet ik welk berichtformaat een node ondersteunt?
Elke node stuurt een NODEINFO bericht bij opstarten met zijn firmware versie. Protobuf is backward compatible, dus nieuwe velden worden genegeerd door oude firmware. Forward compatibility is gegarandeerd.
Wat gebeurt er als een bericht te groot is?
Berichten groter dan ~230 bytes worden afgekapt of geweigerd door de firmware. Je ontvangt een error. Split lange data in meerdere berichten of gebruik data compression.
Start met MeshCore development
Nu je weet hoe MeshCore berichten zijn opgebouwd, kun je beginnen met het ontwikkelen van eigen applicaties en plugins.