mirror of
https://github.com/meshtastic/meshtastic.git
synced 2024-11-09 23:24:10 -08:00
Merge branch 'master' into patch-2
This commit is contained in:
commit
fc2d12f44a
36
.github/workflows/pdf.yml
vendored
Normal file
36
.github/workflows/pdf.yml
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
name: Generate Documentation PDF
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- closed
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Get filename with date and sha
|
||||
run: |
|
||||
DATE_TIME=$(date +'%Y-%m-%d_%H-%M')
|
||||
echo "filename=Meshtastic-Documentation-${DATE_TIME}-${{ github.sha }}.pdf" >> $GITHUB_OUTPUT
|
||||
id: filename
|
||||
|
||||
- name: Install Prince
|
||||
run: |
|
||||
curl https://www.princexml.com/download/prince-15.3-linux-generic-x86_64.tar.gz -O
|
||||
tar zxf prince-15.3-linux-generic-x86_64.tar.gz
|
||||
cd prince-15.3-linux-generic-x86_64
|
||||
yes "" | sudo ./install.sh
|
||||
|
||||
- name: Build PDF
|
||||
run: npx docusaurus-prince-pdf -u https://meshtastic.org/docs/about/ --dest ./ --output ./${{ steps.filename.outputs.filename }}
|
||||
|
||||
- name: Create request artifacts
|
||||
if: github.event.pull_request.merged
|
||||
uses: gavv/pull-request-artifacts@v2.1.0
|
||||
with:
|
||||
commit: ${{ (github.event.pull_request_target || github.event.pull_request).head.sha }}
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
artifacts-token: ${{ secrets.ARTIFACTS_TOKEN }}
|
||||
artifacts-repo: meshtastic/artifacts
|
||||
artifacts-branch: docs
|
||||
artifacts: ./${{ steps.filename.outputs.filename }}
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -6,6 +6,7 @@ build
|
|||
.vercel
|
||||
.env
|
||||
.pnpm-debug.log
|
||||
static/documents/pdf
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
@ -25,4 +26,4 @@ gen
|
|||
!.vscode/*.code-snippets
|
||||
.history/
|
||||
*.vsix
|
||||
*.code-workspace
|
||||
*.code-workspace
|
||||
|
|
|
@ -190,38 +190,38 @@ If you use your ham radio license with Meshtastic, consider both the privileges
|
|||
|
||||
## Overview
|
||||
|
||||
<FaqAccordion rows={Faq.general} slug="general" />
|
||||
<FaqAccordion rows={Faq.general} />
|
||||
|
||||
## Android Client
|
||||
|
||||
<FaqAccordion rows={Faq.android} slug="android" />
|
||||
<FaqAccordion rows={Faq.android} />
|
||||
|
||||
## Apple Clients
|
||||
|
||||
<FaqAccordion rows={Faq.apple} slug="apple" />
|
||||
<FaqAccordion rows={Faq.apple} />
|
||||
|
||||
## Channels
|
||||
|
||||
<FaqAccordion rows={Faq.channels} slug="channels" />
|
||||
<FaqAccordion rows={Faq.channels} />
|
||||
|
||||
## Python CLI
|
||||
|
||||
<FaqAccordion rows={Faq.python} slug="python" />
|
||||
<FaqAccordion rows={Faq.python} />
|
||||
|
||||
## Devices
|
||||
|
||||
<FaqAccordion rows={Faq.devices} slug="devices" />
|
||||
<FaqAccordion rows={Faq.devices} />
|
||||
|
||||
## Amateur Radio (ham)
|
||||
|
||||
Meshtastic can be used by both unlicensed people and licensed HAM operators.
|
||||
|
||||
<FaqAccordion rows={Faq.ham} slug="ham" />
|
||||
<FaqAccordion rows={Faq.ham} />
|
||||
|
||||
## Mesh
|
||||
|
||||
<FaqAccordion rows={Faq.mesh} slug="mesh" />
|
||||
<FaqAccordion rows={Faq.mesh} />
|
||||
|
||||
## Modules
|
||||
|
||||
<FaqAccordion rows={Faq.modules} slug="modules" />
|
||||
<FaqAccordion rows={Faq.modules} />
|
||||
|
|
|
@ -17,7 +17,7 @@ Meshtastic is **not** LoRaWAN, Helium or TTN (TheThingsNetwork). Meshtastic uses
|
|||
Power limits will generally be lifted in the software if `is_licensed` is set to `true`. See [HAM Mode](/docs/faq#amateur-radio-ham) for more information.
|
||||
:::
|
||||
|
||||
## Channel Frequency Calculator
|
||||
## Frequency Slot Calculator
|
||||
|
||||
<FrequencyCalculator />
|
||||
|
||||
|
|
|
@ -19,13 +19,15 @@ values={[
|
|||
|
||||
<TabItem value="ground">
|
||||
|
||||
## Current Ground Record: 254km
|
||||
#### Ground
|
||||
|
||||
##### Current Ground Record: 254km
|
||||
|
||||
- **Range:** 254km (158 miles)
|
||||
- **Record Holders:** _kboxlabs_
|
||||
- **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/137)
|
||||
|
||||
<h2 id="modem-settings-254">Modem Settings</h2>
|
||||
<h5 id="modem-settings-254">Modem Settings</h5>
|
||||
|
||||
Default Long_Fast
|
||||
- **Frequency:** 915MHz
|
||||
|
@ -33,13 +35,13 @@ Default Long_Fast
|
|||
- **Spread Factor:** 11
|
||||
- **Coding Rate:** 4/8
|
||||
|
||||
<h2 id="node-a-254">Node A</h2>
|
||||
<h5 id="node-a-254">Node A</h5>
|
||||
|
||||
- **Device:** [RAK4631 Core](https://meshtastic.org/docs/hardware/devices/rak/core-module) with [RAK 5005-O Base Board](https://meshtastic.org/docs/hardware/devices/rak/base-board)
|
||||
- **Firmware Version:** 2.1.17
|
||||
- **Antenna:** 902-928MHz 5.8 dBi Slinkdsco Outdoor
|
||||
|
||||
<h2 id="node-b-254">Node B</h2>
|
||||
<h5 id="node-b-254">Node B</h5>
|
||||
|
||||
- **Device:** [RAK4631 Core](https://meshtastic.org/docs/hardware/devices/rak/core-module) with [RAK 19003 Mini Base Board](https://meshtastic.org/docs/hardware/devices/rak/base-board)
|
||||
- **Firmware Version:** 2.1.18
|
||||
|
@ -52,26 +54,26 @@ Default Long_Fast
|
|||
<img src="/img/records/kboxlabs_map.webp" alt="Geographic Locations" />
|
||||
|
||||
|
||||
## Previous Record 166km
|
||||
##### Previous Record 166km
|
||||
|
||||
- **Range:** 166km (103 miles)
|
||||
- **Record Holder:** _PuzzledPancake_
|
||||
- **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/44)
|
||||
|
||||
<h2 id="modem-settings-166">Modem Settings</h2>
|
||||
<h5 id="modem-settings-166">Modem Settings</h5>
|
||||
|
||||
- **Frequency:** 868MHz
|
||||
- **Bandwidth:** 125
|
||||
- **Spread Factor:** 12
|
||||
- **Coding Rate:** 4/8
|
||||
|
||||
<h2 id="node-a-166">Node A</h2>
|
||||
<h5 id="node-a-166">Node A</h5>
|
||||
|
||||
- **Device:** [LILYGO TTGO T-Beam w/ SX1262](/docs/hardware/devices/tbeam)
|
||||
- **Firmware Version:** 1.2
|
||||
- **Antenna:** [868MHz 5dBi Antenna](https://ivent.co.nz/product/category/1000/868mhz%205dbi%20antenna%20193mm%20black%20sma%20%28m%29/38646)
|
||||
|
||||
<h2 id="node-b-166">Node B</h2>
|
||||
<h5 id="node-b-166">Node B</h5>
|
||||
|
||||
- **Device:** [LILYGO TTGO T-Beam w/ SX1262](/docs/hardware/devices/tbeam)
|
||||
- **Firmware Version:** 1.2
|
||||
|
@ -83,20 +85,22 @@ Default Long_Fast
|
|||
|
||||
![Node B](https://canada1.discourse-cdn.com/free1/uploads/meshtastic/optimized/2X/1/1c8bd5fc41f7bab925404b657a9c481882de9313_2_1332x1000.jpeg)
|
||||
|
||||
<h2>Resources Used</h2>
|
||||
<h5>Resources Used</h5>
|
||||
- http://www.heywhatsthat.com
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="air">
|
||||
|
||||
## Current Air Record: 206km
|
||||
#### Air
|
||||
|
||||
##### Current Air Record: 206km
|
||||
|
||||
- **Range:** 206km (128 miles)
|
||||
- **Record Holders:** _StarWatcher, CVR, rook, kboxlabs_
|
||||
- **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/130)
|
||||
|
||||
<h2 id="modem-settings-206">Modem Settings</h2>
|
||||
<h5 id="modem-settings-206">Modem Settings</h5>
|
||||
|
||||
Default Long_Fast
|
||||
- **Frequency:** 915MHz
|
||||
|
@ -104,13 +108,13 @@ Default Long_Fast
|
|||
- **Spread Factor:** 11
|
||||
- **Coding Rate:** 4/8
|
||||
|
||||
<h2 id="node-a-206">Node A</h2>
|
||||
<h5 id="node-a-206">Node A</h5>
|
||||
|
||||
- **Device:** [LILYGO TTGO T-Beam](/docs/hardware/devices/tbeam)
|
||||
- **Firmware Version:** 2.1.10
|
||||
- **Antenna:** Stock Antenna
|
||||
|
||||
<h2 id="node-b-206">Node B</h2>
|
||||
<h5 id="node-b-206">Node B</h5>
|
||||
|
||||
- **Device:** [LILYGO TTGO T-Beam](/docs/hardware/devices/tbeam)
|
||||
- **Firmware Version:** 2.1.10 (modified to place GPS in flight mode)
|
||||
|
|
|
@ -38,5 +38,8 @@ us on [Discord](https://discord.com/invite/ktMAKGBnBs) to add your group.
|
|||
### Hawaii
|
||||
- [Hawaii Meshnet](https://www.hawaiimesh.net/)
|
||||
|
||||
### Massachusetts
|
||||
- [Boston Meshnet](https://github.com/Darachnid/Boston-Meshnet)
|
||||
|
||||
### Texas
|
||||
- [Austin Mesh](https://austinmesh.org/)
|
||||
|
|
|
@ -46,6 +46,7 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
All Ambient Lighting Module config options are available for Android in app version 2.2.3 and higher.
|
||||
|
@ -57,6 +58,8 @@ All Ambient Lighting Module config options are available for Android in app vers
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All Ambient Lighting Module config options are available on iOS, iPadOS and macOS app versions 2.2.3 and higher at Settings > Modules > Ambient Lighting
|
||||
:::
|
||||
|
@ -64,6 +67,8 @@ All Ambient Lighting Module config options are available on iOS, iPadOS and macO
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All Ambient Lighting Module config options are available in the python CLI version 2.2.3 and higher.
|
||||
|
@ -99,10 +104,12 @@ meshtastic --get ambient_lighting
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
|
||||
All Ambient Lighting module config options are available in the Web UI.
|
||||
|
||||
:::
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
</Tabs>
|
||||
|
|
|
@ -68,6 +68,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Audio Config options are available for Android.
|
||||
|
@ -81,6 +83,8 @@ Audio Config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
Audio module config is not available on iOS, iPadOS and macOS.
|
||||
:::
|
||||
|
@ -88,6 +92,8 @@ Audio module config is not available on iOS, iPadOS and macOS.
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All audio module config options are available in the python CLI. Example commands are below:
|
||||
|
@ -139,11 +145,13 @@ meshtastic --set audio.bitrate CODEC2_1400
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All audio module config options are available in the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::warning
|
||||
|
|
|
@ -86,6 +86,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Canned Message Config options are available for Android.
|
||||
|
@ -98,6 +100,8 @@ Canned Message Config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All canned message module config options are available on iOS, iPadOS and macOS at Settings > Modules > Canned Messages.
|
||||
:::
|
||||
|
@ -105,6 +109,8 @@ All canned message module config options are available on iOS, iPadOS and macOS
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All canned message module config options are available in the python CLI.
|
||||
|
@ -192,11 +198,13 @@ meshtastic --set canned_message.inputbroker_event_press ""
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All canned message module config options are available in the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::warning
|
||||
|
|
|
@ -59,6 +59,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
|
||||
:::info
|
||||
All Detection Sensor Module config options are available for Android in app version 2.2.2 and higher.
|
||||
|
@ -70,6 +72,8 @@ All Detection Sensor Module config options are available for Android in app vers
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All Detection Sensor Module config options are available on iOS, iPadOS and macOS app versions 2.2.2 and higher at Settings > Modules > Detection Sensor
|
||||
:::
|
||||
|
@ -77,6 +81,8 @@ All Detection Sensor Module config options are available on iOS, iPadOS and macO
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All Detection Sensor Module config options are available in the python CLI version 2.2.2 and higher.
|
||||
|
@ -129,6 +135,8 @@ meshtastic --get detection_sensor
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
|
||||
All Detection Sensor module config options are available in the Web UI.
|
||||
|
|
|
@ -63,6 +63,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
External Notification Config options are available for Android.
|
||||
|
@ -75,6 +77,8 @@ External Notification Config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All external notification module config options are available on iOS, iPadOS and macOS at Settings > Modules > External Notification.
|
||||
:::
|
||||
|
@ -82,6 +86,8 @@ All external notification module config options are available on iOS, iPadOS and
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All external notification module config options are available in the python CLI. Example commands are below:
|
||||
|
@ -147,6 +153,8 @@ meshtastic --set external_notification.output_ms 1500
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All External Notification module config is available for the Web UI.
|
||||
:::
|
||||
|
|
|
@ -38,6 +38,10 @@ Whether to send encrypted or unencrypted packets to MQTT. This parameter is only
|
|||
|
||||
### JSON Enabled
|
||||
|
||||
:::note
|
||||
JSON is not supported on the nRF52 platform.
|
||||
:::
|
||||
|
||||
Enable the sending / consumption of JSON packets on MQTT. These packets are not encrypted, but offer an easy way to integrate with systems that can read JSON.
|
||||
|
||||
### TLS Enabled
|
||||
|
@ -61,6 +65,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
MQTT Config options are available for Android.
|
||||
|
@ -73,6 +79,8 @@ MQTT Config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
|
||||
MQTT Config options are available on iOS, iPadOS and macOS at Settings > Modules > MQTT.
|
||||
|
@ -82,6 +90,8 @@ MQTT Config options are available on iOS, iPadOS and macOS at Settings > Modules
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All MQTT module config options are available in the python CLI. Example commands are below:
|
||||
|
@ -119,14 +129,16 @@ meshtastic --set mqtt.json_enabled true
|
|||
meshtastic --set mqtt.json_enabled false
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All MQTT module config options are available for the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Connect to the Default Public Server
|
||||
|
@ -146,7 +158,9 @@ values={[
|
|||
|
||||
<TabItem value="android">
|
||||
|
||||
<h3>1. Enable the MQTT Module</h3>
|
||||
#### Android
|
||||
|
||||
##### 1. Enable the MQTT Module
|
||||
|
||||
Navigate to: Vertical Ellipsis (3 dots top right) > Radio configuration > MQTT: Turn on the slider for **MQTT enabled** and tap **Send**.
|
||||
|
||||
|
@ -156,13 +170,13 @@ Navigate to: Vertical Ellipsis (3 dots top right) > Radio configuration > MQTT:
|
|||
|
||||
[![Client Proxy](/img/modules/mqtt/android_mqtt_proxy_sm.webp)](/img/modules/mqtt/android_mqtt_proxy_encryption.webp)
|
||||
|
||||
<h3>2. Enable Channel Uplink & Downlink</h3>
|
||||
##### 2. Enable Channel Uplink & Downlink
|
||||
|
||||
Navigate to: Vertical Ellipsis (3 dots top right) > Radio configuration > Channels > LongFast: Turn on the sliders for **Uplink enabled** and **Downlink enabled**, then tap **Save** and tap **Send**.
|
||||
|
||||
[![Channel Settings](/img/modules/mqtt/android_channel_sm.webp)](/img/modules/mqtt/android_channel.webp)
|
||||
|
||||
<h3>3. Configure Network Settings</h3>
|
||||
##### 3. Configure Network Settings
|
||||
|
||||
Navigate to: Vertical Ellipsis (3 dots top right) > Radio configuration > Network: Turn on the slider for **WiFi enabled**, Enter the **SSID** and **PSK** for your network, then tap **Send**.
|
||||
|
||||
|
@ -171,7 +185,9 @@ Navigate to: Vertical Ellipsis (3 dots top right) > Radio configuration > Networ
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
<h3>1. Enable the MQTT Module</h3>
|
||||
#### Apple
|
||||
|
||||
##### 1. Enable the MQTT Module
|
||||
|
||||
Navigate to Settings > MQTT: Turn on the slider for MQTT enabled and tap **Save**
|
||||
|
||||
|
@ -182,13 +198,13 @@ Navigate to Settings > MQTT: Turn on the slider for MQTT enabled and tap **Save*
|
|||
|
||||
[![Client Proxy](/img/modules/mqtt/apple_mqtt_1_proxy_sm.webp)](/img/modules/mqtt/apple_mqtt_1_proxy_encryption.webp)
|
||||
|
||||
<h3>2. Enable Channel Uplink & Downlink</h3>
|
||||
##### 2. Enable Channel Uplink & Downlink
|
||||
|
||||
Navigate to Settings > Channels > Primary Channel: Turn on the sliders for **Uplink enabled** and **Downlink enabled** - Tap **Save**
|
||||
|
||||
[![Channel Settings](/img/modules/mqtt/apple_channel_sm.webp)](/img/modules/mqtt/apple_channel.webp)
|
||||
|
||||
<h3>3. Configure Network Settings</h3>
|
||||
##### 3. Configure Network Settings
|
||||
|
||||
Navigate to Settings > Network: Turn on the slider for **WiFi enabled** - Enter your **SSID** and **PSK** for your network - Tap **Save**
|
||||
|
||||
|
@ -197,13 +213,15 @@ Navigate to Settings > Network: Turn on the slider for **WiFi enabled** - Enter
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
<h3>1. Enable the MQTT Module</h3>
|
||||
#### CLI
|
||||
|
||||
##### 1. Enable the MQTT Module
|
||||
|
||||
```shell
|
||||
meshtastic --set mqtt.enabled true
|
||||
```
|
||||
|
||||
<h3>2. Enable Channel Uplink & Downlink</h3>
|
||||
##### 2. Enable Channel Uplink & Downlink
|
||||
|
||||
```shell
|
||||
meshtastic --ch-set uplink_enabled true --ch-index 0
|
||||
|
@ -215,7 +233,7 @@ or chained together:
|
|||
meshtastic --ch-set uplink_enabled true --ch-index 0 --ch-set downlink_enabled true --ch-index 0
|
||||
```
|
||||
|
||||
<h3>3. Configure Network Settings</h3>
|
||||
##### 3. Configure Network Settings
|
||||
|
||||
```shell
|
||||
meshtastic --set network.wifi_enabled true
|
||||
|
@ -231,7 +249,9 @@ meshtastic --set network.wifi_enabled true --set network.wifi_ssid "your network
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
<h3>1. Enable the MQTT Module</h3>
|
||||
#### Web
|
||||
|
||||
##### 1. Enable the MQTT Module
|
||||
|
||||
Navigate to Config > Module Config > MQTT - Turn on the slider for MQTT enabled - Click the **Save** icon.
|
||||
|
||||
|
@ -248,13 +268,13 @@ Though this option may be visible in your UI, Client Proxy is not yet functional
|
|||
:::
|
||||
|
||||
|
||||
<h3>2. Enable Channel Uplink & Downlink</h3>
|
||||
##### 2. Enable Channel Uplink & Downlink
|
||||
|
||||
Navigate to Channels > Primary: Turn on the sliders for **Uplink Enabled** and **Downlink Enabled** - Click the **Save** icon.
|
||||
|
||||
[![Channel Settings](/img/modules/mqtt/web_channel_sm.webp)](/img/modules/mqtt/web_channel.webp)
|
||||
|
||||
<h3>3. Configure Network Settings</h3>
|
||||
##### 3. Configure Network Settings
|
||||
|
||||
Navigate to Radio Config > Device > Network: Turn on the slider for **Enabled** - Enter your **SSID** and **PSK** for your network - Click the **Save** icon.
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
All Neighbor Info Module config options are available for Android in app version 2.2.0 and higher.
|
||||
|
@ -48,6 +49,8 @@ All Neighbor Info Module config options are available for Android in app version
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
Not yet implemented.
|
||||
|
||||
</TabItem>
|
||||
|
|
|
@ -7,10 +7,14 @@ sidebar_label: Paxcounter
|
|||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
|
||||
The Paxcounter module counts the number of people passing by a specific area. It is commonly used in retail stores, museums, and other public spaces to monitor foot traffic and gather valuable data for analysis.
|
||||
The Paxcounter module counts the number of people passing by a specific area by scanning for WiFi and BLE MAC addresses. It is commonly used in retail stores, museums, and other public spaces to monitor foot traffic and gather valuable data for analysis.
|
||||
|
||||
In order to use this module, make sure your devices have firmware version 2.2.17 or higher.
|
||||
|
||||
:::info
|
||||
To operate the Paxcounter Module, it is mandatory to switch off both WiFi and Bluetooth in your Network and Bluetooth settings.
|
||||
:::
|
||||
|
||||
## Paxcounter Module Config Values
|
||||
|
||||
### Enabled
|
||||
|
@ -34,13 +38,21 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
No Paxcounter Module config options are available for Android.
|
||||
Paxcounter Config options are available for Android.
|
||||
|
||||
1. Open the Meshtastic App
|
||||
2. Navigate to: **Vertical Ellipsis (3 dots top right) > Radio Configuration > Paxcounter**
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
No Paxcounter Module config options are available on the iOS, iPadOS and macOS app.
|
||||
:::
|
||||
|
@ -48,6 +60,8 @@ No Paxcounter Module config options are available on the iOS, iPadOS and macOS a
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All Paxcounter Module config options are available in the python CLI version 2.2.16 and higher.
|
||||
|
@ -61,7 +75,7 @@ meshtastic --set paxcounter.enabled true
|
|||
meshtastic --set paxcounter.enabled false
|
||||
```
|
||||
|
||||
```shell title="Set the Minimum Broadcast Interval to 90 seconds"
|
||||
```shell title="Set the Minimum Broadcast Interval to 900 seconds"
|
||||
meshtastic --set paxcounter.paxcounter_update_interval 900
|
||||
```
|
||||
|
||||
|
@ -71,9 +85,11 @@ meshtastic --get paxcounter
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
|
||||
No Paxcounter module config options are available in the Web UI.
|
||||
All Paxcounter module config options are available in the Web UI.
|
||||
|
||||
:::
|
||||
</TabItem>
|
||||
|
|
|
@ -67,6 +67,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Range Test Config options are available for Android.
|
||||
|
@ -81,6 +83,8 @@ Android also had the option to download a rangetest.csv file which is stored on
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All range test module config options are available on iOS, iPadOS and macOS at Settings > Modules > Range Test.
|
||||
:::
|
||||
|
@ -90,6 +94,8 @@ Apple apps also have the option to download logged position data which is stored
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
Range Test module config options are available in the python CLI. Example commands are below:
|
||||
|
@ -133,6 +139,8 @@ meshtastic --set range_test.sender 0
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
|
||||
All range test module config options are available in the Web UI.
|
||||
|
|
|
@ -34,6 +34,7 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
All Remote Hardware Module config options are available for Android in app.
|
||||
|
@ -45,6 +46,8 @@ All Remote Hardware Module config options are available for Android in app.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All Remote Hardware Module config options are available on iOS, iPadOS and macOS app.and higher at Settings > Modules > Remote Hardware
|
||||
:::
|
||||
|
@ -52,6 +55,8 @@ All Remote Hardware Module config options are available on iOS, iPadOS and macOS
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All Remote Hardware Module config options are available in the python CLI.
|
||||
|
@ -61,6 +66,8 @@ All Remote Hardware Module config options are available in the python CLI.
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
Not implemented.
|
||||
|
||||
</TabItem>
|
||||
|
|
|
@ -79,6 +79,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Serial Module Config options are available for Android.
|
||||
|
@ -91,6 +93,8 @@ Serial Module Config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All serial module config options are available on iOS, iPadOS and macOS at Settings > Modules > Serial.
|
||||
:::
|
||||
|
@ -98,6 +102,8 @@ All serial module config options are available on iOS, iPadOS and macOS at Setti
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All serial module config options are available in the python CLI. Example commands are below:
|
||||
|
@ -161,6 +167,8 @@ meshtastic --set serial.timeout 15
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All serial module config options are available in the Web UI.
|
||||
:::
|
||||
|
|
|
@ -7,19 +7,20 @@ sidebar_label: Store & Forward
|
|||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
|
||||
:::info
|
||||
Currently only available for ESP32 based devices with external PSRAM like the tbeam. Requires the device to be set as a ROUTER or ROUTER_CLIENT.
|
||||
:::
|
||||
|
||||
## Overview
|
||||
|
||||
:::caution
|
||||
This is a work in progress and the required client support is not yet available.
|
||||
Using this module, a client device can ask a special Store & Forward Router to resend text messages after the client has been temporarily not in LoRa range of the mesh.
|
||||
|
||||
:::info
|
||||
Only ESP32 based devices with onboard PSRAM like the T-Beam and T3S3 can be a Store & Forward Router. Requires the device to use at least firmware version 2.2.23 and to be set as a `ROUTER` or `ROUTER_CLIENT`.
|
||||
:::
|
||||
|
||||
The Store & Forward Module is an implementation of a Store and Forward system to enable resilient messaging in the event that a client device is disconnected from the main network.
|
||||
When a client device requests the history from the Store & Forward Router, the router will resend the text messages over LoRa that it has received. The router will only return messages that are within the time window the client has requested up to the maximum number of messages configured for the router.
|
||||
The router does not know which messages the client device actually missed, so it is possible that you receive duplicates.
|
||||
|
||||
Because of the increased network traffic for this overhead, it's not advised to use this if you are duty cycle limited for your airtime usage (EU_868 and EU_433) nor is it advised to use this for presets using SF11 or SF12 (e.g. all of the LongRange and VeryLongRange presets).
|
||||
:::important
|
||||
Be mindful when requesting the history, as the router might send a lot of messages which will burden your mesh for a short period of time.
|
||||
:::
|
||||
|
||||
## Details
|
||||
|
||||
|
@ -29,28 +30,22 @@ Because of the increased network traffic for this overhead, it's not advised to
|
|||
|
||||
### Requirements
|
||||
|
||||
Initial Requirements:
|
||||
Initial requirements for the Store and Forward Router:
|
||||
|
||||
- Must be installed on a ROUTER or ROUTER_CLIENT node.
|
||||
- Must be installed on a `ROUTER` or `ROUTER_CLIENT` node.
|
||||
- This is an artificial limitation, but is in place to enforce best practices.
|
||||
- Router nodes are intended to be always online. If this module misses any messages, the reliability of the stored messages will be reduced.
|
||||
- ESP32 Processor based device with external PSRAM. (tbeam > v1.0, T3S3, and maybe others)
|
||||
- ESP32 Processor based device with onboard PSRAM (T-Beam > v1.0, T3S3, and maybe others).
|
||||
|
||||
### Usage Overview
|
||||
|
||||
- To use / test this you will want at least 3 devices
|
||||
- One ESP32 device with PSRAM configured as a Meshtastic router.
|
||||
- Two others will be regular clients. Nothing special required.
|
||||
|
||||
### Meshtastic channel configuration
|
||||
|
||||
Don't use this on the "LongRange" channel settings. You're welcome to try and report back, but those channels have a [low bitrate](/docs/overview/radio-settings#presets).
|
||||
|
||||
Either use a custom channel configuration with at an at least 1kbit data rate or use a Medium or Short range preset.
|
||||
- One ESP32 device with PSRAM configured as `ROUTER` or `ROUTER_CLIENT`.
|
||||
- Two others will be regular clients. If one client sends a text message when the other is not in range, the other can request the history from the router to receive the missed message when it is back in range.
|
||||
|
||||
### Router setup
|
||||
|
||||
- Configure your device as a router.
|
||||
- Configure your device as a `ROUTER` or `ROUTER_CLIENT`.
|
||||
- Name your router node something that makes it easily identifiable, aka "Router".
|
||||
- Configure the Store and Forward module
|
||||
|
||||
|
@ -58,17 +53,18 @@ Either use a custom channel configuration with at an at least 1kbit data rate or
|
|||
meshtastic --set store_forward.enabled true
|
||||
```
|
||||
|
||||
```shell title="Optional - Set maximum number of records to save to device"
|
||||
meshtastic --set store_forward.records 100
|
||||
```shell title="Optional - Disable sending heartbeat."
|
||||
meshtastic --set store_forward.heartbeat false
|
||||
```
|
||||
|
||||
:::tip
|
||||
Best to leave `store_forward.records` at the default (`0`) where the module will use 2/3 of your device's available PSRAM. This is about 11,000 records.
|
||||
Best to disable the heartbeat (which is sent every 15 minutes) when all client devices have identified the router to reduce network traffic.
|
||||
:::
|
||||
|
||||
### Client Usage
|
||||
|
||||
Currently there are no clients that support store and forward.
|
||||
Currently implemented in the Android and Apple apps version 2.2.23 and higher. To request the history from the Store & Forward Router, for Android it is required to send it a direct message containing the text "SF" (without quotes). The router will then respond with the requested messages.
|
||||
The Apple apps will also show whether a node is a Store & Forward Router in the node list after it heard the heartbeat. You can then long press the node and select "Client History" to request the history from the router.
|
||||
|
||||
## Settings
|
||||
|
||||
|
@ -82,7 +78,7 @@ The Store & Forward Router sends a periodic message onto the network. This allow
|
|||
|
||||
### History Return Max
|
||||
|
||||
Sets the maximum number of messages to return to a client device.
|
||||
Sets the maximum number of messages to return to a client device when it requests the history.
|
||||
|
||||
### History Return Window
|
||||
|
||||
|
@ -90,7 +86,7 @@ Limits the time period (in minutes) a client device can request.
|
|||
|
||||
### Records
|
||||
|
||||
Set this to the maximum number of records to save. Best to leave this at the default (`0`) where the module will use 2/3 of your device's available PSRAM. This is about 11,000 records.
|
||||
Set this to the maximum number of records the router will save. Best to leave this at the default (`0`) where the module will use 2/3 of your device's available PSRAM. This is about 11,000 records.
|
||||
|
||||
### Client Config
|
||||
|
||||
|
@ -106,6 +102,8 @@ values={[
|
|||
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
Store and Forward Config options are available for Android.
|
||||
|
||||
|
@ -117,6 +115,8 @@ Store and Forward Config options are available for Android.
|
|||
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
Store and Forward configuration is not currently available via the Apple clients.
|
||||
:::
|
||||
|
@ -125,13 +125,15 @@ Store and Forward configuration is not currently available via the Apple clients
|
|||
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
| Setting | Acceptable Values | Default |
|
||||
| :---------------------------------: | :---------------: | :-----: |
|
||||
| store_forward.enabled | `true`, `false` | `false` |
|
||||
| store_forward.heartbeat | `true`, `false` | `false` |
|
||||
| store_forward.history_return_max | `integer` | `0` |
|
||||
| store_forward.history_return_window | `integer` | `0` |
|
||||
| store_forward.records | `integer` | `0` |
|
||||
| store_forward.history_return_max | `integer` | `0` (25 messages) |
|
||||
| store_forward.history_return_window | `integer` | `0` (240 minutes) |
|
||||
| store_forward.records | `integer` | `0` (≈11,000 records) |
|
||||
|
||||
:::tip
|
||||
|
||||
|
@ -143,7 +145,7 @@ meshtastic --set store_forward.enabled true --set store_forward.history_return_m
|
|||
|
||||
:::
|
||||
|
||||
### Examples of CLI Usage
|
||||
##### Examples of CLI Usage
|
||||
|
||||
```shell title="Enable the module"
|
||||
meshtastic --set store_forward.enabled true
|
||||
|
@ -158,14 +160,14 @@ meshtastic --set store_forward.heartbeat 0
|
|||
```
|
||||
|
||||
|
||||
```shell title="Set store_forward.history_return_max to default"
|
||||
```shell title="Set store_forward.history_return_max to default (25 messages)"
|
||||
meshtastic --set store_forward.history_return_max 0
|
||||
```
|
||||
```shell title="Set store_forward.history_return_max to 100 messages"
|
||||
meshtastic --set store_forward.history_return_max 100
|
||||
```
|
||||
|
||||
```shell title="Set store_forward.history_return_window to default"
|
||||
```shell title="Set store_forward.history_return_window to default (240 minutes)"
|
||||
meshtastic --set store_forward.history_return_window 0
|
||||
```
|
||||
```shell title="Set store_forward.history_return_window to 1 day (1440 minutes)"
|
||||
|
@ -183,6 +185,8 @@ meshtastic --set store_forward.records 100
|
|||
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
Store and Forward configuration is not currently available via the web client.
|
||||
:::
|
||||
|
|
|
@ -44,7 +44,9 @@ Default is `900` seconds (15 minutes).
|
|||
|
||||
How often we should send Device Metrics over the mesh.
|
||||
|
||||
Default is `900` seconds (15 minutes).
|
||||
Default is `900` seconds (15 minutes).
|
||||
|
||||
Device Metrics to a connected client app will always be sent once per minute, regardless of this setting.
|
||||
|
||||
### Environment Screen Enabled
|
||||
|
||||
|
@ -83,6 +85,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Telemetry Config options are available for Android.
|
||||
|
@ -95,6 +99,8 @@ Telemetry Config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All telemetry module config options are available on iOS, iPadOS and macOS at Settings > Module Configuration > Telemetry.
|
||||
|
||||
|
@ -103,6 +109,8 @@ All telemetry module config options are available on iOS, iPadOS and macOS at Se
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All telemetry module config options are available in the python CLI. Example commands are below:
|
||||
|
@ -157,6 +165,8 @@ meshtastic --set telemetry.environment_display_fahrenheit false
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
|
||||
All telemetry module config options are available in the Web UI.
|
||||
|
|
|
@ -28,6 +28,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
Make sure the app is at least version 2.1.10.
|
||||
|
||||
Under 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.
|
||||
|
@ -35,6 +37,8 @@ Under the node list, long hold a destination node and select 'Traceroute' to sen
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### 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.
|
||||
|
@ -42,6 +46,8 @@ Under Contacts > Direct Messages, long hold a destination node and select 'Trace
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
Make sure the CLI is at least version 2.0.6. Then use this command:
|
||||
|
||||
```shell title="CLI traceroute command"
|
||||
|
@ -63,6 +69,8 @@ The first ID shown is the device you are connected to with the CLI. As you can s
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
Not yet implemented.
|
||||
|
||||
</TabItem>
|
||||
|
|
|
@ -51,6 +51,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
All Bluetooth config options are available for Android.
|
||||
|
@ -63,6 +65,8 @@ All Bluetooth config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
|
||||
All Bluetooth config values are available on iOS, iPadOS and macOS.
|
||||
|
@ -75,6 +79,8 @@ All Bluetooth config values are available on iOS, iPadOS and macOS.
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All Bluetooth module config options are available in the python CLI. Example commands are below:
|
||||
|
@ -107,8 +113,10 @@ meshtastic --set bluetooth.mode FIXED_PIN
|
|||
meshtastic --set bluetooth.fixed_pin 111111
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
|
||||
|
@ -119,5 +127,5 @@ All Bluetooth module config options are available for the Web UI.
|
|||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
@ -118,6 +118,8 @@ values={[
|
|||
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
Channel Config options are available on Android.
|
||||
:::
|
||||
|
@ -143,6 +145,8 @@ Tap the Channel Name (or the pen icon) to access the Channel Menu:
|
|||
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
Channel settings are only available on Apple platforms by scanning QR codes.
|
||||
:::
|
||||
|
@ -151,6 +155,8 @@ Channel settings are only available on Apple platforms by scanning QR codes.
|
|||
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
All Channel config options are available in the python CLI. Example commands are below:
|
||||
:::
|
||||
|
@ -165,7 +171,7 @@ meshtastic --ch-set name "My Channel" --ch-set psk random --ch-set uplink_enable
|
|||
|
||||
:::
|
||||
|
||||
### Name
|
||||
##### Name
|
||||
|
||||
```shell title="Set channel name for the PRIMARY channel"
|
||||
# without spaces
|
||||
|
@ -174,7 +180,7 @@ meshtastic --ch-set name MyChannel --ch-index 0
|
|||
meshtastic --ch-set name "My Channel" --ch-index 0
|
||||
```
|
||||
|
||||
### PSK
|
||||
##### PSK
|
||||
|
||||
If you use Meshtastic for exchanging messages you don't want other people to see, `random` is the setting you should use. Selecting `default` or any of the `simple` values from the following table will use publicly known encryption keys. They're shipped with Meshtastic source code and thus, anyone can listen to messages encrypted by them. They're great for testing and public channels.
|
||||
|
||||
|
@ -213,7 +219,7 @@ Use this to copy and paste the `base64` encoded (single channel) key from the me
|
|||
meshtastic --ch-set psk none --ch-index 0
|
||||
```
|
||||
|
||||
### Uplink / Downlink
|
||||
##### Uplink / Downlink
|
||||
|
||||
For configuring gateways, please see [MQTT](/docs/configuration/module/mqtt)
|
||||
|
||||
|
@ -231,6 +237,8 @@ meshtastic --ch-set downlink_enabled false --ch-index 5
|
|||
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All Channel config options are available in the Web UI.
|
||||
:::
|
||||
|
|
|
@ -78,7 +78,7 @@ This is the GPIO pin number that will be used for the PWM buzzer, if your device
|
|||
|
||||
### Node Info Broadcast Seconds
|
||||
|
||||
This is the number of seconds between NodeInfo message broadcasts from the device. The device will still respond ad-hoc to NodeInfo messages when a response is wanted.
|
||||
This is the number of seconds between NodeInfo message (containing i.a. long and short name) broadcasts from the device. The device will still respond ad-hoc to NodeInfo messages when a response is wanted. When the device hears any packet from a node it doesn't know yet, it will send its NodeInfo and ask for a response automatically.
|
||||
|
||||
### Double Tap as Button Press
|
||||
|
||||
|
@ -101,6 +101,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Device Config is available for Android.
|
||||
|
@ -113,6 +115,8 @@ Device Config is available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All device config options other than NTP Server are available on iOS, iPadOS and macOS at Settings > Radio Configuration > Device.
|
||||
:::
|
||||
|
@ -120,6 +124,8 @@ All device config options other than NTP Server are available on iOS, iPadOS and
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All device config options are available in the python CLI. Example commands are below:
|
||||
|
@ -163,9 +169,11 @@ meshtastic --set device.debug_log_enabled true
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All device config options are available in the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
@ -84,6 +84,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Display Config is available for Android.
|
||||
|
@ -96,6 +98,8 @@ Display Config is available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All display config options are available on iOS, iPadOS and macOS at Settings > Radio Configuration > Display.
|
||||
:::
|
||||
|
@ -103,6 +107,8 @@ All display config options are available on iOS, iPadOS and macOS at Settings >
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All display config options are available in the python CLI. Example commands are below:
|
||||
|
@ -150,9 +156,11 @@ meshtastic --set display.gps_format UTM
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All display config options are available in the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
@ -100,13 +100,9 @@ Allows you to enable and disable transmit (TX) from the LoRa radio. Useful for h
|
|||
|
||||
Defaults to true
|
||||
|
||||
### Channel Number
|
||||
### Frequency Slot
|
||||
|
||||
This is controlling the actual hardware frequency the radio is transmitting on. A channel number between 1 and NUM_CHANNELS (whatever the max is in the current region). If this is ZERO/UNSET then the rule is "use the old channel name hash based algorithm to derive the channel number".
|
||||
|
||||
:::info
|
||||
LoRa Channel Configuration should not to be confused with messaging [Channel Configuration](/docs/configuration/radio/channels). See [Chat Channels VS Lora Modem Channels](/docs/configuration/tips#chat-channels-vs-lora-modem-channels) for further clarification.
|
||||
:::
|
||||
This setting controls the actual hardware frequency at which the radio transmits, represented by a frequency slot between 1 and NUM_SLOTS (the maximum for the current region and modem preset). If set to `0`/UNSET, the device reverts to the older channel name hash-based algorithm for determining the frequency slot.
|
||||
|
||||
### Ignore Incoming Array
|
||||
|
||||
|
@ -141,6 +137,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
LoRa Config options are available on Android.
|
||||
|
@ -153,6 +151,8 @@ LoRa Config options are available on Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
Configuration of Region, Modem Preset, Transmit Enabled, Hop Limit, Channel Number and RX Boosted gain is available on iOS, iPadOS and macOS at Settings > Radio Configuration > LoRa.
|
||||
:::
|
||||
|
@ -160,6 +160,8 @@ Configuration of Region, Modem Preset, Transmit Enabled, Hop Limit, Channel Numb
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
LoRa config commands are available in the python CLI. Example commands are below:
|
||||
|
@ -217,9 +219,11 @@ meshtastic --set lora.override_duty_cycle false
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All LoRa config options are available in the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
@ -73,6 +73,8 @@ values={[
|
|||
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Network Config options are available for Android.
|
||||
|
@ -86,6 +88,8 @@ Network Config options are available for Android.
|
|||
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
|
||||
Network config options are available on iOS, iPadOS and macOS.
|
||||
|
@ -96,6 +100,8 @@ Network config options are available on iOS, iPadOS and macOS.
|
|||
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All Network config options are available in the python CLI.
|
||||
|
@ -147,6 +153,8 @@ meshtastic --set network.wifi_psk "my password"
|
|||
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All Network config options are available in the Web UI.
|
||||
:::
|
||||
|
@ -159,7 +167,7 @@ All Network config options are available in the Web UI.
|
|||
|
||||
### WiFi Client
|
||||
|
||||
With `network.wifi_ssid` & `network.wifi_psk` populated, the device will know to connect to your network. Make sure you are in range of your WiFi. If you have a single Meshtastic device on your local network it's easy to connect to your device with DNS `http://meshtastic.local`. If you have multiple Meshtastic devices you will need to connect using their respective IP addresses.
|
||||
With `network.wifi_ssid` & `network.wifi_psk` populated, the device will know to connect to your network. Make sure you are in range of your WiFi and it is a 2.4GHz-only network. If you have a single Meshtastic device on your local network it's easy to connect to your device with DNS `http://meshtastic.local`. If you have multiple Meshtastic devices you will need to connect using their respective IP addresses.
|
||||
|
||||
### Disable WiFi
|
||||
|
||||
|
|
|
@ -102,6 +102,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Position Config options are available for Android.
|
||||
|
@ -114,6 +116,8 @@ Position Config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All position config values are available on iOS, iPadOS and macOS at Settings > Radio Configuration > Position.
|
||||
:::
|
||||
|
@ -121,6 +125,8 @@ All position config values are available on iOS, iPadOS and macOS at Settings >
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All Position config commands are available in the python CLI. Example commands are below:
|
||||
|
@ -199,6 +205,8 @@ meshtastic --pos-fields UNSET
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All position config options are available in the Web UI.
|
||||
:::
|
||||
|
|
|
@ -4,20 +4,17 @@ title: Power Configuration
|
|||
sidebar_label: Power
|
||||
---
|
||||
|
||||
import Admonition from '@theme/Admonition';
|
||||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import calculateADC from "/src/utils/calculateADC";
|
||||
|
||||
:::info
|
||||
:::info Use Device Config first
|
||||
Power settings are advanced configuration, most users should choose a role under [Device Config](/docs/configuration/radio/device) to manage power for their device and shouldn't ever need to adjust these settings.
|
||||
:::
|
||||
|
||||
The power config options are: Power Saving, Shutdown after losing power, ADC Multiplier Override, Wait Bluetooth Interval, Light Sleep Interval, Minimum Wake Interval, and Device Battery INA2xx Address. Power config uses an admin message sending a `Config.Power` protobuf.
|
||||
|
||||
:::info
|
||||
ADC Multiplier, The Light Sleep setting only applies to ESP32-based boards. This settings will have no effect on nRF52/RP2040 modules.
|
||||
:::
|
||||
|
||||
## Power Config Values
|
||||
|
||||
### Power Saving
|
||||
|
@ -30,6 +27,10 @@ Automatically shut down a device after a defined time period if power is lost.
|
|||
|
||||
### ADC Multiplier Override
|
||||
|
||||
:::info ESP32 Only
|
||||
This setting only applies to ESP32-based boards, it will have no effect on nRF52/RP2040 boards.
|
||||
:::
|
||||
|
||||
Ratio of voltage divider for battery pin e.g. 3.20 (R1=100k, R2=220k)
|
||||
|
||||
Overrides the ADC_MULTIPLIER defined in the firmware device variant file for battery voltage calculation.
|
||||
|
@ -44,49 +45,50 @@ Should be set to floating point value between 2 and 6
|
|||
4. If "Battery Charge Percent" (e.g., B 3.82V 60%) is not displayed on the screen, it means that the default value of "Operative Adc Multiplier" is too high. Lower the "Operative Adc Multiplier" to a smaller number (it is recommended to decrease by 0.1) until the screen displays "Battery Charge Percent". Enter the current "Operative Adc Multiplier" in use into the "Operative Adc Multiplier" field in the calculator. Also, input the "Battery Charge Percent" displayed on the screen into the calculator.
|
||||
5. Click the "Calculate" button to compute the "Calculated New Operative Adc Multiplier", and set it as the new "Operative Adc Multiplier" for the device.
|
||||
|
||||
:::tip ADC Calculator
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td> Battery Charge Percent: </td>
|
||||
<td>
|
||||
<input type="text" id="batteryChargePercent" defaultValue="65" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Current Adc Multiplier: </td>
|
||||
<td>
|
||||
<input type="text" id="operativeAdcMultiplier" defaultValue="2" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Calculated New Operative Adc Multiplier: </td>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
id="newOperativeAdcMultiplier"
|
||||
value="2"
|
||||
disabled="disabled"
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<button
|
||||
className="button button--outline button--lg cta--button"
|
||||
onClick={calculateADC}
|
||||
>
|
||||
Calculate
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
:::
|
||||
|
||||
:::info
|
||||
It's important to note that this calibration method only maps 4.2V to Battery Charge Percent 100%, and does not address the potential non-linearities of the ADC.
|
||||
:::
|
||||
<details>
|
||||
<summary>ADC Calculator</summary>
|
||||
<div>
|
||||
<Admonition type="info">
|
||||
<p>This calibration method only maps 4.2V to Battery Charge Percent 100%, and does not address the potential non-linearities of the ADC.</p>
|
||||
</Admonition>
|
||||
<table>
|
||||
<tr>
|
||||
<td> Battery Charge Percent: </td>
|
||||
<td>
|
||||
<input type="text" id="batteryChargePercent" defaultValue="65" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Current Adc Multiplier: </td>
|
||||
<td>
|
||||
<input type="text" id="operativeAdcMultiplier" defaultValue="2" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Calculated New Operative Adc Multiplier: </td>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
id="newOperativeAdcMultiplier"
|
||||
value="2"
|
||||
disabled="disabled"
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<button
|
||||
className="button button--outline button--lg cta--button"
|
||||
onClick={calculateADC}
|
||||
>
|
||||
Calculate
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
### Wait Bluetooth Interval
|
||||
|
||||
|
@ -96,6 +98,10 @@ How long to wait before turning off BLE in no Bluetooth states
|
|||
|
||||
### Light Sleep Interval
|
||||
|
||||
:::info ESP32 Only
|
||||
This setting only applies to ESP32-based boards, it will have no effect on nRF52/RP2040 boards.
|
||||
:::
|
||||
|
||||
In light sleep the CPU is suspended, LoRa radio is on, BLE is off and GPS is on
|
||||
|
||||
`0` for default of five minutes
|
||||
|
@ -110,7 +116,7 @@ While in light sleep when we receive packets on the LoRa radio we will wake and
|
|||
|
||||
If an INA-2XX device is auto-detected on one of the I2C buses at the specified address, it will be used as the authoritative source for reading device battery level voltage. Setting is ignored for devices with PMUs (e.g. T-beams)
|
||||
|
||||
:::tip
|
||||
:::tip[Convert hexadecimal to decimal]
|
||||
I2C addresses are normally represented in hexadecimal and will require conversion to decimal in order to set via Meshtastic clients. For example the I2C address of 0x40 converted to decimal is 64.
|
||||
:::
|
||||
|
||||
|
@ -127,6 +133,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
Power Config options are available for Android.
|
||||
|
@ -139,6 +147,8 @@ Power Config options are available for Android.
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
|
||||
Power config is not available on Apple OS's.
|
||||
|
@ -147,6 +157,8 @@ Power config is not available on Apple OS's.
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All Power config options are available in the python CLI.
|
||||
|
@ -201,9 +213,11 @@ meshtastic --set power.min_wake_secs 120
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All power config options are available in the Web UI.
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
@ -48,6 +48,8 @@ values={[
|
|||
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
|
||||
All User config options are available for Android.
|
||||
|
@ -61,6 +63,8 @@ All User config options are available for Android.
|
|||
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
All User config options are available on iOS, iPadOS and macOS at `Settings > Radio Configuration > User`.
|
||||
:::
|
||||
|
@ -69,6 +73,8 @@ All User config options are available on iOS, iPadOS and macOS at `Settings > Ra
|
|||
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
:::info
|
||||
|
||||
All User config options are available in the python CLI. Example commands are below:
|
||||
|
@ -103,6 +109,8 @@ meshtastic --set-ham 'CALLSIGN'
|
|||
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
:::info
|
||||
All User config options are available in the Web UI.
|
||||
:::
|
||||
|
|
|
@ -88,15 +88,19 @@ values={[
|
|||
{label: 'Web', value: 'web'},
|
||||
]}>
|
||||
<TabItem value="cli">
|
||||
#### CLI (Required for accessibility)
|
||||
CLI content here
|
||||
</TabItem>
|
||||
<TabItem value="android">
|
||||
#### Android (Required for accessibility)
|
||||
Android content here
|
||||
</TabItem>
|
||||
<TabItem value="iOS">
|
||||
#### iOS (Required for accessibility)
|
||||
iOS content here
|
||||
</TabItem>
|
||||
<TabItem value="web">
|
||||
#### Web (Required for accessibility)
|
||||
Web content here
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
@ -35,6 +35,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="linux">
|
||||
|
||||
#### Linux
|
||||
|
||||
Check if you have `python3` and `pip` installed with the following command
|
||||
|
||||
```shell
|
||||
|
@ -58,6 +60,8 @@ sudo apt-get install python3-pip
|
|||
</TabItem>
|
||||
<TabItem value="macos">
|
||||
|
||||
#### macOS
|
||||
|
||||
OS X comes with `Python 2.7` installed, but not `pip`. The following uses Homebrew to install `python3` which includes `pip3`. On MacOS you will use `pip3` instead > of `pip`.
|
||||
|
||||
:::note
|
||||
|
@ -93,6 +97,8 @@ pip3 -v
|
|||
</TabItem>
|
||||
<TabItem value="windows">
|
||||
|
||||
#### Windows
|
||||
|
||||
- Download and install [Python](https://www.python.org). When installing, make sure to click `Add Python X.Y to PATH`.
|
||||
- Download and install [Gitbash](https://gitforwindows.org) (or other appropriate shell) and run all subsequent commands from that shell.
|
||||
|
||||
|
@ -130,6 +136,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="linux">
|
||||
|
||||
#### Linux
|
||||
|
||||
:::important
|
||||
On Linux, you may need to explicitly declare esptool as a .py script. Use `esptool.py chip_id`.
|
||||
:::
|
||||
|
@ -137,6 +145,8 @@ On Linux, you may need to explicitly declare esptool as a .py script. Use `espto
|
|||
</TabItem>
|
||||
<TabItem value="macos">
|
||||
|
||||
#### macOS
|
||||
|
||||
:::important
|
||||
On macOS, you may need to explicitly declare esptool as a .py script. Use `esptool.py chip_id`.
|
||||
:::
|
||||
|
@ -144,6 +154,8 @@ On macOS, you may need to explicitly declare esptool as a .py script. Use `espto
|
|||
</TabItem>
|
||||
<TabItem value="windows">
|
||||
|
||||
#### Windows
|
||||
|
||||
:::important
|
||||
On Windows, you must explicitly declare esptool as a .py script. Use `esptool.py chip_id`.
|
||||
:::
|
||||
|
@ -202,13 +214,15 @@ values={[
|
|||
]}>
|
||||
<TabItem value="linux">
|
||||
|
||||
#### Install
|
||||
#### Linux
|
||||
|
||||
##### Install
|
||||
|
||||
```shell title="Command"
|
||||
./device-install.sh -f firmware-BOARD-VERSION.bin
|
||||
```
|
||||
|
||||
#### Update
|
||||
##### Update
|
||||
|
||||
```shell title="Command"
|
||||
./device-update.sh -f firmware-BOARD-VERSION.bin
|
||||
|
@ -217,13 +231,15 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="macos">
|
||||
|
||||
#### Install
|
||||
#### macOS
|
||||
|
||||
##### Install
|
||||
|
||||
```shell title="Command"
|
||||
./device-install.sh -f firmware-BOARD-VERSION.bin
|
||||
```
|
||||
|
||||
#### Update
|
||||
##### Update
|
||||
|
||||
```shell title="Command"
|
||||
./device-update.sh -f firmware-BOARD-VERSION.bin
|
||||
|
@ -232,13 +248,15 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="windows">
|
||||
|
||||
#### Install
|
||||
#### Windows
|
||||
|
||||
##### Install
|
||||
|
||||
```shell title="Command"
|
||||
device-install.bat -f firmware-BOARD-VERSION.bin
|
||||
```
|
||||
|
||||
#### Update
|
||||
##### Update
|
||||
|
||||
```shell title="Command"
|
||||
device-update.bat -f firmware-BOARD-VERSION.bin
|
||||
|
|
|
@ -20,6 +20,8 @@ values={[
|
|||
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
:::info
|
||||
As of this writing, the current Android release of the nRF DFU app (v2.3.0) is not compatible with Meshtastic firmware updates. Please use the instructions below for updating via OTA with the nRF Connect App.
|
||||
:::
|
||||
|
@ -38,6 +40,8 @@ OTA firmware updates are available for Android using an older release of the mor
|
|||
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
OTA firmware updates are available on iOS & iPadOS using the nRF Device Firmware Update App available through the [Apple App Store](https://apps.apple.com/us/app/nrf-device-firmware-update/id1624454660)
|
||||
|
||||
1. Download the firmware release you wish to install from the [Meshtastic Download Page](/downloads), [Meshtastic GitHub](https://github.com/meshtastic/firmware/releases), or via the iOS or iPadOS app.
|
||||
|
|
|
@ -25,6 +25,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="serial">
|
||||
|
||||
#### Serial
|
||||
|
||||
- [Python CLI](/docs/software/python/cli/)
|
||||
- [Web Client](https://client.meshtastic.org)
|
||||
- [Android App](/docs/category/android-app)
|
||||
|
@ -32,6 +34,8 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="ble">
|
||||
|
||||
#### Bluetooth
|
||||
|
||||
- [Android App](/docs/category/android-app)
|
||||
- [Web Client](https://client.meshtastic.org)
|
||||
- [iOS/iPadOS/macOS App](/docs/category/apple-apps)
|
||||
|
@ -39,6 +43,8 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="network">
|
||||
|
||||
#### Network
|
||||
|
||||
:::info
|
||||
Connecting over network is only supported on ESP32 devices.
|
||||
:::
|
||||
|
@ -66,6 +72,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="android">
|
||||
|
||||
#### Android
|
||||
|
||||
1. Follow the [installation](/docs/software/android/installation) and [usage](/docs/software/python/cli/usage) instructions for [Meshtastic Android](/docs/category/android-app).
|
||||
2. Open the app, connect to the device from your phone over USB Serial or Bluetooth.
|
||||
3. Once paired, Click "UNSET" next to the device name.
|
||||
|
@ -74,6 +82,8 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="apple">
|
||||
|
||||
#### Apple
|
||||
|
||||
:::info
|
||||
Configuration of Region, Modem Preset and Hop Limit is available on iOS, iPadOS and macOS at Settings > Radio Configuration > LoRa.
|
||||
:::
|
||||
|
@ -81,6 +91,8 @@ Configuration of Region, Modem Preset and Hop Limit is available on iOS, iPadOS
|
|||
</TabItem>
|
||||
<TabItem value="cli">
|
||||
|
||||
#### CLI
|
||||
|
||||
1. Install [Meshtastic PythonCLI](/docs/software/python/cli/installation)
|
||||
```sh
|
||||
pip3 install --upgrade pytap2
|
||||
|
@ -94,6 +106,8 @@ Configuration of Region, Modem Preset and Hop Limit is available on iOS, iPadOS
|
|||
</TabItem>
|
||||
<TabItem value="web">
|
||||
|
||||
#### Web
|
||||
|
||||
1. Open the Meshtastic Web interface: [client.meshtastic.org](https://client.meshtastic.org)
|
||||
2. Navigate to the **LoRa** menu.
|
||||
3. Under **Regional Settings**, set your **Region** according to your regional location.
|
||||
|
|
|
@ -26,6 +26,8 @@ values={[
|
|||
|
||||
<TabItem value="linux">
|
||||
|
||||
#### Linux
|
||||
|
||||
- [CP210X USB to UART bridge - Download](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)
|
||||
- [CH9102 Driver - Linux Download](http://www.wch-ic.com/downloads/CH341SER_LINUX_ZIP.html)
|
||||
|
||||
|
@ -33,6 +35,8 @@ values={[
|
|||
|
||||
<TabItem value="macos">
|
||||
|
||||
#### macOS
|
||||
|
||||
- [CP210X USB to UART bridge - Download](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)
|
||||
- [CH9102 Driver - MacOS Download](https://github.com/WCHSoftGroup/ch34xser_macos)
|
||||
|
||||
|
@ -40,6 +44,8 @@ values={[
|
|||
|
||||
<TabItem value="windows">
|
||||
|
||||
#### Windows
|
||||
|
||||
- [CP210X USB to UART bridge - Download](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)
|
||||
- [CH9102 Driver - Windows Download](http://www.wch.cn/downloads/CH343SER_ZIP.html)
|
||||
- [CH9102 Driver - Windows Download (Direct Download for Windows 7)](https://github.com/Xinyuan-LilyGO/CH9102_Driver)
|
||||
|
|
|
@ -28,12 +28,15 @@ values={[
|
|||
|
||||
<TabItem value="linux">
|
||||
|
||||
#### Linux
|
||||
|
||||
- [CH34x Driver - Linux Download](http://www.wch-ic.com/downloads/CH341SER_LINUX_ZIP.html)
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="macos">
|
||||
|
||||
#### macOS
|
||||
|
||||
:::info
|
||||
|
||||
|
@ -41,7 +44,7 @@ With the latest versions of MacOS, the USB Serial driver is built-in. If you dow
|
|||
|
||||
:::
|
||||
|
||||
### Remove the CH34x USB Driver (macOS)
|
||||
##### Remove the CH34x USB Driver (macOS)
|
||||
|
||||
If you have already downloaded/installed the macOS WCH-IC CH340/CH341
|
||||
("CH341SER_MAC") drivers via the CH34x_Install_V1.5.pkg, you will have to
|
||||
|
@ -53,7 +56,7 @@ Uninstall the kernel extension:
|
|||
4. Reboot
|
||||
|
||||
|
||||
### Install the CH34x Driver
|
||||
##### Install the CH34x Driver
|
||||
|
||||
- [CH34x Driver- macOS Download](https://github.com/WCHSoftGroup/ch34xser_macos)
|
||||
|
||||
|
@ -63,6 +66,8 @@ Uninstall the kernel extension:
|
|||
|
||||
<TabItem value="windows">
|
||||
|
||||
#### Windows
|
||||
|
||||
- [CH34x Driver - Windows Download](http://www.wch-ic.com/downloads/CH341SER_EXE.html)
|
||||
|
||||
</TabItem>
|
||||
|
|
|
@ -23,6 +23,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="linux">
|
||||
|
||||
#### Linux
|
||||
|
||||
1. Connect your Meshtastic device to your USB port
|
||||
2. Open a **Terminal** and enter the following command:
|
||||
|
||||
|
@ -43,6 +45,8 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="macos">
|
||||
|
||||
#### macOS
|
||||
|
||||
1. Navigate to `Apple Menu > About This Mac > More Info > System Report... > Hardware > USB`.
|
||||
2. You should see similar to one of the following entries:
|
||||
|
||||
|
@ -54,6 +58,8 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="windows">
|
||||
|
||||
#### Windows
|
||||
|
||||
1. Navigate to `Device Manager > Ports (COM & LPT)`
|
||||
2. You should see similar to one of the following entries:
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ queryString="heltec"
|
|||
defaultValue="v3"
|
||||
values={[
|
||||
{label: 'LoRa32 V2.1', value: 'v2.1'},
|
||||
{label: 'LoRa32 V3', value:'v3'},
|
||||
{label: 'LoRa32 V3/V3.1', value:'v3'},
|
||||
{label: 'Wireless Stick Lite V3', value:'Wireless Stick Lite V3'},
|
||||
{label: 'Wireless Tracker', value: 'tracker'},
|
||||
{label: 'Wireless Paper', value: 'paper'}
|
||||
|
@ -54,7 +54,7 @@ Not recommended because of design issues! Support is being phased out. Use V3 in
|
|||
|
||||
<TabItem value="v3">
|
||||
|
||||
## HELTEC v3
|
||||
## HELTEC v3/v3.1
|
||||
|
||||
:::info
|
||||
This device may have issues charging a connected battery if utilizing a USB-C to USB-C cable. It's recommended to use a USB-A to USB-C cable.
|
||||
|
@ -75,6 +75,13 @@ This device may have issues charging a connected battery if utilizing a USB-C to
|
|||
- Dedicated 2.4 GHz metal spring antenna for WiFi/Bluetooth
|
||||
- U.FL/IPEX antenna connector for LoRa
|
||||
|
||||
### V3.1 differences
|
||||
|
||||
Firmware remains the same as V3 below. Compare schematics: [V3.0](https://web.archive.org/web/20221127054612/https://resource.heltec.cn/download/WiFi_LoRa32_V3/HTIT-WB32LA(F)_V3_Schematic_Diagram.pdf) and [V3.1](https://resource.heltec.cn/download/WiFi_LoRa_32_V3/HTIT-WB32LA(F)_V3.1_Schematic_Diagram.pdf). Key differences:
|
||||
|
||||
- Removal of [FDG6322C](https://www.mouser.com/datasheet/2/308/1/FDG6322C_D-2312203.pdf) (a dual N & P channel FET) from the V3.1 power supply.
|
||||
- Antenna filter values in V3.1 (L11 = 1.8pF, C15 = 2.7nH, C24 = 1.8pF) align more closely with ESP32-S3 reference design than V3.0 (L11 = 1.6nH, C15 = 6.9pF, C24 = 2.4pF).
|
||||
|
||||
### Features
|
||||
|
||||
- Built in 0.96 inch OLED display
|
||||
|
|
|
@ -77,14 +77,15 @@ By following this guide, you can enhance your Heltec ESP32 V3 board with valuabl
|
|||
|
||||
## Keyboard
|
||||
|
||||
Comming Soon
|
||||
Coming Soon
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="Buzzer">
|
||||
|
||||
## Buzzer
|
||||
|
||||
Commming Soon
|
||||
Coming Soon
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ Inexpensive basic ESP32-based boards.
|
|||
| Name | MCU | Radio | WiFi | BT | GPS |
|
||||
|:------------------------------------------------------------------|:------------|:-------|:------------:|:---:|:---:|
|
||||
| [LoRa32 V2.1](./heltec/?heltec=v2.1) | ESP32 | SX127x | 2.4GHz b/g/n | 4.2 | NO |
|
||||
| [LoRa32 V3](./heltec/?heltec=v23) | ESP32 | SX1262 | 2.4GHz b/g/n | 4.2 | NO |
|
||||
| [LoRa32 V3/3.1](./heltec/?heltec=v23) | ESP32-S3FN8 | SX1262 | 2.4GHz b/g/n | 5.0 | NO |
|
||||
| [Wireless Stick Lite V3](./heltec/?heltec=Wireless+Stick+Lite+V3) | ESP32-S3FN8 | SX1262 | 2.4GHz b/g/n | 5.0 | NO |
|
||||
| [Wireless Tracker](./heltec/?heltec=tracker) | ESP32-S3FN8 | SX1262 | 2.4GHz b/g/n | 5.0 | YES |
|
||||
| [Wireless Paper](./heltec/?heltec=paper) | ESP32-S3FN8 | SX1262 | 2.4GHz b/g/n | 5.0 | NO |
|
||||
|
|
|
@ -21,7 +21,9 @@ values={[
|
|||
|
||||
<TabItem value="g2">
|
||||
|
||||
### Nano G2 Ultra Buttons
|
||||
### Nano G2 Ultra
|
||||
|
||||
#### Buttons
|
||||
|
||||
- **User/Program Button:**
|
||||
- **Single press:** Changes the information page displayed on the device's screen.
|
||||
|
@ -30,7 +32,7 @@ values={[
|
|||
- **Message Read Button:**
|
||||
- **Single press:** Clears the New Message LED.
|
||||
|
||||
### Nano G2 Ultra Switches
|
||||
#### Switches
|
||||
|
||||
- **Power:**
|
||||
- **Toggle Up:** Turns on the device.
|
||||
|
@ -46,7 +48,9 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="g1-e">
|
||||
|
||||
### Nano G1 Explorer Buttons
|
||||
### Nano G1 Explorer
|
||||
|
||||
#### Buttons
|
||||
|
||||
- **User/Program Button:**
|
||||
- **Single press:** Changes the information page displayed on the device's screen.
|
||||
|
@ -54,7 +58,7 @@ values={[
|
|||
- **Message Read Button:**
|
||||
- **Single press:** Clears the New Message LED.
|
||||
|
||||
### Nano G1 Explorer Switches
|
||||
### Switches
|
||||
|
||||
- **Power:**
|
||||
- **Toggle Up:** Turns on the device.
|
||||
|
|
|
@ -21,13 +21,15 @@ The ATAK plugin does not permit any Meshtastic configuration. The plugin does th
|
|||
|
||||
1. Use the Meshtastic Android App on all parties' devices, and ensure they can talk to their local LoRa radio. Confirm they are able to achieve basic text messaging using the App.
|
||||
|
||||
2. Set the device's role to `TAK` in the (device configuration settings)[/docs/configuration/radio/device/].
|
||||
2. Set the device's role to `TAK` in the [device configuration settings](/docs/configuration/radio/device/).
|
||||
|
||||
3. With the Meshtastic Android App running in the background (to ensure the IMeshService is alive), launch ATAK (with the Meshtastic ATAK-Plugin installed or install it once ATAK is running) and you should observe a green Meshtastic icon in the bottom right. If the icon is red, then the plugin was not able to bind to the IMeshService provided by the Meshtastic Android App. If this is the case, check to ensure the Meshtastic Android App is functioning. The plugin will reconnect after a failed bind without restarting ATAK.
|
||||
3. Install the version of the Meshtastic ATAK-Plugin that matches the ATAK version on all participants' devices from the [project's GitHub Releases](https://github.com/meshtastic/ATAK-Plugin/releases).
|
||||
|
||||
4. With the Meshtastic Android App running in the background (to ensure the IMeshService is alive), launch ATAK (with the Meshtastic ATAK-Plugin installed or install it once ATAK is running) and you should observe a green Meshtastic icon in the bottom right. If the icon is red, then the plugin was not able to bind to the IMeshService provided by the Meshtastic Android App. If this is the case, check to ensure the Meshtastic Android App is functioning. The plugin will reconnect after a failed bind without restarting ATAK. If you do not see a Meshtastic icon, make sure that you have installed the Meshtastic ATAK-Plugin correctly.
|
||||
|
||||
## Standalone TAK Tracker usage
|
||||
|
||||
For devices with GPS available, configuring the device's role to `TAK_TRACKER` will allow the Meshtastic to transmit TAK PLI (Position Location Information) independently of ATAK. This data can be received and displayed within ATAK EUDs connected to a Meshtastic device and configured with the Meshtastic ATAK plugin (provided they are configured on the same Meshtastic channels).
|
||||
For devices with GPS available, configuring the device's role to `TAK_TRACKER` will allow the Meshtastic to transmit TAK PLI (Position Location Information) independently of ATAK. This data can be received and displayed within ATAK EUDs connected to a Meshtastic device and configured with the Meshtastic ATAK plugin (provided they are configured on the same Meshtastic channels).
|
||||
|
||||
A couple of important notes regarding this setup:
|
||||
|
||||
|
|
|
@ -7,11 +7,17 @@ sidebar_position: 4
|
|||
|
||||
### Home Assistant Integrations for Meshtastic
|
||||
|
||||
:::warning Note
|
||||
|
||||
Due to a known issue with nRF52 devices and JSON, nRF52 devices are not supported for use with Home Assistant at this time.
|
||||
|
||||
:::
|
||||
|
||||
Integrating Meshtastic into Home Assistant brings a new level of control and monitoring to your mesh network. On this page, we'll guide you through the process of creating Meshtastic MQTT sensor entities within Home Assistant. Whether you want to keep an eye on battery levels, environmental conditions, or even receive notifications from your mesh network, these integrations provide you with the tools to make it happen.
|
||||
|
||||
:::info
|
||||
|
||||
It is highly recommended to download MQTT Explorer for analyzing the JSON threads that come across the broker. This can be downloaded here: http://mqtt-explorer.com/
|
||||
It is highly recommended to download MQTT Explorer for analyzing the JSON threads that come across the broker. This can be downloaded here [http://mqtt-explorer.com/](http://mqtt-explorer.com/).
|
||||
|
||||
:::
|
||||
|
||||
|
|
|
@ -54,6 +54,10 @@ The payload is a raw protobuf, whose definitions for Meshtastic can be found [he
|
|||
If [encryption_enabled](/docs/configuration/module/mqtt#encryption-enabled) is set to true, the payload of the MeshPacket will remain encrypted with the key for the specified channel.
|
||||
|
||||
#### JSON topic
|
||||
:::note
|
||||
JSON is not supported on the nRF52 platform.
|
||||
:::
|
||||
|
||||
If [JSON is enabled](/docs/configuration/module/mqtt#json-enabled), packets from the following [port numbers](/docs/development/firmware/portnum) are serialized to JSON: `TEXT_MESSAGE_APP`, `TELEMETRY_APP`, `NODEINFO_APP`, `POSITION_APP`, `WAYPOINT_APP`, `NEIGHBORINFO_APP`, `TRACEROUTE_APP`, `DETECTION_SENSOR_APP`, `PAXCOUNTER_APP` and `REMOTE_HARDWARE_APP`. These are then forwarded to the topic:
|
||||
|
||||
`msh/2/json/CHANNELNAME/USERID`.
|
||||
|
@ -123,7 +127,7 @@ For the type `sendtext`, the `payload` should be a string containing the text to
|
|||
Check out [MQTT Settings](/docs/configuration/module/mqtt) for full information. For quick start instructions, read on.
|
||||
|
||||
- Connect your gateway node to wifi, by setting the `network.wifi_ssid`, `network.wifi_psk` and `network.wifi_enabled` preferences.
|
||||
- Alternatively use the RAK4631 with Ethernet Module RAK13800, by setting `network.eth_mode` and `network.eth_enabled`.
|
||||
- Alternatively use the RAK4631 with Ethernet Module RAK13800, by setting `network.eth_mode` and `network.eth_enabled` (note that JSON is not supported on the nRF52 platform).
|
||||
- Configure your broker settings: `mqtt.address`, `mqtt.username`, and `mqtt.password`. If all are left blank, the device will connect to the Meshtastic broker.
|
||||
- Set `uplink_enabled` and `downlink_enabled` as appropriate for each channel. Most users will just have a single channel (at channel index 0). `meshtastic --ch-index 0 --ch-set uplink_enabled true`
|
||||
|
||||
|
|
|
@ -54,6 +54,10 @@ The JSON output only publishes the following subset of the messages on a Meshtas
|
|||
> Protobufs are mesh native.
|
||||
|
||||
#### 1. Using JSON-encoded messages
|
||||
:::note
|
||||
JSON is not supported on the nRF52 platform.
|
||||
:::
|
||||
|
||||
Make sure that option *JSON Output Enabled* is set in MQTT module options and you have a channel called "mqtt".
|
||||
|
||||
Below is a valid JSON envelope for information sent by MQTT to a device for broadcast onto the mesh. The `to` field is optional and can be omitted for broadcast. The `channel` field is also optional and can be omitted to send to the primary channel.
|
||||
|
|
|
@ -41,6 +41,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="linux">
|
||||
|
||||
#### Linux
|
||||
|
||||
- Check that your computer has the required serial drivers installed
|
||||
|
||||
- Connect your Meshtastic device to your USB port
|
||||
|
@ -98,6 +100,8 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="macos">
|
||||
|
||||
#### macOS
|
||||
|
||||
- Check that your computer has the required serial drivers installed
|
||||
- Connect your Meshtastic device to your USB port
|
||||
- Navigate to `Apple Menu > About This Mac > System Report... > Hardware > USB`
|
||||
|
@ -139,6 +143,8 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="windows">
|
||||
|
||||
#### Windows
|
||||
|
||||
- Check that your computer has the required serial drivers installed
|
||||
- Connect your Meshtastic device to your USB port
|
||||
- Open Device Manager
|
||||
|
@ -171,6 +177,8 @@ values={[
|
|||
</TabItem>
|
||||
<TabItem value="termux">
|
||||
|
||||
#### Termux
|
||||
|
||||
:::note
|
||||
Wifi connection is currently under development and may not be working properly just yet. If you would like to provide feedback or test this feature, please visit our [forum](https://meshtastic.discourse.group) or join our [Discord server](https://discord.gg/ktMAKGBnBs) for more information.
|
||||
:::
|
||||
|
@ -219,6 +227,8 @@ values={[
|
|||
]}>
|
||||
<TabItem value="ubuntu">
|
||||
|
||||
#### Ubuntu
|
||||
|
||||
- Download meshtastic_ubuntu
|
||||
|
||||
- Run the following command to make the file executable and rename it 'meshtastic':
|
||||
|
@ -240,6 +250,8 @@ Copy (or move) this binary somewhere in your path.
|
|||
</TabItem>
|
||||
<TabItem value="windows">
|
||||
|
||||
#### Windows
|
||||
|
||||
- Download meshtastic_windows
|
||||
|
||||
- Rename to meshtastic.exe
|
||||
|
|
|
@ -23,7 +23,6 @@ const config = {
|
|||
},
|
||||
},
|
||||
navbar: {
|
||||
title: "Meshtastic",
|
||||
hideOnScroll: true,
|
||||
logo: {
|
||||
alt: "Meshtastic Logo",
|
||||
|
@ -39,6 +38,10 @@ const config = {
|
|||
label: "Downloads",
|
||||
to: "downloads",
|
||||
},
|
||||
{
|
||||
label: "Donate",
|
||||
to: "docs/contributing/#supporting-and-contributing-to-meshtastic",
|
||||
},
|
||||
{
|
||||
label: "About",
|
||||
position: "right",
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
"build": "docusaurus build",
|
||||
"swizzle": "docusaurus swizzle",
|
||||
"serve": "docusaurus serve",
|
||||
"clear": "docusaurus clear"
|
||||
"clear": "docusaurus clear",
|
||||
"pdf": "npx docusaurus-prince-pdf -u http://localhost:3000/docs/about/ --dest ./static/documents/pdf --output ./static/documents/pdf/Meshtastic-Documentation.pdf"
|
||||
},
|
||||
"dependencies": {
|
||||
"@algolia/client-search": "^4.22.1",
|
||||
|
@ -44,6 +45,7 @@
|
|||
"@types/node": "^20.11.19",
|
||||
"@types/react": "^18.2.56",
|
||||
"@types/react-dom": "^18.2.19",
|
||||
"docusaurus-prince-pdf": "^1.2.1",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
}
|
||||
|
|
343
pnpm-lock.yaml
343
pnpm-lock.yaml
|
@ -97,6 +97,9 @@ devDependencies:
|
|||
'@types/react-dom':
|
||||
specifier: ^18.2.19
|
||||
version: 18.2.19
|
||||
docusaurus-prince-pdf:
|
||||
specifier: ^1.2.1
|
||||
version: 1.2.1
|
||||
typescript:
|
||||
specifier: ^5.3.3
|
||||
version: 5.3.3
|
||||
|
@ -2719,7 +2722,6 @@ packages:
|
|||
/@sindresorhus/is@5.6.0:
|
||||
resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
|
||||
engines: {node: '>=14.16'}
|
||||
dev: false
|
||||
|
||||
/@slorber/remark-comment@1.0.0:
|
||||
resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==}
|
||||
|
@ -2896,7 +2898,6 @@ packages:
|
|||
engines: {node: '>=14.16'}
|
||||
dependencies:
|
||||
defer-to-connect: 2.0.1
|
||||
dev: false
|
||||
|
||||
/@tailwindcss/typography@0.5.10(tailwindcss@3.4.1):
|
||||
resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==}
|
||||
|
@ -2910,6 +2911,11 @@ packages:
|
|||
tailwindcss: 3.4.1
|
||||
dev: true
|
||||
|
||||
/@tootallnate/once@2.0.0:
|
||||
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
|
||||
engines: {node: '>= 10'}
|
||||
dev: true
|
||||
|
||||
/@trysound/sax@0.2.0:
|
||||
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
@ -3025,7 +3031,6 @@ packages:
|
|||
|
||||
/@types/http-cache-semantics@4.0.4:
|
||||
resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
|
||||
dev: false
|
||||
|
||||
/@types/http-errors@2.0.4:
|
||||
resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
|
||||
|
@ -3310,6 +3315,11 @@ packages:
|
|||
/@xtuc/long@4.2.2:
|
||||
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
|
||||
|
||||
/abab@2.0.6:
|
||||
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
|
||||
deprecated: Use your platform's native atob() and btoa() methods instead
|
||||
dev: true
|
||||
|
||||
/accepts@1.3.8:
|
||||
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
@ -3347,6 +3357,15 @@ packages:
|
|||
engines: {node: '>= 10.0.0'}
|
||||
dev: false
|
||||
|
||||
/agent-base@6.0.2:
|
||||
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
dependencies:
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/aggregate-error@3.1.0:
|
||||
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
|
||||
engines: {node: '>=8'}
|
||||
|
@ -3500,6 +3519,10 @@ packages:
|
|||
resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==}
|
||||
hasBin: true
|
||||
|
||||
/asynckit@0.4.0:
|
||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||
dev: true
|
||||
|
||||
/at-least-node@1.0.0:
|
||||
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
|
||||
engines: {node: '>= 4.0.0'}
|
||||
|
@ -3701,7 +3724,6 @@ packages:
|
|||
/cacheable-lookup@7.0.0:
|
||||
resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
|
||||
engines: {node: '>=14.16'}
|
||||
dev: false
|
||||
|
||||
/cacheable-request@10.2.14:
|
||||
resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
|
||||
|
@ -3714,7 +3736,6 @@ packages:
|
|||
mimic-response: 4.0.0
|
||||
normalize-url: 8.0.0
|
||||
responselike: 3.0.0
|
||||
dev: false
|
||||
|
||||
/call-bind@1.0.7:
|
||||
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
|
||||
|
@ -3899,6 +3920,15 @@ packages:
|
|||
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
|
||||
dev: false
|
||||
|
||||
/cliui@8.0.1:
|
||||
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
wrap-ansi: 7.0.0
|
||||
dev: true
|
||||
|
||||
/clone-deep@4.0.1:
|
||||
resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
@ -3947,6 +3977,13 @@ packages:
|
|||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/combined-stream@1.0.8:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
dev: true
|
||||
|
||||
/comma-separated-tokens@2.0.3:
|
||||
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
|
||||
|
||||
|
@ -4358,6 +4395,13 @@ packages:
|
|||
css-tree: 1.1.3
|
||||
dev: false
|
||||
|
||||
/cssstyle@3.0.0:
|
||||
resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
rrweb-cssom: 0.6.0
|
||||
dev: true
|
||||
|
||||
/csstype@3.1.3:
|
||||
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
|
||||
|
||||
|
@ -4656,6 +4700,15 @@ packages:
|
|||
lodash-es: 4.17.21
|
||||
dev: false
|
||||
|
||||
/data-urls@4.0.0:
|
||||
resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
abab: 2.0.6
|
||||
whatwg-mimetype: 3.0.0
|
||||
whatwg-url: 12.0.1
|
||||
dev: true
|
||||
|
||||
/dayjs@1.11.10:
|
||||
resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
|
||||
dev: false
|
||||
|
@ -4686,6 +4739,10 @@ packages:
|
|||
dependencies:
|
||||
ms: 2.1.2
|
||||
|
||||
/decimal.js@10.4.3:
|
||||
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
|
||||
dev: true
|
||||
|
||||
/decode-named-character-reference@1.0.2:
|
||||
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
|
||||
dependencies:
|
||||
|
@ -4696,7 +4753,6 @@ packages:
|
|||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
mimic-response: 3.1.0
|
||||
dev: false
|
||||
|
||||
/deep-extend@0.6.0:
|
||||
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
|
||||
|
@ -4718,7 +4774,6 @@ packages:
|
|||
/defer-to-connect@2.0.1:
|
||||
resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/define-data-property@1.1.4:
|
||||
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
|
||||
|
@ -4763,6 +4818,11 @@ packages:
|
|||
robust-predicates: 3.0.2
|
||||
dev: false
|
||||
|
||||
/delayed-stream@1.0.0:
|
||||
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
dev: true
|
||||
|
||||
/depd@1.1.2:
|
||||
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
@ -4837,6 +4897,21 @@ packages:
|
|||
'@leichtgewicht/ip-codec': 2.0.4
|
||||
dev: false
|
||||
|
||||
/docusaurus-prince-pdf@1.2.1:
|
||||
resolution: {integrity: sha512-8/ssMwm60bDP9MSsFIlcnKPXVpclLh/VPRA01dosx3/1Pt1OcFfy5fkRSL2WBOSxEoVZcWr+oPzbeimlRJqfNA==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
got: 13.0.0
|
||||
jsdom: 22.1.0
|
||||
tough-cookie: 4.1.3
|
||||
yargs: 17.7.2
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- canvas
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
dev: true
|
||||
|
||||
/dom-converter@0.2.0:
|
||||
resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
|
||||
dependencies:
|
||||
|
@ -4863,6 +4938,14 @@ packages:
|
|||
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
|
||||
dev: false
|
||||
|
||||
/domexception@4.0.0:
|
||||
resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
|
||||
engines: {node: '>=12'}
|
||||
deprecated: Use your platform's native DOMException instead
|
||||
dependencies:
|
||||
webidl-conversions: 7.0.0
|
||||
dev: true
|
||||
|
||||
/domhandler@4.3.1:
|
||||
resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
|
||||
engines: {node: '>= 4'}
|
||||
|
@ -4972,7 +5055,6 @@ packages:
|
|||
/entities@4.5.0:
|
||||
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||
engines: {node: '>=0.12'}
|
||||
dev: false
|
||||
|
||||
/error-ex@1.3.2:
|
||||
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
|
||||
|
@ -5357,7 +5439,15 @@ packages:
|
|||
/form-data-encoder@2.1.4:
|
||||
resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
|
||||
engines: {node: '>= 14.17'}
|
||||
dev: false
|
||||
|
||||
/form-data@4.0.0:
|
||||
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
asynckit: 0.4.0
|
||||
combined-stream: 1.0.8
|
||||
mime-types: 2.1.35
|
||||
dev: true
|
||||
|
||||
/format@0.2.2:
|
||||
resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
|
||||
|
@ -5420,6 +5510,11 @@ packages:
|
|||
engines: {node: '>=6.9.0'}
|
||||
dev: false
|
||||
|
||||
/get-caller-file@2.0.5:
|
||||
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
|
||||
engines: {node: 6.* || 8.* || >= 10.*}
|
||||
dev: true
|
||||
|
||||
/get-intrinsic@1.2.4:
|
||||
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
@ -5438,7 +5533,6 @@ packages:
|
|||
/get-stream@6.0.1:
|
||||
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/github-slugger@1.5.0:
|
||||
resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==}
|
||||
|
@ -5555,6 +5649,23 @@ packages:
|
|||
responselike: 3.0.0
|
||||
dev: false
|
||||
|
||||
/got@13.0.0:
|
||||
resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==}
|
||||
engines: {node: '>=16'}
|
||||
dependencies:
|
||||
'@sindresorhus/is': 5.6.0
|
||||
'@szmarczak/http-timer': 5.0.1
|
||||
cacheable-lookup: 7.0.0
|
||||
cacheable-request: 10.2.14
|
||||
decompress-response: 6.0.0
|
||||
form-data-encoder: 2.1.4
|
||||
get-stream: 6.0.1
|
||||
http2-wrapper: 2.2.1
|
||||
lowercase-keys: 3.0.0
|
||||
p-cancelable: 3.0.0
|
||||
responselike: 3.0.0
|
||||
dev: true
|
||||
|
||||
/graceful-fs@4.2.10:
|
||||
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
|
||||
dev: false
|
||||
|
@ -5768,6 +5879,13 @@ packages:
|
|||
wbuf: 1.7.3
|
||||
dev: false
|
||||
|
||||
/html-encoding-sniffer@3.0.0:
|
||||
resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
whatwg-encoding: 2.0.0
|
||||
dev: true
|
||||
|
||||
/html-entities@2.4.0:
|
||||
resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==}
|
||||
dev: false
|
||||
|
@ -5857,7 +5975,6 @@ packages:
|
|||
|
||||
/http-cache-semantics@4.1.1:
|
||||
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
|
||||
dev: false
|
||||
|
||||
/http-deceiver@1.2.7:
|
||||
resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
|
||||
|
@ -5888,6 +6005,17 @@ packages:
|
|||
resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
|
||||
dev: false
|
||||
|
||||
/http-proxy-agent@5.0.0:
|
||||
resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
'@tootallnate/once': 2.0.0
|
||||
agent-base: 6.0.2
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/http-proxy-middleware@2.0.6(@types/express@4.17.21):
|
||||
resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
|
@ -5924,7 +6052,16 @@ packages:
|
|||
dependencies:
|
||||
quick-lru: 5.1.1
|
||||
resolve-alpn: 1.2.1
|
||||
dev: false
|
||||
|
||||
/https-proxy-agent@5.0.1:
|
||||
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
agent-base: 6.0.2
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/human-signals@2.1.0:
|
||||
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
|
||||
|
@ -5943,7 +6080,6 @@ packages:
|
|||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
safer-buffer: 2.1.2
|
||||
dev: false
|
||||
|
||||
/icss-utils@5.1.0(postcss@8.4.35):
|
||||
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
|
||||
|
@ -6177,6 +6313,10 @@ packages:
|
|||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/is-potential-custom-element-name@1.0.1:
|
||||
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
|
||||
dev: true
|
||||
|
||||
/is-reference@3.0.2:
|
||||
resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
|
||||
dependencies:
|
||||
|
@ -6297,6 +6437,44 @@ packages:
|
|||
argparse: 2.0.1
|
||||
dev: false
|
||||
|
||||
/jsdom@22.1.0:
|
||||
resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==}
|
||||
engines: {node: '>=16'}
|
||||
peerDependencies:
|
||||
canvas: ^2.5.0
|
||||
peerDependenciesMeta:
|
||||
canvas:
|
||||
optional: true
|
||||
dependencies:
|
||||
abab: 2.0.6
|
||||
cssstyle: 3.0.0
|
||||
data-urls: 4.0.0
|
||||
decimal.js: 10.4.3
|
||||
domexception: 4.0.0
|
||||
form-data: 4.0.0
|
||||
html-encoding-sniffer: 3.0.0
|
||||
http-proxy-agent: 5.0.0
|
||||
https-proxy-agent: 5.0.1
|
||||
is-potential-custom-element-name: 1.0.1
|
||||
nwsapi: 2.2.7
|
||||
parse5: 7.1.2
|
||||
rrweb-cssom: 0.6.0
|
||||
saxes: 6.0.0
|
||||
symbol-tree: 3.2.4
|
||||
tough-cookie: 4.1.3
|
||||
w3c-xmlserializer: 4.0.0
|
||||
webidl-conversions: 7.0.0
|
||||
whatwg-encoding: 2.0.0
|
||||
whatwg-mimetype: 3.0.0
|
||||
whatwg-url: 12.0.1
|
||||
ws: 8.16.0
|
||||
xml-name-validator: 4.0.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
dev: true
|
||||
|
||||
/jsesc@0.5.0:
|
||||
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
|
||||
hasBin: true
|
||||
|
@ -6310,7 +6488,6 @@ packages:
|
|||
|
||||
/json-buffer@3.0.1:
|
||||
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
|
||||
dev: false
|
||||
|
||||
/json-parse-even-better-errors@2.3.1:
|
||||
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
|
||||
|
@ -6340,7 +6517,6 @@ packages:
|
|||
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
|
||||
dependencies:
|
||||
json-buffer: 3.0.1
|
||||
dev: false
|
||||
|
||||
/khroma@2.1.0:
|
||||
resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
|
||||
|
@ -6484,7 +6660,6 @@ packages:
|
|||
/lowercase-keys@3.0.0:
|
||||
resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
dev: false
|
||||
|
||||
/lru-cache@10.2.0:
|
||||
resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
|
||||
|
@ -7373,12 +7548,10 @@ packages:
|
|||
/mimic-response@3.1.0:
|
||||
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/mimic-response@4.0.0:
|
||||
resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
dev: false
|
||||
|
||||
/mini-css-extract-plugin@2.8.0(webpack@5.90.2):
|
||||
resolution: {integrity: sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==}
|
||||
|
@ -7510,7 +7683,6 @@ packages:
|
|||
/normalize-url@8.0.0:
|
||||
resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==}
|
||||
engines: {node: '>=14.16'}
|
||||
dev: false
|
||||
|
||||
/npm-run-path@4.0.1:
|
||||
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
|
||||
|
@ -7529,6 +7701,10 @@ packages:
|
|||
boolbase: 1.0.0
|
||||
dev: false
|
||||
|
||||
/nwsapi@2.2.7:
|
||||
resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==}
|
||||
dev: true
|
||||
|
||||
/object-assign@4.1.1:
|
||||
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
@ -7602,7 +7778,6 @@ packages:
|
|||
/p-cancelable@3.0.0:
|
||||
resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
|
||||
engines: {node: '>=12.20'}
|
||||
dev: false
|
||||
|
||||
/p-limit@2.3.0:
|
||||
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
|
||||
|
@ -7727,7 +7902,6 @@ packages:
|
|||
resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
|
||||
dependencies:
|
||||
entities: 4.5.0
|
||||
dev: false
|
||||
|
||||
/parseurl@1.3.3:
|
||||
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
|
||||
|
@ -8355,6 +8529,10 @@ packages:
|
|||
ipaddr.js: 1.9.1
|
||||
dev: false
|
||||
|
||||
/psl@1.9.0:
|
||||
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
|
||||
dev: true
|
||||
|
||||
/punycode@1.4.1:
|
||||
resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
|
||||
dev: false
|
||||
|
@ -8377,6 +8555,10 @@ packages:
|
|||
side-channel: 1.0.5
|
||||
dev: false
|
||||
|
||||
/querystringify@2.2.0:
|
||||
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
|
||||
dev: true
|
||||
|
||||
/queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
|
||||
|
@ -8389,7 +8571,6 @@ packages:
|
|||
/quick-lru@5.1.1:
|
||||
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/randombytes@2.1.0:
|
||||
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
|
||||
|
@ -8841,6 +9022,11 @@ packages:
|
|||
strip-ansi: 6.0.1
|
||||
dev: false
|
||||
|
||||
/require-directory@2.1.1:
|
||||
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/require-from-string@2.0.2:
|
||||
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
@ -8852,11 +9038,9 @@ packages:
|
|||
|
||||
/requires-port@1.0.0:
|
||||
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
|
||||
dev: false
|
||||
|
||||
/resolve-alpn@1.2.1:
|
||||
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
|
||||
dev: false
|
||||
|
||||
/resolve-from@4.0.0:
|
||||
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
|
||||
|
@ -8880,7 +9064,6 @@ packages:
|
|||
engines: {node: '>=14.16'}
|
||||
dependencies:
|
||||
lowercase-keys: 3.0.0
|
||||
dev: false
|
||||
|
||||
/retry@0.13.1:
|
||||
resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
|
||||
|
@ -8902,6 +9085,10 @@ packages:
|
|||
resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
|
||||
dev: false
|
||||
|
||||
/rrweb-cssom@0.6.0:
|
||||
resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==}
|
||||
dev: true
|
||||
|
||||
/rtl-detect@1.1.2:
|
||||
resolution: {integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==}
|
||||
dev: false
|
||||
|
@ -8942,12 +9129,18 @@ packages:
|
|||
|
||||
/safer-buffer@2.1.2:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
dev: false
|
||||
|
||||
/sax@1.3.0:
|
||||
resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
|
||||
dev: false
|
||||
|
||||
/saxes@6.0.0:
|
||||
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
|
||||
engines: {node: '>=v12.22.7'}
|
||||
dependencies:
|
||||
xmlchars: 2.2.0
|
||||
dev: true
|
||||
|
||||
/scheduler@0.23.0:
|
||||
resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
|
||||
dependencies:
|
||||
|
@ -9460,6 +9653,10 @@ packages:
|
|||
use-sync-external-store: 1.2.0(react@18.2.0)
|
||||
dev: false
|
||||
|
||||
/symbol-tree@3.2.4:
|
||||
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
|
||||
dev: true
|
||||
|
||||
/tailwindcss@3.4.1:
|
||||
resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
|
@ -9580,6 +9777,23 @@ packages:
|
|||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/tough-cookie@4.1.3:
|
||||
resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
|
||||
engines: {node: '>=6'}
|
||||
dependencies:
|
||||
psl: 1.9.0
|
||||
punycode: 2.3.1
|
||||
universalify: 0.2.0
|
||||
url-parse: 1.5.10
|
||||
dev: true
|
||||
|
||||
/tr46@4.1.1:
|
||||
resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
dev: true
|
||||
|
||||
/trim-lines@3.0.1:
|
||||
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
|
||||
|
||||
|
@ -9747,6 +9961,11 @@ packages:
|
|||
unist-util-is: 6.0.0
|
||||
unist-util-visit-parents: 6.0.1
|
||||
|
||||
/universalify@0.2.0:
|
||||
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
|
||||
engines: {node: '>= 4.0.0'}
|
||||
dev: true
|
||||
|
||||
/universalify@2.0.1:
|
||||
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
|
@ -9809,6 +10028,13 @@ packages:
|
|||
webpack: 5.90.2
|
||||
dev: false
|
||||
|
||||
/url-parse@1.5.10:
|
||||
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
|
||||
dependencies:
|
||||
querystringify: 2.2.0
|
||||
requires-port: 1.0.0
|
||||
dev: true
|
||||
|
||||
/use-sync-external-store@1.2.0(react@18.2.0):
|
||||
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
|
||||
peerDependencies:
|
||||
|
@ -9883,6 +10109,13 @@ packages:
|
|||
unist-util-stringify-position: 4.0.0
|
||||
vfile-message: 4.0.2
|
||||
|
||||
/w3c-xmlserializer@4.0.0:
|
||||
resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
xml-name-validator: 4.0.0
|
||||
dev: true
|
||||
|
||||
/watchpack@2.4.0:
|
||||
resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
@ -9904,6 +10137,11 @@ packages:
|
|||
resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==}
|
||||
dev: false
|
||||
|
||||
/webidl-conversions@7.0.0:
|
||||
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
|
||||
engines: {node: '>=12'}
|
||||
dev: true
|
||||
|
||||
/webpack-bundle-analyzer@4.10.1:
|
||||
resolution: {integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==}
|
||||
engines: {node: '>= 10.13.0'}
|
||||
|
@ -10070,6 +10308,26 @@ packages:
|
|||
engines: {node: '>=0.8.0'}
|
||||
dev: false
|
||||
|
||||
/whatwg-encoding@2.0.0:
|
||||
resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
iconv-lite: 0.6.3
|
||||
dev: true
|
||||
|
||||
/whatwg-mimetype@3.0.0:
|
||||
resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
|
||||
engines: {node: '>=12'}
|
||||
dev: true
|
||||
|
||||
/whatwg-url@12.0.1:
|
||||
resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
tr46: 4.1.1
|
||||
webidl-conversions: 7.0.0
|
||||
dev: true
|
||||
|
||||
/which@1.3.1:
|
||||
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
|
||||
hasBin: true
|
||||
|
@ -10147,7 +10405,6 @@ packages:
|
|||
optional: true
|
||||
utf-8-validate:
|
||||
optional: true
|
||||
dev: false
|
||||
|
||||
/xdg-basedir@5.1.0:
|
||||
resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
|
||||
|
@ -10161,6 +10418,20 @@ packages:
|
|||
sax: 1.3.0
|
||||
dev: false
|
||||
|
||||
/xml-name-validator@4.0.0:
|
||||
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
|
||||
engines: {node: '>=12'}
|
||||
dev: true
|
||||
|
||||
/xmlchars@2.2.0:
|
||||
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
|
||||
dev: true
|
||||
|
||||
/y18n@5.0.8:
|
||||
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
|
||||
engines: {node: '>=10'}
|
||||
dev: true
|
||||
|
||||
/yallist@3.1.1:
|
||||
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
|
||||
dev: false
|
||||
|
@ -10178,6 +10449,24 @@ packages:
|
|||
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
/yargs-parser@21.1.1:
|
||||
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
|
||||
engines: {node: '>=12'}
|
||||
dev: true
|
||||
|
||||
/yargs@17.7.2:
|
||||
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
cliui: 8.0.1
|
||||
escalade: 3.1.2
|
||||
get-caller-file: 2.0.5
|
||||
require-directory: 2.1.1
|
||||
string-width: 4.2.3
|
||||
y18n: 5.0.8
|
||||
yargs-parser: 21.1.1
|
||||
dev: true
|
||||
|
||||
/yocto-queue@0.1.0:
|
||||
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
|
||||
engines: {node: '>=10'}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import BrowserOnly from "@docusaurus/BrowserOnly";
|
||||
import {
|
||||
Accordion,
|
||||
AccordionItem,
|
||||
|
@ -16,83 +15,84 @@ export interface Faq {
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets the query parameter `openFaqItems` which is an array of
|
||||
* faq items that should be pre-opened
|
||||
* @type {Function}
|
||||
* Finds the nearest heading to an element
|
||||
* @param {Element} null The element to find the nearest heading to
|
||||
* @return {Element|null} The heading or null
|
||||
*/
|
||||
const getOpenFaqItemsFromUrl = (slug: string): string[] => {
|
||||
if (typeof window !== "undefined") {
|
||||
// Use URLSearchParams to parse the query parameters from the current URL
|
||||
const searchParams = new URLSearchParams(window.location.search);
|
||||
const findNearestHeading = (element: Element): Element | null => {
|
||||
const isHeading = (element: Element): boolean =>
|
||||
/^H[1-6]$/.test(element.tagName);
|
||||
let currentElement: Element | null = element;
|
||||
|
||||
// Get the 'openFaqItems' parameter as a comma-separated string
|
||||
const openFaqItemsString = searchParams.get(`openFaqItems-${slug}`);
|
||||
while (currentElement !== null) {
|
||||
// Check previous siblings
|
||||
let prevSibling: Element | null = currentElement.previousElementSibling;
|
||||
while (prevSibling) {
|
||||
if (isHeading(prevSibling)) {
|
||||
return prevSibling;
|
||||
}
|
||||
prevSibling = prevSibling.previousElementSibling;
|
||||
}
|
||||
|
||||
// If the parameter exists, split it by commas into an array; otherwise, return an empty array
|
||||
return openFaqItemsString ? openFaqItemsString.split(",") : [];
|
||||
// If no heading is found among siblings, move to the parent node
|
||||
currentElement = currentElement.parentElement;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates query parameters in the url when items are opened
|
||||
* so that a link can be shared with the faq item already opened
|
||||
* Takes in uuids from react-accessible-accordion onchange event
|
||||
* and updates the browser url with the nearest heading's id
|
||||
* @param {[type]} void [description]
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
const handleChange = (
|
||||
openFaqItems: (string | number)[],
|
||||
slug: string,
|
||||
): void => {
|
||||
const searchParams = new URLSearchParams(window.location.search);
|
||||
const updateUrlWithNearestHeadingId = (targetElementUuid: string): void => {
|
||||
const targetElement: HTMLElement | null = document.getElementById(
|
||||
`accordion__heading-${targetElementUuid[0]}`,
|
||||
);
|
||||
|
||||
if (openFaqItems.length > 0) {
|
||||
// Create comma-separated string and update/add the parameter
|
||||
searchParams.set(
|
||||
`openFaqItems-${slug}`,
|
||||
openFaqItems.map(String).join(","),
|
||||
);
|
||||
} else {
|
||||
// If openFaqItems is empty, remove the parameter from the URL
|
||||
searchParams.delete(`openFaqItems-${slug}`);
|
||||
const nearestHeading: Element | null = targetElement
|
||||
? findNearestHeading(targetElement)
|
||||
: null;
|
||||
|
||||
// Add the hash without scrolling the page
|
||||
if (nearestHeading?.id) {
|
||||
window.history.pushState({}, "", `#${nearestHeading.id}`);
|
||||
}
|
||||
|
||||
// Construct the new URL, preserve existing parameters
|
||||
const newUrl = `${window.location.protocol}//${window.location.host}${
|
||||
window.location.pathname
|
||||
}?${searchParams.toString()}`;
|
||||
|
||||
// Change the URL without reloading the page
|
||||
window.history.pushState({ path: newUrl }, "", newUrl);
|
||||
// If they're all collapsed, remove the hash
|
||||
if (!targetElement) {
|
||||
history.pushState(
|
||||
null,
|
||||
null,
|
||||
window.location.origin +
|
||||
window.location.pathname +
|
||||
window.location.search,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const FaqAccordion = ({
|
||||
rows,
|
||||
slug,
|
||||
}: { rows: Faq[]; slug: string }): JSX.Element => {
|
||||
export const FaqAccordion = ({ rows }: { rows: Faq[] }): JSX.Element => {
|
||||
return (
|
||||
<BrowserOnly fallback={<div>Loading FAQ's...</div>}>
|
||||
{() => {
|
||||
return (
|
||||
<Accordion
|
||||
allowMultipleExpanded={true}
|
||||
allowZeroExpanded={true}
|
||||
onChange={(itemUuids) => {
|
||||
handleChange(itemUuids, slug);
|
||||
}}
|
||||
preExpanded={getOpenFaqItemsFromUrl(slug)}
|
||||
>
|
||||
{rows.map((row, index) => (
|
||||
// biome-ignore lint/suspicious/noArrayIndexKey: React complains if there is no key
|
||||
<AccordionItem key={index}>
|
||||
<AccordionItemHeading aria-level="3">
|
||||
<AccordionItemButton>{row.title}</AccordionItemButton>
|
||||
</AccordionItemHeading>
|
||||
<AccordionItemPanel>
|
||||
<ReactMarkdown>{row.content}</ReactMarkdown>
|
||||
</AccordionItemPanel>
|
||||
</AccordionItem>
|
||||
))}
|
||||
</Accordion>
|
||||
);
|
||||
<Accordion
|
||||
allowMultipleExpanded={true}
|
||||
allowZeroExpanded={true}
|
||||
onChange={(itemUuids) => {
|
||||
updateUrlWithNearestHeadingId(itemUuids);
|
||||
}}
|
||||
</BrowserOnly>
|
||||
>
|
||||
{rows.map((row, index) => (
|
||||
// biome-ignore lint/suspicious/noArrayIndexKey: React complains if there is no key
|
||||
<AccordionItem key={index}>
|
||||
<AccordionItemHeading aria-level="3">
|
||||
<AccordionItemButton>{row.title}</AccordionItemButton>
|
||||
</AccordionItemHeading>
|
||||
<AccordionItemPanel>
|
||||
<ReactMarkdown>{row.content}</ReactMarkdown>
|
||||
</AccordionItemPanel>
|
||||
</AccordionItem>
|
||||
))}
|
||||
</Accordion>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -356,12 +356,12 @@ export const FrequencyCalculator = (): JSX.Element => {
|
|||
</div>
|
||||
|
||||
<div className="flex gap-2 mb-4">
|
||||
<label className="font-semibold">Number of channels:</label>
|
||||
<label className="font-semibold">Number of slots:</label>
|
||||
<input type="number" disabled={true} value={numChannels} />
|
||||
</div>
|
||||
|
||||
<div className="flex gap-2">
|
||||
<label>Channel:</label>
|
||||
<label>Frequency Slot:</label>
|
||||
<select
|
||||
value={channel}
|
||||
onChange={(e) => setChannel(Number.parseInt(e.target.value))}
|
||||
|
@ -375,7 +375,7 @@ export const FrequencyCalculator = (): JSX.Element => {
|
|||
</div>
|
||||
|
||||
<div className="flex gap-2">
|
||||
<label className="font-semibold">Channel Frequency:</label>
|
||||
<label className="font-semibold">Frequency of slot:</label>
|
||||
<input type="number" disabled={true} value={channelFrequency} />
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -228,4 +228,14 @@ th,
|
|||
td {
|
||||
padding-left: 10px !important;
|
||||
padding-right: 10px !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Need all tab content to show for PDF generation */
|
||||
@media print {
|
||||
ul.tabs {
|
||||
display: none;
|
||||
}
|
||||
.tabs-container div > div {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue