mirror of
https://github.com/meshtastic/meshtastic.git
synced 2025-03-05 21:00:08 -08:00
Merge branch 'master' into i18n
This commit is contained in:
commit
21a2a802ec
|
@ -1,6 +1,6 @@
|
|||
# Meshtastic
|
||||
|
||||
[](https://github.com/meshtastic/meshtastic/actions/workflows/ci.yml)
|
||||
[](https://github.com/meshtastic/meshtastic/actions/workflows/ci.yml)
|
||||
[](https://cla-assistant.io/meshtastic/repo)
|
||||
[](https://opencollective.com/meshtastic/)
|
||||
[](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
|
||||
|
|
|
@ -23,12 +23,13 @@ Everyone contributes in a different way. Join the [Meshtastic Discord](https://d
|
|||
|
||||
Minimum requirement is Android 5 (Lollipop 2014, first BLE support), however at least Android 6 (Marshmallow 2015) is recommended as Bluetooth is more stable. While Android 5/6 are officially supported by Meshtastic, it is *not* recommended that you purchase devices with these versions due to their limited OS support and limited battery life due to age. Many newer models exist that are very affordable. A good resource to use when researching affordable devices is the [LineageOS Supported Devices List](https://wiki.lineageos.org/devices/).
|
||||
|
||||
### What is the cloud icon next to the message?
|
||||
### What does the icon next to the message mean?
|
||||
|
||||
- Empty Cloud - Queued on the device to be sent over the mesh.
|
||||
- Up Arrow - Queued on the app to be sent to your device.
|
||||
- Check Mark - At least one other node on the mesh acknowledged the message.
|
||||
- Cross Mark - Not acknowledged or message error.
|
||||
- Cloud with an up arrow - Queued on the app to be sent to your device.
|
||||
- Cloud only - Queued on the device to be sent over the mesh.
|
||||
- Cloud with a check mark - At least one other node on the mesh acknowledged the message.
|
||||
- Person with a check mark - The intended recipient of your direct message acknowledged the message.
|
||||
- Cloud crossed out - Not acknowledged or message error.
|
||||
|
||||
### How can I clear the message history?
|
||||
|
||||
|
@ -56,7 +57,7 @@ Try forgetting the Bluetooth connection from the iOS/iPadOS/macOS System Setting
|
|||
|
||||
### Do the Apple applications provide an indication if the message was acknowledged on the mesh?
|
||||
|
||||
Yes, when the message is sent you will first see a `Waiting to be acknowledged...` status beneath the message. If the message is acknowledged by a node on the mesh this will update to `Acknowledged`, but if no nodes have responded it will indicate `Max Retransmission Reached`. If there is an error, the status will update to the appropriate error. Additionally, you can long press on the message and select `Message Details` to view the date/time sent, if ack was received and the time ack was received or the error (if there was one).
|
||||
Yes, when the message is sent you will first see a `Waiting to be acknowledged...` status beneath the message. If the message is acknowledged by a node on the mesh this will update to `Acknowledged` in orange, which turns into grey when sending a direct message and the intended recipient acknowledged it. If no nodes have responded it will indicate `Max Retransmission Reached`. If there is an error, the status will update to the appropriate error. Additionally, you can long press on the message and select `Message Details` to view the date/time sent, if ack was received and the time ack was received or the error (if there was one).
|
||||
|
||||
<!-- Channels -->
|
||||
|
||||
|
@ -119,6 +120,11 @@ Once the node wakes up from sleep, your phone will relay any delayed messages th
|
|||
- Android instructions see: [Android Usage](/docs/software/android/usage#configuration-options)
|
||||
- Python CLI instructions see: [Python Usage](/docs/software/python/cli/usage#changing-settings)
|
||||
|
||||
### I am in Europe and my device seems to stop transmitting after a while, what is going on?
|
||||
|
||||
Europe has an hourly duty cycle limit of 10% in the frequency band that Meshtastic uses. It might be that you hit this limit if you are sending a lot. You can confirm this by checking whether you see duty cycle limit errors in the serial log, Mesh Log (Apple apps) or Debug Panel (Android).
|
||||
To limit traffic, you can consider setting the device metrics and position update intervals higher. Alternatively, the device can be configured to override the duty cycle limit, but then you will violate the regulations.
|
||||
|
||||
### Why does only one RAK Meshtastic Starter kit show up in my node list?
|
||||
|
||||
There was a bug where Meshtastic Starter kits were sent out with the same MAC address. With a single MAC address the devices all report as being the same device. Without the battery connected, flash the starter kit device(s) to any firmware > 1.2.59 and then do a factory reset, disconnect and reconnect the board and run `meshtastic --info`.
|
||||
|
|
|
@ -13,6 +13,7 @@ Meshtastic® is a project that enables you to use inexpensive LoRa radios as a l
|
|||
|
||||
- Long range ([_166km record by PuzzledPancake_](/docs/overview/range-tests#current-record))
|
||||
- No phone required for mesh communication
|
||||
- Decentralised communication - no dedicated router required
|
||||
- Encrypted communication
|
||||
- Excellent battery life
|
||||
- Send and receive text messages between members of the mesh
|
||||
|
@ -21,11 +22,11 @@ Meshtastic® is a project that enables you to use inexpensive LoRa radios as a l
|
|||
|
||||
## How it works
|
||||
|
||||
The underlying technology, LoRa, is a long range radio protocol available to most regions without requiring certification like HAM operators.
|
||||
The underlying technology, LoRa, is a long range radio protocol available to most regions without requiring additional licensing or certification, like HAM operators.
|
||||
|
||||
The radios automatically rebroadcast messages they receive in order to create a mesh network so that everyone in the group can receive messages - even from the furthest member. Depending on settings used, the Meshtastic mesh can sustain up to 80 device nodes.
|
||||
|
||||
Radios can be paired to a single phone so that your friends and family are able to address a message to your specific radio. Each device supports a connection from a single user at a time.
|
||||
Meshtastic radios can be paired to a single phone so that your friends and family are able to address a message to your specific radio. Each device supports a connection from a single user at a time.
|
||||
|
||||
If you are interested in a more technical overview of how Meshtastic works, visit the overview section below:
|
||||
|
||||
|
|
|
@ -69,6 +69,7 @@ The default messaging provided by Layer 1 is extended by setting the `WantAck` f
|
|||
> packet (because naive flooding algorithm). If it hears that, the odds (given typical LoRa topology) 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 re-transmit, using the regular resend logic.
|
||||
|
||||
If a transmitting node does not receive an ACK (or NAK) packet after a certain expiration time, it will use Layer 1 to attempt a re-transmission 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). The re-transmission expiration time is based on the maximum time it would take to receive an (implicit) ACK, taking the airtime of the sent packet and any processing delay into account.
|
||||
For direct messages, the intended recipient will also send a real ACK all the way back to the original sender, but the device will only retransmit when it received no ACK at all.
|
||||
|
||||
### Layer 3: (Naive) Flooding for Multi-Hop Messaging
|
||||
|
||||
|
|
|
@ -14,4 +14,8 @@
|
|||
| `IN` | India |
|
||||
| `NZ_865` | New Zealand 865MHz |
|
||||
| `TH` | Thailand |
|
||||
| `LORA_24` | 2.4 GHz band worldwide |
|
||||
| `LORA_24` | 2.4 GHz band worldwide |
|
||||
|
||||
:::info
|
||||
EU_433 and EU_868 have to adhere to an hourly duty cycle limitation of 10%. Your device will stop transmitting if you reach it, until it is allowed again.
|
||||
:::
|
|
@ -88,6 +88,16 @@ All Bluetooth module config options are available in the python CLI. Example com
|
|||
| `bluetooth.mode` | `RANDOM_PIN`, `FIXED_PIN`, `NO_PIN` | `RANDOM_PIN` |
|
||||
| `bluetooth.fixedPin` | `integer` (6 digits) | `123456` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set bluetooth.enabled true --set bluetooth.fixed_pin 111111
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Enable/Disable Bluetooth Module"
|
||||
meshtastic --set bluetooth.enabled true
|
||||
meshtastic --set bluetooth.enabled false
|
||||
|
|
|
@ -130,6 +130,16 @@ Channel settings are only available on Apple platforms by scanning QR codes.
|
|||
All Channel config options are available in the python CLI. Example commands are below:
|
||||
:::
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --ch-set name "My Channel" --ch-set psk random --ch-set uplink_enabled true --ch-index 4
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
**Id**
|
||||
|
||||
```shell title="Set the PRIMARY channel ID"
|
||||
|
|
|
@ -28,12 +28,12 @@ Acceptable values:
|
|||
### Serial Console
|
||||
Acceptable values: `true` or `false`
|
||||
|
||||
Disabling this will disable the SerialConsole by not initializing the StreamAPI
|
||||
Disabling this will disable the SerialConsole by not initializing the StreamAPI.
|
||||
|
||||
### Debug Log
|
||||
Acceptable values: `true` or `false`
|
||||
|
||||
By default we turn off logging as soon as an API client connects Set this to true to leave the debug log outputting even when API is active.
|
||||
By default we turn off logging as soon as an API client connects. Set this to true to leave the debug log outputting even when API is active.
|
||||
|
||||
## Device Config Client Availability
|
||||
|
||||
|
@ -44,7 +44,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -68,8 +67,28 @@ All device config options other than NTP Server are available on iOS, iPadOS and
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All device config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
|--------------------------|----------------------------------------------------|----------|
|
||||
| device.debug_log_enabled | `true`, `false` | `false` |
|
||||
| device.role | `CLIENT`, `CLIENT_MUTE`, `ROUTER`, `ROUTER_CLIENT` | `CLIENT` |
|
||||
| device.serial_enabled | `true`, `false` | `true` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set device.role CLIENT --set device.debug_log_enabled true
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Set the role to client"
|
||||
meshtastic --set device.role CLIENT
|
||||
```
|
||||
|
@ -83,14 +102,7 @@ meshtastic --set device.debug_log_enabled true
|
|||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::danger
|
||||
No device config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All device config options are available in the Web UI.
|
||||
|
|
|
@ -61,7 +61,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -85,8 +84,32 @@ All display config options are available on iOS, iPadOS and macOS at Settings >
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All display config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
|-----------------------------------|--------------------------------------------|------------------------------|
|
||||
| display.auto_screen_carousel_secs | `integer` | Default of `0` is 10 minutes |
|
||||
| display.compass_north_top | `false`, `true` | `false` |
|
||||
| display.flip_screen | `fasle`, `true` | `false` |
|
||||
| display.gps_format | `DEC`, `DMS`, `UTM`, `MGRS`, `OLC`, `OSGR` | `DEC` |
|
||||
| display.oled | `OLED_AUTO`, `OLED_SSD1306`, `OLED_SH1106` | `OLED_AUTO` |
|
||||
| display.screen_on_secs | `integer` | Default of `0` is off. |
|
||||
| display.units | `METRIC`, `IMPERIAL` | `METRIC` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set display.screen_on_secs 120 --set display.gps_format UTM
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Set Screen On Duration (Default of 0 is 10 minutes)"
|
||||
meshtastic --set display.screen_on_secs 0
|
||||
meshtastic --set display.screen_on_secs 120
|
||||
|
@ -103,14 +126,7 @@ meshtastic --set display.gps_format UTM
|
|||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
No display config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All display config options are available in the Web UI.
|
||||
|
|
|
@ -67,6 +67,10 @@ This is controlling the actual hardware frequency the radio is transmitting on.
|
|||
|
||||
For testing it is useful sometimes to force a node to never listen to particular other nodes (simulating radio out of range). All nodenums listed in the ignore_incoming array will have packets they send dropped on receive (by router.cpp)
|
||||
|
||||
### Override Duty Cycle Limit
|
||||
|
||||
Setting this option to 'true' means the device will ignore the hourly duty cycle limit in Europe. This means that you might violate regulations if the device transmits too much. By default, this option is set to 'false,' which means the device will stop sending data when it reaches the hourly limit and will start again when it is allowed to do so.
|
||||
|
||||
## LoRa Config Client Availability
|
||||
|
||||
<Tabs
|
||||
|
@ -100,22 +104,61 @@ Configuration of Region, Modem Preset and Hop Limit is available on iOS, iPadOS
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
LoRa config commands are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :----------: | :---------------------------------------------------------------------------: | :---------------: |
|
||||
| lora.modem_preset | `LONG_FAST`, `LONG_SLOW`, `VERY_LONG_SLOW`, `MEDIUM_SLOW`, `MEDIUM_FAST`, `SHORT_SLOW`, `SHORT_FAST` | `LONG_FAST` |
|
||||
| lora.region | `UNSET`, `US`, `EU_433`, `EU_868`, `CN`, `JP`, `ANZ`, `KR`, `TW`, `RU` ,`IN`, `NZ_865`, `TH`, `LORA_24` | `UNSET` |
|
||||
| lora.hop_limit | `1`,`2`,`3`,`4`,`5`,`6`,`7` | `3` |
|
||||
| lora.override_duty_cycle | `false`, `true` | `false` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set lora.region US --set lora.modem_preset LONG_FAST
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Set Modem Preset"
|
||||
meshtastic --set lora.modem_preset LONG_FAST
|
||||
meshtastic --set lora.modem_preset MEDIUM_FAST
|
||||
```
|
||||
|
||||
```shell title="Set Region"
|
||||
meshtastic --set lora.region US
|
||||
meshtastic --set lora.region EU_433
|
||||
```
|
||||
|
||||
```shell title="Set Hop Limit"
|
||||
|
||||
meshtastic --set lora.hop_limit 2
|
||||
```
|
||||
|
||||
```shell title="Override Duty Cycle"
|
||||
meshtastic --set lora.override_duty_cycle true
|
||||
meshtastic --set lora.override_duty_cycle false
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
No LoRa config options are available in the Flasher.
|
||||
|
||||
Only `lora.region` can be set via the GUI flasher. Refer to other clients for any other config.
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All LoRa config options are available in the Web UI.
|
||||
|
|
|
@ -65,12 +65,11 @@ The first time your device restarts after enabling WiFi or Ethernet, it will tak
|
|||
|
||||
<Tabs
|
||||
groupId="settings"
|
||||
defaultValue="flasher"
|
||||
defaultValue="cli"
|
||||
values={[
|
||||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
|
||||
|
@ -98,8 +97,12 @@ Network config is not available on Apple OS's.
|
|||
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All Network config options are available in the python CLI.
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :-----------: | :---------------: | :-----: |
|
||||
| network.ntp_server | string | `0.pool.ntp.org` |
|
||||
|
@ -107,6 +110,16 @@ All Network config options are available in the python CLI.
|
|||
| network.wifi_psk | string | `""` |
|
||||
| network.wifi_ssid | string | `""` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set network.wifi_enabled true --set network.wifi_ssid "my network" --set network.wifi_psk mypassword
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Set NTP Server"
|
||||
meshtastic --set network.ntp_server "0.pool.ntp.org"
|
||||
```
|
||||
|
@ -131,14 +144,6 @@ meshtastic --set network.wifi_psk "my password"
|
|||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
All Network config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
|
|
|
@ -83,7 +83,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -107,8 +106,12 @@ All position config values are available on iOS, iPadOS and macOS at Settings >
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All Position config commands are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :----------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------: |
|
||||
| position.gps_enabled | `true`, `false` | `true` |
|
||||
|
@ -119,6 +122,15 @@ All Position config commands are available in the python CLI. Example commands a
|
|||
| position.position_broadcast_secs | `integer` (seconds) | Default of `0` is 15 Minutes |
|
||||
| position.flags | `UNSET`, `ALTITUDE`, `ALTITUDE_MSL`, `GEOIDAL_SEPARATION`, `DOP`, `HVDOP`, `PDOP`, `SATINVIEW`, `SEQ_NO`, `TIMESTAMP`, `HEADING`, `SPEED` | `UNSET` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one. **This is especially important for position values to ensure they are set at the same time and avoid being overwritten by subsequent commands.**
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set position.fixed_position true --setlat 37.8651 --setlon -119.5383
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Set GPS update interval (Default of 0 is 30 seconds)"
|
||||
meshtastic --set position.gps_update_interval 0
|
||||
|
@ -160,30 +172,19 @@ meshtastic --set position.broadcast_secs 60
|
|||
It may take some time to see that the change has taken effect. The GPS location is updated according to the value specified on `gps_update_interval` and the mesh will be notified of the new position in relation to the `position_broadcast_secs` value.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Include each flag desired separated by a single space.
|
||||
:::
|
||||
|
||||
```shell title="Set / Unset Position Flags"
|
||||
meshtastic --pos-fields ALTITUDE ALTITUDE_MSL
|
||||
meshtastic --pos-fields UNSET
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
No position config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All position config options are available in the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution
|
||||
|
|
|
@ -74,7 +74,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -99,8 +98,12 @@ Power config is not available on Apple OS's.
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All Power config options are available in the python CLI.
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :----------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------: |
|
||||
| power.is_power_saving | `true`, `false` | `false` |
|
||||
|
@ -112,6 +115,15 @@ All Power config options are available in the python CLI.
|
|||
| power.ls_secs | `integer` (seconds) | Default of `0` is 1 hour |
|
||||
| power.min_wake_secs | `integer` (seconds) | Default of `0` is 10 seconds |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set power.is_power_saving true --set power.on_battery_shutdown_after_secs 120
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Enable / Disable Power Saving"
|
||||
meshtastic --set power.is_power_saving true
|
||||
|
@ -150,14 +162,7 @@ meshtastic --set power.min_wake_secs 0
|
|||
meshtastic --set power.min_wake_secs 120
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
Power config is not available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All power config options are available in the Web UI.
|
||||
|
|
|
@ -44,7 +44,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
|
||||
|
@ -71,10 +70,24 @@ User Config options are available for Android.
|
|||
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All User config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
Please see instructions for [Enabling HAM License](/docs/software/python/cli/usage#ham-radio-support)
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set-owner 'your node name' --set-owner-short 'NODE'
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Set the LongName Value"
|
||||
meshtastic --set-owner 'your node name'
|
||||
```
|
||||
|
@ -89,14 +102,6 @@ meshtastic --set-ham 'CALLSIGN'
|
|||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
No User config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
|
|
|
@ -65,7 +65,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -89,8 +88,12 @@ Audio module config is not available on iOS, iPadOS and macOS.
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All audio module config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :-------------------: | :-----------------: | :-----: |
|
||||
| audio.enabled | `true`, `false` | `false` |
|
||||
|
@ -101,6 +104,15 @@ All audio module config options are available in the python CLI. Example command
|
|||
| audio.i2s_din | GPIO Pin Number 1-34 | no Default |
|
||||
| audio.i2s_sck | GPIO Pin Number 1-34 | no Default |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set audio.enabled true --set audio.bitrate CODEC2_1400
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Enable / Disable Module"
|
||||
meshtastic --set audio.enabled true
|
||||
|
@ -125,14 +137,7 @@ meshtastic --set audio.bitrate CODEC2_1400
|
|||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
No audio module config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All audio module config options are available in the Web UI.
|
||||
|
@ -142,7 +147,9 @@ All audio module config options are available in the Web UI.
|
|||
</Tabs>
|
||||
|
||||
:::warning
|
||||
|
||||
GPIO access is fundamentally dangerous because invalid options can physically damage or destroy your hardware. Ensure that you fully understand the schematic for your particular device before trying this as we do not offer a warranty. Use at your own risk.
|
||||
|
||||
This module requires attaching a peripheral accessory to your device. It will not work without one.
|
||||
|
||||
:::
|
||||
|
|
|
@ -81,7 +81,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -106,7 +105,9 @@ All canned message module config options are available on iOS, iPadOS and macOS
|
|||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All canned message module config options are available in the python CLI.
|
||||
|
||||
:::
|
||||
|
||||
Example commands are below:
|
||||
|
@ -125,6 +126,16 @@ Example commands are below:
|
|||
| canned_message.inputbroker_pin_b | `integer` | (not defined) |
|
||||
| canned_message.inputbroker_pin_press | `integer` | (not defined) |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set canned_message.enabled true --set canned_message.send_bell true
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Enable/Disable the Canned Message Module"
|
||||
meshtastic --set canned_message.enabled true
|
||||
meshtastic --set canned_message.enabled false
|
||||
|
@ -178,14 +189,7 @@ meshtastic --set canned_message.inputbroker_event_press KEY_SELECT
|
|||
meshtastic --set canned_message.inputbroker_event_press ""
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
No canned message test module config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All canned message module config options are available in the Web UI.
|
||||
|
|
|
@ -51,7 +51,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -75,8 +74,12 @@ All external notification module config options are available on iOS, iPadOS and
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All external notification module config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :----------------------------: | :----------------------: | :-----: |
|
||||
| external_notification.enabled | `true`, `false` | `false` |
|
||||
|
@ -86,6 +89,16 @@ All external notification module config options are available in the python CLI.
|
|||
| external_notification.output | `integer` | `0` |
|
||||
| external_notification.output_ms | `integer` (milliseconds) | `0` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set external_notification.enabled true --set external_notification.alert_bell true
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Enable/Disable External Notification Module"
|
||||
meshtastic --set external_notification.enabled true
|
||||
meshtastic --set external_notification.enabled false
|
||||
|
@ -115,20 +128,13 @@ meshtastic --set external_notification.output_ms 0
|
|||
meshtastic --set external_notification.output_ms 1500
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
External Notification module config is not available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All External Notification module config is available for the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::warning
|
||||
|
|
|
@ -17,3 +17,4 @@ Modules are included in the firmware and allow users to extend the functionality
|
|||
| [Range Test](/docs/settings/moduleconfig/range-test) | Send messages with GPS location at an interval to test the distance your devices can communicate. Requires (at least) one device set up as a sender and one as a receiver. The receiver(s) will log all incoming messages to a CSV. |
|
||||
| [Serial Module](/docs/settings/moduleconfig/serial) | Send messages across the mesh by sending strings over a serial port. |
|
||||
| [Telemetry](/docs/settings/moduleconfig/telemetry) | Attach sensors to the device and transmit readings on a regular interval to the mesh. |
|
||||
| [Traceroute](/docs/settings/moduleconfig/traceroute) | Track which nodes are used to hop a message to a certain destination. |
|
|
@ -49,7 +49,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -73,8 +72,12 @@ MQTT module config is not available for Apple.
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All MQTT module config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :--------------------------: | :----------------------: | :-----: |
|
||||
| mqtt.enabled | `true`, `false` | `false` |
|
||||
|
@ -84,9 +87,24 @@ All MQTT module config options are available in the python CLI. Example commands
|
|||
| mqtt.encryption_enabled | `string` | |
|
||||
| mqtt.json_enabled | `true`, `false` | `false` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set mqtt.enabled true --set mqtt.json_enabled true
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Enable/Disable MQTT Module"
|
||||
meshtastic --set mqtt.enabled true
|
||||
meshtastic --set mqtt.enabled false
|
||||
```
|
||||
|
||||
```shell title="Enable/Disable MQTT JSON"
|
||||
meshtastic --set mqtt.json_enabled true
|
||||
meshtastic --set mqtt.json_enabled false
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
|
|
@ -37,7 +37,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -61,14 +60,28 @@ All range test module config options are available on iOS, iPadOS and macOS at S
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
Range Test module config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :-----------------------: | :-----------------: | :-----: |
|
||||
| range_test.enabled | `true`, `false` | `false` |
|
||||
| range_test.save | `true`, `false` | `false` |
|
||||
| range_test.sender | `integer` (Seconds) | `0` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set range_test.enabled true --set range_test.save false
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Enable / Disable the range test"
|
||||
meshtastic --set range_test.enabled true
|
||||
meshtastic --set range_test.enabled false
|
||||
|
@ -88,20 +101,15 @@ meshtastic --set range_test.sender 0
|
|||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
No range test module config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
No range test module config options are available in the Web UI.
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Examples
|
||||
|
|
|
@ -33,7 +33,7 @@ Available Values:
|
|||
|
||||
* `DEFAULT`
|
||||
* `SIMPLE` operate as an dumb UART tunnel. What goes in will come out, Requires a channel named 'serial'.
|
||||
* `PROTO` not implemented yet, but will expose the Protobuf Client API on this serial port
|
||||
* `PROTO` Exposes the Protobuf Client API on this serial port. You can use this to connect from another device. [API Reference](/docs/development/device/client-api)
|
||||
* `TEXTMSG` Will send the string received over the serial port as a Text Message for Display on the other devices.
|
||||
* `NMEA` Will output a NMEA 0183 Data stream containing the internal GPS or fixed position and other node locations as Waypoints (WPL).
|
||||
|
||||
|
@ -70,7 +70,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -94,8 +93,12 @@ All serial module config options are available on iOS, iPadOS and macOS at Setti
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All serial module config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :-------------------: | :-----------------: | :-----: |
|
||||
| serial.enabled | `true`, `false` | `false` |
|
||||
|
@ -106,6 +109,15 @@ All serial module config options are available in the python CLI. Example comman
|
|||
| serial.baud | `BAUD_DEFAULT` `BAUD_110` `BAUD_300` `BAUD_600` `BAUD_1200` `BAUD_2400` `BAUD_4800` `BAUD_9600` `BAUD_19200` `BAUD_38400` `BAUD_57600` `BAUD_115200` `BAUD_230400` `BAUD_460800` `BAUD_576000` `BAUD_921600` | `BAUD_DEFAULT` |
|
||||
| serial.timeout | `integer` (seconds) | `0` |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set serial.enabled true --set serial.echo true
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Enable / Disable Module"
|
||||
meshtastic --set serial.enabled true
|
||||
|
@ -140,20 +152,13 @@ meshtastic --set serial.timeout 15
|
|||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
|
||||
:::info
|
||||
No serial module config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All serial module config options are available in the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::warning
|
||||
|
@ -178,3 +183,51 @@ Default is to use RX GPIO 16 and TX GPIO 17.
|
|||
With [tio](https://github.com/tio/tio) – `tio -e -b 38400 -f none /dev/myserialport`
|
||||
7. Send a packet up to 237 bytes in length. This will get relayed over the mesh network.
|
||||
8. (Optional) Set `serial.echo` to `1` and any message you send out will be echoed back to your device.
|
||||
|
||||
### Interfacing PIR Sensor With External Microcontroller
|
||||
The following is an example of using a Raspberry Pi Pico connected to a PIR sensor to detect motion. When motion is detected, a message is sent via. serial to the T-Beam. The T-Beam transmits the message as text over the default channel by utilizing the serial module in TXTMSG mode.
|
||||
|
||||
#### BOM
|
||||
- Raspberry Pi Pico running [CircuitPython](https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython)
|
||||
- T-Beam V1.1 running Meshtastic
|
||||
- PIR Sensor ([Adafruit Breadboard Model](https://www.adafruit.com/product/4871))
|
||||
|
||||
#### Meshtastic Software Configuration:
|
||||
- Serial module enabled, mode: TXTMSG
|
||||
- GPIO Pins (For T-Beam) RX 13, TX 14
|
||||
- 38400 Baud
|
||||
|
||||
#### Wiring:
|
||||
|
||||

|
||||
|
||||
- TX pin 14 on the T-Beam to RX pin 2 on the Pico
|
||||
- RX pin 13 on the T-Beam to TX pin 1 on the Pico
|
||||
- PIR sensor Vcc and GND pins to Vcc/GND on breadboard respectively
|
||||
- PIR sensor trigger line to Pico GPIO28 (Pico pin 34)
|
||||
- GND pin on T-Beam to GND pin 38 on the Pico
|
||||
- GND pin 38 on the Pico to breadboard ground rail
|
||||
- 3V3 pin 36 on the Pico to the breadboard positive voltage rail
|
||||
- Optional, to power the Pico off of the T-Beam instead of USB:
|
||||
- Connect 5V pin on T-Beam to Vbus pin 40 on the Pico
|
||||
|
||||
#### Circuit Python Code
|
||||
```python
|
||||
import time
|
||||
import board
|
||||
import busio
|
||||
import digitalio
|
||||
|
||||
# Setup PIR sensor on GP28
|
||||
pir = digitalio.DigitalInOut(board.GP28)
|
||||
pir.direction = digitalio.Direction.INPUT
|
||||
|
||||
# Setup serial UART connection TX/RX on (GP0/GP1)
|
||||
uart = busio.UART(board.GP0, board.GP1, baudrate=38400, timeout=0)
|
||||
|
||||
while True:
|
||||
if(pir.value == True):
|
||||
uart.write(bytes("Motion Detected", "ascii"))
|
||||
time.sleep(30)
|
||||
time.sleep(0.5)
|
||||
```
|
||||
|
|
|
@ -26,10 +26,11 @@ The telemetry module config options are: Device Metrics Update Interval, Environ
|
|||
| INA219 | 0x40, 0x41 | Current and Voltage |
|
||||
| LPS22 | 0x5D, 0x5c | Barometric pressure |
|
||||
| SHTC3 | 0x70 | Temperature and humidity |
|
||||
| SHT31 | 0x44 | Temperature and humidity |
|
||||
|
||||
## Module Config Values
|
||||
|
||||
## Update Intervals
|
||||
### Update Intervals
|
||||
|
||||
### Device Metrics Update Interval
|
||||
|
||||
|
@ -51,13 +52,13 @@ Enable the Environment Telemetry (Sensors)
|
|||
|
||||
### Show on device screen
|
||||
|
||||
Show the Telemetry Module on-device display.
|
||||
Show the Telemetry Module on the device display.
|
||||
|
||||
### Display Fahrenheit
|
||||
|
||||
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 display in Fahrenheit using this setting.
|
||||
|
||||
Default is off
|
||||
Default is `false`.
|
||||
|
||||
## Device Config Client Availability
|
||||
|
||||
|
@ -68,7 +69,6 @@ values={[
|
|||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Flasher', value: 'flasher'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
@ -93,22 +93,36 @@ All telemetry module config options are available on iOS, iPadOS and macOS at Se
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
:::info
|
||||
|
||||
All telemetry module config options are available in the python CLI. Example commands are below:
|
||||
|
||||
:::
|
||||
|
||||
## Settings
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :-----------------------------------------------------: | :-----------------: | :-----: |
|
||||
| telemetry.device_update_interval | `integer` (seconds) | `0` |
|
||||
| telemetry.device_update_interval | `integer` (seconds) | Default `0` is 15 minutes(`900` seconds). |
|
||||
| telemetry.environment_display_fahrenheit | `true`, `false` | `false` |
|
||||
| telemetry.environment_measurement_enabled | `true`, `false` | `false` |
|
||||
| telemetry.environment_screen_enabled | `true`, `false` | `0` |
|
||||
| telemetry.environment_update_interval | `integer` (seconds) | `0` |
|
||||
| telemetry.environment_update_interval | `integer` (seconds) | Default `0` is 15 minutes(`900` seconds). |
|
||||
|
||||
:::tip
|
||||
|
||||
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
|
||||
|
||||
```shell title="Example:"
|
||||
meshtastic --set telemetry.device_update_interval 0 --set telemetry.environment_update_interval 0
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```shell title="Set module update intervals (Default of 0 is 5 Minutes)"
|
||||
meshtastic --set telemetry.device_update_interval 0
|
||||
// Device Metrics Two Minutes
|
||||
meshtastic --set telemetry.device_update_interval 120
|
||||
meshtastic --set telemetry.device_update_interval 0
|
||||
// Environment Metrics Two Minutes
|
||||
meshtastic --set telemetry.environment_update_interval 120
|
||||
````
|
||||
|
@ -123,26 +137,21 @@ meshtastic --set telemetry.environment_screen_enabled true
|
|||
meshtastic --set telemetry.environment_screen_enabled false
|
||||
```
|
||||
|
||||
```shell title="Enable / Disable Display Farenheit"
|
||||
```shell title="Enable / Disable Display Fahrenheit"
|
||||
meshtastic --set telemetry.environment_display_fahrenheit true
|
||||
meshtastic --set telemetry.environment_display_fahrenheit false
|
||||
````
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="flasher">
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
No telemetry module config options are available in the Flasher.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
:::info
|
||||
All telemetry module config options are available in the Web UI.
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Examples
|
||||
|
@ -163,15 +172,17 @@ Steps:
|
|||
- configure the device:
|
||||
|
||||
```shell
|
||||
meshtastic --set telemetry.measurement_enabled true --set telemetry.screen_enabled true --set telemetry.display_farenheit true
|
||||
meshtastic --set telemetry.environment_measurement_enabled true --set telemetry.environment_screen_enabled true --set telemetry.environment_display_fahrenheit true
|
||||
```
|
||||
|
||||
:::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.
|
||||
|
||||
You can change the values above to suit your needs but it is recommended that commands be chained together as one as shown.
|
||||
|
||||
:::
|
||||
|
||||
- Reboot/reset the device (press the button or unplug/plug in the device)
|
||||
- When the device boots it should say "Telemetry" and it may show the sensor data
|
||||
- Device will reboot after command is sent.
|
||||
- When the device boots again it should say "Telemetry" and it may show the sensor data
|
||||
- If this does not appear to have any effects, run:
|
||||
|
||||
```shell
|
||||
|
@ -196,4 +207,3 @@ The environment metrics in the telemetry module supports a limited amount of fie
|
|||
### Supporting Other Sensor types
|
||||
|
||||
For other interesting sensor types and use cases we need to add a portnum for more generic telemetry packets and a second MCU will be required to interact with the sensor and process the data to be sent over the mesh. This data will not be stored in the nodedb on the device.
|
||||
|
||||
|
|
66
docs/configuration/module-config/traceroute.mdx
Normal file
66
docs/configuration/module-config/traceroute.mdx
Normal file
|
@ -0,0 +1,66 @@
|
|||
---
|
||||
id: traceroute
|
||||
title: Traceroute Module Usage
|
||||
slug: /settings/moduleconfig/traceroute
|
||||
sidebar_label: Traceroute
|
||||
---
|
||||
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
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.
|
||||
|
||||
Only nodes that know the encryption key of the channel you use can be tracked. Also note that a message may arrive via multiple routes due to duplication because of rebroadcasting. This module will only track the hops of the first packet containing the traceroute request that arrived at the destination.
|
||||
|
||||
In order to use it, make sure your devices use firmware version 2.0.8 or higher.
|
||||
|
||||
## Traceroute Module Client Availability
|
||||
|
||||
<Tabs
|
||||
groupId="settings"
|
||||
defaultValue="cli"
|
||||
values={[
|
||||
{label: 'Android', value: 'android'},
|
||||
{label: 'Apple', value: 'apple'},
|
||||
{label: 'CLI', value: 'cli'},
|
||||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
Not yet implemented.
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
Make sure the app is at least version 2.0.9.
|
||||
|
||||
Under Contacts > Direct Messages, long hold a destination node and select 'Trace Route' to send the request. Depending on the amount of hops that is needed, this might take a while. The result will be shown in the Mesh Log.
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
Make sure the CLI is at least version 2.0.6. Then use this command:
|
||||
|
||||
```shell title="CLI traceroute command"
|
||||
meshtastic --traceroute 'destinationId'
|
||||
```
|
||||
|
||||
Where for `destinationId` you have to fill in the ID of the destination you want to track the hops to, which you can get from running `meshtastic --nodes`. Depending on your OS, you might need quotation marks around the ID. Then it will send a specific message to track the hops. For example, this is what you will get:
|
||||
|
||||
```shell title="Traceroute from !25048234 to !bff18ce4"
|
||||
meshtastic --traceroute '!bff18ce4'
|
||||
Connected to radio
|
||||
Sending traceroute request to !bff18ce4 (this could take a while)
|
||||
Route traced:
|
||||
!25048234 --> !ba4bf9d0 --> !bff18ce4
|
||||
```
|
||||
|
||||
The first ID shown is the device you are connected to with the CLI. As you can see, this packet went through one other node to get to its destination.
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
Not yet implemented.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
|
@ -23,8 +23,10 @@ Repobeats images can be generated at [repobeats.axiom.co](https://repobeats.axio
|
|||
# Repo name
|
||||
|
||||
<!--Project specific badges here-->
|
||||
[](https://github.com/meshtastic/repo/actions/workflows/ci.yml)
|
||||
[](https://cla-assistant.io/meshtastic/repo)
|
||||
<!--Crowdin Badge can be generated from https://crowdin.meshtastic.org/u/projects/<project_id>/crowdsource -->
|
||||
[](https://crowdin.meshtastic.org/<project>)
|
||||
[](https://github.com/meshtastic/<repo>/actions/workflows/ci.yml)
|
||||
[](https://cla-assistant.io/meshtastic/<repo>)
|
||||
[](https://opencollective.com/meshtastic/)
|
||||
[](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
|
||||
|
||||
|
@ -41,11 +43,12 @@ A description about the project
|
|||
<!--Repobeats image here-->
|
||||
|
||||
<!--If the repository is a library, include this section-->
|
||||
|
||||
## Installation & Usage
|
||||
|
||||
<!--You may optionally include brief install/update instructions here-->
|
||||
|
||||
<!--Any other pertenant sections-->
|
||||
|
||||
### Compatibility
|
||||
```
|
||||
|
||||
|
|
|
@ -9,14 +9,14 @@ import Tabs from '@theme/Tabs';
|
|||
import TabItem from '@theme/TabItem';
|
||||
|
||||
:::info
|
||||
Before flashing confirm that you have [RAK4631](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/) and not a [RAK4631-R](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631-R/) If this is not the case, fear not. The hardware is identical but requires changing the bootloader. Instructions on how to do this are located [here](/docs/guides/convert-rak4631r).
|
||||
Before flashing confirm that you have [RAK4631](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/) and not a [RAK4631-R](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631-R/) If this is not the case, fear not. The hardware is identical but requires changing the bootloader. Instructions on how to do this are located [here](/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r).
|
||||
:::
|
||||
|
||||
## Upgrading from a previous version of Meshtastic
|
||||
|
||||
If you are upgrading your NRF52 device from a previous version of Meshtastic rather than starting from scratch, you may need to do a full factory reset of the internal flash memory. Stale data saved by previous versions of the Meshtastic firmware can cause devices to get stuck in a crash loop at startup.
|
||||
|
||||
Follow the guide to [factory erase your NRF52](/docs/guides/nrf52-erase) device before continuing to [flash firmware](#flash-firmware).
|
||||
Follow the guide to [factory erase your NRF52](/docs/getting-started/flashing-firmware/nrf52/nrf52-erase) device before continuing to [flash firmware](#flash-firmware).
|
||||
|
||||
|
||||
## Flash Firmware
|
||||
|
|
|
@ -137,7 +137,7 @@ If you do not see your device:
|
|||
## Flash Firmware
|
||||
|
||||
:::info
|
||||
If you have a RAK4631-R (the RUI3 bootloader version of the RAK4631), you must [convert the bootloader](/docs/guides/convert-rak4631r) for use with the Arduino before flashing Meshtastic firmware.
|
||||
If you have a RAK4631-R (the RUI3 bootloader version of the RAK4631), you must [convert the bootloader](/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r) for use with the Arduino before flashing Meshtastic firmware.
|
||||
:::
|
||||
|
||||
<div className="indexCtasBody">
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
label: Guides
|
||||
collapsible: true
|
||||
position: 3
|
||||
link:
|
||||
type: generated-index
|
||||
title: Guides
|
||||
slug: guides
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
id: setup-mqtt
|
||||
title: Configuring MQTT
|
||||
sidebar_label: Setup MQTT
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
import MQTT from '../software/mqtt/index.mdx'
|
||||
|
||||
<MQTT components={props.components} />
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
id: writing-modules
|
||||
title: Creating New Modules
|
||||
sidebar_label: Create a Module
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
import NewModule from '../development/device/module-api.mdx'
|
||||
|
||||
<NewModule components={props.components} />
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
id: remote-nodes
|
||||
title: Remote Node Administration
|
||||
sidebar_label: Administer Remote Nodes
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
import RemoteAdmin from '../configuration/remote-admin.mdx'
|
||||
|
||||
<RemoteAdmin components={props.components} />
|
|
@ -9,7 +9,7 @@ import Tropho from '/img/enclosures/3dp-tropho-lora32.png';
|
|||
|
||||
## Created by tropho/TonyG
|
||||
|
||||
### TTGO LoRa32 v2.1.1.6 Case
|
||||
### TTGO LoRa32 v2.1.1.6 Case (will also fit the SX1280/v2.1.1.8 variety)
|
||||
|
||||
Download from [Printables](https://www.printables.com/model/131389-ttgo-lora32-v2116-case-for-meshtastic) or purchase from the creator's [Etsy Store](https://www.etsy.com/listing/1285837219/ttgo-lora-21-16-case).
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ sidebar_position: 4
|
|||
|
||||
## GPIO IO12
|
||||
|
||||
For the Lora V2.1-1.6, Shorting IO12 to ground will progress through the screen pages and/or wake up the device. A simple push switch can be added for this purpose.
|
||||
For the Lora V2.1-1.6 and V2.1-1.8, Shorting IO12 to ground will progress through the screen pages and/or wake up the device. A simple push switch can be added for this purpose.
|
||||
|
||||
<img src="/img/hardware/lora32-v2-1.6-button.jpg" width="400" align="left"/>
|
||||
|
||||
|
|
|
@ -17,7 +17,9 @@ values={[
|
|||
{label: 'Lora V1', value: 'v1'},
|
||||
{label: 'Lora V1.3', value: 'v1.3'},
|
||||
{label: 'Lora V2.0', value: 'v2.0'},
|
||||
{label: 'Lora V2.1-1.6', value:'v2.1'}
|
||||
{label: 'Lora V2.1-1.6', value:'v2.1'},
|
||||
{label: 'Lora V2.1-1.8', value:'v2.1-1.8'},
|
||||
{label: 'Lora T3S3-V1.0', value:'S3-v1'}
|
||||
]}>
|
||||
<TabItem value="v1">
|
||||
|
||||
|
@ -26,7 +28,7 @@ Not recommended with a battery! These boards contain the wrong component in the
|
|||
:::
|
||||
|
||||
:::caution
|
||||
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 board.
|
||||
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 or Lora T3S3 board.
|
||||
:::
|
||||
|
||||
- **MCU**
|
||||
|
@ -58,7 +60,7 @@ Not recommended with a battery! These boards contain the wrong component in the
|
|||
:::
|
||||
|
||||
:::caution
|
||||
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 board.
|
||||
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 or Lora T3S3 board.
|
||||
:::
|
||||
|
||||
- **MCU**
|
||||
|
@ -90,7 +92,7 @@ Not recommended with a battery! These boards contain the wrong component in the
|
|||
:::
|
||||
|
||||
:::caution
|
||||
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 board.
|
||||
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 or Lora T3S3 board.
|
||||
:::
|
||||
|
||||
- **MCU**
|
||||
|
@ -151,4 +153,60 @@ Early versions of some of these boards contained the wrong component in the LiPo
|
|||

|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="v2.1-1.8">
|
||||
|
||||
- **MCU**
|
||||
- ESP32 (WiFi & Bluetooth)
|
||||
- **LoRa Transceiver**
|
||||
- Semtech SX1280 (Region LORA_24 worldwide use)
|
||||
- **Frequency options**
|
||||
- 2.4 GHz
|
||||
- **Connectors**
|
||||
- USB-C
|
||||
- Antenna: SMA antenna connector
|
||||
|
||||
**Features**
|
||||
- Built in 0.96 inch OLED display
|
||||
- Power and Reset switches
|
||||
- microSD connector
|
||||
- No GPS
|
||||
|
||||
**Resources**
|
||||
- Firmware file: `firmware-tlora-v2-1-1.8-X.X.X.xxxxxxx.bin`
|
||||
- Purchase link: [Banggood](https://www.banggood.com/LILYGO-LORA-H570-V1_8-SX1280-ESP32-2_4G-Smart-WiFi-bluetooth-Wireless-Module-0_96inch-OLED-Display-Development-Board-with-Antenna-Type-C-p-1969395.html)
|
||||
|
||||
|
||||

|
||||
</TabItem>
|
||||
|
||||
<TabItem value="S3-v1">
|
||||
|
||||
- **MCU**
|
||||
- ESP32-S3 (WiFi & Bluetooth)
|
||||
- **LoRa Transceiver**
|
||||
- Semtech SX1262
|
||||
- Semtech 1276
|
||||
- Semtech SX1280 with PA (Region LORA_24 worldwide use)
|
||||
- **Frequency options**
|
||||
- 868 MHz
|
||||
- 915 MHz
|
||||
- 2.4 GHz
|
||||
- **Connectors**
|
||||
- USB-C
|
||||
- Antenna: SMA antenna connector
|
||||
|
||||
**Features**
|
||||
- Built in 0.96 inch OLED display
|
||||
- Power and Reset switches, Boot / User Button
|
||||
- microSD connector
|
||||
- No GPS
|
||||
|
||||
**Resources**
|
||||
- Firmware file: `firmware-tlora-t3s3-v1.xxxxxxx.bin`
|
||||
- Purchase link: [AliExpress](https://www.aliexpress.com/item/1005004627139838.html)
|
||||
|
||||

|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
|
|
@ -23,7 +23,7 @@ values={[
|
|||
### RAK4631
|
||||
|
||||
:::info
|
||||
Please be aware of the difference between the RAK4631 (Arduino bootloader) and the RAK4631-R (RUI3 bootloader). Meshtastic requires the Arduino bootloader. If you have a RAK4631-R, please see the [instructions for converting the bootloader](/docs/guides/convert-rak4631r).
|
||||
Please be aware of the difference between the RAK4631 (Arduino bootloader) and the RAK4631-R (RUI3 bootloader). Meshtastic requires the Arduino bootloader. If you have a RAK4631-R, please see the [instructions for converting the bootloader](/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r).
|
||||
:::
|
||||
|
||||
- [RAK4631](https://store.rakwireless.com/products/rak4631-lpwan-node?variant=37505443856582)
|
||||
|
|
|
@ -28,7 +28,8 @@ The [RAK1921 OLED display](https://store.rakwireless.com/products/rak1921-oled-d
|
|||
|
||||
This item requires soldering.
|
||||
Further information on the RAK1921 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK1921/Overview/#product-description).
|
||||
Similar modules are widely available from other suppliers, but do check the boards as some have the VDD and GND pins swapped round.
|
||||
Similar modules are widely available from other suppliers, but do check the boards as some have the VDD and GND pins swapped round. This will prevent directly soldering the display to the baseboard. The preferred order is VDD, GND, SCL, SDA.
|
||||
If pin ordering on the OLED board are swapped, there are some tricks to allow either reconfiguring the pins of the OLED via soldered jumpers, or by carefully soldering wire for those pins that are out-of-sequence. The final option is to use longer wires between the board and display, which permits re-ordering the wires as required.
|
||||
|
||||
[<img alt="0.96 inch OLED display" src="/img/hardware/screen.png" style={{zoom:'25%'}} />](/img/hardware/screen.png)
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ sidebar_position: 3
|
|||
## Functionality
|
||||
|
||||
- **Capacitive Touch Button (Top)**
|
||||
- _**Short press**_ _currently no functionality_
|
||||
- _**Short press**_ updates the e-ink display
|
||||
- **Reset Button (Button 1)**
|
||||
- _**Single press**_ resets the device.
|
||||
- _**Double press**_ puts the device into bootloader mode ready to receive new firmware.
|
||||
|
|
|
@ -117,11 +117,12 @@ The message window operates like most messaging apps. Note that the `(All) Prima
|
|||
- Long press contacts or messages for options, like delete.
|
||||
- Long press a node from the Nodes tab to send Direct Messages.
|
||||
|
||||
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 icons shown to the right of the messages you send:
|
||||
|
||||
- Cloud with an up arrow: the message is queued in the app, waiting to be handed to the device.
|
||||
- Cloud only: the device received the message from the app, and it has been sent and transmitted via LoRa.
|
||||
- Cloud with a check mark: received at least one node's acknowledgement response. Confirmations could be from any one device.
|
||||
- Person with a check mark - The intended recipient of your direct message acknowledged the message.
|
||||
- Cloud crossed out: the initial sender did not receive any confirmation within a certain timeout.
|
||||
|
||||
By default there is no long-term store-and-forward of messages, so messages not received during transmission are lost.
|
||||
|
|
|
@ -252,7 +252,7 @@ meshtastic --ch-index 0 --ch-set downlink_enabled true
|
|||
|
||||
Step two: if you don't want to depend on JSON decoding on the device, you can decode the protobuf messages off-device. To do that you will need to get the .proto files from https://github.com/meshtastic/protobufs. They function as a schema and are required for decoding in Node-RED. Save the files where the node-RED application can access them and note the file path of the "mqtt.proto" file.
|
||||
|
||||
Step three: install Node-RED plug-ins to your node-RED application for an embedded MQQT server and a protobuf decoder.
|
||||
Step three: install Node-RED plug-ins to your node-RED application for an embedded MQTT server and a protobuf decoder.
|
||||
https://flows.nodered.org/node/node-red-contrib-aedes
|
||||
https://flows.nodered.org/node/node-red-contrib-protobuf
|
||||
|
||||
|
@ -264,7 +264,7 @@ Drag, drop, and wire the nodes like this. For this example, I ran node-RED on a
|
|||
|
||||
The aedes broker must be set up on the same flow as the other nodes. By activating the Publish debug node, you can see all the published messages.
|
||||
[<img src="/documents/mqtt/Broker1.jpg" style={{zoom:'50%'}} />](/documents/mqtt/Broker1.jpg)
|
||||
Receiving a json mqqt message is very simple.
|
||||
Receiving a json mqtt message is very simple.
|
||||
[<img src="/documents/mqtt/Consume.jpg" style={{zoom:'50%'}} />](/documents/mqtt/Consume.jpg)
|
||||
Injecting a json message to be sent by a device is also very simple. You do need the correct envelope.
|
||||
[<img src="/documents/mqtt/Inject.jpg" style={{zoom:'50%'}} />](/documents/mqtt/Inject.jpg)
|
||||
|
|
|
@ -94,6 +94,19 @@ const config = {
|
|||
colorMode: {
|
||||
respectPrefersColorScheme: true,
|
||||
},
|
||||
mermaid: {
|
||||
theme: {light: 'base', dark: 'base'},
|
||||
options: {
|
||||
themeVariables: {
|
||||
primaryColor: '#67EA94',
|
||||
primaryTextColor: 'var(--tw-prose-headings)',
|
||||
primaryBorderColor: '#4D4D4D',
|
||||
lineColor: '#EAD667',
|
||||
secondaryColor: '#EA67BD',
|
||||
tertiaryColor: '#677CEA'
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
() => {
|
||||
|
@ -132,6 +145,10 @@ const config = {
|
|||
defaultLocale: 'en',
|
||||
locales: ['en', 'de'],
|
||||
},
|
||||
markdown: {
|
||||
mermaid: true,
|
||||
},
|
||||
themes: ['@docusaurus/theme-mermaid'],
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
|
|
14
package.json
14
package.json
|
@ -13,20 +13,20 @@
|
|||
"lint": "eslint src/**/*.{ts,tsx}"
|
||||
},
|
||||
"dependencies": {
|
||||
"@algolia/client-search": "^4.14.2",
|
||||
"@algolia/client-search": "^4.14.3",
|
||||
"@docusaurus/core": "2.2.0",
|
||||
"@docusaurus/plugin-content-docs": "2.2.0",
|
||||
"@docusaurus/preset-classic": "2.2.0",
|
||||
"@headlessui/react": "^1.7.5",
|
||||
"@docusaurus/theme-mermaid": "^2.2.0",
|
||||
"@headlessui/react": "^1.7.7",
|
||||
"@heroicons/react": "^2.0.13",
|
||||
"@leenguyen/react-flip-clock-countdown": "^1.3.1",
|
||||
"@mdx-js/react": "^1.6.22",
|
||||
"@meshtastic/meshtasticjs": "^0.7.2",
|
||||
"@meshtastic/meshtasticjs": "^0.9.7",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"base64-js": "^1.5.1",
|
||||
"dotenv": "^16.0.3",
|
||||
"framer-motion": "^6.5.1",
|
||||
"postcss": "^8.4.19",
|
||||
"postcss": "^8.4.20",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-icons": "^4.7.1",
|
||||
|
@ -41,9 +41,9 @@
|
|||
"@meshtastic/eslint-config": "^1.0.8",
|
||||
"@tailwindcss/typography": "^0.5.8",
|
||||
"@tsconfig/docusaurus": "^1.0.6",
|
||||
"@types/node": "^18.11.12",
|
||||
"@types/node": "^18.11.18",
|
||||
"@types/react": "^18.0.26",
|
||||
"@types/react-dom": "^18.0.9",
|
||||
"@types/react-dom": "^18.0.10",
|
||||
"prettier": "^2.8.1",
|
||||
"typescript": "^4.9.4"
|
||||
}
|
||||
|
|
859
pnpm-lock.yaml
859
pnpm-lock.yaml
File diff suppressed because it is too large
Load diff
11
src/data/region.ts
Normal file
11
src/data/region.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
export interface IRegion {
|
||||
name: string;
|
||||
freqStart: number;
|
||||
freqEnd: number;
|
||||
dutyCycle: number;
|
||||
spacing: number;
|
||||
powerLimit: number;
|
||||
audioPermitted: boolean;
|
||||
frequencySwitching: boolean;
|
||||
wideLora: boolean;
|
||||
}
|
13
src/data/regions/anz.ts
Normal file
13
src/data/regions/anz.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const ANZ: IRegion = {
|
||||
name: "ANZ",
|
||||
freqStart: 915.0,
|
||||
freqEnd: 928.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 30,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/cn.ts
Normal file
13
src/data/regions/cn.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const CN: IRegion = {
|
||||
name: "CN",
|
||||
freqStart: 470.0,
|
||||
freqEnd: 510.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 19,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/eu_433.ts
Normal file
13
src/data/regions/eu_433.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const EU_433: IRegion = {
|
||||
name: "EU_433",
|
||||
freqStart: 433.0,
|
||||
freqEnd: 434.0,
|
||||
dutyCycle: 10,
|
||||
spacing: 0,
|
||||
powerLimit: 12,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/eu_868.ts
Normal file
13
src/data/regions/eu_868.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const EU_868: IRegion = {
|
||||
name: "EU_868",
|
||||
freqStart: 869.4,
|
||||
freqEnd: 869.65,
|
||||
dutyCycle: 10,
|
||||
spacing: 0,
|
||||
powerLimit: 27,
|
||||
audioPermitted: false,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/in.ts
Normal file
13
src/data/regions/in.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const IN: IRegion = {
|
||||
name: "IN",
|
||||
freqStart: 865.0,
|
||||
freqEnd: 867.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 30,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/jp.ts
Normal file
13
src/data/regions/jp.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const JP: IRegion = {
|
||||
name: "JP",
|
||||
freqStart: 920.8,
|
||||
freqEnd: 927.8,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 16,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/kr.ts
Normal file
13
src/data/regions/kr.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const KR: IRegion = {
|
||||
name: "KR",
|
||||
freqStart: 920.0,
|
||||
freqEnd: 925.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 0,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/lora_24.ts
Normal file
13
src/data/regions/lora_24.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const LORA_24: IRegion = {
|
||||
name: "LORA_24",
|
||||
freqStart: 2400.0,
|
||||
freqEnd: 2483.5,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 10,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: true,
|
||||
}
|
13
src/data/regions/nz_865.ts
Normal file
13
src/data/regions/nz_865.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const NZ_865: IRegion = {
|
||||
name: "NZ_865",
|
||||
freqStart: 864.0,
|
||||
freqEnd: 868.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 36,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/ru.ts
Normal file
13
src/data/regions/ru.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const RU: IRegion = {
|
||||
name: "RU",
|
||||
freqStart: 868.7,
|
||||
freqEnd: 869.2,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 20,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/th.ts
Normal file
13
src/data/regions/th.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const TH: IRegion = {
|
||||
name: "TH",
|
||||
freqStart: 920.0,
|
||||
freqEnd: 925.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 16,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/tw.ts
Normal file
13
src/data/regions/tw.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const TW: IRegion = {
|
||||
name: "TW",
|
||||
freqStart: 920.0,
|
||||
freqEnd: 925.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 0,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/unset.ts
Normal file
13
src/data/regions/unset.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const UNSET: IRegion = {
|
||||
name: "UNSET",
|
||||
freqStart: 902.0,
|
||||
freqEnd: 928.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 30,
|
||||
audioPermitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
13
src/data/regions/us.ts
Normal file
13
src/data/regions/us.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { IRegion } from '../region';
|
||||
|
||||
export const US: IRegion = {
|
||||
name: "US",
|
||||
freqStart: 902.0,
|
||||
freqEnd: 928.0,
|
||||
dutyCycle: 100,
|
||||
spacing: 0,
|
||||
powerLimit: 30,
|
||||
audioPrmitted: true,
|
||||
frequencySwitching: false,
|
||||
wideLora: false,
|
||||
}
|
|
@ -1,5 +1,3 @@
|
|||
import '@leenguyen/react-flip-clock-countdown/dist/index.css';
|
||||
|
||||
import React from 'react';
|
||||
|
||||
import { FiTwitter } from 'react-icons/fi';
|
||||
|
@ -7,6 +5,8 @@ import { FiTwitter } from 'react-icons/fi';
|
|||
import { ChevronRightIcon } from '@heroicons/react/20/solid';
|
||||
import FlipClockCountdown from '@leenguyen/react-flip-clock-countdown';
|
||||
import Layout from '@theme/Layout';
|
||||
import { Dark, Light } from '/src/components/ColorMode';
|
||||
|
||||
|
||||
const TwoPointZero = (): JSX.Element => {
|
||||
const stats = [
|
||||
|
@ -43,19 +43,29 @@ const TwoPointZero = (): JSX.Element => {
|
|||
];
|
||||
return (
|
||||
<Layout title="Meshtastic 2.0" description="Meshtastic 2.0 Landing Page">
|
||||
<div className="bg-white">
|
||||
<div>
|
||||
<main>
|
||||
{/* Hero section */}
|
||||
<div className="overflow-hidden pt-8 sm:pt-12 lg:relative lg:py-24">
|
||||
<div className="mx-auto max-w-md px-4 sm:max-w-3xl sm:px-6 lg:grid lg:max-w-7xl lg:grid-cols-2 lg:gap-24 lg:px-8">
|
||||
<div>
|
||||
<div>
|
||||
<img
|
||||
className="h-11 w-auto"
|
||||
it
|
||||
src="/design/logo/svg/Mesh_Logo_Black.svg"
|
||||
alt="Your Company"
|
||||
/>
|
||||
<Dark>
|
||||
<img
|
||||
className="h-11 w-auto"
|
||||
it
|
||||
src="/design/logo/svg/Mesh_Logo_White.svg"
|
||||
alt="Meshtastic Logo"
|
||||
/>
|
||||
</Dark>
|
||||
<Light>
|
||||
<img
|
||||
className="h-11 w-auto"
|
||||
it
|
||||
src="/design/logo/svg/Mesh_Logo_Black.svg"
|
||||
alt="Meshtastic Logo"
|
||||
/>
|
||||
</Light>
|
||||
</div>
|
||||
<div className="mt-20">
|
||||
<div>
|
||||
|
@ -73,23 +83,23 @@ const TwoPointZero = (): JSX.Element => {
|
|||
</a>
|
||||
</div>
|
||||
<div className="mt-6 sm:max-w-xl">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-gray-900 sm:text-5xl">
|
||||
<h1 className="text-4xl font-bold tracking-tight --ifm-heading-color sm:text-5xl">
|
||||
Meshtastic 2.0 🎉🎉🎉
|
||||
</h1>
|
||||
<p className="mt-6 text-xl text-gray-500">
|
||||
<p className="mt-6 text-xl --ifm-font-color-base">
|
||||
After 9 months in the making, we present to you the next
|
||||
milestone for the Meshtastic project.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mt-12 sm:w-full sm:max-w-lg">
|
||||
<p className="mt-6 mb-4 text-xl text-gray-500">
|
||||
<p className="mt-6 mb-4 text-xl --ifm-font-color-base">
|
||||
As a part of the launch event, we are running a number of
|
||||
giveaways, so jump in and win some prizes.
|
||||
</p>
|
||||
<div className="flex gap-2">
|
||||
<a
|
||||
href="#start"
|
||||
className="flex w-full rounded-md border border-transparent bg-rose-500 px-5 py-3 text-base font-medium text-white shadow hover:bg-rose-600 hover:text-black hover:no-underline focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 sm:px-10"
|
||||
className="flex w-full rounded-md border border-transparent bg-rose-500 px-5 py-3 font-medium text-white shadow hover:bg-rose-600 hover:text-black hover:no-underline focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 sm:px-10"
|
||||
>
|
||||
<span className="m-auto">Find Out More</span>
|
||||
</a>
|
||||
|
@ -258,12 +268,12 @@ const TwoPointZero = (): JSX.Element => {
|
|||
>
|
||||
{/* Content area */}
|
||||
<div className="pt-12 sm:pt-16 lg:pt-20">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
|
||||
<h2 className="text-3xl font-bold tracking-tight --ifm-heading-color sm:text-4xl">
|
||||
A brief overview of all the changes and improvements
|
||||
</h2>
|
||||
<div className="mt-6 space-y-6 text-gray-500">
|
||||
<div className="mt-6 space-y-6 --ifm-font-color-base">
|
||||
<h2>Monumental stuff!</h2>
|
||||
<p className="text-base leading-7">
|
||||
<p className="leading-7 --ifm-font-color-base">
|
||||
<li>
|
||||
Completely new LoRA band plan with faster messaging
|
||||
</li>
|
||||
|
@ -293,7 +303,7 @@ const TwoPointZero = (): JSX.Element => {
|
|||
</li>
|
||||
</p>
|
||||
<h2>Nerd stuff!</h2>
|
||||
<p className="text-base leading-7">
|
||||
<p className="leading-7 --ifm-font-color-base">
|
||||
<li>New filesystem for ESP32 (LittleFS)</li>
|
||||
<li>
|
||||
Upgraded Arduino framework for both NRF52 and ESP32
|
||||
|
@ -322,10 +332,10 @@ const TwoPointZero = (): JSX.Element => {
|
|||
key={stat.label}
|
||||
className="border-t-2 border-gray-100 pt-6"
|
||||
>
|
||||
<dt className="text-base font-medium text-gray-500">
|
||||
<dt className="font-medium --ifm-font-color-base">
|
||||
{stat.label}
|
||||
</dt>
|
||||
<dd className="text-3xl font-bold tracking-tight text-gray-900">
|
||||
<dd className="text-3xl font-bold tracking-tight --ifm-heading-color">
|
||||
{stat.value}
|
||||
</dd>
|
||||
</div>
|
||||
|
@ -341,10 +351,10 @@ const TwoPointZero = (): JSX.Element => {
|
|||
<div className="mx-auto max-w-md px-4 sm:max-w-3xl sm:px-6 lg:max-w-7xl lg:px-8">
|
||||
<div className="lg:grid lg:grid-cols-2 lg:items-center lg:gap-24">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
|
||||
<h2 className="text-3xl font-bold tracking-tight --ifm-heading-color sm:text-4xl">
|
||||
All made possible by the amazing companies that support us.
|
||||
</h2>
|
||||
<p className="mt-6 max-w-3xl text-lg leading-7 text-gray-500">
|
||||
<p className="mt-6 max-w-3xl text-lg leading-7 --ifm-font-color-base">
|
||||
Running a project of this scale is no easy feat, without the
|
||||
generosity of many of our vendors and providers, none of
|
||||
this would be possible.
|
||||
|
@ -433,13 +443,9 @@ const TwoPointZero = (): JSX.Element => {
|
|||
<div className="flex flex-col gap-12">
|
||||
<div className="sm:text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-white sm:text-4xl">
|
||||
Countdown to Prize Draw!
|
||||
Congratulations to the winners!
|
||||
</h2>
|
||||
</div>
|
||||
<FlipClockCountdown
|
||||
className="m-auto"
|
||||
to={new Date(2022, 11, 1).getTime()}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -176,7 +176,7 @@ function Home() {
|
|||
</h1>
|
||||
<p className="hero__subtitle">{siteConfig.tagline}</p>
|
||||
<div className="indexCtas">
|
||||
<Link className="button button--lg" to="/docs/about">
|
||||
<Link className="button button--lg" to="/docs/introduction">
|
||||
Learn More
|
||||
</Link>
|
||||
<Link className="button button--lg" to="/docs/getting-started">
|
||||
|
|
BIN
static/img/hardware/lora-t3s3.jpg
Normal file
BIN
static/img/hardware/lora-t3s3.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 219 KiB |
BIN
static/img/hardware/lora-v2.1-1.8.jpg
Normal file
BIN
static/img/hardware/lora-v2.1-1.8.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 366 KiB |
Loading…
Reference in a new issue