Simplify build instrucions and rename plugins.

This commit is contained in:
Sacha Weatherstone 2022-03-09 18:10:41 +11:00
parent 7712748154
commit 7f56825c40
63 changed files with 2161 additions and 2043 deletions

View file

@ -1,20 +1,19 @@
--- ---
name: Documentation Change Request name: Documentation Change Request
about: Create a report about our documentation to help us improve about: Create a report about our documentation to help us improve
title: 'Documentation Change Request' title: "Documentation Change Request"
labels: '' labels: ""
assignees: '' assignees: ""
--- ---
Please - if you just have a question, post in our [forum](https://meshtastic.discourse.group/) instead. Please reserve this system for requesting changes to the Meshtastic documentation. Please - if you just have a question, post in our [forum](https://meshtastic.discourse.group) instead. Please reserve this system for requesting changes to the Meshtastic documentation.
**Describe what section of the docs is outdated or otherwise in need of change** **Describe what section of the docs is outdated or otherwise in need of change**
Be as clear and concise as possible. Provide a URL or GitHub path to the doc you are referencing. Be as clear and concise as possible. Provide a URL or GitHub path to the doc you are referencing.
**Suggested Changes** **Suggested Changes**
What specifically in that documentation area needs to be changed / removed / added? What specifically in that documentation area needs to be changed / removed / added?
If possible provide replacement text when requesting changes or new text to fill in missing documentation. If possible provide replacement text when requesting changes or new text to fill in missing documentation.
**Additional Notes** **Additional Notes**
Add any other context here. Add any other context here.

View file

@ -3,9 +3,10 @@ id: channels
title: Channels title: Channels
sidebar_label: Channels sidebar_label: Channels
--- ---
## Overview ## Overview
Meshtastic Channels: Can create a *somewhat* secure method of communication on the same mesh network. The channel can be encrypted to prevent normal people from listening in on the traffic. But, it could probably be easily [cracked](https://crypto.stackexchange.com/questions/46559/what-are-the-chances-that-aes-256-encryption-is-cracked) by determined individuals. See [Channel Config](https://meshtastic.org/docs/software/settings/channel) for more info. It is also possible that your location could be triangulated by determined individuals. Meshtastic Channels: Can create a _somewhat_ secure method of communication on the same mesh network. The channel can be encrypted to prevent normal people from listening in on the traffic. But, it could probably be easily [cracked](https://crypto.stackexchange.com/questions/46559/what-are-the-chances-that-aes-256-encryption-is-cracked) by determined individuals. See [Channel Config](/docs/software/settings/channel) for more info. It is also possible that your location could be triangulated by determined individuals.
## Channels ## Channels

View file

@ -3,32 +3,33 @@ id: external-devices
title: External Devices title: External Devices
sidebar_label: External Devices sidebar_label: External Devices
--- ---
## Overview ## Overview
External hardware can be connected to your device using a GPIO (General Purpose Input/Output) interface. Using GPIO, you are able to connect external buttons, circuits, rotary encoders, environmental sensors and more. Many of our plugins offer solutions to implement additional functionality. External hardware can be connected to your device using a GPIO (General Purpose Input/Output) interface. Using GPIO, you are able to connect external buttons, circuits, rotary encoders, environmental sensors and more. Many of our modules offer solutions to implement additional functionality.
Soldering is likely required when attaching items to your device, so practice your skills elsewhere before trying on your radio. If you're not careful or don't know what your doing, you can damage your hardware. Soldering is likely required when attaching items to your device, so practice your skills elsewhere before trying on your radio. If you're not careful or don't know what your doing, you can damage your hardware.
## Features using External Devices ## Features using External Devices
Many of our plugins require external hardware to be attached to the device. Many of our modules require external hardware to be attached to the device.
### Canned Message Plugin ### Canned Message Module
Requires use of the [rotary encoder plugin](#rotary-encoder-plugin). The rotary encoder acts as an input to select one of up to 50 customizable messages. This way you can send canned messages without needing to pair your device to a phone. Requires use of the [rotary encoder module](#rotary-encoder-module). The rotary encoder acts as an input to select one of up to 50 customizable messages. This way you can send canned messages without needing to pair your device to a phone.
### Environmental Measurment Plugin ### Environmental Measurement Module
Broadcast environmental measurments to your mesh! Temperature, Humidity, Pressure, & VOC Gas are all options that are currently available with the supported sensors. Broadcast environmental measurements to your mesh! Temperature, Humidity, Pressure, & VOC Gas are all options that are currently available with the supported sensors.
### External Notifications Plugin ### External Notifications Module
Use lights, buzzers, or speakers to alert you of incoming messages. Use lights, buzzers, or speakers to alert you of incoming messages.
### Rotary Encoder Plugin ### Rotary Encoder Module
Currently used only for the [canned message plugin](#canned-message-plugin), this plugin allows you to connect a rotary encoder to be used as an additional input to the device. Currently used only for the [canned message module](#canned-message-module), this module allows you to connect a rotary encoder to be used as an additional input to the device.
### Serial Plugin ### Serial Module
Available for ESP32 based devices, the serial plugin allows you to send messages over the mesh by sending strings over a serial port. Available for ESP32 based devices, the serial moduleallows you to send messages over the mesh by sending strings over a serial port.

View file

@ -3,9 +3,10 @@ id: internet
title: Internet Connectivity title: Internet Connectivity
sidebar_label: Internet Connectivity sidebar_label: Internet Connectivity
--- ---
## Overview ## Overview
Captive Portal: Using Meshtastic, you can create a separate Wifi network for you join your phone or computer on a mesh network. See [Web Interface](https://meshtastic.org/docs/software/web/web-app-software) for more info. This is ideal in a situation where you are remote, such as in the forest, on a mountain, or if there is a major power/internet outage such as in a storm or other disaster. Captive Portal: Using Meshtastic, you can create a separate Wifi network for you join your phone or computer on a mesh network. See [Web Interface](/docs/software/web/web-app-software) for more info. This is ideal in a situation where you are remote, such as in the forest, on a mountain, or if there is a major power/internet outage such as in a storm or other disaster.
## Features using Internet Connectivity ## Features using Internet Connectivity

View file

@ -3,10 +3,11 @@ id: mesh
title: Mesh Routing title: Mesh Routing
sidebar_label: Mesh Routing sidebar_label: Mesh Routing
--- ---
## Overview ## Overview
Mesh Networking: An interconnected network by using [low-power radios](https://meshtastic.org/docs/hardware) to connect other low-power radios using LoRa to be able to send and receive messages and data. This can be completely separate from any other networks such as the internet. You can start small and get two devices to start experimenting. Do not expect to stream music or videos as LoRa is intended for smaller, lower bandwidth type uses such as text communication. Mesh Networking: An interconnected network by using [low-power radios](/docs/hardware) to connect other low-power radios using LoRa to be able to send and receive messages and data. This can be completely separate from any other networks such as the internet. You can start small and get two devices to start experimenting. Do not expect to stream music or videos as LoRa is intended for smaller, lower bandwidth type uses such as text communication.
## Devices ## Devices
## Routers ## Routers

View file

@ -6,11 +6,11 @@ sidebar_label: Building Android App
## Build instructions ## Build instructions
If you would like to develop this application we'd love your help! These build instructions are brief and should be improved, please send a PR if you can. If you would like to develop this application we'd love your help! These build instructions are brief and should be improved, please send a PR if you can.
* Use Android Studio 4.1.2 to build/debug (other versions might work but no promises) - Use Android Studio 4.1.2 to build/debug (other versions might work but no promises)
* Use `git submodule update --init --recursive` to pull in the various submodules we depend on - Use `git submodule update --init --recursive` to pull in the various submodules we depend on
* There are a few config files which you'll need to copy from templates included in the project. Run the following commands to do so: - There are a few config files which you'll need to copy from templates included in the project. Run the following commands to do so:
``` ```
rm ./app/google-services.json rm ./app/google-services.json
@ -21,13 +21,14 @@ If you would like to develop this application we'd love your help! These build
cp ./app/special/curfirmwareversion.xml ./app/src/main/res/values/ cp ./app/special/curfirmwareversion.xml ./app/src/main/res/values/
``` ```
* (Unfortunately) you need to get a (free) mapbox developer token [here](https://docs.mapbox.com/android/maps/guides/install/) and put that token in your user gradle.properties. - (Unfortunately) you need to get a (free) mapbox developer token [here](https://docs.mapbox.com/android/maps/guides/install) and put that token in your user gradle.properties.
``` ```
~/development/meshtastic/MeshUtil$ cat ~/.gradle/gradle.properties ~/development/meshtastic/MeshUtil$ cat ~/.gradle/gradle.properties
MAPBOX_DOWNLOADS_TOKEN=sk.yourtokenherexxx MAPBOX_DOWNLOADS_TOKEN=sk.yourtokenherexxx
``` ```
* Now you should be able to select "Run / Run" in the IDE and it will happily start running on your phone or the emulator. - Now you should be able to select "Run / Run" in the IDE and it will happily start running on your phone or the emulator.
:::note :::note
The emulators don't support Bluetooth, so some features can not be used in that environment. The emulators don't support Bluetooth, so some features can not be used in that environment.
@ -35,8 +36,8 @@ The emulators don't support Bluetooth, so some features can not be used in that
## Analytics setup ## Analytics setup
* Analytics are included but can be disabled by the user on the settings screen - Analytics are included but can be disabled by the user on the settings screen
* On dev devices - On dev devices
```shell ```shell
adb shell setprop debug.firebase.analytics.app com.geeksville.mesh adb shell setprop debug.firebase.analytics.app com.geeksville.mesh
@ -44,10 +45,11 @@ adb shell setprop log.tag.FirebaseCrashlytics DEBUG
``` ```
for verbose logging: for verbose logging:
```shell ```shell
adb shell setprop log.tag.FA VERBOSE adb shell setprop log.tag.FA VERBOSE
``` ```
## Publishing to google play ## Publishing to google play
* Only supported if you are a core developer that needs to do releases - Only supported if you are a core developer that needs to do releases

View file

@ -1,88 +1,20 @@
--- ---
id: build-env id: build-env
title: Creating a build/development environment title: Creating a build environment
sidebar_label: Building Meshtastic sidebar_label: Building Meshtastic
--- ---
This project uses the simple PlatformIO build system. PlatformIO is an extension to Microsoft VSCode. Meshtastic uses the [PlatformIO](https://platformio.org) development environment, that enables easy multiplatform development and centralized tooling.
## GUI Installation ## Setup
1. Install [Python](https://www.python.org/downloads/). 1. Install PlatformIO, following the instructions available [here](https://platformio.org/platformio-ide).
2. Install [Git](https://git-scm.com/downloads) or [GitHub Desktop](https://desktop.github.com/) 2. Clone the `meshtastic-device` repository located [here](https://github.com/meshtastic/meshtastic-device). ([Instructions on cloning](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository))
3. Install [Microsoft Visual Studio Code](https://code.visualstudio.com/) 3. Some utilities and scripts use the Python programming language, Downloads available [here](https://www.python.org/downloads).
4. Install [PlatformIO](https://platformio.org/platformio-ide).
5. Click the PlatformIO icon on the side bar.
![platformio icon](https://user-images.githubusercontent.com/47490997/89482668-77c7ea00-d7ee-11ea-8785-5faf8ff99800.png)
6. Under `Quick Access, Miscellaneous, Clone Git Project` enter the URL of the Meshtastic repo found [here](https://github.com/meshtastic/Meshtastic-device).
![image](https://user-images.githubusercontent.com/47490997/89483047-4c91ca80-d7ef-11ea-91f4-1d53d4e8acd9.png)
7. Select a file location to save the repo.
8. Once loaded, open the `platformio.ini` file.
9. At the line `default_envs` you can change it to the board type you are building for ie. `tlora-v2, tlora-v1, tlora-v2-1-1.6, tbeam, heltec, tbeam0.7` (boards are listed further down in the file).
10. The hardware can be configured for different countries by adding a definition to the `configuration.h` file. `#define HW_VERSION_US` or `HW_VERSION_EU433, HW_VERSION_EU865, HW_VERSION_CN, HW_VERSION_JP`. Other country settings can be found in `MeshRadio.h`. The default is `HW_VERSION_US`.
11. Click the PlatformIO icon on the side bar. Under `Project Tasks` you can now build or upload.
:::note ## Building
To get a clean build you may have to delete the auto-generated file `./.vscode/c_cpp_properties.json`, close and re-open Visual Studio and WAIT until the file is auto-generated before compiling again.
:::
## Manual Installation on Linux 1. Open the newly cloned folder in [Visual Studio Code](https://code.visualstudio.com).
1. On a Linux distro (like Ubuntu), ensure you have pre-requisites installed: 1. To select the device you you wish to build for, first open your [command palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl + Shift + P`) and enter: `platformio: Switch Project Environment` and select your target.
1. To build the firmware, simply run `PlatformIO: Build` from your command palette.
``` 1. Finally flashing the firmware to your device is as easy as running `PlatformIO: Upload`
sudo apt-get update
sudo apt-get install python3 python3-dev g++ zip
```
2. Install PlatformIO (which is usually via wget/curl command).
```
wget https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py -O get-platformio.py
chmod +x get-platformio.py
python3 get-platformio.py
```
3. Clone the repo https://github.com/meshtastic/Meshtastic-device
4. Change into the Meshtastic-device and then download submodules
```
cd Meshtastic-device
git submodule update --init --recursive
```
Note: If you get an error like this:
```
Compiling .pio/build/rak4631_5005/src/plugins/PositionPlugin.cpp.o
src/nrf52/NRF52CryptoEngine.cpp:3:10: fatal error: ocrypto_aes_ctr.h: No such file or directory
```
then you need to run that submodule command from the main Meshtastic-device directory.
5. Activate the Platformio python virtual environment
```
source ~/.platformio/penv/bin/activate
```
6. Build everything (optionally just build what you really need by editing platformio.ini)
```
./bin/build-all.sh
```
7. See the newly built bits in release/archive/firmware-1.2.49.XXX.zip (where XXX is the git commit)
## Running the Native environment on Linux
(From @caveman99 )
- linux. flavour doesn't matter. in my case it Centos stream.
- pio run -e native
- then cd .pio/build/native
- gdb program
- on the gdb prompt, execute "run"
- if it eventually coredumps it returns to the gdb prompt, then run bt for a backtrace.
- the actual name of the binary is 'program'

View file

@ -4,7 +4,7 @@ title: Bluetooth/serial/TCP protocol API
sidebar_label: Device API sidebar_label: Device API
--- ---
This document describes the protocol for external API clients using our devices. If you are interested in running your own code on the device itself, see the [plugin API](plugin-api.md) documentation instead. This document describes the protocol for external API clients using our devices. If you are interested in running your own code on the device itself, see the [module API](module-api.md) documentation instead.
The Device API is design to have only a simple stream of ToRadio and FromRadio packets and all polymorphism comes from the flexible set of Google Protocol Buffers which are sent over the wire. We use protocol buffers extensively both for the Bluetooth API and for packets inside the mesh or when providing packets to other applications on the phone. The Device API is design to have only a simple stream of ToRadio and FromRadio packets and all polymorphism comes from the flexible set of Google Protocol Buffers which are sent over the wire. We use protocol buffers extensively both for the Bluetooth API and for packets inside the mesh or when providing packets to other applications on the phone.

View file

@ -9,7 +9,7 @@ Cryptography is tricky, so we've tried to 'simply' apply standard crypto solutio
- If you are a cryptography expert, please review these notes and our questions below. Can you help us by reviewing our notes below and offering advice? We will happily give as much or as little credit as you wish ;-). - If you are a cryptography expert, please review these notes and our questions below. Can you help us by reviewing our notes below and offering advice? We will happily give as much or as little credit as you wish ;-).
- Consider our existing solution 'alpha' and probably fairly secure against a not particularly aggressive adversary (but we can't yet make a more confident statement). - Consider our existing solution 'alpha' and probably fairly secure against a not particularly aggressive adversary (but we can't yet make a more confident statement).
Always keep in mind [xkcd's note on encryption](https://xkcd.com/538/). Always keep in mind [xkcd's note on encryption](https://xkcd.com/538).
## Summary of strengths/weaknesses of our current implementation ## Summary of strengths/weaknesses of our current implementation
@ -31,7 +31,7 @@ Possible future areas of work (if there is enough interest - post in our [forum]
If you are reviewing our implementation, this is a brief statement of our method. If you are reviewing our implementation, this is a brief statement of our method.
- We do all crypto at the SubPacket (payload) level only, so that all meshtastic nodes will route for others - even those channels which are encrypted with a different key. - We do all crypto at the SubPacket (payload) level only, so that all meshtastic nodes will route for others - even those channels which are encrypted with a different key.
- Mostly based on reading [Wikipedia](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_(CTR)) and using the modes the ESP32 provides support for in hardware. - Mostly based on reading [Wikipedia](<https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_(CTR)>) and using the modes the ESP32 provides support for in hardware.
- We use AES256-CTR as a stream cypher (with zero padding on the last BLOCK) because it is well supported with hardware acceleration. - We use AES256-CTR as a stream cypher (with zero padding on the last BLOCK) because it is well supported with hardware acceleration.
- Our AES key is 128 or 256 bits, shared as part of the 'Channel' specification. - Our AES key is 128 or 256 bits, shared as part of the 'Channel' specification.
- The node number concatenated with the packet number is used as the NONCE. This nonce will be stored in flash in the device and should essentially never repeat. If the user makes a new 'Channel' (i.e. picking a new random 256 bit key), the packet number will start at zero. - The node number concatenated with the packet number is used as the NONCE. This nonce will be stored in flash in the device and should essentially never repeat. If the user makes a new 'Channel' (i.e. picking a new random 256 bit key), the packet number will start at zero.
@ -51,4 +51,4 @@ I'm assuming that meshtastic is being used to hike in places where someone capab
- I think the bigger encryption question is "what does the encryption need to do"? As it stands, an attacker who has yet to capture any of the devices cannot reasonably capture text or location data. An attacker who captures any device in the channel/mesh can read everything going to that device, everything stored on that device, and any other communication within the channel that they captured in encrypted form. If that capability basically matches your expectations, it is suitable for whatever adventures this was intended for, then, based on information publicly available or widely disclosed, the encryption is good. If those properties are distressing (like, device history is deliberately limited and you don't want a device captured today to endanger the information sent over the channel yesterday) we could talk about ways to achieve that (most likely synchronizing time and replacing the key with its own SHA256 every X hours, and ensuring the old key is not retained unnecessarily). - I think the bigger encryption question is "what does the encryption need to do"? As it stands, an attacker who has yet to capture any of the devices cannot reasonably capture text or location data. An attacker who captures any device in the channel/mesh can read everything going to that device, everything stored on that device, and any other communication within the channel that they captured in encrypted form. If that capability basically matches your expectations, it is suitable for whatever adventures this was intended for, then, based on information publicly available or widely disclosed, the encryption is good. If those properties are distressing (like, device history is deliberately limited and you don't want a device captured today to endanger the information sent over the channel yesterday) we could talk about ways to achieve that (most likely synchronizing time and replacing the key with its own SHA256 every X hours, and ensuring the old key is not retained unnecessarily).
- Two other things to keep in mind are that AES-CTR does not itself provide authenticity (e.g. an attacker can flip bits in replaying data and scramble the resulting plaintext), and that the current scheme gives some hints about transmission in the size. So, if you worry about an adversary deliberately messing-up messages or knowing the length of a text message, it looks like those might be possible. - Two other things to keep in mind are that AES-CTR does not itself provide authenticity (e.g. an attacker can flip bits in replaying data and scramble the resulting plaintext), and that the current scheme gives some hints about transmission in the size. So, if you worry about an adversary deliberately messing-up messages or knowing the length of a text message, it looks like those might be possible.
I'm guessing that the network behaves somewhat like a store-and-forward network - or, at least, that the goal is to avoid establishing a two-way connection to transmit data. I'm afraid I haven't worked with mesh networks much, but remember studying them briefly in school about ten years ago. I'm guessing that the network behaves somewhat like a store-and-forward network - or, at least, that the goal is to avoid establishing a two-way connection to transmit data. I'm afraid I haven't worked with mesh networks much, but remember studying them briefly in school about ten years ago.

View file

@ -6,7 +6,7 @@ sidebar_label: Mesh algorithm
## Current Algorithm ## Current Algorithm
The routing protocol for Meshtastic is really quite simple (and suboptimal). It is heavily influenced by the mesh routing algorithm used in [RadioHead](https://www.airspayce.com/mikem/arduino/RadioHead/) (which was used in very early versions of this project). It has four conceptual layers. The routing protocol for Meshtastic is really quite simple (and suboptimal). It is heavily influenced by the mesh routing algorithm used in [RadioHead](https://www.airspayce.com/mikem/arduino/RadioHead) (which was used in very early versions of this project). It has four conceptual layers.
### A Note About Protocol Buffers ### A Note About Protocol Buffers
@ -23,23 +23,23 @@ This preamble allows receiving radios to synchronize clocks and start framing. W
This layer is conventional non-reliable LoRa packet transmission. The transmitted packet has the following representation before encoding for transmission: This layer is conventional non-reliable LoRa packet transmission. The transmitted packet has the following representation before encoding for transmission:
| Offset | Length | Type | Usage | | Offset | Length | Type | Usage |
|--------|--------|------|-------| | ------------ | ----------------------------- | ------- | ---------------------------------------------------------------------------------------- |
| 0x00 | 1 byte | Integer | syncWord, always `0x2B`. | | 0x00 | 1 byte | Integer | syncWord, always `0x2B`. |
| 0x01 | 4 bytes | Integer | Packet header: Destination. The destination's unique NodeID. `0xFFFFFFFF` for broadcast. | | 0x01 | 4 bytes | Integer | Packet header: Destination. The destination's unique NodeID. `0xFFFFFFFF` for broadcast. |
| 0x05 | 4 bytes | Integer | Packet Header: Sender. The sender's unique NodeID. | | 0x05 | 4 bytes | Integer | Packet Header: Sender. The sender's unique NodeID. |
| 0x09 | 4 bytes | Integer | Packet Header: The sending node's unique packet ID for this packet. | | 0x09 | 4 bytes | Integer | Packet Header: The sending node's unique packet ID for this packet. |
| 0x0D | 32 bits | Bits | Packet Header: Flags. See the [header flags](#packet-header-flags) for usage. | | 0x0D | 32 bits | Bits | Packet Header: Flags. See the [header flags](#packet-header-flags) for usage. |
| 0x11 .. 0xFD | Varies, maximum of 237 bytes. | Bytes | Actual packet data. Unused bytes are not transmitted. | | 0x11 .. 0xFD | Varies, maximum of 237 bytes. | Bytes | Actual packet data. Unused bytes are not transmitted. |
| 0xFE .. 0xFF | 2 Bytes | Bytes | Unused. | | 0xFE .. 0xFF | 2 Bytes | Bytes | Unused. |
#### Packet Header Flags #### Packet Header Flags
| Index | # of Bits | Usage | | Index | # of Bits | Usage |
|-------|-----------|-------| | ------- | --------- | ------------------------------ |
| 0 | 3 | HopLimit (see note in Layer 3) | | 0 | 3 | HopLimit (see note in Layer 3) |
| 3 | 1 | WantAck | | 3 | 1 | WantAck |
| 4 .. 32 | 28 | Currently unused | | 4 .. 32 | 28 | Currently unused |
#### Usage Details #### Usage Details
@ -55,20 +55,20 @@ This layer is conventional non-reliable LoRa packet transmission. The transmitte
All transmitters must listen before attempting to transmit. If another node is heard transmitting, the listening node will reattempt transmission after a calculated delay. The delay depends on various settings and is based on Semtech's [LoRa Modem Design Guide](/documents/LoRa_Design_Guide.pdf), section 4 and implemented in `RadioInterface::getPacketTime`. The following tables contains some calculated values for how long it takes to transmit a packet, which is used to calculate the delay. All transmitters must listen before attempting to transmit. If another node is heard transmitting, the listening node will reattempt transmission after a calculated delay. The delay depends on various settings and is based on Semtech's [LoRa Modem Design Guide](/documents/LoRa_Design_Guide.pdf), section 4 and implemented in `RadioInterface::getPacketTime`. The following tables contains some calculated values for how long it takes to transmit a packet, which is used to calculate the delay.
| Payload Bytes | Spreading Factor | Bandwidth | Coding Rate | Time | | Payload Bytes | Spreading Factor | Bandwidth | Coding Rate | Time |
|---------------|------------------|-----------|-------------|------| | ------------- | ---------------- | --------- | ----------- | ----------------- |
| 0 | 7 | 125 kHz | 4/5 | 13 ms | | 0 | 7 | 125 kHz | 4/5 | 13 ms |
| 237 | 7 | 125 kHz | 4/5 | 100 ms | | 237 | 7 | 125 kHz | 4/5 | 100 ms |
| 0 | 7 | 500 kHz | 4/5 | 4 ms | | 0 | 7 | 500 kHz | 4/5 | 4 ms |
| 237 | 7 | 500 kHz | 4/5 | 25 ms | | 237 | 7 | 500 kHz | 4/5 | 25 ms |
| 0 | 10 | 250 kHz | 4/7 | 51 ms | | 0 | 10 | 250 kHz | 4/7 | 51 ms |
| 237 | 10 | 250 kHz | 4/7 | 391 ms | | 237 | 10 | 250 kHz | 4/7 | 391 ms |
| 0 | 11 | 250 kHz | 4/6 | 101 ms | | 0 | 11 | 250 kHz | 4/6 | 101 ms |
| 237 | 11 | 250 kHz | 4/6 | 633 ms | | 237 | 11 | 250 kHz | 4/6 | 633 ms |
| 0 | 9 | 31.25 kHz | 4/8 | 201 ms | | 0 | 9 | 31.25 kHz | 4/8 | 201 ms |
| 237 | 9 | 31.25 kHz | 4/8 | 2.413 **seconds** | | 237 | 9 | 31.25 kHz | 4/8 | 2.413 **seconds** |
| 0 | 12 | 125 kHz | 4/8 | 402 ms | | 0 | 12 | 125 kHz | 4/8 | 402 ms |
| 237 | 12 | 125 kHz | 4/8 | 3.482 **seconds** | | 237 | 12 | 125 kHz | 4/8 | 3.482 **seconds** |
The actual delay calculation is a random value between 100ms (a hardcoded minimum) and the time taken to transmit just the header, which is given in the table as a 0 Byte payload. The actual delay calculation is a random value between 100ms (a hardcoded minimum) and the time taken to transmit just the header, which is given in the table as a 0 Byte payload.
@ -81,7 +81,7 @@ The default messaging provided by Layer 1 is extended by setting the `WantAck` f
> This packet is being sent as a reliable message, we would prefer it to arrive at the destination. We would like to receive an ACK packet in response. > This packet is being sent as a reliable message, we would prefer it to arrive at the destination. We would like to receive an ACK packet in response.
> >
> Broadcast messages treat this flag specially: Since ACKs for broadcasts would rapidly flood the channel, the normal ACK behavior is suppressed. Instead, the original sender listens to see if at least one node is rebroadcasting this > Broadcast messages treat this flag specially: Since ACKs for broadcasts would rapidly flood the channel, the normal ACK behavior is suppressed. Instead, the original sender listens to see if at least one node is rebroadcasting this
packet (because naive flooding algorithm). If it hears that, the odds (given typical LoRa topologies) are very high that every node should eventually receive the message. So FloodingRouter.cpp generates an implicit ACK which is delivered to the original sender. If after some time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic. > packet (because naive flooding algorithm). If it hears that, the odds (given typical LoRa topologies) are very high that every node should eventually receive the message. So FloodingRouter.cpp generates an implicit ACK which is delivered to the original sender. If after some time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic.
If a transmitting node does not receive an ACK (or NAK) packet within FIXME milliseconds, it will use Layer 1 to attempt a retransmission of the sent packet. A reliable packet (at this 'zero hop' level) will be resent a maximum of three times. If no ACK or NAK has been received by then the local node will internally generate a NAK (either for local consumption or use by higher layers of the protocol). If a transmitting node does not receive an ACK (or NAK) packet within FIXME milliseconds, it will use Layer 1 to attempt a retransmission of the sent packet. A reliable packet (at this 'zero hop' level) will be resent a maximum of three times. If no ACK or NAK has been received by then the local node will internally generate a NAK (either for local consumption or use by higher layers of the protocol).

View file

@ -1,16 +1,16 @@
--- ---
id: plugin-api id: module-api
title: Plugin API title: Module API
sidebar_label: Plugin API sidebar_label: Module API
--- ---
This is a tutorial on how to write small plugins which run on the device. Plugins are bits regular 'Arduino' code that can send and receive packets to other nodes/apps/PCs using our mesh. This is a tutorial on how to write small modules which run on the device. Modules are bits of regular 'Arduino' code that can send and receive packets to other nodes/apps/PCs using our mesh.
## Key concepts ## Key concepts
All plugins should be subclasses of MeshPlugin. By inheriting from this class and creating an instance of your new plugin your plugin will be automatically registered to receive packets. All modules should be subclasses of MeshPlugin. By inheriting from this class and creating an instance of your new module your module will be automatically registered to receive packets.
Messages are sent to particular port numbers (similar to UDP networking). Your new plugin should eventually pick its own port number (see below), but at first you can simply use PRIVATE_APP (which is the default). Messages are sent to particular port numbers (similar to UDP networking). Your new module should eventually pick its own port number (see below), but at first you can simply use PRIVATE_APP (which is the default).
Packets can be sent/received either as raw binary structures or as [Protobufs](https://developers.google.com/protocol-buffers). Packets can be sent/received either as raw binary structures or as [Protobufs](https://developers.google.com/protocol-buffers).
@ -19,12 +19,12 @@ Packets can be sent/received either as raw binary structures or as [Protobufs](h
The relevant bits of the class hierarchy are as follows The relevant bits of the class hierarchy are as follows
- [MeshPlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/mesh/MeshPlugin.h) (in src/mesh/MeshPlugin.h) - you probably don't want to use this baseclass directly - [MeshPlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/mesh/MeshPlugin.h) (in src/mesh/MeshPlugin.h) - you probably don't want to use this baseclass directly
- [SinglePortPlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/mesh/SinglePortPlugin.h) (in src/mesh/SinglePortPlugin.h) - for plugins that send/receive from a single port number (the normal case) - [SinglePortPlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/mesh/SinglePortPlugin.h) (in src/mesh/SinglePortPlugin.h) - for modules that send/receive from a single port number (the normal case)
- [ProtobufPlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/mesh/ProtobufPlugin.h) (in src/mesh/ProtobufPlugin.h) - for plugins that send/receive a single particular Protobuf type. Inherit from this if you are using protocol buffers in your plugin. - [ProtobufPlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/mesh/ProtobufPlugin.h) (in src/mesh/ProtobufPlugin.h) - for modules that send/receive a single particular Protobuf type. Inherit from this if you are using protocol buffers in your module.
You will typically want to inherit from either SinglePortPlugin (if you are just sending/receiving raw bytes) or ProtobufPlugin (if you are sending/receiving protobufs). You'll implement your own handleReceived/handleReceivedProtobuf - probably based on the example code. You will typically want to inherit from either SinglePortPlugin (if you are just sending/receiving raw bytes) or ProtobufPlugin (if you are sending/receiving protobufs). You'll implement your own handleReceived/handleReceivedProtobuf - probably based on the example code.
If your plugin needs to perform any operations at startup you can override and implement the setup() method to run your code. If your module needs to perform any operations at startup you can override and implement the setup() method to run your code.
If you need to send a packet you can call service.sendToMesh with code like this (from the examples): If you need to send a packet you can call service.sendToMesh with code like this (from the examples):
@ -35,33 +35,33 @@ p->to = dest;
service.sendToMesh(p); service.sendToMesh(p);
``` ```
## Example plugins ## Example modules
A number of [key services](http://github.com/meshtastic/meshtastic-device/tree/master/src/plugins) are implemented using the plugin API, these plugins are as follows: A number of [key services](http://github.com/meshtastic/meshtastic-device/tree/master/src/modules) are implemented using the module API, these modules are as follows:
- [TextMessagePlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/plugins/TextMessagePlugin.h) - receives text messages and displays them on the LCD screen/stores them in the local DB - [TextMessageModule](http://github.com/meshtastic/meshtastic-device/tree/master/src/modules/TextMessageModule.h) - receives text messages and displays them on the LCD screen/stores them in the local DB
- [NodeInfoPlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/plugins/NodeInfoPlugin.h) - receives/sends User information to other nodes so that usernames are available in the databases - [NodeInfoModule](http://github.com/meshtastic/meshtastic-device/tree/master/src/modules/NodeInfoModule.h) - receives/sends User information to other nodes so that usernames are available in the databases
- [RemoteHardwarePlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/plugins/RemoteHardwarePlugin.h) - a plugin that provides easy remote access to device hardware (for things like turning GPIOs on or off). Intended to be a more extensive example and provide a useful feature of its own. See [remote-hardware](/docs/software/other/remote-hardware-service) for details. - [RemoteHardwareModule](http://github.com/meshtastic/meshtastic-device/tree/master/src/modules/RemoteHardwareModule.h) - a module that provides easy remote access to device hardware (for things like turning GPIOs on or off). Intended to be a more extensive example and provide a useful feature of its own. See [remote-hardware](/docs/software/other/remote-hardware-service) for details.
- [ReplyPlugin](http://github.com/meshtastic/meshtastic-device/tree/master/src/plugins/ReplyPlugin.h) - a simple plugin that just replies to any packet it receives (provides a 'ping' service). - [ReplyModule](http://github.com/meshtastic/meshtastic-device/tree/master/src/modules/ReplyModule.h) - a simple module that just replies to any packet it receives (provides a 'ping' service).
## Getting started ## Getting started
The easiest way to get started is: The easiest way to get started is:
- [Build and install](/docs/software/other/build-instructions) the standard codebase from GitHub. - [Build and install](/docs/software/other/build-instructions) the standard codebase from GitHub.
- Copy [src/plugins/ReplyPlugin.\*](http://github.com/meshtastic/meshtastic-device/tree/master/src/plugins/ReplyPlugin.cpp) into src/plugins/YourPlugin.*. Then change the port number from *PortNum_REPLY_APP* to *PortNum_PRIVATE_APP\*. - Copy [src/modules/ReplyModule.\*](http://github.com/meshtastic/meshtastic-device/tree/master/src/modules/ReplyModule.cpp) into src/modules/YourModule.*. Then change the port number from *PortNum_REPLY_APP* to *PortNum_PRIVATE_APP\*.
- Edit plugins/Plugins.cpp:setupPlugins() to add a call to create an instance of your plugin (see comment at head of that function) - Edit moduless/Moduless.cpp:setupModules() to add a call to create an instance of your module (see comment at head of that function)
- Rebuild with your new messaging goodness and install on the device - Rebuild with your new messaging goodness and install on the device
- Use the [meshtastic commandline tool](https://github.com/meshtastic/Meshtastic-python) to send a packet to your board, for example `meshtastic --dest 1234 --sendping`, where _1234_ is another mesh node to send the ping to. - Use the [meshtastic commandline tool](https://github.com/meshtastic/Meshtastic-python) to send a packet to your board, for example `meshtastic --dest 1234 --sendping`, where _1234_ is another mesh node to send the ping to.
## Threading ## Threading
It is very common that you would like your plugin to be invoked periodically. It is very common that you would like your module to be invoked periodically.
We use a crude/basic cooperative threading system to allow this on any of our supported platforms. Simply inherit from OSThread and implement runOnce(). See the OSThread [documentation](http://github.com/meshtastic/meshtastic-device/tree/master/src/concurrency/OSThread.h) for more details. For an example consumer of this API see RemoteHardwarePlugin::runOnce. We use a crude/basic cooperative threading system to allow this on any of our supported platforms. Simply inherit from OSThread and implement runOnce(). See the OSThread [documentation](http://github.com/meshtastic/meshtastic-device/tree/master/src/concurrency/OSThread.h) for more details. For an example consumer of this API see RemoteHardwareModule::runOnce.
## Sending messages ## Sending messages
If you would like to proactively send messages (rather than just responding to them), just call service.sendToMesh(). For an example of this see [NodeInfoPlugin::sendOurNodeInfo(...)](http://github.com/meshtastic/meshtastic-device/tree/master/src/plugins/NodeInfoPlugin.cpp). If you would like to proactively send messages (rather than just responding to them), just call service.sendToMesh(). For an example of this see [NodeInfoModule::sendOurNodeInfo(...)](http://github.com/meshtastic/meshtastic-device/tree/master/src/modules/NodeInfoModule.cpp).
## Picking a port number ## Picking a port number

View file

@ -4,36 +4,42 @@ title: Contribute to Meshtastic
sidebar_label: Contribute to Meshtastic sidebar_label: Contribute to Meshtastic
slug: /developers slug: /developers
--- ---
# How to Help # How to Help
Meshtastic is a team of volunteers, and as such there is always plenty of ways to help. This project gets great contributions from people in their off hours. Those contributors work on the features they are interested in. It is a very open and welcoming developer community, and we are always looking for help to improve Meshtastic. Meshtastic is a team of volunteers, and as such there is always plenty of ways to help. This project gets great contributions from people in their off hours. Those contributors work on the features they are interested in. It is a very open and welcoming developer community, and we are always looking for help to improve Meshtastic.
* If you're a developer, there's plenty stuff to do. Dig in! - If you're a developer, there's plenty stuff to do. Dig in!
* If you're interacting with Meshtastic radios, we could use help with testing, documenting, and providing feedback. - If you're interacting with Meshtastic radios, we could use help with testing, documenting, and providing feedback.
* If you're into Web Development, check out the different web repos. - If you're into Web Development, check out the different web repos.
* If you're into Kotlin and Android, check out the link to the repo below. - If you're into Kotlin and Android, check out the link to the repo below.
* If you're into Python, check out the link to the repo below - If you're into Python, check out the link to the repo below
* If you're into Ham Radio and LoRa, then this is a great project for you! - If you're into Ham Radio and LoRa, then this is a great project for you!
* ... basically... we would love to have your help and feedback - ... basically... we would love to have your help and feedback
There are several developers, testers, and active users on [Discord](https://discord.gg/UQJ5QuM7vq). There are several developers, testers, and active users on [Discord](https://discord.gg/UQJ5QuM7vq).
There are many technologies (and repositories) used in creating the Meshtastic ecosystem. Below is a breakdown: There are many technologies (and repositories) used in creating the Meshtastic ecosystem. Below is a breakdown:
## Protocol buffers ## Protocol buffers
Most communication and interactions happen with protocol buffers. The [Meshtastic-protobufs](https://github.com/meshtastic/Meshtastic-protobufs) repo is where all of the protocol buffer changes happen. See the [Protobuf API Reference](https://meshtastic.org/docs/developers/protobufs/api) for more details.
Most communication and interactions happen with protocol buffers. The [Meshtastic-protobufs](https://github.com/meshtastic/Meshtastic-protobufs) repo is where all of the protocol buffer changes happen. See the [Protobuf API Reference](/docs/developers/protobufs/api) for more details.
## Firmware ## Firmware
The [Meshtastic-device](https://github.com/meshtastic/Meshtastic-device) is where all of the firmware development happens. This is where the code for the ESP32 and nRF52 based devices is developed. It is mainly C and C++ code.Think Arduino. It is where the first level of hardware interaction begins and ends. The [Meshtastic-device](https://github.com/meshtastic/Meshtastic-device) is where all of the firmware development happens. This is where the code for the ESP32 and nRF52 based devices is developed. It is mainly C and C++ code.Think Arduino. It is where the first level of hardware interaction begins and ends.
## Plugins ## modules
[Plugins](https://meshtastic.org/docs/software/plugins/) are also implemented mainly in the Meshtastic-device repo above. Typically, you would add functionality in the protobufs repo and the device repo to implement plugin functionality. You probably also want to have some client/device use/interact with the plugin and that is where the Device support comes into play.
[Modules](/docs/software/modules) are also implemented mainly in the Meshtastic-device repo above. Typically, you would add functionality in the protobufs repo and the device repo to implement module functionality. You probably also want to have some client/device use/interact with the module and that is where the Device support comes into play.
## Device Support ## Device Support
The [Meshtastic-python](https://github.com/meshtastic/Meshtastic-python) is typically where the first device interaction takes place, but that is not a requirement. This repo has a command line utility that allows you to interact with most functionality with the devices. This python library can also be consumed for other applications. See [Community applications](https://meshtastic.org/docs/software/community/community-overview) for other Meshtastic applications.
The [Meshtastic-python](https://github.com/meshtastic/Meshtastic-python) is typically where the first device interaction takes place, but that is not a requirement. This repo has a command line utility that allows you to interact with most functionality with the devices. This python library can also be consumed for other applications. See [Community applications](/docs/software/community/community-overview) for other Meshtastic applications.
## Web Application ## Web Application
The [Meshtastic-web](https://github.com/meshtastic/meshtastic-web) is where the hosted web server on the ESP32 devices in Typescript is developed. See the [Web interface overview](https://meshtastic.org/docs/software/web/web-app-software) for more details.
The [Meshtastic-web](https://github.com/meshtastic/meshtastic-web) is where the hosted web server on the ESP32 devices in Typescript is developed. See the [Web interface overview](/docs/software/web/web-app-software) for more details.
The [meshtastic.js](https://github.com/meshtastic/meshtastic.js) is a JavaScript library that provides an interface for Meshtastic devices. The [meshtastic.js](https://github.com/meshtastic/meshtastic.js) is a JavaScript library that provides an interface for Meshtastic devices.
@ -42,13 +48,15 @@ The [meshtastic.js](https://github.com/meshtastic/meshtastic.js) is a JavaScript
* Saving of preferences * Saving of preferences
* Better loading state indicators * Better loading state indicators
* Chat scroll lock * Chat scroll lock
* Various plugin support * Various module support
## Phone Apps ## Phone Apps
There are two phone apps that interact with the Meshtastic devices: There are two phone apps that interact with the Meshtastic devices:
* The [Meshtastic-Android](https://github.com/meshtastic/Meshtastic-Android) repo contains the Kotlin code for Android based interactions with Meshtastic devices. See [here](https://meshtastic.org/docs/developers/android/build-app) for how to build/create a development environment for the Meshtastic Android App. - The [Meshtastic-Android](https://github.com/meshtastic/Meshtastic-Android) repo contains the Kotlin code for Android based interactions with Meshtastic devices. See [here](/docs/developers/android/build-app) for how to build/create a development environment for the Meshtastic Android App.
* The iOS app is in the process of a complete re-write in Swift and will have the new repo published soon. Note: There are a couple of earlier implementations. - The iOS app is in the process of a complete re-write in Swift and will have the new repo published soon. Note: There are a couple of earlier implementations.
## Documentation ## Documentation
This website is in the [Meshtastic](https://github.com/meshtastic/Meshtastic) repository. This website is in the [Meshtastic](https://github.com/meshtastic/Meshtastic) repository.

View file

@ -3,11 +3,12 @@ id: bluetooth
title: FAQs - Bluetooth title: FAQs - Bluetooth
sidebar_label: Bluetooth sidebar_label: Bluetooth
--- ---
## Overview ## Overview
### How do I pair my phone to the device if my device doesn't have a screen? ### How do I pair my phone to the device if my device doesn't have a screen?
Use [Wifi](https://meshtastic.org/docs/software/device/device-wifi) or Bluetooth with screenless pairing: before you initiate pairing, double click on the device button. The LED will blink 3 times in confirmation and the PIN will be set temporarily to `123456`. Use [Wifi](/docs/software/device/device-wifi) or Bluetooth with screenless pairing: before you initiate pairing, double click on the device button. The LED will blink 3 times in confirmation and the PIN will be set temporarily to `123456`.
### Can I have Bluetooth enabled and use WiFi radio? ### Can I have Bluetooth enabled and use WiFi radio?

View file

@ -3,6 +3,7 @@ id: client-ios
title: FAQs - iOS title: FAQs - iOS
sidebar_label: iOS sidebar_label: iOS
--- ---
## Overview ## Overview
### What version of iOS does the Meshtastic iOS App Require? ### What version of iOS does the Meshtastic iOS App Require?
@ -11,4 +12,4 @@ The now-in-beta iOS app requires iOS v15.
### How do I get the Meshtastic iOS App? ### How do I get the Meshtastic iOS App?
See [iOS App](https://meshtastic.org/docs/software/ios/ios-development) See [iOS App](/docs/software/ios/ios-development)

View file

@ -3,11 +3,12 @@ id: device
title: FAQs - Device title: FAQs - Device
sidebar_label: Device sidebar_label: Device
--- ---
## Overview ## Overview
### Where do I purchase the device hardware? ### Where do I purchase the device hardware?
Each [supported device](https://meshtastic.org/docs/hardware/supported/tbeam) has a "Purchase Link". Each [supported device](/docs/hardware/supported/tbeam) has a "Purchase Link".
### I have my hardware. How do I install the firmware and any required drivers? ### I have my hardware. How do I install the firmware and any required drivers?
@ -35,5 +36,5 @@ Push the left PWR button for about 1 second.
### How can I tell the device not to sleep? ### How can I tell the device not to sleep?
- Android instructions see: [Android Usage](https://meshtastic.org/docs/software/android/android-usage#configuration-options) - Android instructions see: [Android Usage](/docs/software/android/android-usage#configuration-options)
- Python CLI instructions see: [Python Usage](https://meshtastic.org/docs/software/python/python-cli#changing-device-settings) - Python CLI instructions see: [Python Usage](/docs/software/python/python-cli#changing-device-settings)

View file

@ -4,6 +4,7 @@ title: FAQs - General
sidebar_label: General sidebar_label: General
slug: /faq slug: /faq
--- ---
<!--- <!---
Note to Contributors: Note to Contributors:
@ -20,6 +21,7 @@ Details about FAQ page
Answer (Include links to settings/developers/supported hardware etc) Answer (Include links to settings/developers/supported hardware etc)
---> --->
## Overview ## Overview
### What is Meshtastic? ### What is Meshtastic?
@ -32,4 +34,4 @@ After reading this FAQ and checking out the links on the left, there are two pla
### How can I contribute to Meshtastic? ### How can I contribute to Meshtastic?
Everyone contributes in a different way. Join the [Forum](https://meshtastic.discourse.group) and/or the [Meshtastic Discord](https://discord.com/invite/UQJ5QuM7vq) and introduce yourself. We're all very friendly. If you'd like to pitch in some code, check out the [Developers](https://meshtastic.org/docs/developers) menu on the left. Everyone contributes in a different way. Join the [Forum](https://meshtastic.discourse.group) and/or the [Meshtastic Discord](https://discord.com/invite/UQJ5QuM7vq) and introduce yourself. We're all very friendly. If you'd like to pitch in some code, check out the [Developers](/docs/developers) menu on the left.

18
docs/faq/modules.md Normal file
View file

@ -0,0 +1,18 @@
---
id: modules
title: FAQs - Modules
sidebar_label: Modules
---
## Overview
### What are Modules?
Modules are features that expand the basic device functionality and/or integrate with other services.
### What modules do we have available?
A list of available modules is available [here](/docs/software/modus).
### I'd like to write a module. How do I get started?
API documentation for creating modules is available [here](/docs/developers/device/module-api).

View file

@ -1,18 +0,0 @@
---
id: plugins
title: FAQs - Plugins
sidebar_label: Plugins
---
## Overview
### What are Plugins?
Plugins are features that expand the basic device functionality and/or integrate with other services.
### What plugins do we have available?
To see the list of available plugins, please go to: https://meshtastic.org/docs/software/plugins/
### I'd like to write a plugin. How do I get started?
See: https://meshtastic.org/docs/developers/device/plugin-api

View file

@ -111,8 +111,8 @@ pip3 install --upgrade esptool
</TabItem> </TabItem>
<TabItem value="windows"> <TabItem value="windows">
- Download and install [Python](https://www.python.org/). When installing, make sure to click `Add Python X.Y to PATH`. - Download and install [Python](https://www.python.or). When installing, make sure to click `Add Python X.Y to PATH`.
- Download and install [Gitbash](https://gitforwindows.org/) (or other appropriate shell) and run all subsequent commands from that shell. - Download and install [Gitbash](https://gitforwindows.org) (or other appropriate shell) and run all subsequent commands from that shell.
:::note :::note
Confirm installation of `python` & `pip` with the following commands. Confirm installation of `python` & `pip` with the following commands.
@ -146,9 +146,9 @@ values={[
{label: 'macOS', value: 'macos'}, {label: 'macOS', value: 'macos'},
{label: 'Windows', value: 'windows'}, {label: 'Windows', value: 'windows'},
]}> ]}>
<TabItem value="linux"></TabItem> <TabItem value="linux"></TabItem>
<TabItem value="macos"></TabItem> <TabItem value="macos"></TabItem>
<TabItem value="windows"> <TabItem value="windows">
:::important :::important
On Windows, you must explicitly declare esptool as a .py script. Use `esptool.py chip_id`. On Windows, you must explicitly declare esptool as a .py script. Use `esptool.py chip_id`.

View file

@ -7,47 +7,44 @@ slug: /hardware/resources
### More antenna information ### More antenna information
* [Hackaday's Introduction to Antenna Basics](https://www.youtube.com/playlist?list=PL_tws4AXg7authztKFg5ZN5qWGtq3N_nI) - [Hackaday's Introduction to Antenna Basics](https://www.youtube.com/playlist?list=PL_tws4AXg7authztKFg5ZN5qWGtq3N_nI)
* An excellent series of presentations on the basics of antenna design and function, presented by spacecraft radio engineer Karen Rucker. - An excellent series of presentations on the basics of antenna design and function, presented by spacecraft radio engineer Karen Rucker.
### Coverage prediction ### Coverage prediction
* [Tower Coverage.com](https://www.towercoverage.com/) - [Tower Coverage.com](https://www.towercoverage.com)
* Commercial, but has free options
- Commercial, but has free options
* [HeyWhat'sThat](http://www.heywhatsthat.com/) - [HeyWhat'sThat](http://www.heywhatsthat.com)
* Free with path profiling options
- Free with path profiling options
* [Radio Mobile Online](https://www.ve2dbe.com/rmonline_s.asp) - [Radio Mobile Online](https://www.ve2dbe.com/rmonline_s.asp)
* Radio Mobile Online is a radio wave propagation prediction tool dedicated to amateur radio - Radio Mobile Online is a radio wave propagation prediction tool dedicated to amateur radio
### RF Tools ### RF Tools
* [Times Microwave Systems](https://www.timesmicrowave.com/calculator/?Product=RG-6&RunLength=10&Frequency=868) - [Times Microwave Systems](https://www.timesmicrowave.com/calculator/?Product=RG-6&RunLength=10&Frequency=868)
* Coaxial Cable Attenuation & Power Handling Calculator
- Coaxial Cable Attenuation & Power Handling Calculator
* [Solwise Link Budget Calculator](https://www.solwise.co.uk/link-budget.htm) - [Solwise Link Budget Calculator](https://www.solwise.co.uk/link-budget.htm)
* Predict the received signal strength
- Predict the received signal strength
* [Amateur Radio Toolkit](https://play.google.com/store/apps/details?id=com.daveyhollenberg.amateurradiotoolkit) - [Amateur Radio Toolkit](https://play.google.com/store/apps/details?id=com.daveyhollenberg.amateurradiotoolkit)
* Android app with lots of antenna information - Android app with lots of antenna information
### Antenna designs ### Antenna designs
* [1/4 Wave Ground Plane Antenna Calculator](https://m0ukd.com/calculators/quarter-wave-ground-plane-antenna-calculator/) - [1/4 Wave Ground Plane Antenna Calculator](https://m0ukd.com/calculators/quarter-wave-ground-plane-antenna-calculator)
- [Quadrifilar helicoidal antenna calculator](https://jcoppens.com/ant/qfh/calc.en.php)
* [Quadrifilar helicoidal antenna calculator](https://jcoppens.com/ant/qfh/calc.en.php) - [Building an 868/915 MHz co-linear antenna tutorial](https://www.youtube.com/watch?v=1_1LxuOngHs)
- [868 MHz antenna schematic PDF](https://github.com/IRNAS/ttn-irnas-gw/blob/master/Collinear868MHzLoRaantenna.PDF)
- [915 MHz antenna schematic PDF](https://github.com/IRNAS/ttn-irnas-gw/blob/master/CollinearLoRaantenna915MHzIRNAS.PDF)
* [Building an 868/915 MHz co-linear antenna tutorial](https://www.youtube.com/watch?v=1_1LxuOngHs) - [NEC based antenna modeler and optimizer](https://www.qsl.net/4nec2)
* [868 MHz antenna schematic PDF](https://github.com/IRNAS/ttn-irnas-gw/blob/master/Collinear868MHzLoRaantenna.PDF)
* [915 MHz antenna schematic PDF](https://github.com/IRNAS/ttn-irnas-gw/blob/master/CollinearLoRaantenna915MHzIRNAS.PDF)
* [NEC based antenna modeler and optimizer](https://www.qsl.net/4nec2/)

View file

@ -9,27 +9,29 @@ Testing of antennas can be both simple and complex. At its simplest, testing inv
## Range testing ## Range testing
As mentioned, while stating the obvious, the simplest way of performing a test is: As mentioned, while stating the obvious, the simplest way of performing a test is:
- Walk around with a radio sending messages, - Walk around with a radio sending messages,
- For each message, note location and whether 'ACK' ticks are received, - For each message, note location and whether 'ACK' ticks are received,
- Also, note reported signal strengths, - Also, note reported signal strengths,
- Change aerials, repeat, and evaluate results. - Change aerials, repeat, and evaluate results.
:::note :::note
The [range test plugin](/docs/software/plugins/range-test-plugin) has been designed for exactly this purpose. It allows one node to transmit a frequent message, and another node to record which messages were received. This data is saved and can be imported to applications such as Google Earth. The [range test module](/docs/software/modules/range-test-module) has been designed for exactly this purpose. It allows one node to transmit a frequent message, and another node to record which messages were received. This data is saved and can be imported to applications such as Google Earth.
::: :::
On the topic of testing - performing your own testing and providing feedback is the lifeblood of Meshtastic and open source projects. On the topic of testing - performing your own testing and providing feedback is the lifeblood of Meshtastic and open source projects.
## Signal strength testing ## Signal strength testing
Real world testing is also discussed by Andreas Spiess (the 'guy with the Swiss accent') in his [tutorial](https://www.youtube.com/watch?v=J3PBL9oLPX8). He has written [code](https://github.com/SensorsIot/Antenna-Tester) for testing antennas using two Lora32 V1 boards to compare how different antennas behave. Lilygo have also made code available for testing the RSSI on the [LORA32](https://github.com/LilyGO/TTGO-LORA32) [boards](https://github.com/Xinyuan-LilyGO/TTGO-LoRa-Series) and the [T-Beam](https://github.com/LilyGO/TTGO-T-Beam). Real world testing is also discussed by Andreas Spiess (the 'guy with the Swiss accent') in his [tutorial](https://www.youtube.com/watch?v=J3PBL9oLPX8). He has written [code](https://github.com/SensorsIot/Antenna-Tester) for testing antennas using two Lora32 V1 boards to compare how different antennas behave. Lilygo have also made code available for testing the RSSI on the [LORA32](https://github.com/LilyGO/TTGO-LORA32) [boards](https://github.com/Xinyuan-LilyGO/TTGO-LoRa-Series) and the [T-Beam](https://github.com/LilyGO/TTGO-T-Beam).
Here are a [couple](https://medium.com/home-wireless/testing-lora-antennas-at-915mhz-6d6b41ac8f1d) of [excellent](https://medium.com/home-wireless/testing-and-reviewing-lora-antennas-5b37dfa594a3) aerial comparisons. Their utility goes beyond the specific aerials tested, giving insight into: Here are a [couple](https://medium.com/home-wireless/testing-lora-antennas-at-915mhz-6d6b41ac8f1d) of [excellent](https://medium.com/home-wireless/testing-and-reviewing-lora-antennas-5b37dfa594a3) aerial comparisons. Their utility goes beyond the specific aerials tested, giving insight into:
- Aerial types & their characteristics, - Aerial types & their characteristics,
- Testing approaches. - Testing approaches.
## Antenna matching & vector network analyzers ## Antenna matching & vector network analyzers
One of the first things to ensure, is that the antenna you have is tuned to the frequency that you are using. A lot of cheap antennas come labeled with an incorrect working frequency, and this will immediately reduce the emitted signal strength. A Vector Network Analyzer (VNA) can be used to ensure that the antenna is appropriately matched to the transmission circuit, ensuring that it is operating at the correct impedance, and has a low level of power reflected back from the antenna to the transmitter at the desired transmission frequency. One of the first things to ensure, is that the antenna you have is tuned to the frequency that you are using. A lot of cheap antennas come labeled with an incorrect working frequency, and this will immediately reduce the emitted signal strength. A Vector Network Analyzer (VNA) can be used to ensure that the antenna is appropriately matched to the transmission circuit, ensuring that it is operating at the correct impedance, and has a low level of power reflected back from the antenna to the transmitter at the desired transmission frequency.
Andreas Spiess also gives a great explanation of [how to use Vector Network Analyzers](https://www.youtube.com/watch?v=ZpKoLvqOWyc) to correctly tune your antennas, as well as a more [in depth tutorial of how to use VNAs](https://www.youtube.com/watch?v=_pjcEKQY_Tk). It is important to remember however, that VNAs can only tell you if the antenna is well-matched, not how well it is transmitting. A 50 ohm resistor across the transmitter output would show as ideally matched, but it would be useless at transmitting a signal. There are a number of VNAs now available for less than $100, making this no longer out of reach for most hobbyists, unlike expensive spectrum analyzers. Andreas Spiess also gives a great explanation of [how to use Vector Network Analyzers](https://www.youtube.com/watch?v=ZpKoLvqOWyc) to correctly tune your antennas, as well as a more [in depth tutorial of how to use VNAs](https://www.youtube.com/watch?v=_pjcEKQY_Tk). It is important to remember however, that VNAs can only tell you if the antenna is well-matched, not how well it is transmitting. A 50 ohm resistor across the transmitter output would show as ideally matched, but it would be useless at transmitting a signal. There are a number of VNAs now available for less than $100, making this no longer out of reach for most hobbyists, unlike expensive spectrum analyzers.

View file

@ -19,7 +19,7 @@ sidebar_label: Heltec
- No GPS - No GPS
- Firmware file: `firmware-heltec-1.x.x.bin` - Firmware file: `firmware-heltec-1.x.x.bin`
- [Purchase link](https://heltec.org/project/wifi-lora-32/) - [Purchase link](https://heltec.org/project/wifi-lora-32)
[<img src="Heltec WiFi LoRa 32 (V2)" src="/img/hardware/heltec-v2.png" style={{zoom:'25%'}} />](/img/hardware/heltec-v2.png) [<img src="Heltec WiFi LoRa 32 (V2)" src="/img/hardware/heltec-v2.png" style={{zoom:'25%'}} />](/img/hardware/heltec-v2.png)

View file

@ -9,10 +9,10 @@ We don't collect any personal identifying information. We never capture username
If you opt-in to analytics on the Android app (thank you - that helps us know what things we need to improve), we will receive anonymized information about user behavior. This includes crash reports, screens used in the app, etc... Analytics is provided by [Firebase Crashlytics](https://firebase.google.com/products/crashlytics). If you opt-in to analytics on the Android app (thank you - that helps us know what things we need to improve), we will receive anonymized information about user behavior. This includes crash reports, screens used in the app, etc... Analytics is provided by [Firebase Crashlytics](https://firebase.google.com/products/crashlytics).
Maps provided by Mapbox require analytics to work. For more information about what they collect, please see the [Mapbox privacy policy](https://www.mapbox.com/legal/privacy/). Maps provided by Mapbox require analytics to work. For more information about what they collect, please see the [Mapbox privacy policy](https://www.mapbox.com/legal/privacy).
The search engine for this website is provided by Algolia, please see their [privacy policy](https://www.algolia.com/policies/privacy/) for details of what information they collect. The search engine for this website is provided by Algolia, please see their [privacy policy](https://www.algolia.com/policies/privacy) for details of what information they collect.
This is an open-source project run by hobbyists, and we try to be completely transparent. If you have questions on this policy, please post on the forum, and we'll reply/clarify/correct. This is an open-source project run by hobbyists, and we try to be completely transparent. If you have questions on this policy, please post on the forum, and we'll reply/clarify/correct.
Keep being awesome! Keep being awesome!

View file

@ -1,8 +1,9 @@
--- ---
id: canned-message-plugin id: canned-message-module
title: Canned Message Plugin title: Canned Message Module
sidebar_label: Canned Message Plugin sidebar_label: Canned Message Module
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem'; import TabItem from '@theme/TabItem';
@ -11,54 +12,58 @@ GPIO access is fundamentally dangerous because invalid options can physically da
::: :::
<!--- TODO add link to hardware setup to admonition---> <!--- TODO add link to hardware setup to admonition--->
:::note :::note
This plugin requires attaching a peripheral accessory to your device. It will not work without one. It also requires use of the [Rotary Encoder Plugin](rotary-encoder-plugin) to configure the input source. This module requires attaching a peripheral accessory to your device. It will not work without one. It also requires use of the [Rotary Encoder Module](rotary-encoder-module) to configure the input source.
::: :::
## Overview ## Overview
The CannedMessage Plugin will allow you to send messages to the mesh network from the device without using the phone app. You can predefine text messages to choose from. The CannedMessage Module will allow you to send messages to the mesh network from the device without using the phone app. You can predefine text messages to choose from.
:::tip :::tip
Once plugin settings are changed, a **reset** is required for them to take effect. Once module settings are changed, a **reset** is required for them to take effect.
::: :::
## Settings ## Settings
| Setting | Acceptable Values | Default | | Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: | | :--------------------------------------: | :---------------: | :-----: |
| canned_message_plugin_allow_input_source | `rotEnc1`, `_any` | `_any` | | canned_message_module_allow_input_source | `rotEnc1`, `_any` | `_any` |
| canned_message_plugin_enabled | `true`, `false` | `false` | | canned_message_module_enabled | `true`, `false` | `false` |
| canned_message_plugin_messages | `string` | `""` | | canned_message_module_messages | `string` | `""` |
| canned_message_plugin_send_bell | `true`, `false` | `false` | | canned_message_module_send_bell | `true`, `false` | `false` |
### canned_message_plugin_allow_input_source ### canned_message_module_allow_input_source
Input event source accepted by the canned message plugin. Input event source accepted by the canned message module.
| Value | Description | | Value | Description |
| :---: | :---------: | | :-------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| `_any` | Default. Allows any peripheral input device connected to the device. | | `_any` | Default. Allows any peripheral input device connected to the device. |
| `rotEnc1` | Hardcoded value naming the input device that this plugin listens to. This could allow multiple input devices to be named with future software development. At present, this doesn't do anything differently than the default setting. | | `rotEnc1` | Hardcoded value naming the input device that this module listens to. This could allow multiple input devices to be named with future software development. At present, this doesn't do anything differently than the default setting. |
#### Set input source #### Set input source
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set Allowed Input Source" ```bash title="Set Allowed Input Source"
meshtastic --set canned_message_plugin_allow_input_source "_any" meshtastic --set canned_message_module_allow_input_source "_any"
``` ```
```bash title="Specify Allowed Input Source" ```bash title="Specify Allowed Input Source"
meshtastic --set canned_message_plugin_allow_input_source "rotEnc1" meshtastic --set canned_message_module_allow_input_source "rotEnc1"
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -83,31 +88,35 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### canned_message_plugin_enabled ### canned_message_module_enabled
Enables the plugin. Enables the module.
:::tip :::tip
Using the canned message plugin requires you set up the [rotary encoder plugin](rotary-encoder-plugin). See [prerequisites](#prerequisites) below. Using the canned message module requires you set up the [Rotary Encoder Module](rotary-encoder-module). See [prerequisites](#prerequisites) below.
::: :::
#### Enable/Disable the plugin
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable Canned Message Plugin" #### Enable/Disable the module
meshtastic --set canned_message_plugin_enabled true
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable Canned Message Module"
meshtastic --set canned_message_module_enabled true
``` ```
```bash title="Disable Canned Message Plugin"
meshtastic --set canned_message_plugin_enabled false ```bash title="Disable Canned Message Module"
meshtastic --set canned_message_module_enabled false
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -132,27 +141,29 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### canned_message_plugin_messages ### canned_message_module_messages
Predefined messages for CannedMessagePlugin separated by `|` characters. Predefined messages for CannedMessageModule separated by `|` characters.
You can define up to 50 messages with a total length 1024 bytes. You can define up to 50 messages with a total length 1024 bytes.
#### Set canned messages #### Set canned messages
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set Canned Messages" ```bash title="Set Canned Messages"
meshtastic --set canned_message_plugin_messages "I'm fine|I'm out|I'm back|Need helping hand|Help me with saw|I need an alpinist|I need ambulance|Keep Calm|On my way|I will be late|I'm already waiting|We have company|Beer is cold|Roger" meshtastic --set canned_message_module_messages "I'm fine|I'm out|I'm back|Need helping hand|Help me with saw|I need an alpinist|I need ambulance|Keep Calm|On my way|I will be late|I'm already waiting|We have company|Beer is cold|Roger"
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -177,29 +188,32 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### canned_message_plugin_send_bell ### canned_message_module_send_bell
CannedMessagePlugin also sends a bell character with the messages. CannedMessageModule also sends a bell character with the messages.
The [External Notification Plugin](external-notification-plugin) can benefit from this feature as it utilizes the bell character. The [External Notification Module](external-notification-module) can benefit from this feature as it utilizes the bell character.
#### Enable/Disable bell character #### Enable/Disable bell character
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable Bell Character" ```bash title="Enable Bell Character"
meshtastic --set canned_message_plugin_send_bell true meshtastic --set canned_message_module_send_bell true
``` ```
```bash title="Disable Bell Character" ```bash title="Disable Bell Character"
meshtastic --set canned_message_plugin_send_bell false meshtastic --set canned_message_module_send_bell false
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -229,20 +243,22 @@ Configuring this setting is not yet available for the selected platform. If this
### Prerequisites ### Prerequisites
<!--- TODO add link to hardware pages to first bullet point ---> <!--- TODO add link to hardware pages to first bullet point --->
- Attach a compatible peripheral device. Take note of the GPIO numbers you use, as they will be used in the following step. - Attach a compatible peripheral device. Take note of the GPIO numbers you use, as they will be used in the following step.
- Once attached, configure peripheral device with [Rotary Encoder Plugin Settings](rotary-encoder-plugin). - Once attached, configure peripheral device with [Rotary Encoder Module](rotary-encoder-module) Settings.
:::note :::note
Replace each `GPIO` (x3) below with the GPIO numbers from hardware setup. Replace each `GPIO` (x3) below with the GPIO numbers from hardware setup.
```bash title="Canned Message Plugin - Required Rotary Encoder Plugin Settings" ```bash title="Canned Message Module - Required Rotary Encoder Module Settings"
meshtastic --set rotary1_pin_a GPIO meshtastic --set rotary1_pin_a GPIO
meshtastic --set rotary1_pin_b GPIO meshtastic --set rotary1_pin_b GPIO
meshtastic --set rotary1_pin_press GPIO meshtastic --set rotary1_pin_press GPIO
meshtastic --set rotary1_event_cw KEY_UP meshtastic --set rotary1_event_cw KEY_UP
meshtastic --set rotary1_event_ccw KEY_DOWN meshtastic --set rotary1_event_ccw KEY_DOWN
meshtastic --set rotary1_event_press KEY_SELECT meshtastic --set rotary1_event_press KEY_SELECT
meshtastic --set rotary1_enabled True meshtastic --set rotary1_enabled True
``` ```
::: :::
That's it! With a functioning and enabled rotary encoder, you're ready to begin configuring the Canned Message Plugin. That's it! With a functioning and enabled rotary encoder, you're ready to begin configuring the Canned Message Module.

View file

@ -1,8 +1,9 @@
--- ---
id: environmental-measurement-plugin id: environmental-measurement-module
title: Environmental Measurement Plugin Settings title: Environmental Measurement Module Settings
sidebar_label: Environmental Measurement Plugin sidebar_label: Environmental Measurement Module
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem'; import TabItem from '@theme/TabItem';
@ -11,52 +12,55 @@ GPIO access is fundamentally dangerous because invalid options can physically da
::: :::
<!--- TODO add link to hardware setup to admonition---> <!--- TODO add link to hardware setup to admonition--->
:::note :::note
This plugin requires attaching a peripheral accessory to your device. It will not work without one. This module requires attaching a peripheral accessory to your device. It will not work without one.
::: :::
## Overview ## Overview
The Environment Measurement Plugin will allow nodes to send a specific message with information from connected environmental sensors. Currently supported sensors are BME280, BME680, DHT11, DHT12, DHT21, DHT22 and Dallas 1-wire DS18B20. The Environment Measurement Module will allow nodes to send a specific message with information from connected environmental sensors. Currently supported sensors are BME280, BME680, DHT11, DHT12, DHT21, DHT22 and Dallas 1-wire DS18B20.
:::tip :::tip
Once plugin settings are changed, a **reset** is required for them to take effect. Once module settings are changed, a **reset** is required for them to take effect.
::: :::
## Settings ## Settings
| Setting | Acceptable Values | Default | | Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: | | :-----------------------------------------: | :-----------------: | :-----: |
| environmental_measurement_plugin_display_farenheit | `true`, `false` | `false` | | telemetry_module_display_farenheit | `true`, `false` | `false` |
| environmental_measurement_plugin_measurement_enabled | `true`, `false` | `false` | | telemetry_module_measurement_enabled | `true`, `false` | `false` |
| environmental_measurement_plugin_read_error_count_threshold | `integer` | `0` | | telemetry_module_read_error_count_threshold | `integer` | `0` |
| environmental_measurement_plugin_recovery_interval | `integer` (seconds) | `0` | | telemetry_module_recovery_interval | `integer` (seconds) | `0` |
| environmental_measurement_plugin_screen_enabled | `true`, `false` | `0` | | telemetry_module_screen_enabled | `true`, `false` | `0` |
| environmental_measurement_plugin_sensor_pin | `integer` | `0` | | telemetry_module_sensor_pin | `integer` | `0` |
| environmental_measurement_plugin_sensor_type | `0-6` | `0` | | telemetry_module_sensor_type | `0-6` | `0` |
| environmental_measurement_plugin_update_interval | `integer` (seconds) | `0` | | telemetry_module_update_interval | `integer` (seconds) | `0` |
### environmental_measurement_plugin_display_farenheit ### telemetry_module_display_farenheit
The sensor is always read in Celsius, but the user can opt to view the temperature display in Fahrenheit using this setting. The sensor is always read in Celsius, but the user can opt to view the temperature display in Fahrenheit using this setting.
#### Display Farenheit/Celsius #### Display Farenheit/Celsius
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Display Farenheit" ```bash title="Display Farenheit"
meshtastic --set environmental_measurement_plugin_display_farenheit true meshtastic --set telemetry_module_display_farenheit true
``` ```
```bash title="Display Celsius" ```bash title="Display Celsius"
meshtastic --set environmental_measurement_plugin_display_farenheit false meshtastic --set telemetry_module_display_farenheit false
``` ```
</TabItem> </TabItem>
@ -83,28 +87,31 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### environmental_measurement_plugin_measurement_enabled ### telemetry_module_measurement_enabled
Enables the plugin. Enables the module.
#### Enable/Disable the module
#### Enable/Disable the plugin
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable Plugin" ```bash title="Enable Module"
meshtastic --set environmental_measurement_plugin_measurement_enabled true meshtastic --set telemetry_module_measurement_enabled true
``` ```
```bash title="Disable Plugin"
meshtastic --set environmental_measurement_plugin_measurement_enabled false ```bash title="Disable Module"
meshtastic --set telemetry_module_measurement_enabled false
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -129,25 +136,27 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### environmental_measurement_plugin_read_error_count_threshold ### telemetry_module_read_error_count_threshold
Sometimes sensor reads can fail. If this happens, we will retry a configurable number of attempts. Each attempt will be delayed by the minimum required refresh rate for that sensor Sometimes sensor reads can fail. If this happens, we will retry a configurable number of attempts. Each attempt will be delayed by the minimum required refresh rate for that sensor
#### Configure environmental_measurement_plugin_read_error_count_threshold #### Configure telemetry_module_read_error_count_threshold
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Configure environmental_measurement_plugin_read_error_count_threshold to 3 tries" <Tabs
meshtastic --set environmental_measurement_plugin_read_error_count_threshold 3 groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Configure telemetry_module_read_error_count_threshold to 3 tries"
meshtastic --set telemetry_module_read_error_count_threshold 3
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -172,25 +181,27 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### environmental_measurement_plugin_recovery_interval ### telemetry_module_recovery_interval
Sometimes we can end up with more than read_error_count_threshold failures. In this case, we will stop trying to read from the sensor for a while. Wait this long until trying to read from the sensor again. Sometimes we can end up with more than read_error_count_threshold failures. In this case, we will stop trying to read from the sensor for a while. Wait this long until trying to read from the sensor again.
#### Configure environmental_measurement_plugin_recovery_interval #### Configure telemetry_module_recovery_interval
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Configure environmental_measurement_plugin_recovery_interval to 120 seconds" <Tabs
meshtastic --set environmental_measurement_plugin_recovery_interval 120 groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Configure telemetry_module_recovery_interval to 120 seconds"
meshtastic --set telemetry_module_recovery_interval 120
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -215,28 +226,31 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### environmental_measurement_plugin_screen_enabled ### telemetry_module_screen_enabled
Enable/Disable the environmental measurement plugin on-device display. Enable/Disable the environmental measurement module on-device display.
#### Enable/Disable the module on device screen
#### Enable/Disable the plugin on device screen
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable on device screen" ```bash title="Enable on device screen"
meshtastic --set environmental_measurement_plugin_screen_enabled true meshtastic --set telemetry_module_screen_enabled true
``` ```
```bash title="Disable on device screen" ```bash title="Disable on device screen"
meshtastic --set environmental_measurement_plugin_screen_enabled false meshtastic --set telemetry_module_screen_enabled false
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -261,10 +275,10 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### environmental_measurement_plugin_sensor_pin ### telemetry_module_sensor_pin
:::note :::note
The preferred setup is using I2C, so the `environmental_measurement_plugin_sensor_pin` may not be needed. The preferred setup is using I2C, so the `telemetry_module_sensor_pin` may not be needed.
::: :::
Specify the preferred GPIO Pin for sensor readings. May not be needed if using I2C. Specify the preferred GPIO Pin for sensor readings. May not be needed if using I2C.
@ -273,20 +287,21 @@ Specify the preferred GPIO Pin for sensor readings. May not be needed if using I
To prevent damaging your device, double check your device's schematics before attaching to the GPIO pins and setting this value. To prevent damaging your device, double check your device's schematics before attaching to the GPIO pins and setting this value.
::: :::
#### Set plugin sensor pin #### Set module sensor pin
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set plugin sensor pin" <Tabs
meshtastic --set environmental_measurement_plugin_sensor_pin PINNUMBER groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set module sensor pin"
meshtastic --set telemetry_module_sensor_pin PINNUMBER
``` ```
</TabItem> </TabItem>
@ -313,43 +328,44 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### environmental_measurement_plugin_sensor_type ### telemetry_module_sensor_type
Specify the sensor type. Specify the sensor type.
| Value | Description | Sensor Features | | Value | Description | Sensor Features |
| :---: | :---------: | :-------------: | | :---: | :---------------------: | :--------------------------------------: |
| `0` | DHT11 | Temperature, Humidity | | `0` | DHT11 | Temperature, Humidity |
| `1` | DS18B20 (Dallas 1-wire) | Temperature | | `1` | DS18B20 (Dallas 1-wire) | Temperature |
| `2` | DHT12 | Temperature, Humidity | | `2` | DHT12 | Temperature, Humidity |
| `3` | DHT21 | Temperature, Humidity | | `3` | DHT21 | Temperature, Humidity |
| `4` | DHT22 | Temperature, Humidity | | `4` | DHT22 | Temperature, Humidity |
| `5` | BME280 | Temperature, Humidity, Pressure | | `5` | BME280 | Temperature, Humidity, Pressure |
| `6` | BME680 | Temperature, Humidity, Pressure, VOC Gas | | `6` | BME680 | Temperature, Humidity, Pressure, VOC Gas |
| `7` | MCP9808 | Precision Temperature | | `7` | MCP9808 | Precision Temperature |
#### Set sensor type #### Set sensor type
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::note :::note
The CLI is able to take the `value` or the `name` of the sensor from the table above. The CLI is able to take the `value` or the `name` of the sensor from the table above.
::: :::
```bash title="Set sensor type to DS18B20" ```bash title="Set sensor type to DS18B20"
meshtastic --set environmental_measurement_plugin_sensor_type 1 meshtastic --set telemetry_module_sensor_type 1
``` ```
```bash title="Set sensor type to DS18B20" ```bash title="Set sensor type to DS18B20"
meshtastic --set environmental_measurement_plugin_sensor_type DS18B20 meshtastic --set telemetry_module_sensor_type DS18B20
``` ```
</TabItem> </TabItem>
@ -376,24 +392,25 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### environmental_measurement_plugin_update_interval ### telemetry_module_update_interval
Interval in seconds of how often we should try to send our measurements to the mesh. Interval in seconds of how often we should try to send our measurements to the mesh.
#### Set plugin update interval #### Set module update interval
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set plugin update interval to 15 seconds" <Tabs
meshtastic --set environmental_measurement_plugin_update_interval 15 groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set module update interval to 15 seconds"
meshtastic --set telemetry_module_update_interval 15
``` ```
</TabItem> </TabItem>
@ -428,4 +445,4 @@ The sensors can be wired differently, here's [one example](https://randomnerdtut
### Known Problems ### Known Problems
* No default configuration values are currently set, so this must be done when enabling the plugin. - No default configuration values are currently set, so this must be done when enabling the module.

View file

@ -1,8 +1,9 @@
--- ---
id: external-notification-plugin id: external-notification-module
title: External Notification Plugin Settings title: External Notification Module Settings
sidebar_label: External Notification Plugin sidebar_label: External Notification Module
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem'; import TabItem from '@theme/TabItem';
@ -11,30 +12,31 @@ GPIO access is fundamentally dangerous because invalid options can physically da
::: :::
<!--- TODO add link to hardware setup to admonition---> <!--- TODO add link to hardware setup to admonition--->
:::note :::note
This plugin requires attaching a peripheral accessory to your device. It will not work without one. This module requires attaching a peripheral accessory to your device. It will not work without one.
::: :::
## Overview ## Overview
The External Notification Plugin will allow you to connect a speaker, LED, or other device to notify you when a message has been received from the mesh network. The External Notification Module will allow you to connect a speaker, LED, or other device to notify you when a message has been received from the mesh network.
:::tip :::tip
Once plugin settings are changed, a **reset** is required for them to take effect. Once module settings are changed, a **reset** is required for them to take effect.
::: :::
## Settings ## Settings
| Setting | Acceptable Values | Default | | Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: | | :-----------------------------------: | :----------------------: | :-----: |
| ext_notification_plugin_active | `true`, `false` | `false` | | ext_notification_module_active | `true`, `false` | `false` |
| ext_notification_plugin_alert_bell | `true`, `false` | `false` | | ext_notification_module_alert_bell | `true`, `false` | `false` |
| ext_notification_plugin_alert_message | `true`, `false` | `false` | | ext_notification_module_alert_message | `true`, `false` | `false` |
| ext_notification_plugin_enabled | `true`, `false` | `false` | | ext_notification_module_enabled | `true`, `false` | `false` |
| ext_notification_plugin_output | `integer` | `0` | | ext_notification_module_output | `integer` | `0` |
| ext_notification_plugin_output_ms | `integer` (milliseconds) | `0` | | ext_notification_module_output_ms | `integer` (milliseconds) | `0` |
### ext_notification_plugin_active ### ext_notification_module_active
Specifies whether the external circuit is triggered when the device's GPIO is low or high. Specifies whether the external circuit is triggered when the device's GPIO is low or high.
@ -43,23 +45,26 @@ To prevent damaging your device, double check your device's schematics before at
::: :::
#### Specify High/Low GPIO triggers circuit #### Specify High/Low GPIO triggers circuit
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="GPIO active high" ```bash title="GPIO active high"
meshtastic --set ext_notification_plugin_active true meshtastic --set ext_notification_module_active true
``` ```
```bash title="GPIO active low (default)" ```bash title="GPIO active low (default)"
meshtastic --set ext_notification_plugin_active false meshtastic --set ext_notification_module_active false
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -84,28 +89,31 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### ext_notification_plugin_alert_bell ### ext_notification_module_alert_bell
Specifies if an alert should be sent when receiving an incoming bell. Specifies if an alert should be sent when receiving an incoming bell.
#### Enable/Disable alert on incoming bell #### Enable/Disable alert on incoming bell
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable alert on incoming bell" ```bash title="Enable alert on incoming bell"
meshtastic --set ext_notification_plugin_alert_bell true meshtastic --set ext_notification_module_alert_bell true
``` ```
```bash title="Disable alert on incoming bell" ```bash title="Disable alert on incoming bell"
meshtastic --set ext_notification_plugin_alert_bell false meshtastic --set ext_notification_module_alert_bell false
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -130,28 +138,31 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### ext_notification_plugin_alert_message ### ext_notification_module_alert_message
Specifies if an alert should be sent when receiving an incoming message. Specifies if an alert should be sent when receiving an incoming message.
#### Enable/Disable Alert on incoming message #### Enable/Disable Alert on incoming message
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable alert on incoming message" ```bash title="Enable alert on incoming message"
meshtastic --set ext_notification_plugin_alert_message true meshtastic --set ext_notification_module_alert_message true
``` ```
```bash title="Disable alert on incoming message" ```bash title="Disable alert on incoming message"
meshtastic --set ext_notification_plugin_alert_message false meshtastic --set ext_notification_module_alert_message false
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -176,28 +187,31 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### ext_notification_plugin_enabled ### ext_notification_module_enabled
Enables the plugin. Enables the module.
#### Enable/Disable the module
#### Enable/Disable the plugin
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable Plugin" ```bash title="Enable Module"
meshtastic --set ext_notification_plugin_enabled true meshtastic --set ext_notification_module_enabled true
``` ```
```bash title="Disable Plugin"
meshtastic --set ext_notification_plugin_enabled false ```bash title="Disable Module"
meshtastic --set ext_notification_module_enabled false
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -222,7 +236,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### ext_notification_plugin_output ### ext_notification_module_output
Specifies the GPIO that your external circuit is attached to on the device. Specifies the GPIO that your external circuit is attached to on the device.
@ -231,24 +245,26 @@ To prevent damaging your device, double check your device's schematics before at
::: :::
#### Specify GPIO for circuit to monitor #### Specify GPIO for circuit to monitor
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::note :::note
Replace `GPIO` in the below command with the GPIO number your circuit is attached to. Replace `GPIO` in the below command with the GPIO number your circuit is attached to.
::: :::
```bash title="Specify GPIO that circuit is connected to" ```bash title="Specify GPIO that circuit is connected to"
meshtastic --set ext_notification_plugin_output GPIO meshtastic --set ext_notification_module_output GPIO
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -273,28 +289,31 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### ext_notification_plugin_output_ms ### ext_notification_module_output_ms
Specifies how long in milliseconds you would like your external circuit triggered. Default is `1000`. (Because of the way that defaults are handled in the protobufs `0` is interpreted as `1000`) Specifies how long in milliseconds you would like your external circuit triggered. Default is `1000`. (Because of the way that defaults are handled in the protobufs `0` is interpreted as `1000`)
#### Specify how many milliseconds to trigger circuit #### Specify how many milliseconds to trigger circuit
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set to default (1000ms)" ```bash title="Set to default (1000ms)"
meshtastic --set ext_notification_plugin_output_ms 0 meshtastic --set ext_notification_module_output_ms 0
``` ```
```bash title="Set to other value" ```bash title="Set to other value"
meshtastic --set ext_notification_plugin_output_ms 1500 meshtastic --set ext_notification_module_output_ms 1500
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">

View file

@ -19,48 +19,52 @@ You may want to change your [GPS location sharing settings](gps#location_share)
If your device is connected to WiFi you can enable it to forward messages along to an MQTT server. This allows users on the local mesh to communicate with users on the internet. If your device is connected to WiFi you can enable it to forward messages along to an MQTT server. This allows users on the local mesh to communicate with users on the internet.
Be sure to checkout this [MQTT](https://meshtastic.org/docs/software/other/mqtt) too. Be sure to checkout this [MQTT](/docs/software/other/mqtt) too.
## Settings ## Settings
| Setting | Acceptable Values | Default | | Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: | | :---------------------: | :---------------: | :-----: |
| downlink_enabled | `true`, `false` | `false` | | downlink_enabled | `true`, `false` | `false` |
| mqtt_disabled | `true`, `false` | `false` | | mqtt_disabled | `true`, `false` | `false` |
| mqtt_encryption_enabled | `true`, `false` | `false` | | mqtt_encryption_enabled | `true`, `false` | `false` |
| mqtt_password | `string` | `""` | | mqtt_password | `string` | `""` |
| mqtt_server | `string` | `""` | | mqtt_server | `string` | `""` |
| mqtt_username | `string` | `""` | | mqtt_username | `string` | `""` |
| uplink_enabled | `true`, `false` | `false` | | uplink_enabled | `true`, `false` | `false` |
### downlink_enabled ### downlink_enabled
This is a channel specific setting. If your channel has this set to `true` and you are connected to WiFi, the device will forward along messages from the MQTT server specified [here](#mqtt_server) to the mesh from this device. This is a channel specific setting. If your channel has this set to `true` and you are connected to WiFi, the device will forward along messages from the MQTT server specified [here](#mqtt_server) to the mesh from this device.
#### Enable/Disable downlink_enabled #### Enable/Disable downlink_enabled
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable downlink_enabled on PRIMARY channel" <Tabs
meshtastic --ch-set downlink_enabled true --ch-index 0 groupId="settings"
``` defaultValue="cli"
```bash title="Disable downlink_enabled on PRIMARY channel" values={[
meshtastic --ch-set downlink_enabled false --ch-index 0 {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
```bash title="Enable downlink_enabled on OTHER channel" {label: 'iOS', value: 'iOS'},
meshtastic --ch-set downlink_enabled true --ch-index 1 {label: 'Web', value: 'web'},
``` ]}>
```bash title="Disable downlink_enabled on OTHER channel" <TabItem value="cli">
meshtastic --ch-set downlink_enabled false --ch-index 1
``` ```bash title="Enable downlink_enabled on PRIMARY channel"
meshtastic --ch-set downlink_enabled true --ch-index 0
```
```bash title="Disable downlink_enabled on PRIMARY channel"
meshtastic --ch-set downlink_enabled false --ch-index 0
```
```bash title="Enable downlink_enabled on OTHER channel"
meshtastic --ch-set downlink_enabled true --ch-index 1
```
```bash title="Disable downlink_enabled on OTHER channel"
meshtastic --ch-set downlink_enabled false --ch-index 1
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -91,23 +95,25 @@ Configuring this setting is not yet available for the selected platform. If this
If a meshtastic node is able to reach the internet it will normally attempt to gateway any channels that are marked as `uplink_enabled` or `downlink_enabled`. But if this flag is set, all MQTT features will be disabled and no servers will be contacted. If a meshtastic node is able to reach the internet it will normally attempt to gateway any channels that are marked as `uplink_enabled` or `downlink_enabled`. But if this flag is set, all MQTT features will be disabled and no servers will be contacted.
#### Enable/Disable MQTT #### Enable/Disable MQTT
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable MQTT (Default)" <Tabs
meshtastic --set mqtt_disabled false groupId="settings"
``` defaultValue="cli"
```bash title="Disable MQTT" values={[
meshtastic --set mqtt_disabled true {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable MQTT (Default)"
meshtastic --set mqtt_disabled false
```
```bash title="Disable MQTT"
meshtastic --set mqtt_disabled true
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -142,23 +148,25 @@ If you are using the default Meshtastic MQTT server, this setting will take no e
::: :::
#### Enable/Disable MQTT Encryption #### Enable/Disable MQTT Encryption
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Publish decrypted packets to MQTT (Default)" <Tabs
meshtastic --set mqtt_encryption_enabled false groupId="settings"
``` defaultValue="cli"
```bash title="Publish encrypted packets to MQTT" values={[
meshtastic --set mqtt_encryption_enabled true {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Publish decrypted packets to MQTT (Default)"
meshtastic --set mqtt_encryption_enabled false
```
```bash title="Publish encrypted packets to MQTT"
meshtastic --set mqtt_encryption_enabled true
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -189,26 +197,29 @@ Configuring this setting is not yet available for the selected platform. If this
MQTT password to use (most useful for a custom MQTT server). If using a custom server, this will be honoured even if empty. If using the default server, this will only be honoured if set, otherwise the device will use the default password `large4cats`. MQTT password to use (most useful for a custom MQTT server). If using a custom server, this will be honoured even if empty. If using the default server, this will only be honoured if set, otherwise the device will use the default password `large4cats`.
#### Configure mqtt_password #### Configure mqtt_password
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set mqtt_password" <Tabs
meshtastic --set mqtt_password mypassword groupId="settings"
``` defaultValue="cli"
```bash title="Set mqtt_password (with spaces)" values={[
meshtastic --set mqtt_password "my password" {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
```bash title="Unset mqtt_password (Default)" {label: 'iOS', value: 'iOS'},
meshtastic --set mqtt_password "" {label: 'Web', value: 'web'},
``` ]}>
<TabItem value="cli">
```bash title="Set mqtt_password"
meshtastic --set mqtt_password mypassword
```
```bash title="Set mqtt_password (with spaces)"
meshtastic --set mqtt_password "my password"
```
```bash title="Unset mqtt_password (Default)"
meshtastic --set mqtt_password ""
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -239,30 +250,33 @@ Configuring this setting is not yet available for the selected platform. If this
The server to use for our MQTT global message gateway feature. If not set, the default server will be used The server to use for our MQTT global message gateway feature. If not set, the default server will be used
#### Enable/Disable MQTT Server #### Enable/Disable MQTT Server
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::tip :::tip
When the mqtt_server is set to `""`, it will default to `mqtt.meshtastic.org` When the mqtt_server is set to `""`, it will default to `mqtt.meshtastic.org`
::: :::
```bash title="Enable MQTT Server - Public Meshtastic MQTT Server (Default)" ```bash title="Enable MQTT Server - Public Meshtastic MQTT Server (Default)"
meshtastic --set mqtt_server "" meshtastic --set mqtt_server ""
``` ```
```bash title="Enable MQTT Server - Personal MQTT Server (by IP)"
meshtastic --set mqtt_server 198.168.0.2 ```bash title="Enable MQTT Server - Personal MQTT Server (by IP)"
``` meshtastic --set mqtt_server 198.168.0.2
```bash title="Enable MQTT Server - Personal MQTT Server (by URL)" ```
meshtastic --set mqtt_server mqtt.mydomain.com
``` ```bash title="Enable MQTT Server - Personal MQTT Server (by URL)"
meshtastic --set mqtt_server mqtt.mydomain.com
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -293,26 +307,29 @@ Configuring this setting is not yet available for the selected platform. If this
MQTT username to use (most useful for a custom MQTT server). If using a custom server, this will be honoured even if empty. If using the default server, this will only be honoured if set, otherwise the device will use the default username `meshdev`. MQTT username to use (most useful for a custom MQTT server). If using a custom server, this will be honoured even if empty. If using the default server, this will only be honoured if set, otherwise the device will use the default username `meshdev`.
#### Configure mqtt_username #### Configure mqtt_username
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set mqtt_username" <Tabs
meshtastic --set mqtt_username myusername groupId="settings"
``` defaultValue="cli"
```bash title="Set mqtt_username (with spaces)" values={[
meshtastic --set mqtt_username "my username" {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
```bash title="Unset mqtt_username (Default)" {label: 'iOS', value: 'iOS'},
meshtastic --set mqtt_username "" {label: 'Web', value: 'web'},
``` ]}>
<TabItem value="cli">
```bash title="Set mqtt_username"
meshtastic --set mqtt_username myusername
```
```bash title="Set mqtt_username (with spaces)"
meshtastic --set mqtt_username "my username"
```
```bash title="Unset mqtt_username (Default)"
meshtastic --set mqtt_username ""
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -343,29 +360,33 @@ Configuring this setting is not yet available for the selected platform. If this
This is a channel specific setting. If your channel has this set to `true` and you are connected to WiFi, the device will forward along messages to whatever MQTT server is specified in [mqtt_server](#mqtt_server). This is a channel specific setting. If your channel has this set to `true` and you are connected to WiFi, the device will forward along messages to whatever MQTT server is specified in [mqtt_server](#mqtt_server).
#### Enable/Disable uplink_enabled #### Enable/Disable uplink_enabled
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable uplink_enabled on PRIMARY channel" <Tabs
meshtastic --ch-set uplink_enabled true --ch-index 0 groupId="settings"
``` defaultValue="cli"
```bash title="Disable uplink_enabled on PRIMARY channel" values={[
meshtastic --ch-set uplink_enabled false --ch-index 0 {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
```bash title="Enable uplink_enabled on OTHER channel" {label: 'iOS', value: 'iOS'},
meshtastic --ch-set uplink_enabled true --ch-index 1 {label: 'Web', value: 'web'},
``` ]}>
```bash title="Disable uplink_enabled on OTHER channel" <TabItem value="cli">
meshtastic --ch-set uplink_enabled false --ch-index 1
``` ```bash title="Enable uplink_enabled on PRIMARY channel"
meshtastic --ch-set uplink_enabled true --ch-index 0
```
```bash title="Disable uplink_enabled on PRIMARY channel"
meshtastic --ch-set uplink_enabled false --ch-index 0
```
```bash title="Enable uplink_enabled on OTHER channel"
meshtastic --ch-set uplink_enabled true --ch-index 1
```
```bash title="Disable uplink_enabled on OTHER channel"
meshtastic --ch-set uplink_enabled false --ch-index 1
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -406,7 +427,7 @@ values={[
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set server" ```bash title="Set server"
meshtastic --set mqtt_server 192.168.123.234 meshtastic --set mqtt_server 192.168.123.234
@ -423,8 +444,8 @@ mosquitto_sub -h 192.168.123.234 -v -t msh/#
:::note :::note
FIXME some documentation says msh/# , some says mesh/# . As of 1.2.39 the messages are on msh/# FIXME some documentation says msh/# , some says mesh/# . As of 1.2.39 the messages are on msh/#
::: :::
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
:::info :::info
Configuring this setting is not yet available for the selected platform. If this is incorrect please update the documentation for this page. Configuring this setting is not yet available for the selected platform. If this is incorrect please update the documentation for this page.

View file

@ -1,7 +1,7 @@
--- ---
id: range-test-plugin id: range-test-module
title: Range Test Plugin Settings title: Range Test Module Settings
sidebar_label: Range Test Plugin sidebar_label: Range Test Module
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
@ -9,42 +9,44 @@ import TabItem from '@theme/TabItem';
## Overview ## Overview
This plugin allows you to test the range of your Meshtastic nodes. It requires at least two nodes, a sender and a receiver. The receiving node then saves the messages along with the GPS coordinates at which they were received into a .csv file. This .csv file can then be integrated into [Google Earth](https://earth.google.com), [Google Maps - My Maps](https://mymaps.google.com), or any other program capable of processing .csv files. This can enable you to visualize your mesh. This module allows you to test the range of your Meshtastic nodes. It requires at least two nodes, a sender and a receiver. The receiving node then saves the messages along with the GPS coordinates at which they were received into a .csv file. This .csv file can then be integrated into [Google Earth](https://earth.google.com), [Google Maps - My Maps](https://mymaps.google.com), or any other program capable of processing .csv files. This can enable you to visualize your mesh.
:::tip :::tip
Once plugin settings are changed, a **reset** is required for them to take effect. Once module settings are changed, a **reset** is required for them to take effect.
::: :::
## Settings ## Settings
| Setting | Acceptable Values | Default | | Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: | | :-----------------------: | :-----------------: | :-----: |
| range_test_plugin_enabled | `true`, `false` | `false` | | range_test_module_enabled | `true`, `false` | `false` |
| range_test_plugin_save | `true`, `false` | `false` | | range_test_module_save | `true`, `false` | `false` |
| range_test_plugin_sender | `integer` (Seconds) | `0` | | range_test_module_sender | `integer` (Seconds) | `0` |
### range_test_plugin_enabled ### range_test_module_enabled
Enables the plugin. Enables the module.
#### Enable/Disable the module
#### Enable/Disable the plugin
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable the plugin" ```bash title="Enable the module"
meshtastic --set range_test_plugin_enabled true meshtastic --set range_test_module_enabled true
``` ```
```bash title="Disable the plugin"
meshtastic --set range_test_plugin_enabled true ```bash title="Disable the module"
``` meshtastic --set range_test_module_enabled true
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -70,28 +72,30 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### range_test_plugin_save ### range_test_module_save
If enabled, we will save a log of all received messages to `/static/rangetest.csv` which you can access from the web server. We will abort writing if there is less than 50k of space on the filesystem to prevent filling up the storage. If enabled, we will save a log of all received messages to `/static/rangetest.csv` which you can access from the web server. We will abort writing if there is less than 50k of space on the filesystem to prevent filling up the storage.
#### Enable/Disable range test save `csv` #### Enable/Disable range test save `csv`
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable range test save" <Tabs
meshtastic --set range_test_plugin_save true groupId="settings"
``` defaultValue="cli"
```bash title="Disable range test save" values={[
meshtastic --set range_test_plugin_save false {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable range test save"
meshtastic --set range_test_module_save true
```
```bash title="Disable range test save"
meshtastic --set range_test_module_save false
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -117,28 +121,30 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### range_test_plugin_sender ### range_test_module_sender
Number of seconds to wait between sending packets. Using the long_slow channel configuration, it's best not to go more frequent than once every 60 seconds. You can be more aggressive with faster settings. `0` is default which disables sending messages. Number of seconds to wait between sending packets. Using the long_slow channel configuration, it's best not to go more frequent than once every 60 seconds. You can be more aggressive with faster settings. `0` is default which disables sending messages.
#### Enable/Disable range test sender #### Enable/Disable range test sender
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable range test sender (send every 60 seconds)" <Tabs
meshtastic --set range_test_plugin_sender 60 groupId="settings"
``` defaultValue="cli"
```bash title="Disable range test sender" values={[
meshtastic --set range_test_plugin_sender 0 {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable range test sender (send every 60 seconds)"
meshtastic --set range_test_module_sender 60
```
```bash title="Disable range test sender"
meshtastic --set range_test_module_sender 0
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -166,14 +172,14 @@ Configuring this setting is not yet available for the selected platform. If this
## Details ## Details
While a minimum of two radios is required, more can be used. You can have any number of receivers and senders that your mesh is able to handle. You can test having a single sender with multiple receivers or a single receiver with multiple senders. Let us know on the [forum thread](https://meshtastic.discourse.group/t/new-plugin-rangetestplugin/2591/) the results of your configuration. While a minimum of two radios is required, more can be used. You can have any number of receivers and senders that your mesh is able to handle. You can test having a single sender with multiple receivers or a single receiver with multiple senders. Let us know on the [forum thread](https://meshtastic.discourse.group/t/new-plugin-rangetestplugin/2591) the results of your configuration.
Be sure to turn off either the plugin configured as a sender or the device where the plugin setup as sender when not in use. This will use a lot of time on air and will spam your channel. Be sure to turn off either the module configured as a sender or the device where the module setup as sender when not in use. This will use a lot of time on air and will spam your channel.
Also be mindful of your space usage on the file system. It has protections from filling up the space but it's best to delete old range test results. Also be mindful of your space usage on the file system. It has protections from filling up the space but it's best to delete old range test results.
:::note :::note
Leaving this plugin on can slow down your mesh. Currently, the messages are sent using the same `TEXT_MESSAGE_APP` [port that all other messages](/docs/developers/protobufs/api#portnumsproto) are sent on. Leaving this module on can slow down your mesh. Currently, the messages are sent using the same `TEXT_MESSAGE_APP` [port that all other messages](/docs/developers/protobufs/api#portnumsproto) are sent on.
::: :::
### Accessing your CSV ### Accessing your CSV
@ -187,7 +193,7 @@ http://198.168.0.X/static/rangetest.csv
### Recommended Sender Settings ### Recommended Sender Settings
| Radio Setting | `range_test_plugin_sender` | | Radio Setting | `range_test_module_sender` |
| :-----------: | :------------------------: | | :-----------: | :------------------------: |
| Long Slow | 60 | | Long Slow | 60 |
| Long Alt | 30 | | Long Alt | 30 |
@ -210,8 +216,8 @@ values={[
<TabItem value="cli"> <TabItem value="cli">
```bash title="Example - Sender Node" ```bash title="Example - Sender Node"
meshtastic --set range_test_plugin_enabled true meshtastic --set range_test_module_enabled true
meshtastic --set range_test_plugin_sender 60 meshtastic --set range_test_module_sender 60
``` ```
</TabItem> </TabItem>
@ -252,8 +258,8 @@ values={[
<TabItem value="cli"> <TabItem value="cli">
```bash title="Example - Receiver Node" ```bash title="Example - Receiver Node"
meshtastic --set range_test_plugin_enabled true meshtastic --set range_test_module_enabled true
meshtastic --set range_test_plugin_save true meshtastic --set range_test_module_save true
``` ```
</TabItem> </TabItem>

View file

@ -1,8 +1,9 @@
--- ---
id: rotary-encoder-plugin id: rotary-encoder-module
title: Rotary Encoder title: Rotary Encoder
sidebar_label: Rotary Encoder sidebar_label: Rotary Encoder
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem'; import TabItem from '@theme/TabItem';
@ -11,8 +12,9 @@ GPIO access is fundamentally dangerous because invalid options can physically da
::: :::
<!--- TODO add link to hardware setup to admonition---> <!--- TODO add link to hardware setup to admonition--->
:::note :::note
This plugin requires attaching a peripheral accessory to your device. It will not work without one. This module requires attaching a peripheral accessory to your device. It will not work without one.
::: :::
## Overview ## Overview
@ -22,42 +24,45 @@ Currently, one rotary encoder (`rotary1`) is defined, but later more rotary enco
can be added (if needed) the same way. can be added (if needed) the same way.
:::tip :::tip
Once plugin settings are changed, a **reset** is required for them to take effect. Once module settings are changed, a **reset** is required for them to take effect.
::: :::
## Settings ## Settings
| Setting | Acceptable Values | Default | | Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: | | :-----------------: | :---------------: | :-----------: |
| rotary1_enabled | `true`, `false` | `false` | | rotary1_enabled | `true`, `false` | `false` |
| rotary1_event_cw | `InputEventChar` | (not defined) | | rotary1_event_cw | `InputEventChar` | (not defined) |
| rotary1_event_ccw | `InputEventChar` | (not defined) | | rotary1_event_ccw | `InputEventChar` | (not defined) |
| rotary1_event_press | `InputEventChar` | (not defined) | | rotary1_event_press | `InputEventChar` | (not defined) |
| rotary1_pin_a | `integer` | (not defined) | | rotary1_pin_a | `integer` | (not defined) |
| rotary1_pin_b | `integer` | (not defined) | | rotary1_pin_b | `integer` | (not defined) |
| rotary1_pin_press | `integer` | (not defined) | | rotary1_pin_press | `integer` | (not defined) |
### rotary1_enabled ### rotary1_enabled
Enable the rotary encoder #1 Enable the rotary encoder #1
#### Enable/Disable rotary1 #### Enable/Disable rotary1
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable rotary1" <Tabs
meshtastic --set rotary1_enabled true groupId="settings"
``` defaultValue="cli"
```bash title="Disable rotary1" values={[
meshtastic --set rotary1_enabled true {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Enable rotary1"
meshtastic --set rotary1_enabled true
```
```bash title="Disable rotary1"
meshtastic --set rotary1_enabled true
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -81,30 +86,33 @@ Configuring this setting is not yet available for the selected platform. If this
</Tabs> </Tabs>
### rotary1_event_cw ### rotary1_event_cw
Generate input event on CW of this kind. Generate input event on CW of this kind.
:::tip :::tip
For using with CannedMessagePlugin you must choose value `KEY_UP` here. For using with CannedMessageModule you must choose value `KEY_UP` here.
::: :::
#### Specify rotary1 event cw #### Specify rotary1 event cw
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set rotary1 event cw to 'KEY_UP'" <Tabs
meshtastic --set rotary1_event_press KEY_UP groupId="settings"
``` defaultValue="cli"
```bash title="Unset rotary1 event cw" values={[
meshtastic --set rotary1_event_press "" {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set rotary1 event cw to 'KEY_UP'"
meshtastic --set rotary1_event_press KEY_UP
```
```bash title="Unset rotary1 event cw"
meshtastic --set rotary1_event_press ""
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -128,30 +136,33 @@ Configuring this setting is not yet available for the selected platform. If this
</Tabs> </Tabs>
### rotary1_event_ccw ### rotary1_event_ccw
Generate input event on CCW of this kind. Generate input event on CCW of this kind.
:::tip :::tip
For using with CannedMessagePlugin you must choose value `KEY_DOWN` here. For using with CannedMessageModule you must choose value `KEY_DOWN` here.
::: :::
#### Specify rotary1 event ccw #### Specify rotary1 event ccw
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set rotary1 event ccw to 'KEY_DOWN'" <Tabs
meshtastic --set rotary1_event_ccw KEY_DOWN groupId="settings"
``` defaultValue="cli"
```bash title="Unset rotary1 event ccw" values={[
meshtastic --set rotary1_event_ccw "" {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set rotary1 event ccw to 'KEY_DOWN'"
meshtastic --set rotary1_event_ccw KEY_DOWN
```
```bash title="Unset rotary1 event ccw"
meshtastic --set rotary1_event_ccw ""
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -175,30 +186,33 @@ Configuring this setting is not yet available for the selected platform. If this
</Tabs> </Tabs>
### rotary1_event_press ### rotary1_event_press
Generate input event on Press of this kind. Generate input event on Press of this kind.
:::tip :::tip
For using with CannedMessagePlugin you must choose value `KEY_SELECT` here. For using with CannedMessageModule you must choose value `KEY_SELECT` here.
::: :::
#### Specify rotary1 event press #### Specify rotary1 event press
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set rotary1 event press to 'KEY_SELECT'" <Tabs
meshtastic --set rotary1_event_press KEY_SELECT groupId="settings"
``` defaultValue="cli"
```bash title="Unset rotary1 event press" values={[
meshtastic --set rotary1_event_press "" {label: 'CLI', value: 'cli'},
``` {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```bash title="Set rotary1 event press to 'KEY_SELECT'"
meshtastic --set rotary1_event_press KEY_SELECT
```
```bash title="Unset rotary1 event press"
meshtastic --set rotary1_event_press ""
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -222,6 +236,7 @@ Configuring this setting is not yet available for the selected platform. If this
</Tabs> </Tabs>
### rotary1_pin_a ### rotary1_pin_a
GPIO pin for rotary encoder A port. GPIO pin for rotary encoder A port.
:::caution :::caution
@ -229,24 +244,25 @@ To prevent damaging your device, double check your device's schematics before at
::: :::
#### Specify rotary1 pin a #### Specify rotary1 pin a
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::note :::note
Replace `GPIO` below with the GPIO number from hardware setup. Replace `GPIO` below with the GPIO number from hardware setup.
::: :::
```bash title="Specify rotary1 pin a" ```bash title="Specify rotary1 pin a"
meshtastic --set rotary1_pin_a GPIO meshtastic --set rotary1_pin_a GPIO
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -270,6 +286,7 @@ Configuring this setting is not yet available for the selected platform. If this
</Tabs> </Tabs>
### rotary1_pin_b ### rotary1_pin_b
GPIO pin for rotary encoder B port. GPIO pin for rotary encoder B port.
:::caution :::caution
@ -277,24 +294,25 @@ To prevent damaging your device, double check your device's schematics before at
::: :::
#### Specify rotary1 pin b #### Specify rotary1 pin b
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::note :::note
Replace `GPIO` below with the GPIO number from hardware setup. Replace `GPIO` below with the GPIO number from hardware setup.
::: :::
```bash title="Specify rotary1 pin b" ```bash title="Specify rotary1 pin b"
meshtastic --set rotary1_pin_b GPIO meshtastic --set rotary1_pin_b GPIO
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -318,6 +336,7 @@ Configuring this setting is not yet available for the selected platform. If this
</Tabs> </Tabs>
### rotary1_pin_press ### rotary1_pin_press
GPIO pin for rotary encoder Press port. GPIO pin for rotary encoder Press port.
:::caution :::caution
@ -325,24 +344,25 @@ To prevent damaging your device, double check your device's schematics before at
::: :::
#### Specify rotary1 pin press #### Specify rotary1 pin press
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::note :::note
Replace `GPIO` below with the GPIO number from hardware setup. Replace `GPIO` below with the GPIO number from hardware setup.
::: :::
```bash title="Specify rotary1 pin press" ```bash title="Specify rotary1 pin press"
meshtastic --set rotary1_pin_press GPIO meshtastic --set rotary1_pin_press GPIO
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -369,35 +389,37 @@ Configuring this setting is not yet available for the selected platform. If this
<!--- TODO add link to hardware page ---> <!--- TODO add link to hardware page --->
Configuring the rotary encoder plugin require attaching the compatible hardware. Configuring the rotary encoder module require attaching the compatible hardware.
## Examples ## Examples
### Configure rotary encoder for Canned Message Plugin ### Configure rotary encoder for Canned Message Module
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::note :::note
Replace each `GPIO` (x3) below with the GPIO numbers from hardware setup. Replace each `GPIO` (x3) below with the GPIO numbers from hardware setup.
::: :::
```bash title="Canned Message Plugin - Required Rotary Encoder Plugin Settings" ```bash title="Canned Message Module - Required Rotary Encoder Module Settings"
meshtastic --set rotary1_pin_a GPIO meshtastic --set rotary1_pin_a GPIO
meshtastic --set rotary1_pin_b GPIO meshtastic --set rotary1_pin_b GPIO
meshtastic --set rotary1_pin_press GPIO meshtastic --set rotary1_pin_press GPIO
meshtastic --set rotary1_event_cw KEY_UP meshtastic --set rotary1_event_cw KEY_UP
meshtastic --set rotary1_event_ccw KEY_DOWN meshtastic --set rotary1_event_ccw KEY_DOWN
meshtastic --set rotary1_event_press KEY_SELECT meshtastic --set rotary1_event_press KEY_SELECT
meshtastic --set rotary1_enabled True meshtastic --set rotary1_enabled True
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
:::info :::info

View file

@ -1,8 +1,9 @@
--- ---
id: serial-plugin id: serial-module
title: Serial Plugin Settings title: Serial Module Settings
sidebar_label: Serial Plugin sidebar_label: Serial Module
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem'; import TabItem from '@theme/TabItem';
@ -11,7 +12,7 @@ GPIO access is fundamentally dangerous because invalid options can physically da
::: :::
:::note :::note
This plugin requires attaching a peripheral accessory to your device. It will not work without one. This module requires attaching a peripheral accessory to your device. It will not work without one.
::: :::
## Overview ## Overview
@ -19,41 +20,42 @@ This plugin requires attaching a peripheral accessory to your device. It will no
This is a simple interface to send messages over the mesh network by sending strings over a serial port. This is a simple interface to send messages over the mesh network by sending strings over a serial port.
:::tip :::tip
Once plugin settings are changed, a **reset** is required for them to take effect. Once module settings are changed, a **reset** is required for them to take effect.
::: :::
## Settings ## Settings
| Setting | Acceptable Values | Default | | Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: | | :-------------------: | :-----------------: | :-----: |
| serialplugin_enabled | `true`, `false` | `false` | | serial_module_enabled | `true`, `false` | `false` |
| serialplugin_echo | `true`, `false` | `false` | | serial_module_echo | `true`, `false` | `false` |
| serialplugin_mode | `integer` | `0` | | serial_module_mode | `integer` | `0` |
| serialplugin_rxd | `integer` (GPIO) | `0` | | serial_module_rxd | `integer` (GPIO) | `0` |
| serialplugin_timeout | `integer` (seconds) | `0` | | serial_module_timeout | `integer` (seconds) | `0` |
| serialplugin_txd | `integer` (GPIO) | `0` | | serial_module_txd | `integer` (GPIO) | `0` |
### serialplugin_enabled ### serial_module_enabled
Enables the plugin. Enables the module.
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable plugin" ```bash title="Enable module"
meshtastic --set serialplugin_enabled true meshtastic --set serial_module_enabled true
``` ```
```bash title="Disable plugin"
meshtastic --set serialplugin_enabled false ```bash title="Disable module"
``` meshtastic --set serial_module_enabled false
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -79,27 +81,28 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### serialplugin_echo ### serial_module_echo
If set, any packets you send will be echoed back to your device. If set, any packets you send will be echoed back to your device.
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable serialplugin_echo" ```bash title="Enable serial_module_echo"
meshtastic --set serialplugin_echo true meshtastic --set serial_module_echo true
``` ```
```bash title="Disable serialplugin_echo"
meshtastic --set serialplugin_echo false ```bash title="Disable serial_module_echo"
``` meshtastic --set serial_module_echo false
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -125,20 +128,20 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### serialplugin_mode ### serial_module_mode
<!--- TODO ---> <!--- TODO --->
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::info :::info
Configuring this setting is not yet available for the selected platform. If this is incorrect please update the documentation for this page. Configuring this setting is not yet available for the selected platform. If this is incorrect please update the documentation for this page.
@ -168,7 +171,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### serialplugin_rxd ### serial_module_rxd
Set the GPIO pin to the RXD pin you have set up. Set the GPIO pin to the RXD pin you have set up.
@ -177,23 +180,23 @@ To prevent damaging your device, double check your device's schematics before at
::: :::
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::note :::note
Replace `GPIO` in the below command with the GPIO number your circuit is attached to. Replace `GPIO` in the below command with the GPIO number your circuit is attached to.
::: :::
```bash title="Set RXD to GPIO pin number" ```bash title="Set RXD to GPIO pin number"
meshtastic --set serialplugin_rxd GPIO meshtastic --set serial_module_rxd GPIO
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -219,24 +222,24 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### serialplugin_timeout ### serial_module_timeout
The amount of time to wait before we consider your packet as "done". The amount of time to wait before we consider your packet as "done".
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set serialplugin_timeout to 15 seconds" ```bash title="Set serial_module_timeout to 15 seconds"
meshtastic --set serialplugin_timeout 15 meshtastic --set serial_module_timeout 15
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -262,7 +265,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### serialplugin_txd ### serial_module_txd
Set the GPIO pin to the TXD pin you have set up. Set the GPIO pin to the TXD pin you have set up.
@ -271,23 +274,23 @@ To prevent damaging your device, double check your device's schematics before at
::: :::
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
:::note :::note
Replace `GPIO` in the below command with the GPIO number your circuit is attached to. Replace `GPIO` in the below command with the GPIO number your circuit is attached to.
::: :::
```bash title="Set TXD to GPIO pin number" ```bash title="Set TXD to GPIO pin number"
meshtastic --set serialplugin_txd GPIO meshtastic --set serial_module_txd GPIO
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">

View file

@ -1,15 +1,16 @@
--- ---
id: store-and-forward-plugin id: store-and-forward-module
title: Store and Forward Settings title: Store and Forward Settings
sidebar_label: Store and Forward sidebar_label: Store and Forward
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem'; import TabItem from '@theme/TabItem';
:::info :::info
Currently only available for ESP32 based devices with external PSRAM. Requires the device to be set as a router. Currently only available for ESP32 based devices with external PSRAM. Requires the device to be set as a router.
**Don't enable Store and Forward Plugin on multiple [routers](router).** **Don't enable Store and Forward Module on multiple [routers](router).**
::: :::
## Overview ## Overview
@ -18,45 +19,46 @@ Currently only available for ESP32 based devices with external PSRAM. Requires t
This is a work in progress and is partially available. Stability is not guaranteed. This is a work in progress and is partially available. Stability is not guaranteed.
::: :::
The Store Forward Plugin is an implementation of a Store and Forward system to enable resilient messaging in the event that a client device is disconnected from the main network. The Store Forward Module is an implementation of a Store and Forward system to enable resilient messaging in the event that a client device is disconnected from the main network.
Because of the increased network traffic for this overhead, it's not advised to use this if you are duty cycle limited for your airtime usage nor is it advised to use this for SF12 (Long Range / Slow). Because of the increased network traffic for this overhead, it's not advised to use this if you are duty cycle limited for your airtime usage nor is it advised to use this for SF12 (Long Range / Slow).
:::tip :::tip
Once plugin settings are changed, a **reset** is required for them to take effect. Once module settings are changed, a **reset** is required for them to take effect.
::: :::
## Settings ## Settings
| Setting | Acceptable Values | Default | | Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: | | :----------------------------------------: | :---------------: | :-----: |
| store_forward_plugin_enabled | `true`, `false` | `false` | | store_forward_module_enabled | `true`, `false` | `false` |
| store_forward_plugin_heartbeat | `true`, `false` | `false` | | store_forward_module_heartbeat | `true`, `false` | `false` |
| store_forward_plugin_history_return_max | `integer` | `0` | | store_forward_module_history_return_max | `integer` | `0` |
| store_forward_plugin_history_return_window | `integer` | `0` | | store_forward_module_history_return_window | `integer` | `0` |
| store_forward_plugin_records | `integer` | `0` | | store_forward_module_records | `integer` | `0` |
### store_forward_plugin_enabled ### store_forward_module_enabled
Enables the plugin. Enables the module.
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Enable the plugin" ```bash title="Enable the module"
meshtastic --set store_forward_plugin_enabled true meshtastic --set store_forward_module_enabled true
``` ```
```bash title="Disable the plugin"
meshtastic --set store_forward_plugin_enabled false ```bash title="Disable the module"
``` meshtastic --set store_forward_module_enabled false
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -82,24 +84,24 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### store_forward_plugin_heartbeat ### store_forward_module_heartbeat
The Store & Forward Router sends a periodic message onto the network. This allows connected devices to know that a router is in range and listening to received messages. A client like Android, iOS, or Web can (if supported) indicate to the user whether a store and forward router is available. The Store & Forward Router sends a periodic message onto the network. This allows connected devices to know that a router is in range and listening to received messages. A client like Android, iOS, or Web can (if supported) indicate to the user whether a store and forward router is available.
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set store_forward_plugin_heartbeat to default" ```bash title="Set store_forward_module_heartbeat to default"
meshtastic --set store_forward_plugin_heartbeat 0 meshtastic --set store_forward_module_heartbeat 0
``` ```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -125,28 +127,28 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### store_forward_module_history_return_max
### store_forward_plugin_history_return_max
Sets the maximum number of messages to return to a client device. Sets the maximum number of messages to return to a client device.
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set store_forward_plugin_history_return_max to default" ```bash title="Set store_forward_module_history_return_max to default"
meshtastic --set store_forward_plugin_history_return_max 0 meshtastic --set store_forward_module_history_return_max 0
``` ```
```bash title="Set store_forward_plugin_history_return_max to 100 messages"
meshtastic --set store_forward_plugin_history_return_max 100 ```bash title="Set store_forward_module_history_return_max to 100 messages"
``` meshtastic --set store_forward_module_history_return_max 100
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -172,28 +174,28 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### store_forward_module_history_return_window
### store_forward_plugin_history_return_window
Limits the time period (in minutes) a client device can request. Limits the time period (in minutes) a client device can request.
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set store_forward_plugin_history_return_window to default" ```bash title="Set store_forward_module_history_return_window to default"
meshtastic --set store_forward_plugin_history_return_window 0 meshtastic --set store_forward_module_history_return_window 0
``` ```
```bash title="Set store_forward_plugin_history_return_window to 1 day (1440 minutes)"
meshtastic --set store_forward_plugin_history_return_window 1440 ```bash title="Set store_forward_module_history_return_window to 1 day (1440 minutes)"
``` meshtastic --set store_forward_module_history_return_window 1440
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -219,28 +221,28 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
### store_forward_module_records
### store_forward_plugin_records Set this to the maximum number of records to save. Best to leave this at the default (`0`) where the module will use 2/3 of your device's available PSRAM. This is about 11,000 records.
Set this to the maximum number of records to save. Best to leave this at the default (`0`) where the plugin will use 2/3 of your device's available PSRAM. This is about 11,000 records.
<Tabs <Tabs
groupId="settings" groupId="settings"
defaultValue="cli" defaultValue="cli"
values={[ values={[
{label: 'CLI', value: 'cli'}, {label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'}, {label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'}, {label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'}, {label: 'Web', value: 'web'},
]}> ]}>
<TabItem value="cli"> <TabItem value="cli">
```bash title="Set store_forward_plugin_records to default (≈11,000 records)" ```bash title="Set store_forward_module_records to default (≈11,000 records)"
meshtastic --set store_forward_plugin_records 0 meshtastic --set store_forward_module_records 0
``` ```
```bash title="Set store_forward_plugin_records to 100 records"
meshtastic --set store_forward_plugin_records 100 ```bash title="Set store_forward_module_records to 100 records"
``` meshtastic --set store_forward_module_records 100
```
</TabItem> </TabItem>
<TabItem value="android"> <TabItem value="android">
@ -266,27 +268,26 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem> </TabItem>
</Tabs> </Tabs>
## Details ## Details
### How it works ### How it works
![Store & Forward - Overview](/img/plugins/store_and_forward/store_and_forward-overview.png) ![Store & Forward - Overview](/img/modules/store_and_forward/store_and_forward-overview.png)
### Requirements ### Requirements
Initial Requirements: Initial Requirements:
* Must be installed on a router node. - Must be installed on a router node.
* This is an artificial limitation, but is in place to enforce best practices. - This is an artificial limitation, but is in place to enforce best practices.
* Router nodes are intended to be always online. If this plugin misses any messages, the reliability of the stored messages will be reduced. - Router nodes are intended to be always online. If this module misses any messages, the reliability of the stored messages will be reduced.
* Esp32 Processor based device with external PSRAM. (tbeam v1.0 and tbeamv1.1, and maybe others) - Esp32 Processor based device with external PSRAM. (tbeam v1.0 and tbeamv1.1, and maybe others)
### Usage Overview ### Usage Overview
* To use / test this you will want at least 3 devices - To use / test this you will want at least 3 devices
* One device will (currently) need be a tbeam v1.0 and tbeamv1.1 configured as a Meshtastic router. Other devices with built in PSRAM will be supported at some point. - One device will (currently) need be a tbeam v1.0 and tbeamv1.1 configured as a Meshtastic router. Other devices with built in PSRAM will be supported at some point.
* Two others will be regular clients. Nothing special required. - Two others will be regular clients. Nothing special required.
### Meshtastic channel configuration ### Meshtastic channel configuration
@ -296,7 +297,7 @@ Either use a custom channel configuration with at an at least 1kbit data rate or
Recommended channel setting is for 1.343kbps: Recommended channel setting is for 1.343kbps:
```bash title="Recommended channel setting for S&F plugin" ```bash title="Recommended channel setting for S&F module"
meshtastic --setchan spread_factor 11 --setchan coding_rate 4 --setchan bandwidth 500 meshtastic --setchan spread_factor 11 --setchan coding_rate 4 --setchan bandwidth 500
``` ```
@ -305,21 +306,21 @@ With an aftermarket coaxial antenna or moxon antenna, that will give you roughly
### Router setup ### Router setup
:::warning :::warning
Don't enable the Store and Forward plugin on multiple routers! Don't enable the Store and Forward module on multiple routers!
::: :::
* Configure your device as a [meshtastic router](router). - Configure your device as a [meshtastic router](router).
* Name your router node something that makes it easily identifiable, aka "Router". - Name your router node something that makes it easily identifiable, aka "Router".
* Configure the Store and Forward plugin - Configure the Store and Forward module
```bash title="Required - Enable the plugin" ```bash title="Required - Enable the module"
meshtastic --set store_forward_plugin_enabled true meshtastic --set store_forward_module_enabled true
``` ```
```bash title="Optional - Set maximum number of records to save to device" ```bash title="Optional - Set maximum number of records to save to device"
meshtastic --set store_forward_plugin_records 100 meshtastic --set store_forward_module_records 100
``` ```
:::tip :::tip
Best to leave `store_forward_plugin_records` at the default (`0`) where the plugin will use 2/3 of your device's available PSRAM. This is about 11,000 records. Best to leave `store_forward_module_records` at the default (`0`) where the module will use 2/3 of your device's available PSRAM. This is about 11,000 records.
::: :::
### Client Usage ### Client Usage
@ -327,9 +328,9 @@ Currently, no special configuration is required. To request your history sent to
Available Commands: Available Commands:
| Command | Definition | | Command | Definition |
| :-----: | :---------------: | | :-----: | :------------------------------------------: |
| SF | Send the last few messages I may have missed | | SF | Send the last few messages I may have missed |
| SFm | Send a 240 byte payload (Used for testing) | | SFm | Send a 240 byte payload (Used for testing) |
The Store and Forward plugin will only service one client at a time. If a second client requests messages while the S&F is busy, the S&F will send a private message to the second client that they will need to wait. The Store and Forward module will only service one client at a time. If a second client requests messages while the S&F is busy, the S&F will send a private message to the second client that they will need to wait.

View file

@ -3,9 +3,10 @@ id: android-installation
title: Android application installation title: Android application installation
sidebar_label: Installation sidebar_label: Installation
--- ---
Our Android application is available to download on Google Play Store. Our Android application is available to download on Google Play Store.
<p align="center"><a href="https://play.google.com/store/apps/details?id=com.geeksville.mesh&referrer=utm_source%3Dgithub-homepage"><img alt="Download at https://play.google.com/store/apps/details?id=com.geeksville.mesh" src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" style={{zoom:'35%'}} /></a></p> <p align="center"><a href="https://play.google.com/store/apps/details?id=com.geeksville.mesh"><img alt="Download at https://play.google.com/store/apps/details?id=com.geeksville.mesh" src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" style={{zoom:'35%'}} /></a></p>
The app is also available on the Amazon [Appstore](https://www.amazon.com/Geeksville-Industries-Meshtastic/dp/B08CY9394Q). You will need to install the Amazon Appstore onto your phone in order to install the Meshtastic application. The app is also available on the Amazon [Appstore](https://www.amazon.com/Geeksville-Industries-Meshtastic/dp/B08CY9394Q). You will need to install the Amazon Appstore onto your phone in order to install the Meshtastic application.
@ -30,7 +31,7 @@ Click on the image to see a quick video of where I found it on my phone.
There is a [beta program](https://play.google.com/apps/testing/com.geeksville.mesh) for the app, which will let you test the cutting edge changes, though this may come with extra bugs. You can join this via Google Play. It is recommended that you follow the [Meshtastic Discourse Alpha Testers](https://meshtastic.discourse.group/c/development/alpha-testers) channel if you decide to join this. There is a [beta program](https://play.google.com/apps/testing/com.geeksville.mesh) for the app, which will let you test the cutting edge changes, though this may come with extra bugs. You can join this via Google Play. It is recommended that you follow the [Meshtastic Discourse Alpha Testers](https://meshtastic.discourse.group/c/development/alpha-testers) channel if you decide to join this.
The app uses anonymous usage statistics and crash reports to allow us to catch problems with Meshtastic and fix them. Analytics are also required to be able to use the "free" plan of our map provider [Mapbox](https://docs.mapbox.com/help/how-mapbox-works/). You can disable this by unticking the checkbox on the settings page. The app uses anonymous usage statistics and crash reports to allow us to catch problems with Meshtastic and fix them. Analytics are also required to be able to use the "free" plan of our map provider [Mapbox](https://docs.mapbox.com/help/how-mapbox-works). You can disable this by unticking the checkbox on the settings page.
[![Settings page with statistics consent box highlighted](/img/android/android-stats-consent-sm.png)](/img/android/android-stats-consent.png) [![Settings page with statistics consent box highlighted](/img/android/android-stats-consent-sm.png)](/img/android/android-stats-consent.png)

View file

@ -1,13 +1,13 @@
# Location access and meshtastic # Location access and meshtastic
Google Play has some newish requirements for access to background location. This doc is a collection of work items needed to meet those requirements. Google Play has some newish requirements for access to background location. This doc is a collection of work items needed to meet those requirements.
The app is currently removed from the Play Store ([broken store link](https://play.google.com/store/apps/details?id=com.geeksville.mesh)), and some kind Googlers inside of Google are helping with this problem. **Hopefully** it will be The app is currently removed from the Play Store ([broken store link](https://play.google.com/store/apps/details?id=com.geeksville.mesh)), and some kind Googlers inside of Google are helping with this problem. **Hopefully** it will be
relisted soon (while we address these newish requirements), but we've got to do a bit of code to add a new dialog (and make a video for Google). It will take about a week to make these changes (including testing time with the [alpha-tester group](https://meshtastic.discourse.group/c/development/alpha-testers/) on the forum). relisted soon (while we address these newish requirements), but we've got to do a bit of code to add a new dialog (and make a video for Google). It will take about a week to make these changes (including testing time with the [alpha-tester group](https://meshtastic.discourse.group/c/development/alpha-testers) on the forum).
Until relisted in the Play Store (hopefully they can relist while we make these fixes), you'll need to install [raw APKs from GitHub](https://github.com/meshtastic/Meshtastic-Android/releases). Which is not ideal, but works. Until relisted in the Play Store (hopefully they can relist while we make these fixes), you'll need to install [raw APKs from GitHub](https://github.com/meshtastic/Meshtastic-Android/releases). Which is not ideal, but works.
Sorry ya'll. Sorry ya'll.
(The remainder of this public document is mostly for Googlers) (The remainder of this public document is mostly for Googlers)
@ -15,18 +15,18 @@ Sorry ya'll.
We need foreground location access for two reasons: We need foreground location access for two reasons:
* (Primarily) [This app](https://github.com/meshtastic/Meshtastic-Android) is a navigation app that uses long range LoRa mesh radios for communication in the back country. These radios can run for weeks on a charge and talk to the user's phone over USB or Bluetooth to provide the UX. We need foreground location so we can show the user's current position on the same map that is showing positions of the other users. - (Primarily) [This app](https://github.com/meshtastic/Meshtastic-Android) is a navigation app that uses long range LoRa mesh radios for communication in the back country. These radios can run for weeks on a charge and talk to the user's phone over USB or Bluetooth to provide the UX. We need foreground location so we can show the user's current position on the same map that is showing positions of the other users.
* (Secondarily) Using the old Bluetooth BLE API (which we need to use to support older devices), scanning for Bluetooth low energy devices requires this permission (because 'beacons' etc... could leak location info to the app). Without this permission (on older phones) the BLE discovery results are always empty. - (Secondarily) Using the old Bluetooth BLE API (which we need to use to support older devices), scanning for Bluetooth low energy devices requires this permission (because 'beacons' etc... could leak location info to the app). Without this permission (on older phones) the BLE discovery results are always empty.
If it is helpful, [here](https://meshtastic.org/docs/software/android/android-usage) is a slightly stale set of screenshots/instructions showing how the user uses our application. If it is helpful, [here](/docs/software/android/android-usage) is a slightly stale set of screenshots/instructions showing how the user uses our application.
## Why this app needs "background location access" ## Why this app needs "background location access"
When the user has the LoRa device in their pocket occasionally (every 15 minutes ish), the Android sister app background service will acquire the GPS position and provide it to the LoRa [firmware](https://github.com/meshtastic/Meshtastic-device). Without background location access, this core (the primary feature) of our app would not work (because you wouldn't be able to see the last known position of the hikers/skiers/users in your group). When the user has the LoRa device in their pocket occasionally (every 15 minutes ish), the Android sister app background service will acquire the GPS position and provide it to the LoRa [firmware](https://github.com/meshtastic/Meshtastic-device). Without background location access, this core (the primary feature) of our app would not work (because you wouldn't be able to see the last known position of the hikers/skiers/users in your group).
This location is shared only over an [encrypted](https://meshtastic.org/docs/developers/device/encryption) link and each group of users has their own AES256 key for their 'channel'. Our privacy policy is [here](https://meshtastic.org/docs/legal/privacy). This location is shared only over an [encrypted](/docs/developers/device/encryption) link and each group of users has their own AES256 key for their 'channel'. Our privacy policy is [here](/docs/legal/privacy).
(This description has been simplified a bit: This project works with a [variety](https://meshtastic.org/docs/hardware) of LoRa devices, some of which have their own built-in GPS. For the devices that have a GPS built-in, we do not use Android to get the user's location) (This description has been simplified a bit: This project works with a [variety](/docs/hardware) of LoRa devices, some of which have their own built-in GPS. For the devices that have a GPS built-in, we do not use Android to get the user's location)
## Fixes needed for these new Play Store background position requirements ## Fixes needed for these new Play Store background position requirements
@ -39,17 +39,17 @@ per https://support.google.com/googleplay/android-developer/answer/9799150
The existing text explains what the app does, but it needs to be even more explicit: The existing text explains what the app does, but it needs to be even more explicit:
Requirements from Google site: Requirements from Google site:
If you plan to use location in the background in your app, you should communicate this to users in the Google Play Store Listing via your app description, screenshots and (if applicable) title or icon. If you plan to use location in the background in your app, you should communicate this to users in the Google Play Store Listing via your app description, screenshots and (if applicable) title or icon.
Here are some suggestions on how to highlight use of location in the background to users: Here are some suggestions on how to highlight use of location in the background to users:
Provide a short description to signal 'location' (for example, 'find anywhere' or 'always know where'). Provide a short description to signal 'location' (for example, 'find anywhere' or 'always know where').
Include an in-app screenshot that shows a map/user location or geotagged images. Include an in-app screenshot that shows a map/user location or geotagged images.
If applicable, your app title or icon may also signal the location feature of your app. If applicable, your app title or icon may also signal the location feature of your app.
## TODO: In app dialog ## TODO: In app dialog
We currently explain why we need location access on the settings page and in the help. But we need a new dialog at launch, which needs to be **super** explicit: We currently explain why we need location access on the settings page and in the help. But we need a new dialog at launch, which needs to be **super** explicit:
Requirements from Google site: Requirements from Google site:
Must be within the app itself, not only in the app description or on a website; Must be within the app itself, not only in the app description or on a website;
@ -68,7 +68,7 @@ If you extend permitted usage to ads, you must include the following: 'used to p
Example disclosure statements Example disclosure statements
Below are two example statements that can be used in your disclosure; the latter includes the use of location for ads for which you can choose the most relevant phrasing): Below are two example statements that can be used in your disclosure; the latter includes the use of location for ads for which you can choose the most relevant phrasing):
'[This app] collects location data to enable "feature", "feature" and "feature" even when the app is closed or not in use'. '[This app] collects location data to enable "feature", "feature" and "feature" even when the app is closed or not in use'.
'[This app] collects location data to enable "feature", "feature" and "feature" even when the app is closed or not in use and it is also used to support advertising'. '[This app] collects location data to enable "feature", "feature" and "feature" even when the app is closed or not in use and it is also used to support advertising'.
The prominent disclosure may include other information to ensure compliance to policy requirements and clarity for users but must at least include the above, where relevant. The prominent disclosure may include other information to ensure compliance to policy requirements and clarity for users but must at least include the above, where relevant.
@ -76,15 +76,15 @@ Note: If the feature does not have a user-facing interface when location in the
## TODO: Video demonstration ## TODO: Video demonstration
I'm awful at making videos, so I'll ask someone from the [forum](https://meshtastic.discourse.group/) to help with this! I'm awful at making videos, so I'll ask someone from the [forum](https://meshtastic.discourse.group) to help with this!
Requirements from Google site: Requirements from Google site:
As part of the permissions declaration, you must provide a link to a short video that demonstrates the location-based feature in your app that requires access to location in the background (while the app is not in use). As part of the permissions declaration, you must provide a link to a short video that demonstrates the location-based feature in your app that requires access to location in the background (while the app is not in use).
You can see an example of what this video demonstration should look like below. You can see an example of what this video demonstration should look like below.
See an example video demonstration See an example video demonstration
As part of the permissions declaration, you must provide a link to a short video that demonstrates the location-based feature in your app that requires access to location in the background (while the app is not in use). The video should demonstrate the background location feature and the required steps to encounter and enable this feature in-app. The video should show: 1. Runtime prompt, 2. the prominent in-app disclosure dialog displayed to users (described below), and the feature being activated from the background. 3. The recommended duration is 30 seconds or less. A YouTube link is the preferred video format, but Google Drive storage links to an mp4 or other common video file formats are also supported. Note: If the feature does not have a user-facing interface when location in the background is active, please note this in your declaration and demonstrate the feature or its impacts as much as possible in the video. Ensure your video is made using an Android device. As part of the permissions declaration, you must provide a link to a short video that demonstrates the location-based feature in your app that requires access to location in the background (while the app is not in use). The video should demonstrate the background location feature and the required steps to encounter and enable this feature in-app. The video should show: 1. Runtime prompt, 2. the prominent in-app disclosure dialog displayed to users (described below), and the feature being activated from the background. 3. The recommended duration is 30 seconds or less. A YouTube link is the preferred video format, but Google Drive storage links to an mp4 or other common video file formats are also supported. Note: If the feature does not have a user-facing interface when location in the background is active, please note this in your declaration and demonstrate the feature or its impacts as much as possible in the video. Ensure your video is made using an Android device.
Video requirements Video requirements
The video should demonstrate the background location feature and the required steps to encounter and enable this feature in-app. The video should show: The video should demonstrate the background location feature and the required steps to encounter and enable this feature in-app. The video should show:

View file

@ -47,7 +47,6 @@ The cloud icon at the top right corner indicates if you are connected to a devic
![Sleeping](/img/android/android-cloud-up.png) Cloud with an up arrow in it: Device is connected, but currently sleeping or out of range. ![Sleeping](/img/android/android-cloud-up.png) Cloud with an up arrow in it: Device is connected, but currently sleeping or out of range.
## Common tasks ## Common tasks
Once you are connected to a device, the App will work, and you can test it by "sending" a message. However, you will need to join or create a new mesh network so you have someone to communicate with. If you have been sent a QR code or link for Meshtastic, then skip ahead to [Join a Channel](#join-a-channel), otherwise you will need to Setup a Channel. Once you are connected to a device, the App will work, and you can test it by "sending" a message. However, you will need to join or create a new mesh network so you have someone to communicate with. If you have been sent a QR code or link for Meshtastic, then skip ahead to [Join a Channel](#join-a-channel), otherwise you will need to Setup a Channel.
@ -107,14 +106,14 @@ You can test changing channels with the QR code shown below.
Various data-rates are selectable when configuring a channel and are inversely proportional to the theoretical range of the devices: Various data-rates are selectable when configuring a channel and are inversely proportional to the theoretical range of the devices:
| Channel setting | Data-rate | | Channel setting | Data-rate |
|------------------------|----------------------| | ------------------- | -------------------- |
| Short Range / Fast | 19346.94 bps | | Short Range / Fast | 19346.94 bps |
| Short Range / Slow | 4800.00 bps | | Short Range / Slow | 4800.00 bps |
| Medium Range / Fast | 1227.18 bps | | Medium Range / Fast | 1227.18 bps |
| Medium Range / Slow | 763.29 bps | | Medium Range / Slow | 763.29 bps |
| Long Range / Fast | 196.74 bps | | Long Range / Fast | 196.74 bps |
| long Range / Slow | 136.71 bps (default) | | long Range / Slow | 136.71 bps (default) |
### Send a message ### Send a message
@ -122,10 +121,10 @@ The message window operates like any chat applications. Note that any messages s
With LoRa (or any radio) there is some uncertainty that the messages has been received, so there is a confirmation built-in to the protocol. There are small cloud icons shown to the right of the messages you send: With LoRa (or any radio) there is some uncertainty that the messages has been received, so there is a confirmation built-in to the protocol. There are small cloud icons shown to the right of the messages you send:
* Cloud with an up arrow: the application is waiting for the device to some out of sleep mode (or come back into Bluetooth range), to upload the message to the device. - Cloud with an up arrow: the application is waiting for the device to some out of sleep mode (or come back into Bluetooth range), to upload the message to the device.
* Cloud only: message has been sent via Bluetooth and transmitted via LoRa. - Cloud only: message has been sent via Bluetooth and transmitted via LoRa.
* Cloud with a check mark: message has been delivered to at least one node in the mesh and at least one node sent back a confirmation (successfully received by the initial sender). - Cloud with a check mark: message has been delivered to at least one node in the mesh and at least one node sent back a confirmation (successfully received by the initial sender).
* Cloud crossed out: message may have been delivered to at least one node in the mesh. The initial sender did not receive at least one node's confirmation within a certain timeout. - Cloud crossed out: message may have been delivered to at least one node in the mesh. The initial sender did not receive at least one node's confirmation within a certain timeout.
Thus, in a group size of 3 and up, confirmations could be from any one device (not person), so it is good practice to respond, so the initial sender knows you have read their message. Thus, in a group size of 3 and up, confirmations could be from any one device (not person), so it is good practice to respond, so the initial sender knows you have read their message.
@ -147,8 +146,7 @@ The Map tab will show a local map with an icon for each active mesh node that ha
[![Mapping provided by Mapbox](/img/android/android-map-sm.png)](/img/android/android-map.png) [![Mapping provided by Mapbox](/img/android/android-map-sm.png)](/img/android/android-map.png)
The map is not developed by the Meshtastic project, and the source of the mapping system is [Mapbox](https://docs.mapbox.com/help/how-mapbox-works/) (free-tier), and the map data is sourced from [OpenStreetMap OSM](https://www.openstreetmap.org/). Mapbox currently requires analytics to be enabled for you to use their mapping system. There is currently no off-line maps (phone needs mobile data or Wifi), although this will be improved in the future. If you don't see the features that you'd expect on the map then head over to [OpenStreetMap OSM](https://www.openstreetmap.org/) where you can contribute new data to the map. The map is not developed by the Meshtastic project, and the source of the mapping system is [Mapbox](https://docs.mapbox.com/help/how-mapbox-works) (free-tier), and the map data is sourced from [OpenStreetMap OSM](https://www.openstreetmap.org). Mapbox currently requires analytics to be enabled for you to use their mapping system. There is currently no off-line maps (phone needs mobile data or Wifi), although this will be improved in the future. If you don't see the features that you'd expect on the map then head over to [OpenStreetMap OSM](https://www.openstreetmap.org) where you can contribute new data to the map.
## Configuration options ## Configuration options

View file

@ -1,24 +1,23 @@
--- ---
id: community-atak id: community-atak
title: ATAK plugin title: ATAK module
sidebar_label: ATAK plugin sidebar_label: ATAK module
--- ---
:::note :::note
This is a community project maintained by @paulmandal. This is a community project maintained by @paulmandal.
Development can be followed on [GitHub](https://github.com/paulmandal/atak-forwarder/). Development can be followed on [GitHub](https://github.com/paulmandal/atak-forwarder).
Support should be sought from the respective authors. Support should be sought from the respective authors.
::: :::
This is a plugin for ATAK (Android Team Awareness Kit) that uses Meshtastic to provide off-grid communications. This includes plotting the position of others on the map, transmission of markers and routes, and chat messages. It has been signed by the TAK Product Center for use with the Play Store version of ATAK. He is currently distributing development builds via [Google Drive](https://drive.google.com/drive/folders/1xeKJnn9tmzkkmuDbMp0LCLOV9OzHU-Ex), aiming to publish it to the Play Store in the future. This is a module for ATAK (Android Team Awareness Kit) that uses Meshtastic to provide off-grid communications. This includes plotting the position of others on the map, transmission of markers and routes, and chat messages. It has been signed by the TAK Product Center for use with the Play Store version of ATAK. He is currently distributing development builds via [Google Drive](https://drive.google.com/drive/folders/1xeKJnn9tmzkkmuDbMp0LCLOV9OzHU-Ex), aiming to publish it to the Play Store in the future.
![ATAK Plugin](/img/atak-animation.gif) ![ATAK Module](/img/atak-animation.gif)
The builds of the plugin on the Google Drive are now signed for the Play Store version of ATAK, as of 6/3/2021. The builds of the module on the Google Drive are now signed for the Play Store version of ATAK, as of 6/3/2021.
The ATAK plugin requires the Meshtastic Android app to be installed. The ATAK module requires the Meshtastic Android app to be installed.
* A walk-through on how to [set up ATAK](https://paul-mandal.medium.com/atak-for-hikers-d96d5246193e).
* The plugin source is available on [GitHub](https://github.com/paulmandal/atak-forwarder/), along with instructions for setting it up.
* Development builds are available on [Google Drive](https://drive.google.com/drive/folders/1xeKJnn9tmzkkmuDbMp0LCLOV9OzHU-Ex).
- A walk-through on how to [set up ATAK](https://paul-mandal.medium.com/atak-for-hikers-d96d5246193e).
- The module source is available on [GitHub](https://github.com/paulmandal/atak-forwarder), along with instructions for setting it up.
- Development builds are available on [Google Drive](https://drive.google.com/drive/folders/1xeKJnn9tmzkkmuDbMp0LCLOV9OzHU-Ex).

View file

@ -4,10 +4,10 @@ title: Community applications
sidebar_label: Community apps sidebar_label: Community apps
--- ---
The Meshtastic ecosystem is highly extensible, and a number of community projects have been made to fit different people's needs. If you wish to create your own application or plugin, please read the information in the developers section, and tell us about your project on the forum. The Meshtastic ecosystem is highly extensible, and a number of community projects have been made to fit different people's needs. If you wish to create your own application or module, please read the information in the developers section, and tell us about your project on the forum.
Current community projects: Current community projects:
* [Meshtastic plugin for ATAK](/docs/software/community/community-atak) (Android Team Awareness Kit) * [Meshtastic module for ATAK](/docs/software/community/community-atak) (Android Team Awareness Kit)
* [PyGUI](/docs/software/community/community-pygui) - Platform independent graphical user interface for Meshtastic devices * [PyGUI](/docs/software/community/community-pygui) - Platform independent graphical user interface for Meshtastic devices
* [Go CLI](/docs/software/community/community-go) - A command line interface using Go that requires no pre-requisites to be installed * [Go CLI](/docs/software/community/community-go) - A command line interface using Go that requires no pre-requisites to be installed

View file

@ -144,8 +144,8 @@ Completed getting preferences
For further reading, I recommend starting out with [Meshtastic-python](/docs/software/python/python-cli) if you haven't already gone through this (hopefully you have since you are reading this). But for a full reference to the settings you can change, please see: For further reading, I recommend starting out with [Meshtastic-python](/docs/software/python/python-cli) if you haven't already gone through this (hopefully you have since you are reading this). But for a full reference to the settings you can change, please see:
[Settings Overview](/docs/settings) and [Settings Overview](/docs/settings) and
[Complete list of user settings in Protobufs](https://meshtastic.org/docs/developers/protobufs/api#radioconfiguserpreferences) [Complete list of user settings in Protobufs](/docs/developers/protobufs/api#radioconfiguserpreferences)
## Areas for future development ## Areas for future development

View file

@ -9,7 +9,7 @@ GPIO access is fundamentally dangerous because invalid options can physically da
::: :::
:::note :::note
This feature uses a preinstalled plugin in the device code and associated command line flags/classes in the python code. You'll need to be running at least version 1.2.23 (or later) of the python and device code to use this feature. This feature uses a preinstalled module in the device code and associated command line flags/classes in the python code. You'll need to be running at least version 1.2.23 (or later) of the python and device code to use this feature.
::: :::
You can get the latest python tool/library with `pip3 install --upgrade meshtastic` on Windows/Linux/OS-X. See the [python section](/docs/software/python/python-installation) for more details. You can get the latest python tool/library with `pip3 install --upgrade meshtastic` on Windows/Linux/OS-X. See the [python section](/docs/software/python/python-installation) for more details.
@ -22,34 +22,33 @@ You can get the latest python tool/library with `pip3 install --upgrade meshtast
## Setup ## Setup
To prevent access from untrusted users, you must first make a `gpio` channel that is used for authenticated access to this feature. You'll need to install this channel on both the local and remote node.
To prevent access from untrusted users, you must first make a `gpio` channel that is used for authenticated access to this feature. You'll need to install this channel on both the local and remote node.
The procedure using the python command line tool is: The procedure using the python command line tool is:
1. Connect local device via USB 1. Connect local device via USB
2. Create a gpio channel 2. Create a gpio channel
```bash ```bash
meshtastic --ch-add gpio meshtastic --ch-add gpio
``` ```
:::tip :::tip
If doing local testing, may want to change the speed of the channel at this time, too. (ex: "meshtastic --ch-mediumfast") If doing local testing, may want to change the speed of the channel at this time, too. (ex: "meshtastic --ch-mediumfast")
::: :::
3. Check the channel has been created and copy the long "Complete URL" that contains all the channels on that device 3. Check the channel has been created and copy the long "Complete URL" that contains all the channels on that device
```bash
meshtastic --info ```bash
``` meshtastic --info
```
4. Connect the remote device via USB (or use the [remote admin](device-remote-admin) feature to reach it through the mesh) 4. Connect the remote device via USB (or use the [remote admin](device-remote-admin) feature to reach it through the mesh)
5. Set it to join the gpio channel you created 5. Set it to join the gpio channel you created
```bash ```bash
meshtastic --seturl theurlyoucopiedinstep3 meshtastic --seturl theurlyoucopiedinstep3
``` ```
Now both devices should be able to talk over the `gpio` channel. Send a text message from one the other other verify. Also run "--nodes" to verify the second node shows up. Now both devices should be able to talk over the `gpio` channel. Send a text message from one the other other verify. Also run "--nodes" to verify the second node shows up.
@ -112,32 +111,34 @@ GPIO:44 mask:0x100000000000
You can add a simple LED and resistor to validate that the GPIO operations work as expected. Used the tutorial at https://www.instructables.com/Slide-Switch-With-Arduino-Uno-R3/ as a guide. You can add a simple LED and resistor to validate that the GPIO operations work as expected. Used the tutorial at https://www.instructables.com/Slide-Switch-With-Arduino-Uno-R3/ as a guide.
Need: Need:
* 2 Meshtastic devices (one device could be on a local computer, and the other one just has to be powered and is the one with the LED to be connected to it)
* 2 wires (black and yellow; they can be any color but typically black is used for ground) - 2 Meshtastic devices (one device could be on a local computer, and the other one just has to be powered and is the one with the LED to be connected to it)
* breadboard (optional) - 2 wires (black and yellow; they can be any color but typically black is used for ground)
* 1 LED - breadboard (optional)
* 1 220Ω resistor (somewhat optional, but recommended) - 1 LED
- 1 220Ω resistor (somewhat optional, but recommended)
Prep: Prep:
* disconnect the remote device from power (battery/usb)
* add a resistor from yellow wire to the one end of the LED (either end of the resistor is ok, either end of the LED is ok) - disconnect the remote device from power (battery/usb)
* add the yellow wire from a GPIO pin that will not cause any issues (ex: for TLoraV1, we can use GPIO21) - add a resistor from yellow wire to the one end of the LED (either end of the resistor is ok, either end of the LED is ok)
* add the black "ground" wire from the ground pin on the device (ex: for TLoraV1 it is the end pin next to the RST button) to the other end of the LED - add the yellow wire from a GPIO pin that will not cause any issues (ex: for TLoraV1, we can use GPIO21)
* power on the device - add the black "ground" wire from the ground pin on the device (ex: for TLoraV1 it is the end pin next to the RST button) to the other end of the LED
- power on the device
Validation: Validation:
By default, the pin may be "off" or "on". (It will most likely "off".) See the steps below for running commands. In the example of GPIO21, the mask would be 0x200000. By default, the pin may be "off" or "on". (It will most likely "off".) See the steps below for running commands. In the example of GPIO21, the mask would be 0x200000.
[<img alt="T-Lora v1 with LED on GPIO 21" src="/img/LED_on_TLoraV1.jpg" style={{zoom:'25%'}} />](/img/LED_on_TLoraV1.jpg) [<img alt="T-Lora v1 with LED on GPIO 21" src="/img/LED_on_TLoraV1.jpg" style={{zoom:'25%'}} />](/img/LED_on_TLoraV1.jpg)
## Doing GPIO operations ## Doing GPIO operations
You can programmatically do operations from your own python code by using the Meshtastic `RemoteHardwareClient` class. See the [python API](https://meshtastic.org/docs/software/python/python-installation) documentation for more details. You can programmatically do operations from your own python code by using the Meshtastic `RemoteHardwareClient` class. See the [python API](/docs/software/python/python-installation) documentation for more details.
## Using GPIOs from the python CLI ## Using GPIOs from the python CLI
Writing a GPIO (ex: turn "on" GPIO4): Writing a GPIO (ex: turn "on" GPIO4):
```bash title="Expected output" ```bash title="Expected output"
$ meshtastic --port /dev/ttyUSB0 --gpio-wrb 4 1 --dest \!28979058 $ meshtastic --port /dev/ttyUSB0 --gpio-wrb 4 1 --dest \!28979058
Connected to radio Connected to radio
@ -145,6 +146,7 @@ Writing GPIO mask 0x10 with value 0x10 to !28979058
``` ```
Reading a GPIO (ex: read GPIO4): Reading a GPIO (ex: read GPIO4):
```bash title="Expected output" ```bash title="Expected output"
$ meshtastic --port /dev/ttyUSB0 --gpio-rd 0x10 --dest \!28979058 $ meshtastic --port /dev/ttyUSB0 --gpio-rd 0x10 --dest \!28979058
Connected to radio Connected to radio
@ -157,6 +159,7 @@ If the mask and the gpio_value match, then the value is "on". If the gpio_value
::: :::
Watching for GPIO changes (ex: watching GPIO4 for changes): Watching for GPIO changes (ex: watching GPIO4 for changes):
```bash title="Expected output" ```bash title="Expected output"
$ meshtastic --port /dev/ttyUSB0 --gpio-watch 0x10 --dest \!28979058 $ meshtastic --port /dev/ttyUSB0 --gpio-watch 0x10 --dest \!28979058
Connected to radio Connected to radio

View file

@ -4,17 +4,24 @@ title: Connecting to a device
sidebar_label: Connecting sidebar_label: Connecting
--- ---
Currently, two connection methods are supported, HTTP and BLE.
## HTTP
## BLE
```typescript
//connection method
```
```tsx ```tsx
//connection button import type React from 'React';
const a = <connectButton method={someMethod} />;
import { IHTTPConnection } from '@meshtastic/meshtasticjs';
export const Connection = (): JSX.Element => {
const connection = new IHTTPConnection();
const connect = (): void => {
void connection.connect({
address: '10.0.0.10',
fetchInterval: 3000,
});
}
return <button onClick={connect}>Connect Bluetooth</button>;
};
``` ```

View file

@ -12,7 +12,7 @@ Full API documentation is available at [js.meshtastic.org](https://js.meshtastic
Meshtastic.js is a JavaScript library that provides an interface to Meshtastic devices. It can be used to build applications to interface with a Meshtastic network. Currently, HTTP(S) and Bluetooth connections are supported. Meshtastic.js is a JavaScript library that provides an interface to Meshtastic devices. It can be used to build applications to interface with a Meshtastic network. Currently, HTTP(S) and Bluetooth connections are supported.
If you wish to view the code or contribute to development of the library, please visit the JavaScript code <a href="https://github.com/meshtastic/meshtastic.js">GitHub page</a>. If you wish to view the code or contribute to development of the library, please visit the JavaScript code [GitHub page](https://github.com/meshtastic/meshtastic.js).
## Connection methods ## Connection methods

View file

@ -1,11 +1,12 @@
--- ---
id: canned-message-plugin id: canned-message-module
title: Canned messages title: Canned messages
sidebar_label: Canned messages sidebar_label: Canned messages
--- ---
## About ## About
The CannedMessage Plugin will allow you to send messages to the mesh network The Canned Message Module will allow you to send messages to the mesh network
from the device without using the phone app. from the device without using the phone app.
You can predefine text messages to choose from. You can predefine text messages to choose from.
@ -13,13 +14,13 @@ You can predefine text messages to choose from.
To navigate through messages and select one, you will require some To navigate through messages and select one, you will require some
hardware attached to your device. hardware attached to your device.
Currently, the plugin is tested with a generic rotary encoder, but this is Currently, the module is tested with a generic rotary encoder, but this is
not a limitation further input methods can be added in the future. not a limitation further input methods can be added in the future.
### Rotary encoder ### Rotary encoder
Meshtastic supports hardwired rotary encoders as input devices. Meshtastic supports hardwired rotary encoders as input devices.
(Technically CannedMessage plugin is independent of rotary (Technically the Canned Message Module is independent of rotary
encoders. It is described here, because no other module utilizes rotary encoders just yet.) encoders. It is described here, because no other module utilizes rotary encoders just yet.)
You will need a generic rotary encoder. The types listed below has five legs You will need a generic rotary encoder. The types listed below has five legs
@ -28,11 +29,11 @@ but any other types will likely do the job. You can also use a
three-legged version, where the "press" action should be wired from three-legged version, where the "press" action should be wired from
an independent switch. an independent switch.
* [Amazon link](https://www.amazon.com/Rotary-Encoder-Washers-Digital-Potentiometer/dp/B07Y619CZR/ref=sr_1_21?keywords=rotary+encoder&qid=1642317807&sprefix=rotary+enco%2Caps%2C186&sr=8-21) - [Amazon link](https://www.amazon.com/Rotary-Encoder-Washers-Digital-Potentiometer/dp/B07Y619CZR/ref=sr_1_21?keywords=rotary+encoder&qid=1642317807&sprefix=rotary+enco%2Caps%2C186&sr=8-21)
* [Amazon.DE link](https://www.amazon.de/-/en/sourcing-Degree-Rotary-Encoder-Digital/dp/B07RLZPX5K/ref=sr_1_12?keywords=rotary+encoder&qid=1642320025&sprefix=rotary%2Caps%2C105&sr=8-12) - [Amazon.DE link](https://www.amazon.de/-/en/sourcing-Degree-Rotary-Encoder-Digital/dp/B07RLZPX5K/ref=sr_1_12?keywords=rotary+encoder&qid=1642320025&sprefix=rotary%2Caps%2C105&sr=8-12)
* [Aliexpress link1](https://www.aliexpress.com/item/32992227812.html?spm=a2g0o.productlist.0.0.1afe21a50SLvi2&algo_pvid=a19c4182-08aa-406d-bfdf-132582ef5ebb&algo_exp_id=a19c4182-08aa-406d-bfdf-132582ef5ebb-23&pdp_ext_f=%7B%22sku_id%22%3A%2266940265509%22%7D&pdp_pi=-1%3B1.66%3B-1%3B-1%40salePrice%3BUSD%3Bsearch-mainSearch) - [Aliexpress link1](https://www.aliexpress.com/item/32992227812.html?spm=a2g0o.productlist.0.0.1afe21a50SLvi2&algo_pvid=a19c4182-08aa-406d-bfdf-132582ef5ebb&algo_exp_id=a19c4182-08aa-406d-bfdf-132582ef5ebb-23&pdp_ext_f=%7B%22sku_id%22%3A%2266940265509%22%7D&pdp_pi=-1%3B1.66%3B-1%3B-1%40salePrice%3BUSD%3Bsearch-mainSearch)
* [Aliexpress link2](https://www.aliexpress.com/item/32946444853.html?spm=a2g0o.productlist.0.0.1afe21a50SLvi2&algo_pvid=a19c4182-08aa-406d-bfdf-132582ef5ebb&aem_p4p_detail=2022011523263276283624312400022072680&algo_exp_id=a19c4182-08aa-406d-bfdf-132582ef5ebb-6&pdp_ext_f=%7B%22sku_id%22%3A%2266223434642%22%7D&pdp_pi=-1%3B1.91%3B-1%3B-1%40salePrice%3BUSD%3Bsearch-mainSearch) - [Aliexpress link2](https://www.aliexpress.com/item/32946444853.html?spm=a2g0o.productlist.0.0.1afe21a50SLvi2&algo_pvid=a19c4182-08aa-406d-bfdf-132582ef5ebb&aem_p4p_detail=2022011523263276283624312400022072680&algo_exp_id=a19c4182-08aa-406d-bfdf-132582ef5ebb-6&pdp_ext_f=%7B%22sku_id%22%3A%2266223434642%22%7D&pdp_pi=-1%3B1.91%3B-1%3B-1%40salePrice%3BUSD%3Bsearch-mainSearch)
* [Aliexpress link3](https://www.aliexpress.com/item/10000056483250.html?spm=a2g0o.productlist.0.0.1afe21a50SLvi2&algo_pvid=a19c4182-08aa-406d-bfdf-132582ef5ebb&algo_exp_id=a19c4182-08aa-406d-bfdf-132582ef5ebb-9&pdp_ext_f=%7B%22sku_id%22%3A%2220000000116682147%22%7D&pdp_pi=-1%3B2.51%3B-1%3B-1%40salePrice%3BUSD%3Bsearch-mainSearch) - [Aliexpress link3](https://www.aliexpress.com/item/10000056483250.html?spm=a2g0o.productlist.0.0.1afe21a50SLvi2&algo_pvid=a19c4182-08aa-406d-bfdf-132582ef5ebb&algo_exp_id=a19c4182-08aa-406d-bfdf-132582ef5ebb-9&pdp_ext_f=%7B%22sku_id%22%3A%2220000000116682147%22%7D&pdp_pi=-1%3B2.51%3B-1%3B-1%40salePrice%3BUSD%3Bsearch-mainSearch)
Connect your rotary encoder as follows. The rotary encoder has two Connect your rotary encoder as follows. The rotary encoder has two
rows of legs. One of the rows contains two legs, the other contains three rows of legs. One of the rows contains two legs, the other contains three
@ -46,7 +47,7 @@ The two legs is to sense the press action (or push). Connect
one of the two to GROUND and the other to a GPIO pin. (No matter which one one of the two to GROUND and the other to a GPIO pin. (No matter which one
goes where.) Let's call this connected ports 'PRESS'. goes where.) Let's call this connected ports 'PRESS'.
The three legs is to sense the rotation action. The three legs is to sense the rotation action.
Connect the middle leg to GROUND and the ones on the side Connect the middle leg to GROUND and the ones on the side
to GPIO pins. Let's call these ports 'A' and 'B', according to to GPIO pins. Let's call these ports 'A' and 'B', according to
the scheme below. the scheme below.
@ -57,10 +58,10 @@ the scheme below.
Recommended GPIO pins for connecting a rotary encoder. Recommended GPIO pins for connecting a rotary encoder.
* TTGO LoRa V1: - TTGO LoRa V1:
* A - GPIO-22 - A - GPIO-22
* B - GPIO-23 - B - GPIO-23
* PRESS - GPIO-21 - PRESS - GPIO-21
There is a reference case 3D-design utilizing the rotary encoder for TTGO LoRa V1: There is a reference case 3D-design utilizing the rotary encoder for TTGO LoRa V1:
[Case for TTGO-ESP32-LORA-OLED-v1.0 with rotary encoder](https://www.thingiverse.com/thing:5178495) [Case for TTGO-ESP32-LORA-OLED-v1.0 with rotary encoder](https://www.thingiverse.com/thing:5178495)
@ -81,35 +82,35 @@ There is a reference case 3D-design utilizing the rotary encoder for TTGO LoRa V
rotary1_event_cw rotary1_event_cw
Generate input event on CW of this kind. Generate input event on CW of this kind.
For using with CannedMessagePlugin you must choose value "UP" here! For using with CannedMessageModule you must choose value "UP" here!
rotary1_event_ccw rotary1_event_ccw
Generate input event on CCW of this kind. Generate input event on CCW of this kind.
For using with CannedMessagePlugin you must choose value "DOWN" here! For using with CannedMessageModule you must choose value "DOWN" here!
rotary1_event_press rotary1_event_press
Generate input event on Press of this kind. Generate input event on Press of this kind.
For using with CannedMessagePlugin you must choose value "SELECT" here! For using with CannedMessageModule you must choose value "SELECT" here!
The rotary encoder #1 will send input events under name "rotEnc1". The rotary encoder #1 will send input events under name "rotEnc1".
## Configuration of the plugin ## Configuration of the module
Following configuration can be set for the plugin. Following configuration can be set for the module.
canned_message_plugin_enabled canned_message_module_enabled
Enable/disable CannedMessagePlugin. Enable/disable CannedMessageModule.
canned_message_plugin_allow_input_source canned_message_module_allow_input_source
Input event origin accepted by the canned message plugin. Input event origin accepted by the Canned Message Module.
Can be e.g. "rotEnc1" or keyword "_any" Can be e.g. "rotEnc1" or keyword "_any"
canned_message_plugin_messages canned_message_module_messages
Predefined messages for CannedMessagePlugin separated by '|' characters. Predefined messages for CannedMessageModule separated by '|' characters.
canned_message_plugin_send_bell canned_message_module_send_bell
CannedMessagePlugin also sends a bell character with the messages. CannedMessagemodule also sends a bell character with the messages.
ExternalNotificationPlugin can benefit from this feature. ExternalNotificationModule can benefit from this feature.
## Usage Notes ## Usage Notes
@ -124,13 +125,13 @@ need to execute a sequence like this:
meshtastic --set rotary1_event_press KEY_SELECT meshtastic --set rotary1_event_press KEY_SELECT
meshtastic --set rotary1_enabled True meshtastic --set rotary1_enabled True
For setting up the plugin you will For setting up the module you will
need to execute a sequence like this: need to execute a sequence like this:
meshtastic --set canned_message_plugin_allow_input_source "_any" meshtastic --set canned_message_module_allow_input_source "_any"
meshtastic --set canned_message_plugin_messages "I'm fine|I'm out|I'm back|Need helping hand|Help me with saw|I need an alpinist|I need ambulance|Keep Calm|On my way|I will be late|I'm already waiting|We have company|Beer is cold|Roger" meshtastic --set canned_message_module_messages "I'm fine|I'm out|I'm back|Need helping hand|Help me with saw|I need an alpinist|I need ambulance|Keep Calm|On my way|I will be late|I'm already waiting|We have company|Beer is cold|Roger"
meshtastic --set canned_message_plugin_send_bell False meshtastic --set canned_message_module_send_bell False
meshtastic --set canned_message_plugin_enabled True meshtastic --set canned_message_module_enabled True
:::note :::note
You can define up to 50 messages with a total length 200 bytes. You can define up to 50 messages with a total length 200 bytes.
@ -139,11 +140,11 @@ Use short texts as end of line will be truncated on the screen.
::: :::
:::note :::note
The device must be restarted after the settings have been changed for the plugin to take effect. The device must be restarted after the settings have been changed for the module to take effect.
::: :::
## Known Problems ## Known Problems
* Rotary encoder input uses a technology called "interrupts". Using the - Rotary encoder input uses a technology called "interrupts". Using the
rotary encoder might cause unexpected software problems. This needs to be rotary encoder might cause unexpected software problems. This needs to be
tested. tested.

View file

@ -0,0 +1,222 @@
---
id: environment-module
title: Environment measurement
sidebar_label: Environment measurement
---
## About
The Environment Measurement Module will allow nodes to send a specific message with information from connected environmental sensors. Currently supported sensors are `BME280`, `BME680`, `DHT11`, `DHT12`, `DHT21`, `DHT22`, Dallas 1-wire `DS18B20`, and `MCP9808`.
The preferred setup is using I2C, so the `telemetry_module_sensor_pin` may not be needed.
## Configuration
These are the settings that can be configured.
telemetry_module_enabled
Is the module enabled?
0 = Disabled (Default)
1 = Enabled
telemetry_module_screen_enabled
Show received sensor readings on device screen.
0 = Disabled (Default)
1 = Enabled
telemetry_module_read_error_count_threshold
Error count threshold for failed sensor readings.
Default = 0
preferences.telemetry_module_update_interval
How often (in seconds) should sensor readings be broadcasted?
Default = 0
telemetry_module_recovery_interval
For how long should we wait (in seconds) before trying to read sensors again upon exceeded error threshold?
Default = 0
telemetry_module_display_fahrenheit
Should temperature readings be converted to fahrenheit?
0 = Disabled (Default)
1 = Enabled
telemetry_module_sensor_type
What sensor is connected?
0 = DHT11 (Default)
1 = Dallas 1-wire DS18B20
2 = DHT12
3 = DHT21
4 = DHT22
5 = BME280
6 = BME680
7 = MCP9808
telemetry_module_sensor_pin
Which pin is the sensor connected to?
Default = 0
## Usage Notes
For basic usage, start with:
```bash
telemetry_module_enabled = 1
telemetry_module_screen_enabled = 1
```
Depending on which pin your sensor is connected to, set it accordingly:
```bash
telemetry_module_sensor_pin = 13
```
:::note
The device must be restarted after the settings have been changed for the module to take effect.
:::
## Hardware
The sensors can be wired differently, here's one example for sensor DS18B20 https://randomnerdtutorials.com/esp32-ds18b20-temperature-arduino-ide
## Example of T-LoraV1 with DHT22 temperature sensor
Setup of a T-LoraV1 with DHT22 temperature sensor.
[<img src="T-LoraV1 with DHT22" src="/img/hardware/lora_v1_with_DHT22.jpg" style={{zoom:'25%'}} />](/img/hardware/lora_v1_with_DHT22.jpg)
Requirements:
- T-LoraV1 (but any esp32 should work, just be sure to double check which GPIO to use)
- DHT22 sensor
- 10 Kohm resistor (optional, but recommended)
- breadboard (optional)
- two red wires (could be a different color, but 5V is typically red)
- two yellow wires for GPIO (could be a different color)
- one black wire (could be a different color, but GROUND is typically black)
Steps:
- disconnect power/battery
- connect black wire from GROUND to "-" on the DHT22
- connect yellow wire from middle PIN to a row on bread board
- connect red wire from 5V to a row on breadboard
- connect resistor between red and yellow rows
- connect red wire from row with red to "+" on DHT22
- connect yellow wire from yellow row to GPIO on device (ex: GPIO21)
- double check the cabling (if you get it wrong, you can damage the device and/or the DHT22 sensor)
- plug in device
- configure the device:
```bash
meshtastic --set telemetry_module_measurement_enabled true --set telemetry_module_screen_enabled true --set telemetry_module_update_interval 15 --set telemetry_module_display_farenheit true --set telemetry_module_sensor_type DHT22 --set telemetry_module_sensor_pin 21
```
:::tip
You can change the values above to suit your needs. The commands can be run one at a time or in a group as show above.
:::
- reboot/reset the device (press the RST button or unplug/plug in the device)
- when the device boots it should say "Environment" and it may show the sensor data
- if "no data", then triple check the wiring
- if still "no data", run:
```bash
meshtastic --info
```
and verify the the `telemetry_module_sensor_type and` `telemetry_module_sensor_pin`
## Example of T-LoraV1 with Dallas DS18B20 temperature sensor
Setup of a T-LoraV1 with DS18B20 temperature sensor.
[<img src="T-LoraV1 with DS18B20" src="/img/hardware/lora_v1_with_DS18B20.jpg" style={{zoom:'25%'}} />](/img/hardware/lora_v1_with_DS18B20.jpg)
Requirements:
- T-LoraV1 (but any esp32 should work, just be sure to double check which GPIO to use)
- DS18B20 sensor
- 10 Kohm resistor (optional, but recommended)
- breadboard (optional)
- two red wires (could be a different color, but 5V is typically red)
- two yellow wires for GPIO (could be a different color)
- one black wire (could be a different color, but GROUND is typically black)
Steps:
- disconnect power/battery
- connect black wire from GROUND to "-" on the DS18B20
- connect yellow wire from DAT pin to a row on bread board
- connect red wire from 5V to a row on breadboard
- connect resistor between red and yellow rows
- connect red wire from row with red to "VCC" on DS18B20
- connect yellow wire from yellow row to GPIO on device (ex: GPIO21)
- double check the cabling (if you get it wrong, you can damage the device and/or the sensor)
- plug in device
- configure the device:
```bash
meshtastic --set telemetry_module_measurement_enabled true --set telemetry_module_screen_enabled true --set telemetry_module_update_interval 15 --set telemetry_module_display_farenheit true --set telemetry_module_sensor_type DS18B20 --set telemetry_module_sensor_pin 21
```
:::tip
You can change the values above to suit your needs. The commands can be run one at a time or in a group as show above.
:::
- reboot/reset the device (press the RST button or unplug/plug in the device)
- when the device boots it should say "Environment" and it may show the sensor data
- if "no data", then triple check the wiring
- if still "no data", run:
```bash
meshtastic --info
```
and verify the the `telemetry_module_sensor_type` and `telemetry_module_sensor_pin`
## Example of RAK 4631 with Environment Sensor
Setup of a RAK 4631 with Environment Sensor
[<img src="RAK4631_with_EnvSensor" src="/img/hardware/rak/RAK4631_with_EnvSensor.jpg" style={{zoom:'25%'}} />](/img/hardware/rak/RAK4631_with_EnvSensor.jpg)
Requirements:
- RAK4631
- Environment Sensor
Steps:
- configure the device:
```bash
meshtastic --set telemetry_module_measurement_enabled true --set telemetry_module_screen_enabled true --set telemetry_module_update_interval 15 --set telemetry_module_display_farenheit true --set telemetry_module_sensor_type 6
```
:::tip
You can change the values above to suit your needs. The commands can be run one at a time or in a group as show above.
:::
- reboot/reset the device (press the button or unplug/plug in the device)
- when the device boots it should say "Environment" and it may show the sensor data
- if still "no data", run:
```bash
meshtastic --info
```
and verify the the `telemetry_module_sensor_type`
## Known Problems
- No default configuration values are currently set, so this must be done when enabling the module.

View file

@ -1,93 +1,93 @@
--- ---
id: ext-notif-plugin id: ext-notif-module
title: External notifications title: External notifications
sidebar_label: External notifications sidebar_label: External notifications
--- ---
## About ## About
The ExternalNotification Plugin will allow you to connect a speaker, LED or other device to notify you when a message has been received from the mesh network. The ExternalNotification Module will allow you to connect a speaker, LED or other device to notify you when a message has been received from the mesh network.
## Configuration ## Configuration
These are the settings that can be configured. These are the settings that can be configured.
ext_notification_plugin_enabled ext_notification_module_enabled
Is the plugin enabled? Is the module enabled?
0 = Disabled (Default) 0 = Disabled (Default)
1 = Enabled 1 = Enabled
ext_notification_plugin_active ext_notification_module_active
Is your external circuit triggered when our GPIO is low or high? Is your external circuit triggered when our GPIO is low or high?
0 = Active Low (Default) 0 = Active Low (Default)
1 = Active High 1 = Active High
ext_notification_plugin_alert_message ext_notification_module_alert_message
Do you want to be notified on an incoming message? Do you want to be notified on an incoming message?
0 = Disabled (Default) 0 = Disabled (Default)
1 = Alert when a text message comes 1 = Alert when a text message comes
ext_notification_plugin_alert_bell ext_notification_module_alert_bell
Do you want to be notified on an incoming bell? Do you want to be notified on an incoming bell?
0 = Disabled (Default) 0 = Disabled (Default)
1 = Alert when the bell character is received 1 = Alert when the bell character is received
ext_notification_plugin_output ext_notification_module_output
What GPIO is your external circuit attached? What GPIO is your external circuit attached?
GPIO of the output. (Default = 13) GPIO of the output. (Default = 13)
ext_notification_plugin_output_ms ext_notification_module_output_ms
How long do you want us to trigger your external circuit? How long do you want us to trigger your external circuit?
Amount of time in ms for the alert. Default is 1000.
Amount of time in ms for the alert. Default is 1000.
## Usage Notes ## Usage Notes
For basic usage, start with: For basic usage, start with:
ext_notification_plugin_enabled = 1 ext_notification_module_enabled = 1
ext_notification_module_alert_message = 1
ext_notification_plugin_alert_message = 1
Depending on how your external circuit is configured, you may need to set the active state to true. Depending on how your external circuit is configured, you may need to set the active state to true.
ext_notification_plugin_active = 1 ext_notification_module_active = 1
:::note :::note
The device must be restarted after the settings have been changed for the plugin to take effect. The device must be restarted after the settings have been changed for the module to take effect.
::: :::
### Alert Types ### Alert Types
We support being alerted on two events: We support being alerted on two events:
1) Incoming Text Message 1. Incoming Text Message
2) Incoming Text Message that contains the ASCII bell character. At present, only the Python API can send an ASCII bell character, but more support may be added in the future. 2. Incoming Text Message that contains the ASCII bell character. At present, only the Python API can send an ASCII bell character, but more support may be added in the future.
#### Bell Character #### Bell Character
The bell character is ASCII 0x07. Include 0x07 anywhere in the text message and with ext_notification_plugin_alert_bell enabled, we will issue an external notification. The bell character is ASCII 0x07. Include 0x07 anywhere in the text message and with ext_notification_module_alert_bell enabled, we will issue an external notification.
## External Hardware ## External Hardware
Be mindful of the max current sink and source of the ESP32 GPIO. The easiest devices to interface with would be either an LED or Active Buzzer. Be mindful of the max current sink and source of the ESP32 GPIO. The easiest devices to interface with would be either an LED or Active Buzzer.
Ideas for external hardware: Ideas for external hardware:
* LED - LED
* Active Buzzer - Active Buzzer
* Flame thrower - Flame thrower
* Strobe Light - Strobe Light
* Siren - Siren
## Known Problems ## Known Problems
* This won't directly support a passive (normal) speaker as it does not generate any audio wave forms. - This won't directly support a passive (normal) speaker as it does not generate any audio wave forms.
* This currently only supports the ESP32. Other targets may be possible, I just don't have to test with. - This currently only supports the ESP32. Other targets may be possible, I just don't have to test with.
* This plugin only monitors text messages. We won't trigger on any other packet types. - This module only monitors text messages. We won't trigger on any other packet types.

View file

@ -1,17 +1,17 @@
--- ---
id: plugins id: modules
title: Plugins overview title: Modules overview
sidebar_label: Overview sidebar_label: Overview
--- ---
There are a number of plugins that have been integrated into the device firmware. These can be turned on using the Meshtastic python command line program. Please note that these plugins require the device to be rebooted once they have been enabled for them to start running. There are a number of modules that have been integrated into the device firmware. These can be turned on using the Meshtastic python command line program. Please note that these modules require the device to be rebooted once they have been enabled for them to start running.
These plugins are currently integrated into the firmware: These modules are currently integrated into the firmware:
* Range test - Allows automated testing of communication range of nodes * Range test - Allows automated testing of communication range of nodes
* External notifications - Allows a speaker, LED or other device to indicate when a message has been received * External notifications - Allows a speaker, LED or other device to indicate when a message has been received
* Canned messages - Device can be used without the phone to send a message by choosing a predefined text * Canned messages - Device can be used without the phone to send a message by choosing a predefined text
* Serial - Allows messages to be sent across the mesh by sending strings across a serial port * Serial - Allows messages to be sent across the mesh by sending strings across a serial port
These plugins are currently in development: These modules are currently in development:
* Store and forward - Allows a node to store messages and resend them to nodes that have intermittent connection to the mesh * Store and forward - Allows a node to store messages and resend them to nodes that have intermittent connection to the mesh
* Environment measurement - Allows a node to measure it's local environment and report across the mesh * Environment measurement - Allows a node to measure it's local environment and report across the mesh

View file

@ -1,75 +1,75 @@
--- ---
id: range-test-plugin id: range-test-module
title: Range test plugin title: Range Test Module
sidebar_label: Range test sidebar_label: Range Test
--- ---
This plugin allows you to test the range of your Meshtastic nodes. It uses two nodes, one to send a message every minute, and another to receive the messages. The receiving node then saves the messages along with the GPS coordinates at which they were received into a .csv file. This .csv file can then be integrated into, for example, Google Earth, allowing you to see where you have coverage. This module allows you to test the range of your Meshtastic nodes. It uses two nodes, one to send a message every minute, and another to receive the messages. The receiving node then saves the messages along with the GPS coordinates at which they were received into a .csv file. This .csv file can then be integrated into, for example, Google Earth, allowing you to see where you have coverage.
## Configuration ## Configuration
These are the settings that can be configured. These are the settings that can be configured.
range_test_plugin_enabled range_test_module_enabled
Is the plugin enabled? Is the Module enabled?
0 = Disabled (Default) 0 = Disabled (Default)
1 = Enabled 1 = Enabled
range_test_plugin_save range_test_module_save
If enabled, we will save a log of all received messages to /static/rangetest.csv which you can access from the webserver. We will abort If enabled, we will save a log of all received messages to /static/rangetest.csv which you can access from the webserver. We will abort
writing if there is less than 50k of space on the filesystem to prevent filling up the storage. writing if there is less than 50k of space on the filesystem to prevent filling up the storage.
0 = Disabled (Default) 0 = Disabled (Default)
1 = Enabled 1 = Enabled
range_test_plugin_sender range_test_module_sender
Number of seconds to wait between sending packets. Using the long_slow channel configuration, it's best not to go more frequent than once every 60 seconds. You can be more agressive with faster settings. 0 is default which disables sending messages. Number of seconds to wait between sending packets. Using the long_slow channel configuration, it's best not to go more frequent than once every 60 seconds. You can be more agressive with faster settings. 0 is default which disables sending messages.
:::note :::note
The device must be restarted after the settings have been changed for the plugin to take effect. The device must be restarted after the settings have been changed for the module to take effect.
::: :::
### Usage Notes ### Usage Notes
For basic usage, you will need two devices both with a GPS. A device with a paired phone with GPS may work, I have not tried it. For basic usage, you will need two devices both with a GPS. A device with a paired phone with GPS may work, I have not tried it.
The first thing to do is to turn on the plugin. The device will need to be restarted after applying the settings. With the plugin turned on, the other settings will be available: The first thing to do is to turn on the module. The device will need to be restarted after applying the settings. With the module turned on, the other settings will be available:
range_test_plugin_enabled = 1 range_test_module_enabled = 1
If you want to send a message every 60 seconds: If you want to send a message every 60 seconds:
range_test_plugin_sender = 60 range_test_module_sender = 60
To save a log of the messages: To save a log of the messages:
range_test_plugin_save = 1 range_test_module_save = 1
Recommended settings for a sender at different radio settings: Recommended settings for a sender at different radio settings:
Long Slow ... range_test_plugin_sender = 60 Long Slow ... range_test_module_sender = 60
Long Alt ... range_test_plugin_sender = 30 Long Alt ... range_test_module_sender = 30
Medium ... range_test_plugin_sender = 15 Medium ... range_test_module_sender = 15
Short Fast ... range_test_plugin_sender = 15 Short Fast ... range_test_module_sender = 15
### Python API Examples ### Python API Examples
Sender Sender
`meshtastic --set range_test_plugin_enabled 1` `meshtastic --set range_test_module_enabled 1`
`meshtastic --set range_test_plugin_sender 60` `meshtastic --set range_test_module_sender 60`
Receiver Receiver
`meshtastic --set range_test_plugin_enabled 1` `meshtastic --set range_test_module_enabled 1`
`meshtastic --set range_test_plugin_save 1` `meshtastic --set range_test_module_save 1`
### Other things to keep in mind ### Other things to keep in mind
Be sure to turn off either the plugin configured as a sender or the device where the plugin setup as sender when not in use. This will use a lot of time on air and will spam your channel. Be sure to turn off either the module configured as a sender or the device where the module setup as sender when not in use. This will use a lot of time on air and will spam your channel.
Also, be mindful of your space usage on the file system. It has protections from filling up the space but it's best to delete old range test results. Also, be mindful of your space usage on the file system. It has protections from filling up the space but it's best to delete old range test results.
@ -80,21 +80,21 @@ Also, be mindful of your space usage on the file system. It has protections from
Steps: Steps:
1. [Download](https://www.google.com/earth/versions/#download-pro) and open Google Earth 1. [Download](https://www.google.com/earth/versions/#download-pro) and open Google Earth
1. Select File > Import 1. Select File > Import
2. Select CSV 2. Select CSV
3. Select Delimited, Comma 3. Select Delimited, Comma
4. Make sure the button that states “This dataset does not contain latitude/longitude information, but street addresses” is unchecked 4. Make sure the button that states “This dataset does not contain latitude/longitude information, but street addresses” is unchecked
5. Select “rx lat” & “rx long” for the appropriate lat/lng fields 5. Select “rx lat” & “rx long” for the appropriate lat/lng fields
6. Click finish 6. Click finish
2. When it prompts you to create a style template, click yes. 2. When it prompts you to create a style template, click yes.
1. Set the name field to whichever column you want to be displayed on the map (dont worry about this too much, when you click on an icon, all the relevant data appears) 1. Set the name field to whichever column you want to be displayed on the map (dont worry about this too much, when you click on an icon, all the relevant data appears)
2. Select a color, icon, etc. and hit OK. 2. Select a color, icon, etc. and hit OK.
Your data will load onto the map, make sure to click the checkbox next to your dataset in the sidebar to view it. Your data will load onto the map, make sure to click the checkbox next to your dataset in the sidebar to view it.
### My Maps ### My Maps
You can use [My Maps](http://mymaps.google.com/). It takes CSVs and the whole interface is much easier to work with. You can use [My Maps](http://mymaps.google.com). It takes CSVs and the whole interface is much easier to work with.
Google has instructions on how to do that [here](https://support.google.com/mymaps/answer/3024836?co=GENIE.Platform%3DDesktop&hl=en#zippy=%2Cstep-prepare-your-info%2Cstep-import-info-into-the-map). Google has instructions on how to do that [here](https://support.google.com/mymaps/answer/3024836?co=GENIE.Platform%3DDesktop&hl=en#zippy=%2Cstep-prepare-your-info%2Cstep-import-info-into-the-map).
@ -110,26 +110,34 @@ Right now range test messages go over the `TEXT_MESSAGE_APP` port. We need a tog
## FAQ ## FAQ
Q: Where is rangetest.csv saved? Q: Where is rangetest.csv saved?
* Turn on the WiFi on your device as either a WiFi client or a WiFi AP. Once you can connect to your device, go to /static and you will see rangetest.csv.
Q: Do I need to have WiFi turned on for the file to be saved? - Turn on the WiFi on your device as either a WiFi client or a WiFi AP. Once you can connect to your device, go to /static and you will see rangetest.csv.
* Nope, it'll just work.
Q: Do I need a phone for this plugin? Q: Do I need to have WiFi turned on for the file to be saved?
* There's no need for a phone.
Q: Can I use this as a message logger? - Nope, it'll just work.
* While it's not the intended purpose, sure, why not. Do it!
Q: What will happen if I run out of space on my device? Q: Do I need a phone for this module?
* We have a protection in place to keep you from completely filling up your device. This will make sure that other device critical functions will continue to work. We will reserve at least 50k of free space.
Q: What do I do with the rangetest.csv file when I'm done? - There's no need for a phone.
* Go to /static and delete the file.
Q: Can I use this as a sender while on battery power? Q: Can I use this as a message logger?
* Yes, but your battery will run down quicker than normal. While sending, we tell the device not to go into low-power mode since it needs to keep to a fairly strict timer.
Q: Why is this operating on incoming messages instead of the existing location discovery protocol? - While it's not the intended purpose, sure, why not. Do it!
* This plugin is still young and currently supports monitoring just one port at a time. I decided to use the existing message port because that is easy to test with. A future version will listen to multiple ports to be more promiscuous.
Q: What will happen if I run out of space on my device?
- We have a protection in place to keep you from completely filling up your device. This will make sure that other device critical functions will continue to work. We will reserve at least 50k of free space.
Q: What do I do with the rangetest.csv file when I'm done?
- Go to /static and delete the file.
Q: Can I use this as a sender while on battery power?
- Yes, but your battery will run down quicker than normal. While sending, we tell the device not to go into low-power mode since it needs to keep to a fairly strict timer.
Q: Why is this operating on incoming messages instead of the existing location discovery protocol?
- This module is still young and currently supports monitoring just one port at a time. I decided to use the existing message port because that is easy to test with. A future version will listen to multiple ports to be more promiscuous.

View file

@ -0,0 +1,40 @@
---
id: serial-module
title: Serial communication module
sidebar_label: Serial communication
---
## About
This is a simple interface to send messages over the mesh network by sending strings over a serial port.
Default is to use RX GPIO 16 and TX GPIO 17.
## Basic Usage:
1. Enable the module by setting `serial_module_enabled` to `1`.
2. Set the pins (`serial_module_rxd` / `serial_module_rxd`) for your preferred RX and TX GPIO pins. On tbeam boards it is recommended to use:
- RXD 35
- TXD 15
3. Set `serial_module_timeout` to the amount of time to wait before we consider your packet as "done".
4. (Optional) In serial_module.h set the port to `PortNum_TEXT_MESSAGE_APP`if you want to send messages to/from the general text message channel.
5. Connect to your device over the serial interface at `38400 8N1`.
6. Send a packet up to 240 bytes in length. This will get relayed over the mesh network.
7. (Optional) Set `serial_module_echo` to `1` and any message you send out will be echoed back to your device.
:::note
The device must be restarted after the settings have been changed for the module to take effect.
:::
## TODO (in this order):
- Define a verbose RX mode to report on mesh and packet information.
:::note
This won't happen any time soon.
:::
## Known Problems
- Until the module is initialized by the startup sequence, the TX pin is in a floating state. Device connected to that pin may see this as "noise".
- Will not work on NRF and the Linux device targets.

View file

@ -0,0 +1,213 @@
---
id: store-forward-module
title: Store and Forward Module
sidebar_label: Store and Forward
---
## About
:::caution
This is a work in progress and is partially available. Stability is not guaranteed.
:::
The Store Forward Module is an implementation of a Store and Forward system to enable resilient messaging in the event that a client device is disconnected from the main network.
Because of the increased network traffic for this overhead, it's not advised to use this if you are duty cycle limited for your airtime usage nor is it advised to use this for SF12 (Long Range / Slow).
### About - How it works
![Store & Forward - Overview](/img/modules/store_and_forward/store_and_forward-overview.png)
## Requirements
Initial Requirements:
- Must be installed on a router node.
- - This is an artificial limitation, but is in place to enforce best practices.
- - Router nodes are intended to be always online. If this module misses any messages, the reliability of the stored messages will be reduced.
- Esp32 Processor based device with external PSRAM. (tbeam v1.0 and tbeamv1.1, and maybe others)
## Usage Overview
- To use / test this you will want at least 3 devices
- - One device will (currently) need be a tbeam v1.0 and tbeamv1.1 configured as a Meshtastic router. Other devices with built in PSRAM will be supported at some point.
- - Two others will be regular clients. Nothing special required.
### Meshtastic channel configuration
Don't use this on the "Long Range / Slow" or "Long Range / Fast" channel settings. You're welcome to try and report back, but those channels have a [very low bitrate](/docs/developers/device/radio-settings#pre-defined).
Either use a custom channel configuration with at an at least 1kbit data rate or use "Medium Range / Fast".
Recommended channel setting is for 1.343kbps:
```bash
meshtastic --setchan spread_factor 11 --setchan coding_rate 4 --setchan bandwidth 500
```
With an aftermarket coaxial antenna or moxon antenna, that will give you roughly the same range as "Long Range / Slow" and 5x the bitrate.
### Router setup
- Configure your device as a meshtastic router.
- - https://meshtastic.org/docs/software/settings/router
- Configure the Store and Forward Module
- - Required configuration
- - - store_forward_module_enabled - Set this to true to enable the module. False to disable the module.
- - Optional configuration
- - - store_forward_module_records - Set this to the maximum number of records to save. Best to leave this at the default (0) where the module will use 2/3 of your device's available PSRAM. This is about 11,000 records.
- Name your router node something that makes it easily identifiable, aka "Router".
Don't enable the Store and Forward module on multiple routers!
### Client Usage
Currently, no special configuration is required. To request your history sent to you, send the command into the message field "SF". That's it. This will eventually change to make it easier. At the moment, that message will be sent to everyone on the mesh but we'll (eventually) make it easier to use where there'll be a button (or maybe it'll be transparent) and the command isn't sent as a text message to the mesh.
Available Commands:
| Command | Definition |
| :-----: | :------------------------------------------: |
| SF | Send the last few messages I may have missed |
| SFm | Send a 240 byte payload (Used for testing) |
The Store and Forward module will only service one client at a time. If a second client requests messages while the S&F is busy, the S&F will send a private message to the second client that they will need to wait.
## Settings
| Setting | Acceptable Values | Default |
| :-------------------------------------------: | :---------------: | :-----: |
| store_forward_module_enabled | `true`, `false` | `false` |
| store_forward_module_records | integer | `0` |
| store_forward_module_replay_max_records (tbd) | integer | `0` |
| store_forward_module_replay_max_time (tbd) | integer | `0` |
## Example Request/Response
### Request History (Use Router Defaults)
Story: Carol has been away from the mesh with device turned off. She would like to get a replay of what she has missed. The router will return the messages.
- Carol
- - Packet (Port: STORE_FORWARD_APP)
- - - To: Broadcast (Optionally, direct to router)
- - - StoreAndForward.rr.CLIENT_HISTORY
- Router
- - Packet (Port: STORE_FORWARD_APP)
- - - To: Carol
- - - StoreAndForward.rr.ROUTER_HISTORY
- - - StoreAndForward.history.HistoryMessages = 42 // Router has 42 messages that will be sent to Carol.
- - - StoreAndForward.history.Window = 120 // Router searched for messages over the last two hours.
- - - StoreAndForward.history.LastRequest = 0 // Carol has never asked for the history.
- - Packet (Port: TEXT_MESSAGE_APP)
- - - ... a series of 42 text messages
### Request History (No history available)
Story: Carol has been away from the mesh with device turned off. She would like to get a replay of what she has missed but the router indicates there are no messages available.
- Carol
- - Packet (Port: STORE_FORWARD_APP)
- - - To: Broadcast (Optionally, direct to router)
- - - StoreAndForward.rr.CLIENT_HISTORY
- Router
- - Packet (Port: STORE_FORWARD_APP)
- - - To: Carol
- - - StoreAndForward.rr.ROUTER_HISTORY
- - - StoreAndForward.history.HistoryMessages = 0 // Router has no messages to be sent to Carol.
- - - StoreAndForward.history.Window = 120 // Router searched for messages over the last two hours.
- - - StoreAndForward.history.LastRequest = (timestamp) // Last time carol requested the history.
### Store & Forward Router Heartbeat
Story: The Store & Forward Router sends a periodic message onto the network. This allows connected devices to know that a router is in range and listening to received messages. Client will not respond to network but (optionally) indicate to the user that a S&F router is available or not available.
- Router
- - Packet (Port: STORE_FORWARD_APP)
- - - To: Broadcast
- - - StoreAndForward.rr.ROUTER_HEARTBEAT
- - - StoreAndForward.heartbeat.Period = 120 // Expect a heartbeat every 2 minutes.
- - - StoreAndForward.heartbeat.Secondary = false // If true, this is a secondary "backup" S&F node. Will be (eventually) used for router election in the event there are multiple S&F Routers.
## Meshpacket
To support functionality of Store and Forward, a new enum has been added to the MeshPacket.
```
typedef enum _MeshPacket_Delayed {
MeshPacket_Delayed_NO_DELAY = 0,
MeshPacket_Delayed_DELAYED_BROADCAST = 1,
MeshPacket_Delayed_DELAYED_DIRECT = 2
} MeshPacket_Delayed;
```
- NO_DELAY - The packet was sent in real time. Store and Forward had no hand in this message. This is the default case.
- DELAYED_BROADCAST - This is a delayed message. The 'to' of the packet has been directed at a named user but was previously a broadcast packet.
- DELAYED_DIRECT - This is a delayed message. The 'to' of the packet has been directed at a named user but was previously a direct packet.
As a reminder, broadcast messages are messages where the "to" of a payload is directed at NODENUM_BROADCAST or (0xFFFFFFFF).
Example Cases:
- Real time :: BROADCAST
- - Delayed = MeshPacket_Delayed_NO_DELAY
- - From: Ann
- - To: BROADCAST
- Real time :: Direct
- - Delayed = MeshPacket_Delayed_NO_DELAY
- - From: Ann
- - To: Bob
- Delayed :: BROADCAST
- - Delayed = MeshPacket_Delayed_DELAYED_BROADCAST
- - From: Ann
- - To: Bob
- Delayed :: Direct
- - Delayed = MeshPacket_Delayed_DELAYED_DIRECT
- - From: Ann
- - To: Bob
When a message is 'real time', time a message is sent is the same as the time the message was received. In the case the message is delayed, there is no timestamp available for the message.
Where the message is a delayed broadcast, the "To" is _not_ a broadcast address but rather the address of the device that requested the messages to be replayed. This is to allow the message to be routed over the mesh network and not displayed in the message screen of other devices.
## Developer TODO
Not necessarily in this order:
- Client Interface (Web, Android, Python or iOS when that happens) to request packets be resent.
- Router sends a heartbeat so the client knows there is a router in range.
- Support for a mesh to have multiple routers that have the store & forward functionality (for redundancy).
- Add a default channel at about 1.5kbit / sec.
- Eventually we could add a "want_store_and_forward" bit to MeshPacket and that could be nicer than whitelists in this module. Initially we'd only set that bit in text messages (and any other module messages that can cope with this). This change would be backward wire compatible so can add easily later.
- Have a "cool down" period to disallow a client to request the history too often.
- Message with SF status on requests.
- Be able to identify if you're within range of a router.
- Be able to specify the HOP MAX to reduce airtime. Is this necessary?
- Restrict operation of S&F on the slow channel configurations.
- Create a TX queue to prevent the history from being modified in flight.
- Only allow n-number of requests to the router at any one time.
- Set number of max messages from the history.
- Calculate a new channel with 250kHz bandwidth and ~1.5kbit.
\*\*\* Done
- Disable ACK. If the router is within range, so is the requester.
- Currently the way we allocate messages in the device code is super inefficient. It always allocates the worst case message size. Really we should dynamically allocate just the # of bytes we need. This would allow many more MeshPackets to be kept in RAM.
- Allow max history to be defined by radioConfig.preferences.store_forward_module_records.
- Add a starting to send / finished sending message.

View file

@ -11,7 +11,7 @@ If you encounter any problems, please post a question in [our forum](https://mes
## GUI ## GUI
1. Purchase a suitable [radio](/docs/hardware). 1. Purchase a suitable [radio](/docs/hardware).
2. Install [Python](https://www.python.org/downloads/). 2. Install [Python](https://www.python.org/downloads).
3. Install [Git](https://git-scm.com/downloads). 3. Install [Git](https://git-scm.com/downloads).
4. Reboot your computer. 4. Reboot your computer.
5. Install [PlatformIO](https://platformio.org/platformio-ide). 5. Install [PlatformIO](https://platformio.org/platformio-ide).

View file

@ -42,7 +42,7 @@ After I installed that, esptool.py was completely happy and the firmware loaded
brew install openssl brew install openssl
``` ```
- Set some flags in your bash/zsh/whichever profile for `esptool` to install [cryptography](https://cryptography.io/en/latest/installation/) as a dependency correctly: - Set some flags in your bash/zsh/whichever profile for `esptool` to install [cryptography](https://cryptography.io/en/latest/installation) as a dependency correctly:
``` ```
export LDFLAGS="-L/usr/local/opt/openssl/lib" export LDFLAGS="-L/usr/local/opt/openssl/lib"

View file

@ -5,29 +5,30 @@ sidebar_label: MQTT
--- ---
## MQTT ## MQTT
Meshtastic devices with wifi hardware (ESP32) are able to connect to an MQTT broker to uplink and downlink mesh packets. This is useful for a number of purposes:
- Connecting your mesh to the official Meshtastic MQTT broker. This makes your devices appear on the world map, and provides a limited copy of your mesh traffic, translated into JSON. Meshtastic devices with wifi hardware (ESP32) are able to connect to an MQTT broker to uplink and downlink mesh packets. This is useful for a number of purposes:
- Connecting your mesh to the official Meshtastic MQTT broker. This makes your devices appear on the world map, and provides a limited copy of your mesh traffic, translated into JSON.
- Using a custom MQTT broker to bridge several mesh networks together, via the internet (or just a local IP network) - Using a custom MQTT broker to bridge several mesh networks together, via the internet (or just a local IP network)
- Using a custom MQTT broker and a translator program to decode the raw protobuf packets and translate them into a plain text form for use in other systems. eg plotting temperature readings in Grafana, or device positions in Traccar. - Using a custom MQTT broker and a translator program to decode the raw protobuf packets and translate them into a plain text form for use in other systems. eg plotting temperature readings in Grafana, or device positions in Traccar.
When MQTT enabled, the Meshtastic device simply uplinks and/or downlinks every raw protobuf packet that it sees to the MQTT broker. All packets are sent to the broker, whether they originate from another device on the mesh, or the gateway node itself. When MQTT enabled, the Meshtastic device simply uplinks and/or downlinks every raw protobuf packet that it sees to the MQTT broker. All packets are sent to the broker, whether they originate from another device on the mesh, or the gateway node itself.
Packets may be encrypted. If you use the default meshtastic MQTT server, packets are always encrypted. If you use a custom MQTT broker (ie set `mqtt_server`), the `mqtt_encryption_enabled` setting applies, which by default is false. Packets may be encrypted. If you use the default meshtastic MQTT server, packets are always encrypted. If you use a custom MQTT broker (ie set `mqtt_server`), the `mqtt_encryption_enabled` setting applies, which by default is false.
IMPORTANT: When MQTT is turned on, you are potentially broadcasting your entire mesh traffic onto the public internet. This includes messages and position information. IMPORTANT: When MQTT is turned on, you are potentially broadcasting your entire mesh traffic onto the public internet. This includes messages and position information.
### MQTT Topic ### MQTT Topic
The device will uplink and downlink packets to the `msh/` prefix: The device will uplink and downlink packets to the `msh/` prefix:
`msh/1/c/ShortFast/!12345678` where `msh/1/c/ShortFast/!12345678` where
- `!12345678` is the address of the gateway device. - `!12345678` is the address of the gateway device.
- `ShortFast` is the channel name. - `ShortFast` is the channel name.
The payload is a raw protobuf. Looking at the MQTT traffic with a program like `mosquitto_sub` will tell you it's working, but you won't get much useful information out of it. For example: The payload is a raw protobuf. Looking at the MQTT traffic with a program like `mosquitto_sub` will tell you it's working, but you won't get much useful information out of it. For example:
``` ```
苓????"! 苓????"!
!937bed1cTanksTnk"D???05??=???aP` !937bed1cTanksTnk"D???05??=???aP`
@ -36,36 +37,34 @@ The payload is a raw protobuf. Looking at the MQTT traffic with a program like
### Basic Configuration ### Basic Configuration
Check out [MQTT Settings](https://meshtastic.org/docs/software/settings/mqtt) for full information. For quick start instructions, read on. Check out [MQTT Settings](/docs/software/settings/mqtt) for full information. For quick start instructions, read on.
- Connect your gateway node to wifi, by setting the `wifi_ssid` and `wifi_password` preferences. - Connect your gateway node to wifi, by setting the `wifi_ssid` and `wifi_password` preferences.
- Configure your broker settings: `mqtt_server`, `mqtt_username`, and `mqtt_password`. If all are left blank, the device will connect to the Meshtastic broker. - Configure your broker settings: `mqtt_server`, `mqtt_username`, and `mqtt_password`. If all are left blank, the device will connect to the Meshtastic broker.
- Set `uplink_enabled` and `downlink_enabled` as appropriate for each channel. Most users will just have a single channel (at channel index 0). `meshtastic --ch-index 0 --ch-set uplink_enabled true` - Set `uplink_enabled` and `downlink_enabled` as appropriate for each channel. Most users will just have a single channel (at channel index 0). `meshtastic --ch-index 0 --ch-set uplink_enabled true`
`uplink_enabled` will tell the device to publish mesh packets to MQTT. `uplink_enabled` will tell the device to publish mesh packets to MQTT.
`downlink_enabled` will tell the device to subscribe to MQTT, and forward any packets from there onto the mesh. `downlink_enabled` will tell the device to subscribe to MQTT, and forward any packets from there onto the mesh.
### Getting plain data out of the mesh ### Getting plain data out of the mesh
As of firmware 1.2.53, it is possible for the device to decrypt the protobufs before publishing to MQTT. To translate this into a plain format: As of firmware 1.2.53, it is possible for the device to decrypt the protobufs before publishing to MQTT. To translate this into a plain format:
- Set up a gateway node to uplink packets to your MQTT broker: - Set up a gateway node to uplink packets to your MQTT broker:
- `meshtastic --set wifi_ssid XXXX` - `meshtastic --set wifi_ssid XXXX`
- `meshtastic --set wifi_password XXXX` - `meshtastic --set wifi_password XXXX`
- `meshtastic --set mqtt_server 192.168.1.1` - `meshtastic --set mqtt_server 192.168.1.1`
- `meshtastic --set mqtt_username XXXX` - `meshtastic --set mqtt_username XXXX`
- `meshtastic --set mqtt_password XXXX` - `meshtastic --set mqtt_password XXXX`
- `meshtastic --set mqtt_encryption_enabled false` - `meshtastic --set mqtt_encryption_enabled false`
- `meshtastic --ch-index 0 --ch-set uplink_enabled true` - `meshtastic --ch-index 0 --ch-set uplink_enabled true`
- Grab the meshtastic-mqtt script from [here](https://github.com/joshpirihi/meshtastic-mqtt) - Grab the meshtastic-mqtt script from [here](https://github.com/joshpirihi/meshtastic-mqtt)
- `git clone https://github.com/joshpirihi/meshtastic-mqtt && cd meshtastic-mqtt` - `git clone https://github.com/joshpirihi/meshtastic-mqtt && cd meshtastic-mqtt`
- Edit `meshtastic_mqtt/meshtastic_mqtt.py` and enter your mqtt broker details - Edit `meshtastic_mqtt/meshtastic_mqtt.py` and enter your mqtt broker details
- Install the script with `pip install .` - Install the script with `pip install .`
- Run `meshtastic-mqtt`. It will print some debug output by default, and publish the plain values to the `meshtastic/` prefix. - Run `meshtastic-mqtt`. It will print some debug output by default, and publish the plain values to the `meshtastic/` prefix.
- View the plain data with `mosquitto_sub -h YOUR_MQTT_SERVER -t meshtastic/# -v` - View the plain data with `mosquitto_sub -h YOUR_MQTT_SERVER -t meshtastic/# -v`
- You can then consume the data easily in other systems. For example, nodered->influx db->grafana. - You can then consume the data easily in other systems. For example, nodered->influx db->grafana.
#Original brainstorming for MQTT: #Original brainstorming for MQTT:
@ -82,7 +81,7 @@ This is a mini-doc/RFC sketching out a development plan to satisfy a number of 1
- A text messaging bridge when a node in the mesh can gateway to the internet. Issue #[353](https://github.com/meshtastic/Meshtastic-device/issues/353) and this nicely documented [android issue](https://github.com/meshtastic/Meshtastic-Android/issues/2). - A text messaging bridge when a node in the mesh can gateway to the internet. Issue #[353](https://github.com/meshtastic/Meshtastic-device/issues/353) and this nicely documented [android issue](https://github.com/meshtastic/Meshtastic-Android/issues/2).
- An easy way to let desktop app developers remotely control GPIOs. Issue #[182](https://github.com/meshtastic/Meshtastic-device/issues/182) - An easy way to let desktop app developers remotely control GPIOs. Issue #[182](https://github.com/meshtastic/Meshtastic-device/issues/182)
- Remote attribute access (to change settings of distant nodes). Issue #182 - Remote attribute access (to change settings of distant nodes). Issue #182
- Be sure to checkout [MQTT Settings](https://meshtastic.org/docs/software/settings/mqtt) - Be sure to checkout [MQTT Settings](/docs/software/settings/mqtt)
## Short term goals ## Short term goals
@ -118,7 +117,7 @@ Any gateway-device will contact the MQTT broker.
### Topics ### Topics
The "mesh/crypt/CHANNELID/NODEID/PORTID" [topic](https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices/) will be used for messages sent from/to a mesh. The "mesh/crypt/CHANNELID/NODEID/PORTID" [topic](https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices) will be used for messages sent from/to a mesh.
Gateway nodes will forward any MeshPacket from a local mesh channel with uplink_enabled. The packet (encapsulated in a ServiceEnvelope) will remain encrypted with the key for the specified channel. Gateway nodes will forward any MeshPacket from a local mesh channel with uplink_enabled. The packet (encapsulated in a ServiceEnvelope) will remain encrypted with the key for the specified channel.
@ -132,7 +131,7 @@ FIXME, discuss possible attacks by griefers and how they can be prevented
#### Service Envelope #### Service Envelope
The payload published on mesh/... will always be wrapped in a [ServiceEnvelope protobuf](https://meshtastic.org/docs/developers/protobufs/api#serviceenvelope). The payload published on mesh/... will always be wrapped in a [ServiceEnvelope protobuf](/docs/developers/protobufs/api#serviceenvelope).
ServiceEnvelope will include the message, and full information about arrival time, who forwarded it, source channel, source mesh id, etc... ServiceEnvelope will include the message, and full information about arrival time, who forwarded it, source channel, source mesh id, etc...
@ -161,7 +160,7 @@ deduplicate if needed by using the packet ID of each message.
#### Public MQTT broker service #### Public MQTT broker service
An existing public [MQTT broker](https://mosquitto.org/) will be the default for this service, but clients can use any MQTT broker they choose. An existing public [MQTT broker](https://mosquitto.org) will be the default for this service, but clients can use any MQTT broker they choose.
FIXME - figure out how to avoid impersonation (because we are initially using a public MQTT server with no special security options). FIXME, include some ideas on this in the ServiceEnvelope documentation. FIXME - figure out how to avoid impersonation (because we are initially using a public MQTT server with no special security options). FIXME, include some ideas on this in the ServiceEnvelope documentation.
@ -169,7 +168,7 @@ FIXME - figure out how to avoid impersonation (because we are initially using a
@Geeksville will run a riot.im bridge that talks to the public MQTT broker and sends/receives into the riot.im network. @Geeksville will run a riot.im bridge that talks to the public MQTT broker and sends/receives into the riot.im network.
There is apparently [already](https://github.com/derEisele/tuple) a riot.im [bridge](https://matrix.org/bridges/) for MQTT. That will possibly need to be customized a bit. But by doing this, we should be able to let random riot.im users send/receive messages to/from any meshtastic device. (FIXME ponder security). See this [issue](https://github.com/meshtastic/Meshtastic-Android/issues/2#issuecomment-645660990) with discussion with the dev. There is apparently [already](https://github.com/derEisele/tuple) a riot.im [bridge](https://matrix.org/bridges) for MQTT. That will possibly need to be customized a bit. But by doing this, we should be able to let random riot.im users send/receive messages to/from any meshtastic device. (FIXME ponder security). See this [issue](https://github.com/meshtastic/Meshtastic-Android/issues/2#issuecomment-645660990) with discussion with the dev.
### Deprecated concepts ### Deprecated concepts
@ -282,12 +281,13 @@ mosquitto_pub -h localhost -q 0 -t test/hello -m 'yo!'
``` ```
5. For Meshtastic to be able to access that server, two settings need to be changed in the 5. For Meshtastic to be able to access that server, two settings need to be changed in the
`/usr/local/etc/mosquitto/mosquitto.conf` file: `/usr/local/etc/mosquitto/mosquitto.conf` file:
``` ```
listener 1883 0.0.0.0 listener 1883 0.0.0.0
allow_anonymous true allow_anonymous true
``` ```
6. Restart the service: 6. Restart the service:
``` ```

View file

@ -7,7 +7,7 @@ sidebar_label: Software Design
This is a mini design doc for developing the meshtastic software. This is a mini design doc for developing the meshtastic software.
- [Build instructions](build-instructions.md) - [Build instructions](build-instructions.md)
- [On device plugin API](/docs/developers/device/plugin-api) - a tutorial on how to write small Plugins which run on the device and can message other nodes. - [On device module API](/docs/developers/device/module-api) - a tutorial on how to write small modules which run on the device and can message other nodes.
- Our [project board](https://github.com/orgs/meshtastic/projects/1) - shows what things we are currently working on and remaining work items for the current release. - Our [project board](https://github.com/orgs/meshtastic/projects/1) - shows what things we are currently working on and remaining work items for the current release.
- [Power Management](power.md) - [Power Management](power.md)
- [Mesh algorithm](/docs/developers/device/mesh-alg) - [Mesh algorithm](/docs/developers/device/mesh-alg)

View file

@ -13,15 +13,15 @@ The following applications are available to support your Meshtastic network:
- [Meshtastic.js](/docs/software/js/getting-started) provides a JavaScript library to interface with devices - [Meshtastic.js](/docs/software/js/getting-started) provides a JavaScript library to interface with devices
- [Meshtastic-python](/docs/software/python/python-installation) provides access from desktop computers including a command line interface - [Meshtastic-python](/docs/software/python/python-installation) provides access from desktop computers including a command line interface
- A [web interface](/docs/software/web/web-app-software) can be accessed over Wifi on ESP32 devices - A [web interface](/docs/software/web/web-app-software) can be accessed over Wifi on ESP32 devices
- Pre-installed device plugins for: - Pre-installed device modules for:
- [Range testing](/docs/software/plugins/range-test-plugin) - [Range testing](/docs/software/modules/range-test-module)
- [External notifications](/docs/software/plugins/ext-notif-plugin) - [External notifications](/docs/software/modules/ext-notif-module)
- [Canned messages](/docs/software/plugins/canned-message-plugin) - [Canned messages](/docs/software/modules/canned-message-module)
- [Serial communication](/docs/software/plugins/serial-plugin) - [Serial communication](/docs/software/modules/serial-module)
- [Store and forwarding messages](/docs/software/plugins/store-forward-plugin) (in development) - [Store and forwarding messages](/docs/software/modules/store-forward-module) (in development)
- [Environment measurement](/docs/software/plugins/environment-plugin) (in development) - [Environment measurement](/docs/software/modules/environment-module) (in development)
- Community projects include: - Community projects include:
- A [plugin](/docs/software/community/community-atak) for the [Android Team Awareness Kit (ATAK)](https://play.google.com/store/apps/details?id=com.atakmap.app.civ) - A [module](/docs/software/community/community-atak) for the [Android Team Awareness Kit (ATAK)](https://play.google.com/store/apps/details?id=com.atakmap.app.civ)
- [PyGUI](/docs/software/community/community-pygui), a platform agnostic graphical user interface for devices - [PyGUI](/docs/software/community/community-pygui), a platform agnostic graphical user interface for devices
The devices running Meshtastic have many preferences that can be set, see the [Settings](/docs/settings) pages for more details. The devices running Meshtastic have many preferences that can be set, see the [Settings](/docs/settings) pages for more details.

View file

@ -1,215 +0,0 @@
---
id: environment-plugin
title: Environment measurement
sidebar_label: Environment measurement
---
## About
The Environment Measurement Plugin will allow nodes to send a specific message with information from connected environmental sensors. Currently supported sensors are BME280, BME680, DHT11, DHT12, DHT21, DHT22, Dallas 1-wire DS18B20, and MCP9808.
The preferred setup is using I2C, so the `environmental_measurement_plugin_sensor_pin` may not be needed.
## Configuration
These are the settings that can be configured.
environmental_measurement_plugin_enabled
Is the plugin enabled?
0 = Disabled (Default)
1 = Enabled
environmental_measurement_plugin_screen_enabled
Show received sensor readings on device screen.
0 = Disabled (Default)
1 = Enabled
environmental_measurement_plugin_read_error_count_threshold
Error count threshold for failed sensor readings.
Default = 0
preferences.environmental_measurement_plugin_update_interval
How often (in seconds) should sensor readings be broadcasted?
Default = 0
environmental_measurement_plugin_recovery_interval
For how long should we wait (in seconds) before trying to read sensors again upon exceeded error threshold?
Default = 0
environmental_measurement_plugin_display_fahrenheit
Should temperature readings be converted to fahrenheit?
0 = Disabled (Default)
1 = Enabled
environmental_measurement_plugin_sensor_type
What sensor is connected?
0 = DHT11 (Default)
1 = Dallas 1-wire DS18B20
2 = DHT12
3 = DHT21
4 = DHT22
5 = BME280
6 = BME680
7 = MCP9808
environmental_measurement_plugin_sensor_pin
Which pin is the sensor connected to?
Default = 0
## Usage Notes
For basic usage, start with:
environmental_measurement_plugin_enabled = 1
environmental_measurement_plugin_screen_enabled = 1
Depending on which pin your sensor is connected to, set it accordingly:
environmental_measurement_plugin_sensor_pin = 13
:::note
The device must be restarted after the settings have been changed for the plugin to take effect.
:::
## Hardware
The sensors can be wired differently, here's one example for sensor DS18B20 https://randomnerdtutorials.com/esp32-ds18b20-temperature-arduino-ide
## Example of T-LoraV1 with DHT22 temperature sensor
Setup of a T-LoraV1 with DHT22 temperature sensor.
[<img src="T-LoraV1 with DHT22" src="/img/hardware/lora_v1_with_DHT22.jpg" style={{zoom:'25%'}} />](/img/hardware/lora_v1_with_DHT22.jpg)
Requirements:
* T-LoraV1 (but any esp32 should work, just be sure to double check which GPIO to use)
* DHT22 sensor
* 10 Kohm resistor (optional, but recommended)
* breadboard (optional)
* two red wires (could be a different color, but 5V is typically red)
* two yellow wires for GPIO (could be a different color)
* one black wire (could be a different color, but GROUND is typically black)
Steps:
* disconnect power/battery
* connect black wire from GROUND to "-" on the DHT22
* connect yellow wire from middle PIN to a row on bread board
* connect red wire from 5V to a row on breadboard
* connect resistor between red and yellow rows
* connect red wire from row with red to "+" on DHT22
* connect yellow wire from yellow row to GPIO on device (ex: GPIO21)
* double check the cabling (if you get it wrong, you can damage the device and/or the DHT22 sensor)
* plug in device
* configure the device:
```
meshtastic --set environmental_measurement_plugin_measurement_enabled true --set environmental_measurement_plugin_screen_enabled true --set environmental_measurement_plugin_update_interval 15 --set environmental_measurement_plugin_display_farenheit true --set environmental_measurement_plugin_sensor_type DHT22 --set environmental_measurement_plugin_sensor_pin 21
```
:::tip
You can change the values above to suit your needs. The commands can be run one at a time or in a group as show above.
:::
* reboot/reset the device (press the RST button or unplug/plug in the device)
* when the device boots it should say "Environment" and it may show the sensor data
* if "no data", then triple check the wiring
* if still "no data", run:
```
meshtastic --info
```
and verify the the environmental_measurement_plugin_sensor_type and environmental_measurement_plugin_sensor_pin
## Example of T-LoraV1 with Dallas DS18B20 temperature sensor
Setup of a T-LoraV1 with DS18B20 temperature sensor.
[<img src="T-LoraV1 with DS18B20" src="/img/hardware/lora_v1_with_DS18B20.jpg" style={{zoom:'25%'}} />](/img/hardware/lora_v1_with_DS18B20.jpg)
Requirements:
* T-LoraV1 (but any esp32 should work, just be sure to double check which GPIO to use)
* DS18B20 sensor
* 10 Kohm resistor (optional, but recommended)
* breadboard (optional)
* two red wires (could be a different color, but 5V is typically red)
* two yellow wires for GPIO (could be a different color)
* one black wire (could be a different color, but GROUND is typically black)
Steps:
* disconnect power/battery
* connect black wire from GROUND to "-" on the DS18B20
* connect yellow wire from DAT pin to a row on bread board
* connect red wire from 5V to a row on breadboard
* connect resistor between red and yellow rows
* connect red wire from row with red to "VCC" on DS18B20
* connect yellow wire from yellow row to GPIO on device (ex: GPIO21)
* double check the cabling (if you get it wrong, you can damage the device and/or the sensor)
* plug in device
* configure the device:
```
meshtastic --set environmental_measurement_plugin_measurement_enabled true --set environmental_measurement_plugin_screen_enabled true --set environmental_measurement_plugin_update_interval 15 --set environmental_measurement_plugin_display_farenheit true --set environmental_measurement_plugin_sensor_type DS18B20 --set environmental_measurement_plugin_sensor_pin 21
```
:::tip
You can change the values above to suit your needs. The commands can be run one at a time or in a group as show above.
:::
* reboot/reset the device (press the RST button or unplug/plug in the device)
* when the device boots it should say "Environment" and it may show the sensor data
* if "no data", then triple check the wiring
* if still "no data", run:
```
meshtastic --info
```
and verify the the environmental_measurement_plugin_sensor_type and environmental_measurement_plugin_sensor_pin
## Example of RAK 4631 with Environment Sensor
Setup of a RAK 4631 with Environment Sensor
[<img src="RAK4631_with_EnvSensor" src="/img/hardware/rak/RAK4631_with_EnvSensor.jpg" style={{zoom:'25%'}} />](/img/hardware/rak/RAK4631_with_EnvSensor.jpg)
Requirements:
* RAK4631
* Environment Sensor
Steps:
* configure the device:
```
meshtastic --set environmental_measurement_plugin_measurement_enabled true --set environmental_measurement_plugin_screen_enabled true --set environmental_measurement_plugin_update_interval 15 --set environmental_measurement_plugin_display_farenheit true --set environmental_measurement_plugin_sensor_type 6
```
:::tip
You can change the values above to suit your needs. The commands can be run one at a time or in a group as show above.
:::
* reboot/reset the device (press the button or unplug/plug in the device)
* when the device boots it should say "Environment" and it may show the sensor data
* if still "no data", run:
```
meshtastic --info
```
and verify the the environmental_measurement_plugin_sensor_type
## Known Problems
* No default configuration values are currently set, so this must be done when enabling the plugin.

View file

@ -1,40 +0,0 @@
---
id: serial-plugin
title: Serial communication plugin
sidebar_label: Serial communication
---
## About
This is a simple interface to send messages over the mesh network by sending strings over a serial port.
Default is to use RX GPIO 16 and TX GPIO 17.
## Basic Usage:
1. Enable the plugin by setting `serialplugin_enabled` to `1`.
2. Set the pins (`serialplugin_rxd` / `serialplugin_rxd`) for your preferred RX and TX GPIO pins. On tbeam boards it is recommended to use:
* RXD 35
* TXD 15
3. Set `serialplugin_timeout` to the amount of time to wait before we consider your packet as "done".
4. (Optional) In SerialPlugin.h set the port to `PortNum_TEXT_MESSAGE_APP`if you want to send messages to/from the general text message channel.
5. Connect to your device over the serial interface at `38400 8N1`.
6. Send a packet up to 240 bytes in length. This will get relayed over the mesh network.
7. (Optional) Set `serialplugin_echo` to `1` and any message you send out will be echoed back to your device.
:::note
The device must be restarted after the settings have been changed for the plugin to take effect.
:::
## TODO (in this order):
* Define a verbose RX mode to report on mesh and packet information.
:::note
This won't happen any time soon.
:::
## Known Problems
* Until the plugin is initialized by the startup sequence, the TX pin is in a floating state. Device connected to that pin may see this as "noise".
* Will not work on NRF and the Linux device targets.

View file

@ -1,214 +0,0 @@
---
id: store-forward-plugin
title: Store and Forward plugin
sidebar_label: Store and Forward
---
## About
:::caution
This is a work in progress and is partially available. Stability is not guaranteed.
:::
The Store Forward Plugin is an implementation of a Store and Forward system to enable resilient messaging in the event that a client device is disconnected from the main network.
Because of the increased network traffic for this overhead, it's not advised to use this if you are duty cycle limited for your airtime usage nor is it advised to use this for SF12 (Long Range / Slow).
### About - How it works
![Store & Forward - Overview](/img/plugins/store_and_forward/store_and_forward-overview.png)
## Requirements
Initial Requirements:
* Must be installed on a router node.
* * This is an artificial limitation, but is in place to enforce best practices.
* * Router nodes are intended to be always online. If this plugin misses any messages, the reliability of the stored messages will be reduced.
* Esp32 Processor based device with external PSRAM. (tbeam v1.0 and tbeamv1.1, and maybe others)
## Usage Overview
* To use / test this you will want at least 3 devices
* * One device will (currently) need be a tbeam v1.0 and tbeamv1.1 configured as a Meshtastic router. Other devices with built in PSRAM will be supported at some point.
* * Two others will be regular clients. Nothing special required.
### Meshtastic channel configuration
Don't use this on the "Long Range / Slow" or "Long Range / Fast" channel settings. You're welcome to try and report back, but those channels have a [very low bitrate](/docs/developers/device/radio-settings#pre-defined).
Either use a custom channel configuration with at an at least 1kbit data rate or use "Medium Range / Fast".
Recommended channel setting is for 1.343kbps:
```bash
meshtastic --setchan spread_factor 11 --setchan coding_rate 4 --setchan bandwidth 500
```
With an aftermarket coaxial antenna or moxon antenna, that will give you roughly the same range as "Long Range / Slow" and 5x the bitrate.
### Router setup
* Configure your device as a meshtastic router.
* * https://meshtastic.org/docs/software/settings/router
* Configure the Store and Forward plugin
* * Required configuration
* * * store_forward_plugin_enabled - Set this to true to enable the plugin. False to disable the plugin.
* * Optional configuration
* * * store_forward_plugin_records - Set this to the maximum number of records to save. Best to leave this at the default (0) where the plugin will use 2/3 of your device's available PSRAM. This is about 11,000 records.
* Name your router node something that makes it easily identifiable, aka "Router".
Don't enable the Store and Forward plugin on multiple routers!
### Client Usage
Currently, no special configuration is required. To request your history sent to you, send the command into the message field "SF". That's it. This will eventually change to make it easier. At the moment, that message will be sent to everyone on the mesh but we'll (eventually) make it easier to use where there'll be a button (or maybe it'll be transparent) and the command isn't sent as a text message to the mesh.
Available Commands:
| Command | Definition |
| :-----: | :---------------: |
| SF | Send the last few messages I may have missed |
| SFm | Send a 240 byte payload (Used for testing) |
The Store and Forward plugin will only service one client at a time. If a second client requests messages while the S&F is busy, the S&F will send a private message to the second client that they will need to wait.
## Settings
| Setting | Acceptable Values | Default |
| :-----: | :---------------: | :-----: |
| store_forward_plugin_enabled | `true`, `false` | `false` |
| store_forward_plugin_records | integer | `0` |
| store_forward_plugin_replay_max_records (tbd) | integer | `0` |
| store_forward_plugin_replay_max_time (tbd) | integer | `0` |
## Example Request/Response
### Request History (Use Router Defaults)
Story: Carol has been away from the mesh with device turned off. She would like to get a replay of what she has missed. The router will return the messages.
* Carol
* * Packet (Port: STORE_FORWARD_APP)
* * * To: Broadcast (Optionally, direct to router)
* * * StoreAndForward.rr.CLIENT_HISTORY
* Router
* * Packet (Port: STORE_FORWARD_APP)
* * * To: Carol
* * * StoreAndForward.rr.ROUTER_HISTORY
* * * StoreAndForward.history.HistoryMessages = 42 // Router has 42 messages that will be sent to Carol.
* * * StoreAndForward.history.Window = 120 // Router searched for messages over the last two hours.
* * * StoreAndForward.history.LastRequest = 0 // Carol has never asked for the history.
* * Packet (Port: TEXT_MESSAGE_APP)
* * * ... a series of 42 text messages
### Request History (No history available)
Story: Carol has been away from the mesh with device turned off. She would like to get a replay of what she has missed but the router indicates there are no messages available.
* Carol
* * Packet (Port: STORE_FORWARD_APP)
* * * To: Broadcast (Optionally, direct to router)
* * * StoreAndForward.rr.CLIENT_HISTORY
* Router
* * Packet (Port: STORE_FORWARD_APP)
* * * To: Carol
* * * StoreAndForward.rr.ROUTER_HISTORY
* * * StoreAndForward.history.HistoryMessages = 0 // Router has no messages to be sent to Carol.
* * * StoreAndForward.history.Window = 120 // Router searched for messages over the last two hours.
* * * StoreAndForward.history.LastRequest = (timestamp) // Last time carol requested the history.
### Store & Forward Router Heartbeat
Story: The Store & Forward Router sends a periodic message onto the network. This allows connected devices to know that a router is in range and listening to received messages. Client will not respond to network but (optionally) indicate to the user that a S&F router is available or not available.
* Router
* * Packet (Port: STORE_FORWARD_APP)
* * * To: Broadcast
* * * StoreAndForward.rr.ROUTER_HEARTBEAT
* * * StoreAndForward.heartbeat.Period = 120 // Expect a heartbeat every 2 minutes.
* * * StoreAndForward.heartbeat.Secondary = false // If true, this is a secondary "backup" S&F node. Will be (eventually) used for router election in the event there are multiple S&F Routers.
## Meshpacket
To support functionality of Store and Forward, a new enum has been added to the MeshPacket.
```
typedef enum _MeshPacket_Delayed {
MeshPacket_Delayed_NO_DELAY = 0,
MeshPacket_Delayed_DELAYED_BROADCAST = 1,
MeshPacket_Delayed_DELAYED_DIRECT = 2
} MeshPacket_Delayed;
```
* NO_DELAY - The packet was sent in real time. Store and Forward had no hand in this message. This is the default case.
* DELAYED_BROADCAST - This is a delayed message. The 'to' of the packet has been directed at a named user but was previously a broadcast packet.
* DELAYED_DIRECT - This is a delayed message. The 'to' of the packet has been directed at a named user but was previously a direct packet.
As a reminder, broadcast messages are messages where the "to" of a payload is directed at NODENUM_BROADCAST or (0xFFFFFFFF).
Example Cases:
* Real time :: BROADCAST
* * Delayed = MeshPacket_Delayed_NO_DELAY
* * From: Ann
* * To: BROADCAST
* Real time :: Direct
* * Delayed = MeshPacket_Delayed_NO_DELAY
* * From: Ann
* * To: Bob
* Delayed :: BROADCAST
* * Delayed = MeshPacket_Delayed_DELAYED_BROADCAST
* * From: Ann
* * To: Bob
* Delayed :: Direct
* * Delayed = MeshPacket_Delayed_DELAYED_DIRECT
* * From: Ann
* * To: Bob
When a message is 'real time', time a message is sent is the same as the time the message was received. In the case the message is delayed, there is no timestamp available for the message.
Where the message is a delayed broadcast, the "To" is *not* a broadcast address but rather the address of the device that requested the messages to be replayed. This is to allow the message to be routed over the mesh network and not displayed in the message screen of other devices.
## Developer TODO
Not necessarily in this order:
* Client Interface (Web, Android, Python or iOS when that happens) to request packets be resent.
* Router sends a heartbeat so the client knows there is a router in range.
* Support for a mesh to have multiple routers that have the store & forward functionality (for redundancy).
* Add a default channel at about 1.5kbit / sec.
* Eventually we could add a "want_store_and_forward" bit to MeshPacket and that could be nicer than whitelists in this plugin. Initially we'd only set that bit in text messages (and any other plugin messages that can cope with this). This change would be backward wire compatible so can add easily later.
* Have a "cool down" period to disallow a client to request the history too often.
* Message with SF status on requests.
* Be able to identify if you're within range of a router.
* Be able to specify the HOP MAX to reduce airtime. Is this necessary?
* Restrict operation of S&F on the slow channel configurations.
* Create a TX queue to prevent the history from being modified in flight.
* Only allow n-number of requests to the router at any one time.
* Set number of max messages from the history.
* Calculate a new channel with 250kHz bandwidth and ~1.5kbit.
*** Done
* Disable ACK. If the router is within range, so is the requester.
* Currently the way we allocate messages in the device code is super inefficient. It always allocates the worst case message size. Really we should dynamically allocate just the # of bytes we need. This would allow many more MeshPackets to be kept in RAM.
* Allow max history to be defined by radioConfig.preferences.store_forward_plugin_records.
* Add a starting to send / finished sending message.

View file

@ -3,6 +3,7 @@ id: python-installation
title: Meshtastic-python installation title: Meshtastic-python installation
sidebar_label: Installation sidebar_label: Installation
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem'; import TabItem from '@theme/TabItem';
@ -10,11 +11,11 @@ This library provides a command line interface (CLI) for Meshtastic nodes and pr
The [Meshtastic-python repo](https://github.com/meshtastic/Meshtastic-python) and [API documentation](https://python.meshtastic.org) are excellent sources of information. The [Meshtastic-python repo](https://github.com/meshtastic/Meshtastic-python) and [API documentation](https://python.meshtastic.org) are excellent sources of information.
If you wish to view the code or contribute to development of the python library or the command line interface, please visit the Meshtastic python <a href="https://github.com/meshtastic/Meshtastic-python">GitHub page</a>. If you wish to view the code or contribute to development of the python library or the command line interface, please visit the Meshtastic python [GitHub page](https://github.com/meshtastic/Meshtastic-python).
There are standalone executables for Mac, Windows and Ubuntu if you do not want to install python and/or the python libraries required to run the mestastic CLI tool. See [Standalone](https://meshtastic.org/docs/software/python/python-standalone) for more information. There are standalone executables for Mac, Windows and Ubuntu if you do not want to install python and/or the python libraries required to run the mestastic CLI tool. See [Standalone](/docs/software/python/python-standalone) for more information.
Installation can also be easily done through the [Python package installer pip](https://pypi.org/project/meshtastic/): Installation can also be easily done through the [Python package installer pip](https://pypi.org/project/meshtastic):
:::note :::note
You must use pip version 20 or later. To upgrade to the latest pip, do: `pip install --upgrade pip` You must use pip version 20 or later. To upgrade to the latest pip, do: `pip install --upgrade pip`
::: :::
@ -28,163 +29,167 @@ Some newer boards may require the drivers for the [CH9102](http://www.wch.cn/dow
::: :::
<Tabs <Tabs
groupId="operating-system" groupId="operating-system"
defaultValue="linux" defaultValue="linux"
values={[ values={[
{label: 'Linux', value: 'linux'}, {label: 'Linux', value: 'linux'},
{label: 'macOS', value: 'macos'}, {label: 'macOS', value: 'macos'},
{label: 'Windows', value: 'windows'}, {label: 'Windows', value: 'windows'},
{label: 'Termux for Android', value: 'termux'}, {label: 'Termux for Android', value: 'termux'},
]}> ]}>
<TabItem value="linux"> <TabItem value="linux">
* Check that your computer has the required serial drivers installed - Check that your computer has the required serial drivers installed
* Connect your Meshtastic device to your USB port
* Use the command
```bash
lsusb
```
* You should see something like:
* `ID 10c4:ea60 Silicon Labs CP210x UART Bridge` for CP210X
* `ID 1a86:55d4 QinHeng Electronics USB Single Serial` for CH9102
* Check that your computer has Python 3 installed. - Connect your Meshtastic device to your USB port
* Use the command - Use the command
```bash
python3 -V
```
* If this does not return a version, install python
```bash
sudo apt-get update
sudo apt-get install python3
```
* Pip is typically installed if you are using python 3 version >= 3.4
* Check that pip is installed using this command
```bash
pip3 -V
```
* If this does not return a version, install pip
```bash
sudo apt-get install python3-pip
```
* Optional: use a python virtual environment (otherwise jump to step "Install pytap2")
* Install python-virtualenvwrapper (arch based distros as an example)
```bash
sudo pacman -Syu python-virtualenvwrapper
```
* Create a virtual environment
```bash
source /usr/bin/virtualenvwrapper.sh
mkvirtualenv meshtastic
workon meshtastic
```
* Install pytap2
```bash ```bash
pip3 install --upgrade pytap2 lsusb
``` ```
* Install meshtastic: - You should see something like:
- `ID 10c4:ea60 Silicon Labs CP210x UART Bridge` for CP210X
- `ID 1a86:55d4 QinHeng Electronics USB Single Serial` for CH9102
- Check that your computer has Python 3 installed.
- Use the command
```bash ```bash
pip3 install --upgrade meshtastic python3 -V
``` ```
- If this does not return a version, install python
```bash
sudo apt-get update
sudo apt-get install python3
```
- Pip is typically installed if you are using python 3 version >= 3.4
- Check that pip is installed using this command
```bash
pip3 -V
```
- If this does not return a version, install pip
```bash
sudo apt-get install python3-pip
```
- Optional: use a python virtual environment (otherwise jump to step "Install pytap2")
- Install python-virtualenvwrapper (arch based distros as an example)
```bash
sudo pacman -Syu python-virtualenvwrapper
```
- Create a virtual environment
```bash
source /usr/bin/virtualenvwrapper.sh
mkvirtualenv meshtastic
workon meshtastic
```
- Install pytap2
```bash
pip3 install --upgrade pytap2
```
- Install meshtastic:
```bash
pip3 install --upgrade meshtastic
```
</TabItem> </TabItem>
<TabItem value="macos"> <TabItem value="macos">
* Check that your computer has the required serial drivers installed - Check that your computer has the required serial drivers installed
* Connect your Meshtastic device to your USB port - Connect your Meshtastic device to your USB port
* Navigate to `Apple Menu  > About This Mac > System Report... > Hardware > USB` - Navigate to `Apple Menu  > About This Mac > System Report... > Hardware > USB`
* You should see something like `CP210X USB to UART Bridge Controller` - You should see something like `CP210X USB to UART Bridge Controller`
* If not download the drivers from [Silicon Labs](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers). - If not download the drivers from [Silicon Labs](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers).
* Check that your computer has Python 3 installed. - Check that your computer has Python 3 installed.
* Use the command - Use the command
```bash ```bash
python3 -V python3 -V
``` ```
* If this does not return a version, install [python](https://www.python.org) - If this does not return a version, install [python](https://www.python.org)
* The following uses Homebrew to install `python3` which includes `pip3`. - The following uses Homebrew to install `python3` which includes `pip3`.
* Check if you have Homebrew installed with the following command - Check if you have Homebrew installed with the following command
```bash ```bash
brew -v brew -v
``` ```
If it's not installed, follow the instructions on the [Homebrew website](https://brew.sh) before continuing. If it's not installed, follow the instructions on the [Homebrew website](https://brew.sh) before continuing.
* Install Python3 - Install Python3
```bash ```bash
brew install python3 brew install python3
``` ```
* Pip is typically installed if you are using python 3 version >= 3.4 - Pip is typically installed if you are using python 3 version >= 3.4
* Check that pip is installed using this command
```bash
pip3 -V
```
* If this does not return a version, install [pip](https://pip.pypa.io/en/stable/installing/)
* Install pytap2 - Check that pip is installed using this command
```bash ```bash
sudo pip3 install --upgrade pytap2 pip3 -V
```
* Install meshtastic:
```bash
sudo pip3 install --upgrade meshtastic
``` ```
- If this does not return a version, install [pip](https://pip.pypa.io/en/stable/installing)
- Install pytap2
```bash
sudo pip3 install --upgrade pytap2
```
- Install meshtastic:
```bash
sudo pip3 install --upgrade meshtastic
```
</TabItem> </TabItem>
<TabItem value="windows"> <TabItem value="windows">
* Check that your computer has the required serial drivers installed - Check that your computer has the required serial drivers installed
* Connect your Meshtastic device to your USB port - Connect your Meshtastic device to your USB port
* Open Device Manager - Open Device Manager
* Under `Ports (COM & LPT)` you should see something like `Silicon Labs CP210X USB to UART Bridge (COM5)` - Under `Ports (COM & LPT)` you should see something like `Silicon Labs CP210X USB to UART Bridge (COM5)`
* If not download the drivers from [Silicon Labs](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers) or use the direct link below. - If not download the drivers from [Silicon Labs](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers) or use the direct link below.
:::warning :::warning
You must install the [CP210x Universal Windows Driver](https://www.silabs.com/documents/public/software/CP210x_Universal_Windows_Driver.zip). If you do not install this driver, your device may not work and the driver may need to be uninstalled from device manager before installing the correct driver. You must install the [CP210x Universal Windows Driver](https://www.silabs.com/documents/public/software/CP210x_Universal_Windows_Driver.zip). If you do not install this driver, your device may not work and the driver may need to be uninstalled from device manager before installing the correct driver.
::: :::
* Check that your computer has Python 3 installed. - Check that your computer has Python 3 installed.
* Use the command - Use the command
```powershell
py -V
```
* If this does not return a version, install [python](https://www.python.org)
* Pip is typically installed if you are using python 3 version >= 3.4
* Check that pip is installed using this command
```powershell
pip3 -V
```
* If this does not return a version, install [pip](https://pip.pypa.io/en/stable/installing/)
* Install pytap2
```powershell ```powershell
pip3 install --upgrade pytap2 py -V
``` ```
* Install meshtastic: - If this does not return a version, install [python](https://www.python.org)
- Pip is typically installed if you are using python 3 version >= 3.4
- Check that pip is installed using this command
```powershell ```powershell
pip3 install --upgrade meshtastic pip3 -V
``` ```
- If this does not return a version, install [pip](https://pip.pypa.io/en/stable/installing)
- Install pytap2
```powershell
pip3 install --upgrade pytap2
```
- Install meshtastic:
```powershell
pip3 install --upgrade meshtastic
```
</TabItem> </TabItem>
<TabItem value="termux"> <TabItem value="termux">
:::note :::note
Wifi connection is currently under development and may not be working properly just yet. If you would like to provide feedback or test this feature, please visit our [forum](https://meshtastic.discourse.group/) or join our [Discord server](https://discord.gg/RjQKWHmzPZ) for more information. Wifi connection is currently under development and may not be working properly just yet. If you would like to provide feedback or test this feature, please visit our [forum](https://meshtastic.discourse.group) or join our [Discord server](https://discord.gg/RjQKWHmzPZ) for more information.
::: :::
* Install [Termux](https://f-droid.org/en/packages/com.termux/) from the F-Droid app store (Google play does not currently support the latest builds) - Install [Termux](https://f-droid.org/en/packages/com.termux) from the F-Droid app store (Google play does not currently support the latest builds)
* Load Termux and update the package list - Load Termux and update the package list
``` ```
pkg update pkg update
``` ```
* Upgrade the installed packages - Upgrade the installed packages
``` ```
pkg upgrade pkg upgrade
``` ```
* Install python - Install python
``` ```
pkg install python pkg install python
``` ```
* Upgrade pip and installed meshtastic and some of its dependencies - Upgrade pip and installed meshtastic and some of its dependencies
``` ```
pip install --upgrade pip pygatt pytap2 wheel mesthtastic pip install --upgrade pip pygatt pytap2 wheel mesthtastic
``` ```
:::note :::note
Be aware that the Meshtastic CLI is not able to control the nodes over USB through termux, but you can control devices over Wifi using the `--host x.x.x.x` option with the device IP address. However, only ESP32 devices can use Wifi currently. Be aware that the Meshtastic CLI is not able to control the nodes over USB through termux, but you can control devices over Wifi using the `--host x.x.x.x` option with the device IP address. However, only ESP32 devices can use Wifi currently.

View file

@ -7,7 +7,7 @@ sidebar_label: Uses
This section covers using the "meshtastic" command line executable, which displays packets sent over the network as JSON and lets you see serial debugging information from the Meshtastic devices. This section covers using the "meshtastic" command line executable, which displays packets sent over the network as JSON and lets you see serial debugging information from the Meshtastic devices.
:::note :::note
The `meshtastic` command is not run within python but is a script run from your operating system shell prompt. When you type "meshtastic" and the prompt is unable to find the command in Windows, check that the python "scripts" directory [is in your path](https://datatofish.com/add-python-to-windows-path/). The `meshtastic` command is not run within python but is a script run from your operating system shell prompt. When you type "meshtastic" and the prompt is unable to find the command in Windows, check that the python "scripts" directory [is in your path](https://datatofish.com/add-python-to-windows-path).
::: :::
## Getting a list of User Preferences ## Getting a list of User Preferences

View file

@ -6,7 +6,7 @@ sidebar_label: Overview
<!--- FIXME add self hosting details link ---> <!--- FIXME add self hosting details link --->
Meshtastic Web is a [Progressive Web App](https://web.dev/progressive-web-apps/) that runs directly in your browser. Meshtastic Web is a [Progressive Web App](https://web.dev/progressive-web-apps) that runs directly in your browser.
There are three ways of accessing the app: There are three ways of accessing the app:
1. Served directly from an ESP32 based node via [meshtastic.local](http://meshtastic.local) or the device's IP Address. 1. Served directly from an ESP32 based node via [meshtastic.local](http://meshtastic.local) or the device's IP Address.
@ -15,7 +15,7 @@ There are three ways of accessing the app:
## Compatibility ## Compatibility
The application will work in all major browsers, but specific functionality is limited in some cases, for the best experience we reccomend using [Google Chrome](https://www.google.com/chrome/) The application will work in all major browsers, but specific functionality is limited in some cases, for the best experience we reccomend using [Google Chrome](https://www.google.com/chrome)
### HTTP ### HTTP
@ -34,15 +34,13 @@ You have two primary options for accessing your device over HTTP, those being [C
### Bluetooth ### Bluetooth
Bluetooth support is governed by the availability of the [Web Bluetooth API](https://web.dev/bluetooth/) as illustrated blow, support is primarily available in Chromium browsers Bluetooth support is governed by the availability of the [Web Bluetooth API](https://web.dev/bluetooth) as illustrated blow, support is primarily available in Chromium browsers
![Web Bluetooth compatability matrix](https://caniuse.bitsofco.de/image/web-bluetooth.png) ![Web Bluetooth compatability matrix](https://caniuse.bitsofco.de/image/web-bluetooth.png)
### Serial (USB) ### Serial (USB)
The method with the least platform support, uses the [Web Serial API](https://web.dev/serial/) allows us to connect directly to a Meshtastic node over USB, accessing it directly within your browser. The method with the least platform support, uses the [Web Serial API](https://web.dev/serial) allows us to connect directly to a Meshtastic node over USB, accessing it directly within your browser.
![Web Serial compatability matrix](https://caniuse.bitsofco.de/image/web-serial.png) ![Web Serial compatability matrix](https://caniuse.bitsofco.de/image/web-serial.png)
@ -50,8 +48,6 @@ The method with the least platform support, uses the [Web Serial API](https://we
The web interface is now included in firmware releases. There is active development ongoing to fix some issues with updating the web interface from the web interface directly. Please be patient with us as we work on this. Use [Meshtastic-flasher](/docs/getting-started/meshtastic-flasher) to update your device to the current stable build which includes the web interface. The web interface is now included in firmware releases. There is active development ongoing to fix some issues with updating the web interface from the web interface directly. Please be patient with us as we work on this. Use [Meshtastic-flasher](/docs/getting-started/meshtastic-flasher) to update your device to the current stable build which includes the web interface.
:::warning :::warning
Old documentation below. Old documentation below.

View file

@ -3,6 +3,7 @@ id: web-partitions-software
title: Managing ESP32 partitions title: Managing ESP32 partitions
sidebar_label: ESP32 partitions sidebar_label: ESP32 partitions
--- ---
:::caution :::caution
It has been reported that some of this information is out of date. Flashing the device with [Meshtastic-flasher](/docs/getting-started/meshtastic-flasher) should fix these partition issues and update you to the current web interface. It has been reported that some of this information is out of date. Flashing the device with [Meshtastic-flasher](/docs/getting-started/meshtastic-flasher) should fix these partition issues and update you to the current web interface.
@ -28,15 +29,19 @@ The most reliable way to fix this problem is to use the install script that is i
https://meshtastic.discourse.group/t/solved-help-installing-with-other-than-esphome-flasher/2214/9 https://meshtastic.discourse.group/t/solved-help-installing-with-other-than-esphome-flasher/2214/9
### Using Pio in Windows ### Using Pio in Windows
```powershell ```powershell
pio run --target erase --environment tbeam pio run --target erase --environment tbeam
``` ```
Then re-install the firmware ie using ESPHome Flasher. Then re-install the firmware ie using ESPHome Flasher.
Requires: [Python](https://www.python.org/), [Pio](https://pypi.org/project/pio/), command to be run in the root directory of the meshtastic-device project once youve cloned it (this last requirement is an assumption based on pio not knowing what a tbeam is, may also require Visual Studio Code and PlatformIO as these were installed during use). Requires: [Python](https://www.python.org), [Pio](https://pypi.org/project/pio), command to be run in the root directory of the meshtastic-device project once youve cloned it (this last requirement is an assumption based on pio not knowing what a tbeam is, may also require Visual Studio Code and PlatformIO as these were installed during use).
### Esptool.py ### Esptool.py
@1984 posted another method using the python based esptool.py to erase and re-flash the firmware: @1984 posted another method using the python based esptool.py to erase and re-flash the firmware:
```bash ```bash
esptool.py --baud 921600 erase_flash esptool.py --baud 921600 erase_flash
esptool.py --baud 921600 write_flash 0x1000 system-info.bin esptool.py --baud 921600 write_flash 0x1000 system-info.bin
@ -44,16 +49,17 @@ esptool.py --baud 921600 write_flash 0x00390000 spiffs-*.bin
esptool.py --baud 921600 write_flash 0x10000 firmware-tbeam-EU865-1.1.42.bin esptool.py --baud 921600 write_flash 0x10000 firmware-tbeam-EU865-1.1.42.bin
``` ```
Requires: [Python](https://www.python.org/) and [esptool.py](https://github.com/espressif/esptool) Requires: [Python](https://www.python.org) and [esptool.py](https://github.com/espressif/esptool)
### Visual Studio & PlatformIO ### Visual Studio & PlatformIO
There is also the method of using the Visual Studio IDE. This requires having Visual Studio and PlatformIO installed, along with having cloned the meshtastic-device code as per the [build instructions](/docs/software/other/build-instructions). After loading the project in Visual Studio, select the PlatformIO alien icon, then find the appropriate device, and then click the Erase Flash command. There is also the method of using the Visual Studio IDE. This requires having Visual Studio and PlatformIO installed, along with having cloned the meshtastic-device code as per the [build instructions](/docs/software/other/build-instructions). After loading the project in Visual Studio, select the PlatformIO alien icon, then find the appropriate device, and then click the Erase Flash command.
![Erasing the flash using PlatformIO in Visual Studio Code](/img/platformio-erase.png) ![Erasing the flash using PlatformIO in Visual Studio Code](/img/platformio-erase.png)
https://meshtastic.discourse.group/t/configuring-channel-via-python-api/1948/17 https://meshtastic.discourse.group/t/configuring-channel-via-python-api/1948/17
Requires: [Visual Studio Code](https://code.visualstudio.com/), [PlatformIO](https://platformio.org/), cloned copy of the Meshtastic-device project Requires: [Visual Studio Code](https://code.visualstudio.com), [PlatformIO](https://platformio.org), cloned copy of the Meshtastic-device project
## How do I know it's worked? ## How do I know it's worked?

View file

@ -3,7 +3,7 @@ module.exports = {
"About Meshtastic": [ "About Meshtastic": [
"about/overview", "about/overview",
{ {
"Concepts": [ Concepts: [
"about/concepts/overview", "about/concepts/overview",
"about/concepts/channels", "about/concepts/channels",
"about/concepts/clients", "about/concepts/clients",
@ -14,13 +14,13 @@ module.exports = {
}, },
"about/expectations", "about/expectations",
{ {
"FAQs": [ FAQs: [
"faq/faq", "faq/faq",
"faq/antenna", "faq/antenna",
"faq/bluetooth", "faq/bluetooth",
"faq/channel", "faq/channel",
{ {
"Clients": [ Clients: [
"faq/client-android", "faq/client-android",
"faq/client-python-cli", "faq/client-python-cli",
"faq/client-ios", "faq/client-ios",
@ -30,10 +30,10 @@ module.exports = {
"faq/device", "faq/device",
"faq/mesh", "faq/mesh",
"faq/mqtt", "faq/mqtt",
"faq/plugins", "faq/modules",
"faq/wifi", "faq/wifi",
], ],
} },
], ],
}, },
Software: { Software: {
@ -88,14 +88,14 @@ module.exports = {
], ],
}, },
{ {
Plugins: [ Modules: [
"software/plugins/plugins", "software/modules/modules",
"software/plugins/range-test-plugin", "software/modules/range-test-module",
"software/plugins/ext-notif-plugin", "software/modules/ext-notif-module",
"software/plugins/canned-message-plugin", "software/modules/canned-message-module",
"software/plugins/serial-plugin", "software/modules/serial-module",
"software/plugins/store-forward-plugin", "software/modules/store-forward-module",
"software/plugins/environment-plugin", "software/modules/environment-module",
], ],
}, },
{ {
@ -130,12 +130,12 @@ module.exports = {
}, },
], ],
"Additional Documentation": [ "Additional Documentation": [
{type: "ref", id: "getting-started/overview"}, { type: "ref", id: "getting-started/overview" },
{type: "ref", id: "settings/overview"}, { type: "ref", id: "settings/overview" },
{type: "ref", id: "hardware/overview"}, { type: "ref", id: "hardware/overview" },
{type: "ref", id: "developers/overview"}, { type: "ref", id: "developers/overview" },
{type: "ref", id: "developers/maintaining-documentation/overview"}, { type: "ref", id: "developers/maintaining-documentation/overview" },
{type: "ref", id: "legal/overview"}, { type: "ref", id: "legal/overview" },
], ],
}, },
Configuration: { Configuration: {
@ -154,9 +154,7 @@ module.exports = {
], ],
}, },
{ {
"Connect to Device": [ "Connect to Device": ["getting-started/clients"],
"getting-started/clients",
],
}, },
"getting-started/first-steps", "getting-started/first-steps",
], ],
@ -171,27 +169,24 @@ module.exports = {
"settings/router", "settings/router",
"settings/wifi", "settings/wifi",
{ {
Plugins: [ Modules: [
"settings/canned-message-plugin", "settings/canned-message-module",
"settings/environmental-measurement-plugin", "settings/environmental-measurement-module",
"settings/external-notification-plugin", "settings/external-notification-module",
"settings/range-test-plugin", "settings/range-test-module",
"settings/rotary-encoder-plugin", "settings/rotary-encoder-module",
"settings/serial-plugin", "settings/serial-module",
"settings/store-and-forward-plugin", "settings/store-and-forward-module",
],
Advanced: [
"settings/channel-advanced",
"settings/misc",
], ],
Advanced: ["settings/channel-advanced", "settings/misc"],
}, },
], ],
"Additional Documentation": [ "Additional Documentation": [
{type: "ref", id: "hardware/overview"}, { type: "ref", id: "hardware/overview" },
{type: "ref", id: "software/overview"}, { type: "ref", id: "software/overview" },
{type: "ref", id: "developers/overview"}, { type: "ref", id: "developers/overview" },
{type: "ref", id: "developers/maintaining-documentation/overview"}, { type: "ref", id: "developers/maintaining-documentation/overview" },
{type: "ref", id: "legal/overview"}, { type: "ref", id: "legal/overview" },
], ],
}, },
Hardware: { Hardware: {
@ -220,12 +215,12 @@ module.exports = {
}, },
], ],
"Additional Documentation": [ "Additional Documentation": [
{type: "ref", id: "getting-started/overview"}, { type: "ref", id: "getting-started/overview" },
{type: "ref", id: "settings/overview"}, { type: "ref", id: "settings/overview" },
{type: "ref", id: "software/overview"}, { type: "ref", id: "software/overview" },
{type: "ref", id: "developers/overview"}, { type: "ref", id: "developers/overview" },
{type: "ref", id: "developers/maintaining-documentation/overview"}, { type: "ref", id: "developers/maintaining-documentation/overview" },
{type: "ref", id: "legal/overview"}, { type: "ref", id: "legal/overview" },
], ],
}, },
Contribute: { Contribute: {
@ -244,7 +239,7 @@ module.exports = {
"developers/device/mesh-alg", "developers/device/mesh-alg",
"developers/device/encryption", "developers/device/encryption",
"developers/device/portnum", "developers/device/portnum",
"developers/device/plugin-api", "developers/device/module-api",
"developers/device/http-api", "developers/device/http-api",
"developers/device/documents", "developers/device/documents",
], ],
@ -277,11 +272,11 @@ module.exports = {
}, },
], ],
"Additional Documentation": [ "Additional Documentation": [
{type: "ref", id: "getting-started/overview"}, { type: "ref", id: "getting-started/overview" },
{type: "ref", id: "settings/overview"}, { type: "ref", id: "settings/overview" },
{type: "ref", id: "hardware/overview"}, { type: "ref", id: "hardware/overview" },
{type: "ref", id: "software/overview"}, { type: "ref", id: "software/overview" },
{type: "ref", id: "legal/overview"}, { type: "ref", id: "legal/overview" },
], ],
}, },
Legal: { Legal: {
@ -292,11 +287,11 @@ module.exports = {
"legal/privacy", "legal/privacy",
], ],
"Additional Documentation": [ "Additional Documentation": [
{type: "ref", id: "getting-started/overview"}, { type: "ref", id: "getting-started/overview" },
{type: "ref", id: "settings/overview"}, { type: "ref", id: "settings/overview" },
{type: "ref", id: "hardware/overview"}, { type: "ref", id: "hardware/overview" },
{type: "ref", id: "software/overview"}, { type: "ref", id: "software/overview" },
{type: "ref", id: "developers/overview"}, { type: "ref", id: "developers/overview" },
], ],
}, },
}; };

View file

@ -7,12 +7,12 @@ import Layout from '@theme/Layout';
import { Release } from '../../utils/github'; import { Release } from '../../utils/github';
import { fetcher } from '../../utils/swr'; import { fetcher } from '../../utils/swr';
import { DownloadCard } from './_components/DownloadCard';
import { import {
FirmwareCard, FirmwareCard,
PlaceholderFirmwareCard, PlaceholderFirmwareCard,
} from './_components/FirmwareCard'; } from './_components/FirmwareCard';
import { HeaderText } from './_components/HeaderText' import { HeaderText } from './_components/HeaderText';
import { DownloadCard } from './_components/DownloadCard'
const Firmware = (): JSX.Element => { const Firmware = (): JSX.Element => {
const { data, error } = useSWR<Release[]>( const { data, error } = useSWR<Release[]>(
@ -30,10 +30,7 @@ const Firmware = (): JSX.Element => {
> >
<main className="margin-vert--xl"> <main className="margin-vert--xl">
<div className="container"> <div className="container">
<HeaderText <HeaderText type="h1" text="Downloads" />
type="h1"
text="Downloads"
/>
</div> </div>
<div className="container"> <div className="container">
<HeaderText <HeaderText
@ -46,7 +43,13 @@ const Firmware = (): JSX.Element => {
buttonText="Download Meshtastic Flasher" buttonText="Download Meshtastic Flasher"
url="https://github.com/meshtastic/Meshtastic-gui-installer/releases/latest" url="https://github.com/meshtastic/Meshtastic-gui-installer/releases/latest"
notes={[ notes={[
"To download using ", <code>pip</code>, " follow ",<a href="https://meshtastic.org/docs/getting-started/meshtastic-flasher#install-using-pip">these instructions</a>,"." "To download using ",
<code>pip</code>,
" follow ",
<a href="/docs/getting-started/meshtastic-flasher#install-using-pip">
these instructions
</a>,
".",
]} ]}
/> />
</div> </div>
@ -69,7 +72,17 @@ const Firmware = (): JSX.Element => {
client="Android" client="Android"
imgUrl="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" imgUrl="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png"
url="https://play.google.com/store/apps/details?id=com.geeksville.mesh&referrer=utm_source=downloads-page" url="https://play.google.com/store/apps/details?id=com.geeksville.mesh&referrer=utm_source=downloads-page"
notes={["To sideload, ",<a href="https://github.com/meshtastic/Meshtastic-Android/releases/latest" rel="noreferrer" target="_blank">download the latest .apk</a>," from Github", ]} notes={[
"To sideload, ",
<a
href="https://github.com/meshtastic/Meshtastic-Android/releases/latest"
rel="noreferrer"
target="_blank"
>
download the latest .apk
</a>,
" from Github",
]}
/> />
<DownloadCard <DownloadCard
client="iOS" client="iOS"
@ -134,10 +147,36 @@ const Firmware = (): JSX.Element => {
</> </>
)} )}
</ul> </ul>
Once downloaded, follow the flashing instructions for <a href="https://meshtastic.org/docs/getting-started/flashing-esp32" rel="noreferrer" target="_blank">ESP32 chipsets</a>, <a href="https://meshtastic.org/docs/getting-started/flashing-nrf52" rel="noreferrer" target="_blank">NRF52 chipsets</a>, or the <a href="https://meshtastic.org/docs/getting-started/meshtastic-flasher" rel="noreferrer" target="_blank">GUI instructions for Meshtastic Flasher</a>. Once downloaded, follow the flashing instructions for{" "}
<a
href="/docs/getting-started/flashing-esp32"
rel="noreferrer"
target="_blank"
>
ESP32 chipsets
</a>
,{" "}
<a
href="/docs/getting-started/flashing-nrf52"
rel="noreferrer"
target="_blank"
>
NRF52 chipsets
</a>
, or the{" "}
<a
href="/docs/getting-started/meshtastic-flasher"
rel="noreferrer"
target="_blank"
>
GUI instructions for Meshtastic Flasher
</a>
.
</div> </div>
<div className="container"> <div className="container">
<i>Google Play and the Google Play logo are trademarks of Google LLC.</i> <i>
Google Play and the Google Play logo are trademarks of Google LLC.
</i>
</div> </div>
</main> </main>
</Layout> </Layout>

View file

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB