move videos to react player

mesh-alg video

canned messaged video

external notifications video

serial video

telemetry videos

traceroute videos
This commit is contained in:
rcarteraz 2024-11-20 13:36:36 -07:00
parent 52497c3a8f
commit 5a46cf0a7b
7 changed files with 130 additions and 81 deletions

View file

@ -7,11 +7,20 @@ sidebar_position: 2
description: "Discover the Meshtastic Mesh Broadcast Algorithm: a simple, yet effective routing protocol designed for off-grid communication using LoRa technology."
---
import ReactPlayer from "react-player";
## Current Algorithm
The routing protocol for Meshtastic is really quite simple (and sub-optimal). If you want to test its theoretical performance, you can have a look at the [simulator](https://github.com/GUVWAF/Meshtasticator). The protocol 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.
<object data="https://www.youtube.com/embed/7v6UbC5blJU?autohide=1&autoplay=0" width="100%" height="400"></object>
<div style={{ maxWidth: "800px", margin: "auto" }}>
<ReactPlayer
url="https://youtu.be/7v6UbC5blJU"
controls
width="100%"
height="400px"
/>
</div>
### A Note About Protocol Buffers
@ -30,24 +39,24 @@ After the preamble comes the LoRa Physical Header, which contains information ab
This layer is conventional non-reliable LoRa packet transmission. A packet generated by a Meshtastic device has the following representation before encoding for transmission:
| Offset | Length | Type | Usage |
| :----: | :--------------------------------------: | :-----: | :--------------------------------------------------------------------------------------- |
| Offset | Length | Type | Usage |
| :----: | :--------------------------------------: | :-----: | :------------------------------------------------------------------------------------------------------ |
| 0x00 | 4 bytes | Integer | Packet Header: Destination. The destination's unique NodeID. `0xFFFFFFFF` for broadcast. Little Endian. |
| 0x04 | 4 bytes | Integer | Packet Header: Sender. The sender's unique NodeID. Little Endian. |
| 0x08 | 4 bytes | Integer | Packet Header: The sending node's unique packet ID for this packet. Little Endian. |
| 0x0C | 1 byte | Bits | Packet Header: Flags. See the [header flags](#packet-header-flags) for usage. |
| 0x0D | 1 byte | Bits | Packet Header: Channel hash. Used as hint for decryption for the receiver. |
| 0x0E | 2 bytes | Bytes | Packet Header: Reserved for future use. |
| 0x10 | Max. 237 bytes (excl. protobuf overhead) | Bytes | Actual packet data. Unused bytes are not transmitted. |
| 0x04 | 4 bytes | Integer | Packet Header: Sender. The sender's unique NodeID. Little Endian. |
| 0x08 | 4 bytes | Integer | Packet Header: The sending node's unique packet ID for this packet. Little Endian. |
| 0x0C | 1 byte | Bits | Packet Header: Flags. See the [header flags](#packet-header-flags) for usage. |
| 0x0D | 1 byte | Bits | Packet Header: Channel hash. Used as hint for decryption for the receiver. |
| 0x0E | 2 bytes | Bytes | Packet Header: Reserved for future use. |
| 0x10 | Max. 237 bytes (excl. protobuf overhead) | Bytes | Actual packet data. Unused bytes are not transmitted. |
#### Packet Header Flags
| Index | # of Bits | Usage |
| :----: | :-------: | :----------------------------- |
| 0 | 3 | HopLimit (see note in Layer 3) |
| 3 | 1 | WantAck |
| 4 | 1 | ViaMQTT (packet came via MQTT) |
| 5 | 3 | HopStart (original HopLimit) |
| Index | # of Bits | Usage |
| :---: | :-------: | :----------------------------- |
| 0 | 3 | HopLimit (see note in Layer 3) |
| 3 | 1 | WantAck |
| 4 | 1 | ViaMQTT (packet came via MQTT) |
| 5 | 3 | HopStart (original HopLimit) |
#### Usage Details
@ -101,7 +110,7 @@ Without additional modules configured, nodes will produce three different types
- Default: 30 minutes
2. Position
- Controlled by `position.position_broadcast_secs`
- Default: 15 minutes* (with [smart broadcast](/docs/configuration/radio/position/#smart-broadcast) enabled)
- Default: 15 minutes\* (with [smart broadcast](/docs/configuration/radio/position/#smart-broadcast) enabled)
3. NodeInfo user
- Controlled by `device.node_info_broadcast_secs`
- Default: 3 hours

View file

@ -7,12 +7,20 @@ description: Configuration details for canned (predefined) messages on your Mesh
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import ReactPlayer from "react-player";
The Canned Message 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.
The canned message module config options are: Enabled, Send Bell, Messages, Input Source, Rotary Encoder Enabled, Up Down Encoder Enabled, Input Broker Pin A, Input Broker Pin B, Input Broker Pin Press, Input Broker Event Clockwise, Input Broker Event Counter Clockwise, and Input Broker Event Press. Canned Message config uses an admin message sending a `ConfigModule.CannedMessage` protobuf.
<object data="https://www.youtube.com/embed/qKQVYUbLLkg?autohide=1&autoplay=0" width="100%" height="400"></object>
<div style={{ maxWidth: "800px", margin: "auto" }}>
<ReactPlayer
url="https://youtu.be/qKQVYUbLLkg"
controls
width="100%"
height="400px"
/>
</div>
## Canned Message Module Config Values
@ -34,13 +42,13 @@ The list of pre-set messages as configured by the user. Messages should be separ
### Input Source
Input event sources accepted by the canned message module.
| Value | Description |
| :-------------: | :------------------------------------------------------------------: |
| `_any` | Default. Allows any peripheral input device connected to the device. |
| `rotEnc1` | Basic Rotary Encoder |
| `upDownEnc1` | Up Down Encoder (use this also for RAK14006 Rotary Encoder) |
| `scanAndSelect` | Single push-button (short and long press) |
| `scanAndSelect` | Single push-button (short and long press) |
| `cardkb` | M5 Stack CardKB (this covers RAK14004 Keymatrix) |
| `serialkb` | Chatter serial keypad |
@ -122,18 +130,18 @@ All canned message module config options are available in the python CLI.
Example commands are below:
| Setting | Acceptable Values | Default |
| :------------------------------------: | :---------------------------------------: | :-----------: |
| canned_message.enabled | `true`, `false` | `false` |
| canned_message.send_bell | `true`, `false` | `false` |
| canned_message.allow_input_source | `rotEnc1`, `_any`, `upDownEnc1`, `cardkb` | `_any` |
| --set-canned-message | `string` | `""` (separate using pipes) |
| canned_message.inputbroker_event_cw | `InputEventChar` | (not defined) |
| canned_message.inputbroker_event_ccw | `InputEventChar` | (not defined) |
| canned_message.inputbroker_event_press | `InputEventChar` | (not defined) |
| canned_message.inputbroker_pin_a | `integer` | (not defined) |
| canned_message.inputbroker_pin_b | `integer` | (not defined) |
| canned_message.inputbroker_pin_press | `integer` | (not defined) |
| Setting | Acceptable Values | Default |
| :------------------------------------: | :---------------------------------------: | :-------------------------: |
| canned_message.enabled | `true`, `false` | `false` |
| canned_message.send_bell | `true`, `false` | `false` |
| canned_message.allow_input_source | `rotEnc1`, `_any`, `upDownEnc1`, `cardkb` | `_any` |
| --set-canned-message | `string` | `""` (separate using pipes) |
| canned_message.inputbroker_event_cw | `InputEventChar` | (not defined) |
| canned_message.inputbroker_event_ccw | `InputEventChar` | (not defined) |
| canned_message.inputbroker_event_press | `InputEventChar` | (not defined) |
| canned_message.inputbroker_pin_a | `integer` | (not defined) |
| canned_message.inputbroker_pin_b | `integer` | (not defined) |
| canned_message.inputbroker_pin_press | `integer` | (not defined) |
:::tip
@ -242,15 +250,17 @@ Just use UP/DOWN/ENTER to select a predefined message and send it.
Use a single push-button to select and send predefined messages.
#### Setup
* Connect a normally-open push-button between ground and a GPIO pin of your choice
* Configure the canned messages module
- Set [Input Source](#input-source) to `scanAndSelect`
- Set [Input Broker Pin Press](#input-broker-pin-press) to your chosen GPIO
- Define a [list of pre-set messages](#messages)
- Connect a normally-open push-button between ground and a GPIO pin of your choice
- Configure the canned messages module
- Set [Input Source](#input-source) to `scanAndSelect`
- Set [Input Broker Pin Press](#input-broker-pin-press) to your chosen GPIO
- Define a [list of pre-set messages](#messages)
#### Usage
* Short press: scroll through messages
* Long press: send the currently highlighted message to your primary channel
- Short press: scroll through messages
- Long press: send the currently highlighted message to your primary channel
### Rotary encoder

View file

@ -7,12 +7,20 @@ description: This module will allow you to connect a buzzer, speaker, LED, or ot
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import ReactPlayer from "react-player";
The External Notification Module will allow you to connect a buzzer, speaker, LED, or other device to notify you when a message has been received from the mesh network. You can enable up to 3 pins independently from each other.
The External Notification Module config options are: Enabled, Active, Alert Bell (General),Alert Bell Vibra, Alert Bell Buzzer, Alert Message (General), Alert Message Vibra, Alert Message Buzzer, Output (General), Output Vibra, Output Buzzer, Output Milliseconds, Use PWM, and Nag Timeout. External Notification config uses an admin message sending a `ConfigModule.ExternalNotificationConfig` protobuf.
<object data="https://www.youtube.com/embed/MWt3RHMpifo?autohide=1&autoplay=0" width="100%" height="400"></object>
<div style={{ maxWidth: "800px", margin: "auto" }}>
<ReactPlayer
url="https://youtu.be/MWt3RHMpifo"
controls
width="100%"
height="400px"
/>
</div>
## External Notification Module Config Values

View file

@ -7,6 +7,7 @@ description: This module is an interface to talk to and control your Meshtastic
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import ReactPlayer from "react-player";
The serial module config options are: Enabled, Echo, Mode, Receive GPIO, Transmit GPIO, Baud Rate, Timeout, and Override Console Serial Port. Serial Module config uses an admin message sending a `ConfigModule.Serial` protobuf.
@ -14,11 +15,14 @@ This is an interface to talk to and control your Meshtastic device over a serial
![image](/img/modules/Serial/jet.webp)
<object
data="https://www.youtube.com/embed/HdOiGKBtapw?autohide=1&autoplay=0"
width="100%"
height="400"
></object>
<div style={{ maxWidth: "800px", margin: "auto" }}>
<ReactPlayer
url="https://youtu.be/HdOiGKBtapw"
controls
width="100%"
height="400px"
/>
</div>
## Serial Module Config Values

View file

@ -7,37 +7,41 @@ description: This module allows sharing of Device, Environment, Health, and Air
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import ReactPlayer from "react-player";
The Telemetry Module provides four types of data over the mesh: Device metrics (Battery Level, Voltage, Channel Utilization and Airtime) from your Meshtastic device, Environment Metrics, Air Quality Metrics, and Health metrics (Heart rate, Oxygen Saturation and body temperature).
Supported sensors connected to the I2C bus of the device will be automatically detected at startup. The Environment Telemetry, Air Quality, and Health Telemetry modules must be enabled for them to be instrumented and their readings sent over the mesh.
<object
data="https://www.youtube.com/embed/6jj1s-fsPlc?autohide=1&autoplay=0"
width="100%"
height="400"
></object>
<div style={{ maxWidth: "800px", margin: "auto" }}>
<ReactPlayer
url="https://youtu.be/6jj1s-fsPlc"
controls
width="100%"
height="400px"
/>
</div>
### Currently Supported Sensor Types
| Sensor | I<sup>2</sup>C Address | Data Points |
| :-----: | :--------------------: | :-----------------------------------------------------------: |
| BMP085 | 0x76, 0x77 | Temperature and barometric pressure |
| BMP180 | 0x76, 0x77 | Temperature and barometric pressure |
| BMP280 | 0x76, 0x77 | Temperature and barometric pressure |
| BME280 | 0x76, 0x77 | Temperature, barometric pressure and humidity |
| BME68x | 0x76, 0x77 | Temperature, barometric pressure, humidity and air resistance |
| MCP9808 | 0x18 | Temperature |
| INA260 | 0x40, 0x41, 0x43 | Current and Voltage |
| INA219 | 0x40, 0x41, 0x43 | Current and Voltage |
| INA3221 | 0x42 | 3-channel Current and Voltage |
| LPS22 | 0x5D, 0x5C | Barometric pressure |
| SHTC3 | 0x70 | Temperature and humidity |
| SHT31 | 0x44 | Temperature and humidity |
| PMSA003I| 0x12 | Concentration units by size and particle counts by size |
| DFROBOT_LARK | 0x42 | Temperature, barometric pressure, humidity, wind direction, wind speed |
| MAX30102 | 0x57 | Heart Rate, Oxygen Saturation, and body temperature |
| MLX90614 | 0x5A | Body temperature |
| Sensor | I<sup>2</sup>C Address | Data Points |
| :----------: | :--------------------: | :--------------------------------------------------------------------: |
| BMP085 | 0x76, 0x77 | Temperature and barometric pressure |
| BMP180 | 0x76, 0x77 | Temperature and barometric pressure |
| BMP280 | 0x76, 0x77 | Temperature and barometric pressure |
| BME280 | 0x76, 0x77 | Temperature, barometric pressure and humidity |
| BME68x | 0x76, 0x77 | Temperature, barometric pressure, humidity and air resistance |
| MCP9808 | 0x18 | Temperature |
| INA260 | 0x40, 0x41, 0x43 | Current and Voltage |
| INA219 | 0x40, 0x41, 0x43 | Current and Voltage |
| INA3221 | 0x42 | 3-channel Current and Voltage |
| LPS22 | 0x5D, 0x5C | Barometric pressure |
| SHTC3 | 0x70 | Temperature and humidity |
| SHT31 | 0x44 | Temperature and humidity |
| PMSA003I | 0x12 | Concentration units by size and particle counts by size |
| DFROBOT_LARK | 0x42 | Temperature, barometric pressure, humidity, wind direction, wind speed |
| MAX30102 | 0x57 | Heart Rate, Oxygen Saturation, and body temperature |
| MLX90614 | 0x5A | Body temperature |
## Module Config Values
@ -163,10 +167,9 @@ All telemetry module config options are available in the python CLI. Example com
| telemetry.air_quality_interval | `integer` (seconds) | Default `0` is 30 minutes(`1800` seconds). |
| telemetry.power_measurement_enabled | `true`, `false` | `false` |
| telemetry.power_update_interval | `integer` (seconds) | Default `0` is 30 minutes(`1800` seconds). |
| telemetry.health_measurement_enabled | `true`, `false` | `false` |
| telemetry.health_update_interval | `integer` (seconds) | Default `0` is 30 minutes(`1800` seconds). |
| telemetry.health_screen_enabled | `true`, `false` | `false` |
| telemetry.health_measurement_enabled | `true`, `false` | `false` |
| telemetry.health_update_interval | `integer` (seconds) | Default `0` is 30 minutes(`1800` seconds). |
| telemetry.health_screen_enabled | `true`, `false` | `false` |
:::tip

View file

@ -7,8 +7,9 @@ description: The traceroute module allows you to understand the path a message t
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import ReactPlayer from "react-player";
## Overview
## Overview
Due to the limited bandwidth of LoRa, Meshtastic does not keep track of the nodes a message used to hop to the destination. However, from firmware 2.0.8 on, there is a Traceroute Module that can show you this.
@ -18,11 +19,18 @@ In order to use it, make sure your devices use firmware version 2.0.8 or higher.
From firmware version ≥ 2.5, the route back to the origin is recorded, along with the Signal-to-Noise Ratio (SNR) for each link. Nodes with older firmware or those unable to decrypt the traceroute will be shown as "Unknown" (represented by an ID equal to 4294967295 or 0xFFFFFFFF in hexadecimal) if all nodes in the route are using at least firmware version 2.3.12.
<object data="https://www.youtube.com/embed/PKUmaELKaUo?autohide=1&autoplay=0" width="100%" height="400"></object>
<div style={{ maxWidth: "800px", margin: "auto" }}>
<ReactPlayer
url="https://youtu.be/PKUmaELKaUo"
controls
width="100%"
height="400px"
/>
</div>
## Repeater Behavior
Repeater nodes will appear in the traceroute log if they have the encryption key, but if they are not in the node list they might appear as "Unknown" depending on the app.
Repeater nodes will appear in the traceroute log if they have the encryption key, but if they are not in the node list they might appear as "Unknown" depending on the app.
## Traceroute Module Client Availability
@ -38,7 +46,7 @@ values={[
<TabItem value="android">
#### Android
Within the node list, long hold a destination node and select 'Traceroute' to send the request. Depending on the amount of hops that is needed, this might take a while. The result will be shown using a pop-up.
</TabItem>

View file

@ -5,24 +5,33 @@ sidebar_label: CalTopo / SARTopo
sidebar_position: 1
---
import ReactPlayer from "react-player";
## CalTopo / SARTopo
Meshtastic can integrate with [CalTopo](https://caltopo.com/) Desktop edition quite easily through the product's APRS over serial support functionality.
<object data="https://www.youtube.com/embed/z_51FAPPl34
?autohide=1&autoplay=0" width="100%" height="400"></object>
<div style={{ maxWidth: "800px", margin: "auto" }}>
<ReactPlayer
url="https://youtu.be/z_51FAPPl34"
controls
width="100%"
height="400px"
/>
</div>
### Configuring the Meshtastic device
To configure our Meshtastic device for this integration, we have a couple of different options, both of which utilize the [Serial module](/docs/configuration/module/serial):
#### Enabling serial over the device's USB port
```shell title="Serial over USB"
meshtastic --set serial.enabled true --set serial.baud BAUD_9600 --set serial.mode CALTOPO --set serial.override_console_serial_port true
```
#### Enabling serial over an external USB to Serial adapter
```shell title="External serial adapter"
meshtastic --set serial.enabled true --set serial.baud BAUD_9600 --set serial.mode CALTOPO --set serial.txd = 13 --set serial.rxd = 14
```
@ -31,7 +40,6 @@ meshtastic --set serial.enabled true --set serial.baud BAUD_9600 --set serial.mo
Ensure that serial baud rate is set to `9600` on both the Meshtastic device and the CalTopo / SARTopo `topo.properties` configuration
:::
### Setting up CalTopo / SARTopo
To setup CalTopo for Meshtastic integration using the Live Tracking via APRS, refer to the official [documentation](https://training.caltopo.com/all_users/share/live-tracking#aprs).
@ -44,7 +52,7 @@ After starting CalTopo Desktop, NMEA waypoint location sentences should be strea
![CalTopo Logs](/img/software/integrations/caltopo/logs.webp)
In the desktop's web UI for your CalTopo map, scroll down and check the **Shared Locations** checkbox under **Realtime Data**. Your nodes should appear on the map as points if they are connected correctly.
In the desktop's web UI for your CalTopo map, scroll down and check the **Shared Locations** checkbox under **Realtime Data**. Your nodes should appear on the map as points if they are connected correctly.
![shared-locations](/img/software/integrations/caltopo/local-stations.webp)
@ -54,7 +62,6 @@ You can click on one or more of the node points and in the resulting tooltip, cl
In the resulting dialog, you can assign attributes such as a label or color to the live track created by the node.
![track](/img/software/integrations/caltopo/track.webp)
When you view the shared map on another device or mobile, the nodes should appear there as well now, if both the desktop and mobile device have internet connectivity.