I’m looking into building a LoRa mesh network for anti-poaching and wildlife tracking, and would like to find out some more about Meshtastic before we dive into it as our network solution. The project is a not-for-profit initiative with a lot of potential backing.
I’ve looked into alternatives like Project Owl’s ClusterDuck protocol, which seems like it also might be able to handle this type of project, but the community here seems far more involved.
The idea is to build an easily-deployable, low-cost LoRa mesh network within game reserves to connect IoT devices to the Internet. Each game reserve is its own separate mesh network. We would have three levels of devices:
- Edge gateways to connect the mesh to the Internet (likely a single server/MQTT stream)
- Gateways (essentially just repeaters)
- Nodes (IoT sensors)
Gateways will be solar + battery powered, enclosed in a weatherproof case. We’re hoping for ~5-10km omnidirectional range, so advice on antennae would be much appreciated. Edge gateways will be similar, but have SIM or WiFi connectivity to connect the rest of the network to the Internet.
IoT devices within the reserve (nodes) will connect to these gateways (also via LoRa, or possibly BLE if they are close enough) to transmit data to a server. The server should also be able to send data to IoT devices (propagate a message through the mesh network to a node).
We’re also looking into using very low power devices with GPS + LoRa to track wildlife. We would use a combination of GPS + LoRa to send the GPS location to the server. But we’re also interested in using trilateration between nodes - though as far as I am aware time of flight isn’t available yet.
We would use a Raspberry Pi to receive and transmit messages to/from a server at each edge gateway using the Meshtastic Python API. This solves getting data to/from the server.
In terms of hardware we’re looking into the LILYGO TTGO Meshtastic T-Beam V1.1 and TTGO LORA32. I’m based in South Africa so we’d probably use the 433MHz band. The data we’re sending will be coordinates, booleans and basic numeric measurements. E.g. animal locations, gates left open, battery levels and the level of waterholes.
The GPS variation would probably only be used for tracking, since the mesh nodes will be stationary. The nodes will be configured at deployment using the GPS coordinates from a cellphone and set via the CLI with a preset configuration.
Does the Meshtastic network report RSSI readings? And from multiple nodes, or will the Meshtastic protocol always eliminate duplicate readings? If not, is it possible to get a sort of “traceroute” of how the packet reached an edge node, so we can see which was the closest node?
We’re handling sensitive data. We need to be able to send and receive encrypted data so poachers can’t intercept the data and use it against us. Channels should hopefully provide this functionality.
I’ve seen the following disclaimer:
Warning: If an attacker is able to get one of the radios in their posession, they could either a) extract the channel key from that device or b) use that radio to listen to new communications.
It sounds like all data within the network is readable by all nodes. Is this correct?
Has anyone found a way to overcome this? At the moment the plan is to encrypt messages on top of Meshtastic using a private/public key pair between the server and each node where necessary, though it’s going to add processing overhead.
From what I understand, we can set up an administration channel and push configurations to devices through the mesh network, which sounds amazing. Are there any gotchas to this?
We want to set up potentially hundreds of sensors that will communicate using LoRa. These devices need to last as long as possible on battery, so it would be preferable it they could be configured to not retransmit data, and instead be turned off a majority of the time. Is it possible to configure the TTGO devices this way?
Arduino and other device integration
I’m not entirely sure about a device like an Arduino would connect to the network to transmit and send data. But Arduinos can’t run Python as far as I know. Is there a way for Arduino to send data via Meshtastic using GPIO pins?
What kind of data can be sent, and what is the expected data rate? We’re looking at potentially sending small JSON structures if possible, which might go up to a couple hundred bytes. Most of the time it would just be the occasional numeric value or two.
I’m also not sure on how exactly a low power node can send data to a gateway with a high range antenna a few km away (I’m a software dev, not an engineer ). Do antennae generally have an equal transmit and receive gain, or would that only be a one-way communication?
The Meshtastic docs mention it’s capable of MQTT. How exactly does this work? If we can set up edge gateways using MQTT to an HTTPS server without needing something like a Raspberry Pi between it would help a lot with time and budget.
Number of nodes per network
I’ve seen some talk of 30 nodes being around the maximum practical amount per channel, and a hard limit of 250. What are the workarounds to this? I’d prefer to avoid multiple partitioned networks if possible. Is there maybe a network topology that can handle this automatically?
A huge amount of questions as I’m pretty new to this, but I am very keen to hear what’s possible and to get involved with Meshtastic.