From 3f8dc96ad3ac5bacf71c40589d8742da0900c341 Mon Sep 17 00:00:00 2001 From: linagee Date: Mon, 18 Sep 2023 20:37:41 -0600 Subject: [PATCH 01/21] Add USB DFU to RAK4631 Bootloader update --- .../nrf52/convert-rak4631r.mdx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx b/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx index 6c9a56e3..90d814b5 100644 --- a/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx +++ b/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx @@ -9,6 +9,25 @@ The only difference between the _RAK4631-R_ (RUI3) and the _RAK4631_ (Arduino) i Meshtastic requires the Arduino bootloader on RAK WisBlock nRF52-based boards. The process of converting the bootloader only needs to be performed once. +Here are two ways to flash the bootloader: + +## USB Device Firmware Upgrade (DFU) + +1. Install [Python](https://www.python.org/downloads/) +2. Install [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil) + ```shell + pip3 install adafruit-nrfutil + ``` +3. Download the required bootloader: [WisCore_RAK4631_Board_Bootloader.zip](https://github.com/RAKWireless/WisBlock/releases/download/0.4.2/WisCore_RAK4631_Board_Bootloader.zip) +4. Connect your RAK device by USB. +5. Flash the bootloader + ```shell + adafruit-nrfutil --verbose dfu serial --package ./WisCore_RAK4631_Board_Bootloader.zip -p /dev/ttyACM0 -b 115200 --singlebank --touch 1200 + ``` +6. Continue with the normal [flashing instructions](/docs/getting-started/flashing-firmware/nrf52/drag-n-drop) + +## Debugger + This conversion requires the use of either a [DAPLink](https://daplink.io/) or [J-Link](https://www.segger.com/products/debug-probes/j-link/). The most reasonably priced and available is the [RAKDAP1](https://store.rakwireless.com/products/daplink-tool). 1. Install [Python](https://www.python.org/downloads/) From f4e9c19c314a82e47d774f6adfad8786256c366d Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Wed, 20 Sep 2023 16:51:53 -0700 Subject: [PATCH 02/21] add remote-hardware page --- .../module-config/remote-hardware.mdx | 238 ++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 docs/configuration/module-config/remote-hardware.mdx diff --git a/docs/configuration/module-config/remote-hardware.mdx b/docs/configuration/module-config/remote-hardware.mdx new file mode 100644 index 00000000..2f75ae29 --- /dev/null +++ b/docs/configuration/module-config/remote-hardware.mdx @@ -0,0 +1,238 @@ +--- +id: remote-hardware +title: Remote Hardware Module Usage +slug: /settings/moduleconfig/remote-hardware +sidebar_label: Remote Hardware +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +The Remote Hardware Module allows control of a GPIO pin on a remote node. Config options are: Enabled, Allow Undefined Pin Access, Available Pins + +:::info + +While configuring this module may be available in clients, setting and reading GPIO's is currently only possible using the [Meshtastic Python CLI](/docs/software/python/cli) + +::: + +## Remote Hardware Config Values + +### Enabled + +Whether the module is enabled + +### Allow Undefined Pin Access + +Whether the module allows consumers to read/write to pins not that are not defined in available_pins + +### Available Pins + +Exposes the available pins to the mesh for reading and writing + + +## Remote Hardware Module Client Availability + + + + + +:::info +All Remote Hardware Module config options are available for Android in app. + +1. Open the Meshtastic App +2. Navigate to: **Vertical Ellipsis (3 dots top right) > Radio Configuration > Remote Hardware** +::: + + + + +:::info +All Remote Hardware Module config options are available on iOS, iPadOS and macOS app.and higher at Settings > Modules > Remote Hardware +::: + + + + +:::info + +All Remote Hardware Module config options are available in the python CLI. + +::: + + + + +Not implemented. + + + + + + + +## Remote Hardware Module Usage + +:::warning +GPIO access is fundamentally dangerous because invalid options can physically damage or destroy your hardware. Ensure that you fully understand the schematic for your particular device before trying this as we do not offer a warranty. Use at your own risk. +::: + +### Supported Operations + +- Set any GPIO +- Read any GPIO +- Receive notification of changes in any GPIO + +### Setup + +You can get the latest python tool/library with `pip3 install --upgrade meshtastic` on Windows/Linux/OS-X. See the [python section](/docs/software/python/cli/installation) for more details. + +To prevent access from untrusted users, you must first make a `gpio` channel that is used for authenticated access to this feature. You'll need to install this channel on both the local and remote node. + +The procedure using the python command line tool is: + +1. Connect local device via USB +2. Create a GPIO channel: + ```shell + meshtastic --ch-add gpio + ``` +3. If doing local testing, you may also want to change the speed of the channel: + ```shell + meshtastic --ch-mediumfast + ``` +4. Check the channel has been created and copy the long "Complete URL" that contains all the channels on that device: + ```shell + meshtastic --info + ``` +5. Connect the remote device via USB (or use the [remote admin](/docs/configuration/remote-admin) feature to reach it through the mesh) +6. Set it to join the gpio channel you created: + ```shell + meshtastic --seturl theurlyoucopiedinstep3 + ``` + +Now both devices should be able to talk over the `gpio` channel. Send a text message from one to the other to verify. Also run `--nodes` to verify the second node shows up. + +### Masks + +To determine the appropriate mask for the pin(s) that you want to know. The python program (and output) below might help: + +```python +>>> for i in range(1,45): +... print(f'GPIO:{i} mask:{hex(2**i)}') +... +GPIO:1 mask:0x2 +GPIO:2 mask:0x4 +GPIO:3 mask:0x8 +GPIO:4 mask:0x10 +GPIO:5 mask:0x20 +GPIO:6 mask:0x40 +GPIO:7 mask:0x80 +GPIO:8 mask:0x100 +GPIO:9 mask:0x200 +GPIO:10 mask:0x400 +GPIO:11 mask:0x800 +GPIO:12 mask:0x1000 +GPIO:13 mask:0x2000 +GPIO:14 mask:0x4000 +GPIO:15 mask:0x8000 +GPIO:16 mask:0x10000 +GPIO:17 mask:0x20000 +GPIO:18 mask:0x40000 +GPIO:19 mask:0x80000 +GPIO:20 mask:0x100000 +GPIO:21 mask:0x200000 +GPIO:22 mask:0x400000 +GPIO:23 mask:0x800000 +GPIO:24 mask:0x1000000 +GPIO:25 mask:0x2000000 +GPIO:26 mask:0x4000000 +GPIO:27 mask:0x8000000 +GPIO:28 mask:0x10000000 +GPIO:29 mask:0x20000000 +GPIO:30 mask:0x40000000 +GPIO:31 mask:0x80000000 +GPIO:32 mask:0x100000000 +GPIO:33 mask:0x200000000 +GPIO:34 mask:0x400000000 +GPIO:35 mask:0x800000000 +GPIO:36 mask:0x1000000000 +GPIO:37 mask:0x2000000000 +GPIO:38 mask:0x4000000000 +GPIO:39 mask:0x8000000000 +GPIO:40 mask:0x10000000000 +GPIO:41 mask:0x20000000000 +GPIO:42 mask:0x40000000000 +GPIO:43 mask:0x80000000000 +GPIO:44 mask:0x100000000000 +``` + +## Testing GPIO Operations + +You can programmatically do operations from your own python code by using the Meshtastic `RemoteHardwareClient` class. See the [Python API](/docs/software/python/cli/installation) documentation for more details. + +You can add a simple LED and resistor to validate that the GPIO operations work as expected. Use [this tutorial](https://www.instructables.com/Slide-Switch-With-Arduino-Uno-R3/) as a guide. + +### Requirements + +- (x2) Meshtastic devices (one device could be on a local computer, and the other one just has to be powered and is the one with the LED to be connected to it) +- (x2) wires (black and yellow; they can be any color but typically black is used for ground) +- (x1) LED +- (x1) 220Ω resistor (somewhat optional, but recommended) +- (x1) Breadboard (optional) + +### Preparation + +1. Disconnect the remote device from power (battery/usb) +2. Connect the resistor to the longer (positive) lead of the LED and the yellow wire to the other end of the resistor +3. Connect the other end of the yellow wire to a GPIO pin that will not cause any issues (ex: for TLoraV1, we can use GPIO21) +4. Connect the black "ground" wire from the ground pin on the device (ex: for TLoraV1 it is the end pin next to the RST button) to the shorter (negative) lead of the LED +5. Power on the device + +### Validation + +By default, the pin may be "off" or "on". (It will most likely "off".) See the steps below for running commands. In the example of GPIO21, the mask would be `0x200000`. + +![T-Lora v1 with LED on GPIO 21](/img/LED_on_TLoraV1.jpg) + +## Using GPIOs from the Python CLI + +### Writing a GPIO + +```shell title="Example: turning 'on' GPIO4" +meshtastic --port /dev/ttyUSB0 --gpio-wrb 4 1 --dest 28979058 +# Connected to radio +# Writing GPIO mask 0x10 with value 0x10 to !28979058 +``` + +### Reading a GPIO + +```shell title="Example: read GPIO4" +meshtastic --port /dev/ttyUSB0 --gpio-rd 0x10 --dest 28979058 +# Connected to radio +# Reading GPIO mask 0x10 from !28979058 +# GPIO read response gpio_value=16 +``` + +:::note +If the mask and the gpio_value match, then the value is "on". If the gpio_value is 0, then the value is "off". +::: + +### Watching for GPIO Changes + +```shell title="Example: watching GPIO4 for changes" +meshtastic --port /dev/ttyUSB0 --gpio-watch 0x10 --dest 28979058 +# Connected to radio +# Watching GPIO mask 0x10 from !28979058 +# Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=16 +# Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=0 +# Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=16 +# < press ctrl-c to exit > +``` From 5642df9648c147c78f4dd11c0c1944a4da3a000e Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Wed, 20 Sep 2023 16:52:38 -0700 Subject: [PATCH 03/21] update index --- docs/configuration/module-config/index.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/configuration/module-config/index.mdx b/docs/configuration/module-config/index.mdx index 1f44bde9..d7086b3a 100644 --- a/docs/configuration/module-config/index.mdx +++ b/docs/configuration/module-config/index.mdx @@ -18,6 +18,7 @@ Modules are included in the firmware and allow users to extend the functionality | [MQTT](/docs/settings/moduleconfig/mqtt) | Forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on another mesh over the internet. | | [Neighbor Info](/docs/settings/moduleconfig/neighbor-info) | Send info on 0-hop neighbors to the mesh. | | [Range Test](/docs/settings/moduleconfig/range-test) | Send messages with GPS location at an interval to test the distance your devices can communicate. Requires (at least) one device set up as a sender and one as a receiver. The receiver(s) will log all incoming messages to a CSV. | +| [Remote Hardware](/docs/settings/moduleconfig/remote-hardware) | Set and read a GPIO status remotely over the mesh. | | [Serial Module](/docs/settings/moduleconfig/serial) | Send messages across the mesh by sending strings over a serial port. | | [Store & Forward](/docs/settings/moduleconfig/store-and-forward-module) | Stores messages on a device for delivery after disconnected clients rejoin the mesh. | | [Telemetry](/docs/settings/moduleconfig/telemetry) | Attach sensors to the device and transmit readings on a regular interval to the mesh. | From f9a35c46c565ba000a1d919cc5a6de1e85d85d57 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Wed, 20 Sep 2023 16:55:04 -0700 Subject: [PATCH 04/21] update link --- docs/development/device/module-api.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/device/module-api.mdx b/docs/development/device/module-api.mdx index 01832c4c..fa61fa22 100644 --- a/docs/development/device/module-api.mdx +++ b/docs/development/device/module-api.mdx @@ -57,7 +57,7 @@ A number of [key services](http://github.com/meshtastic/firmware/tree/master/src - [NodeInfoModule](http://github.com/meshtastic/firmware/tree/master/src/modules/NodeInfoModule.h) - Receives/sends User information to other nodes so that usernames are available in the databases. -- [RemoteHardwareModule](http://github.com/meshtastic/firmware/tree/master/src/modules/RemoteHardwareModule.h) - A module that provides easy remote access to device hardware (for things like turning GPIOs on or off). Intended to be a more extensive example and provide a useful feature of its own. See [remote-hardware](/docs/hardware/peripheral/#remote-hardware) for details. +- [RemoteHardwareModule](http://github.com/meshtastic/firmware/tree/master/src/modules/RemoteHardwareModule.h) - A module that provides easy remote access to device hardware (for things like turning GPIOs on or off). Intended to be a more extensive example and provide a useful feature of its own. See [remote-hardware](/docs/settings/moduleconfig/remote-hardware) for details. - [ReplyModule](http://github.com/meshtastic/firmware/tree/master/src/modules/ReplyModule.h) - A simple module that just replies to any packet it receives (provides a 'ping' service). From 0013d2e18ec640a8c8495aabe86002aaf85658bb Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Wed, 20 Sep 2023 16:55:36 -0700 Subject: [PATCH 05/21] remove gpio-peripherals --- docs/configuration/gpio-peripherals.mdx | 165 ------------------------ 1 file changed, 165 deletions(-) delete mode 100644 docs/configuration/gpio-peripherals.mdx diff --git a/docs/configuration/gpio-peripherals.mdx b/docs/configuration/gpio-peripherals.mdx deleted file mode 100644 index ea8c5730..00000000 --- a/docs/configuration/gpio-peripherals.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -id: gpio-peripherals -title: Configuring GPIO Peripherals -sidebar_label: Setup GPIO Peripherals -slug: /hardware/peripheral/ -sidebar_position: 4 ---- - -## Remote Hardware - -:::warning -GPIO access is fundamentally dangerous because invalid options can physically damage or destroy your hardware. Ensure that you fully understand the schematic for your particular device before trying this as we do not offer a warranty. Use at your own risk. -::: - -### Supported Operations - -- Set any GPIO -- Read any GPIO -- Receive notification of changes in any GPIO - -### Setup - -You can get the latest python tool/library with `pip3 install --upgrade meshtastic` on Windows/Linux/OS-X. See the [python section](/docs/software/python/cli/installation) for more details. - -To prevent access from untrusted users, you must first make a `gpio` channel that is used for authenticated access to this feature. You'll need to install this channel on both the local and remote node. - -The procedure using the python command line tool is: - -1. Connect local device via USB -2. Create a GPIO channel: - ```shell - meshtastic --ch-add gpio - ``` -3. If doing local testing, you may also want to change the speed of the channel: - ```shell - meshtastic --ch-mediumfast - ``` -4. Check the channel has been created and copy the long "Complete URL" that contains all the channels on that device: - ```shell - meshtastic --info - ``` -5. Connect the remote device via USB (or use the [remote admin](/docs/configuration/remote-admin) feature to reach it through the mesh) -6. Set it to join the gpio channel you created: - ```shell - meshtastic --seturl theurlyoucopiedinstep3 - ``` - -Now both devices should be able to talk over the `gpio` channel. Send a text message from one to the other to verify. Also run `--nodes` to verify the second node shows up. - -### Masks - -To determine the appropriate mask for the pin(s) that you want to know. The python program (and output) below might help: - -```python ->>> for i in range(1,45): -... print(f'GPIO:{i} mask:{hex(2**i)}') -... -GPIO:1 mask:0x2 -GPIO:2 mask:0x4 -GPIO:3 mask:0x8 -GPIO:4 mask:0x10 -GPIO:5 mask:0x20 -GPIO:6 mask:0x40 -GPIO:7 mask:0x80 -GPIO:8 mask:0x100 -GPIO:9 mask:0x200 -GPIO:10 mask:0x400 -GPIO:11 mask:0x800 -GPIO:12 mask:0x1000 -GPIO:13 mask:0x2000 -GPIO:14 mask:0x4000 -GPIO:15 mask:0x8000 -GPIO:16 mask:0x10000 -GPIO:17 mask:0x20000 -GPIO:18 mask:0x40000 -GPIO:19 mask:0x80000 -GPIO:20 mask:0x100000 -GPIO:21 mask:0x200000 -GPIO:22 mask:0x400000 -GPIO:23 mask:0x800000 -GPIO:24 mask:0x1000000 -GPIO:25 mask:0x2000000 -GPIO:26 mask:0x4000000 -GPIO:27 mask:0x8000000 -GPIO:28 mask:0x10000000 -GPIO:29 mask:0x20000000 -GPIO:30 mask:0x40000000 -GPIO:31 mask:0x80000000 -GPIO:32 mask:0x100000000 -GPIO:33 mask:0x200000000 -GPIO:34 mask:0x400000000 -GPIO:35 mask:0x800000000 -GPIO:36 mask:0x1000000000 -GPIO:37 mask:0x2000000000 -GPIO:38 mask:0x4000000000 -GPIO:39 mask:0x8000000000 -GPIO:40 mask:0x10000000000 -GPIO:41 mask:0x20000000000 -GPIO:42 mask:0x40000000000 -GPIO:43 mask:0x80000000000 -GPIO:44 mask:0x100000000000 -``` - -## Testing GPIO Operations - -You can programmatically do operations from your own python code by using the Meshtastic `RemoteHardwareClient` class. See the [Python API](/docs/software/python/cli/installation) documentation for more details. - -You can add a simple LED and resistor to validate that the GPIO operations work as expected. Use [this tutorial](https://www.instructables.com/Slide-Switch-With-Arduino-Uno-R3/) as a guide. - -### Requirements - -- (x2) Meshtastic devices (one device could be on a local computer, and the other one just has to be powered and is the one with the LED to be connected to it) -- (x2) wires (black and yellow; they can be any color but typically black is used for ground) -- (x1) LED -- (x1) 220Ω resistor (somewhat optional, but recommended) -- (x1) Breadboard (optional) - -### Preparation - -1. Disconnect the remote device from power (battery/usb) -2. Connect the resistor to the longer (positive) lead of the LED and the yellow wire to the other end of the resistor -3. Connect the other end of the yellow wire to a GPIO pin that will not cause any issues (ex: for TLoraV1, we can use GPIO21) -4. Connect the black "ground" wire from the ground pin on the device (ex: for TLoraV1 it is the end pin next to the RST button) to the shorter (negative) lead of the LED -5. Power on the device - -### Validation - -By default, the pin may be "off" or "on". (It will most likely "off".) See the steps below for running commands. In the example of GPIO21, the mask would be `0x200000`. - -![T-Lora v1 with LED on GPIO 21](/img/LED_on_TLoraV1.jpg) - -## Using GPIOs from the Python CLI - -### Writing a GPIO - -```shell title="Example: turning 'on' GPIO4" -meshtastic --port /dev/ttyUSB0 --gpio-wrb 4 1 --dest 28979058 -# Connected to radio -# Writing GPIO mask 0x10 with value 0x10 to !28979058 -``` - -### Reading a GPIO - -```shell title="Example: read GPIO4" -meshtastic --port /dev/ttyUSB0 --gpio-rd 0x10 --dest 28979058 -# Connected to radio -# Reading GPIO mask 0x10 from !28979058 -# GPIO read response gpio_value=16 -``` - -:::note -If the mask and the gpio_value match, then the value is "on". If the gpio_value is 0, then the value is "off". -::: - -### Watching for GPIO Changes - -```shell title="Example: watching GPIO4 for changes" -meshtastic --port /dev/ttyUSB0 --gpio-watch 0x10 --dest 28979058 -# Connected to radio -# Watching GPIO mask 0x10 from !28979058 -# Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=16 -# Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=0 -# Received RemoteHardware typ=GPIOS_CHANGED, gpio_value=16 -# < press ctrl-c to exit > -``` From 737afafb124aff0f2ed1fa2146b90a064bb0b27a Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Wed, 20 Sep 2023 21:13:58 -0700 Subject: [PATCH 06/21] add send box and simplify image markdown --- docs/software/mqtt/home-assistant.mdx | 65 ++++++++++++++++-- .../software/mqtt/ha_input_text_helper.png | Bin 0 -> 62409 bytes 2 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 static/img/software/mqtt/ha_input_text_helper.png diff --git a/docs/software/mqtt/home-assistant.mdx b/docs/software/mqtt/home-assistant.mdx index 8693bafe..28854a66 100644 --- a/docs/software/mqtt/home-assistant.mdx +++ b/docs/software/mqtt/home-assistant.mdx @@ -206,13 +206,13 @@ Always Check Configuration before reloading YAML or restarting Home Assistant to Create a new Entities Card and select the entities you have created. -[](/img/software/mqtt/ha_entities_card.png) +![HA Entities Card](/img/software/mqtt/ha_entities_card.png) ### Logbook Card for Messaging The logbook card is useful to keep a record of incoming messages from the mesh. Below is an example of how the logbook card would be set up. -[](/img/software/mqtt/ha_logbook_card.png) +![HA Logbook Card](/img/software/mqtt/ha_logbook_card.png) ## Trigger HA Automations @@ -223,7 +223,7 @@ It is possible to have Home Assistant trigger automations based on messages or e This example waits for a message containing @Tropho and then sends a pop-up notification to his flip phone with the message. Optionally you can have ALL messages from the mesh sent as HA notifications to your phone. -[](/img/software/mqtt/ha_at_tropho.png) +![HA At Tropho Message](/img/software/mqtt/ha_at_tropho.png) Add the following code to your automations.yaml file. Be sure to modify the `topic`, `regex_search`, and `service` for your configuration. ```yaml @@ -253,4 +253,61 @@ Add the following code to your automations.yaml file. Be sure to modify the `to mode: single ``` -This same type of automation is very useful to trigger other actions in Home Assistant. For example, you could turn on a fan when the temperature reaches a certain value, or a play a sound on a speaker when a new message is received. \ No newline at end of file +This same type of automation is very useful to trigger other actions in Home Assistant. For example, you could turn on a fan when the temperature reaches a certain value, or a play a sound on a speaker when a new message is received. + + +## Create a Send Message Entity + +It is possible to create an input text box to send messages to your mesh from within Home Assistant. + +### Input Text Helper Entity + +First, create an input text helper entity. The preferred way to configure an input text is via the HA interface at Settings > Devices & Services > Helpers. Click the add button and then choose the Text option. Make a text input helper with a max length of 190 to be on the safe side. See example below: + +![HA Input Text Helper](/img/software/mqtt/ha_input_text_helper.png) + +### Create a Send Message Automation + +This automation will check the send box for changes. After typing a message, either hit enter or click off the box and the automation will send a text string in JSON to the mqtt broker. Make sure to update the channel name and device ID in the example below. + +```yaml +- alias: Meshtastic - Send Automation + description: "" + trigger: + - platform: state + entity_id: + - input_text.meshtastic_send_box + condition: [] + action: + - delay: + hours: 0 + minutes: 0 + seconds: 1 + milliseconds: 0 + - service: mqtt.publish + data: + qos: 0 + retain: false + topic: msh/2/json/LongFast/!67ea9400 + payload: >- + {"channel":"0","sender":"broker","type":"sendtext","payload":"{{ + states('input_text.meshtastic_send_box') }}"} + - delay: + hours: 0 + minutes: 0 + seconds: 1 + milliseconds: 0 + - service: input_text.set_value + data: + value: " " + target: + entity_id: input_text.meshtastic_send_box + - delay: + hours: 0 + minutes: 0 + seconds: 2 + milliseconds: 0 + mode: single + ``` + + Add this card to your dashboard by going to Edit Dashboard -> + ADD CARD. Then search BY ENTITY for Meshtastic Send Box and check the box next to the entry. Click CONTINUE, then ADD TO DASHBOARD. \ No newline at end of file diff --git a/static/img/software/mqtt/ha_input_text_helper.png b/static/img/software/mqtt/ha_input_text_helper.png new file mode 100644 index 0000000000000000000000000000000000000000..80f5645390b532f01cc05e9debcf3f502f6d0b26 GIT binary patch literal 62409 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 W~ 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 Nr)_v5PxDO3e*vuvDU<*J literal 0 HcmV?d00001 From ca0c2068141e81ff3ad7bf377e20ea7de4420a17 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Sun, 24 Sep 2023 20:26:08 -0700 Subject: [PATCH 07/21] create tips --- docs/configuration/tips.mdx | 53 +++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 docs/configuration/tips.mdx diff --git a/docs/configuration/tips.mdx b/docs/configuration/tips.mdx new file mode 100644 index 00000000..41ca29bc --- /dev/null +++ b/docs/configuration/tips.mdx @@ -0,0 +1,53 @@ +--- +id: tips +title: Configuration Tips +sidebar_label: Tips +sidebar_position: 3 +--- + + +## (Not) Sharing Your Location + +Telemetry is shared over your [PRIMARY channel](/docs/settings/config/channels#role). This means that if your node has acquired GPS coordinates from an integrated GPS chip, or from your mobile device, your coordinates will be sent to the mesh over this channel, using it's defined encryption. + +By default the PRIMARY channel's name is LongFast with the encryption key "AQ==" (Base64 equivalent of Hex 0x01). If this is left unchanged, your location will be shared with all nodes in range that are also using the default channel. + +If you don't want anyone to see that your node exists, change your PRIMARY channel name and PSK. + +### Creating a Private Primary with Default Secondary + +If you'd like to connect with other Meshtastic users but only share your location with trusted parties, you may create a private PRIMARY channel and use the defaults for a SECONDARY channel. + +1. Ensure you have not changed the LoRa [Modem Preset](/docs/settings/config/lora#modem-preset) from the default `unset` / `LONG_FAST`. +2. On your PRIMARY channel, set anything you'd like for the channel's name and choose a random PSK. +3. Enable a SECONDARY channel with a blank name (will default to LongFast) with PSK "AQ==". +3. Since the radio's frequency is automatically changed based on your PRIMARY channel's name, you will have to manually set it back to Channel 20 (in LoRa settings) in order to interface with users on the default channel. + +## Rebroadcast "Public" Traffic + +Meshtastic nodes will rebroadcast all packets if they share [LoRa modem settings](/docs/settings/config/lora#lora-config-values), regardless of encryption (unless [Rebroadcast mode](/docs/settings/config/device#rebroadcast-mode) is set to `LOCAL_ONLY`). + +:::info + If you would like your nodes to include/expand the "public" mesh, you must use the default [modem preset](/docs/settings/config/lora#modem-preset) `LONG_FAST`. If you change your PRIMARY channel name, you must manually set the LoRa channel to 20. +::: + +## LoRa Modem Channels VS Chat Channels + +Meshtastic uses the word "channel" to define two different configuration properties: + +### 1. Device Config -> Channels + +These refer to "message groups" and include your PRIMARY and SECONDARY channels. All SECONDARY channels use the same LoRa modem config as your PRIMARY channel (including LoRa channel number). + +There are 8 total chat channels. Channel 0 is your PRIMARY channel, with channels 1-7 available for private group messaging and/or special channels such as [`admin`](/docs/configuration/remote-admin). + +### 2. Device Config -> LoRa -> Channel Number + +This refers to the frequency the radio is set to. Check out the [frequency calculator](/docs/overview/radio-settings#channel-frequency-calculator) to view the relationship between "channel number" and radio frequency. + +## Best Practices +- If you are part of a large mesh and don't know what a setting does, don't change it (unless you're super curious). +- Leave your [MAX HOPS](/docs/settings/config/lora#max-hops) set to 3 unless you're sure you need more (or less) to reach your destination node. +- Leave your [ROLE](/docs/settings/config/device#role) set to `CLIENT` unless you're sure another role would suit the node's purpose. For example, MQTT nodes do not need to be set to `ROUTER`. +- TEST your settings and hardware before you install in hard-to-reach locations. +- Connecting a node to the [public MQTT server](http://localhost:3000/docs/settings/moduleconfig/mqtt#connect-to-the-default-public-server) may publish the locations of all nodes in your mesh to the internet. This will also add every globally connected node to your node database and potentially flood your mesh with all types of packets. \ No newline at end of file From ffe4a6f9b4ab8fe78e70282c974648e0ca5ed21f Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Sun, 24 Sep 2023 20:32:40 -0700 Subject: [PATCH 08/21] make troubleshooting more prominent --- docs/software/android/usage.mdx | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/docs/software/android/usage.mdx b/docs/software/android/usage.mdx index e01be522..d5e69927 100644 --- a/docs/software/android/usage.mdx +++ b/docs/software/android/usage.mdx @@ -82,23 +82,11 @@ The app will generate a new QR code on the screen. This encodes the channel det 2. If the channel is shared from a file or link using the `Share` button, you can click on the file or link and you need to choose "Open with Meshtastic". -
- Troubleshooting shared links: Can't "open with Meshtastic". -
-
- If you don't see "Meshtastic" as an option to open the file or link with: -
- 1. Go to Android Settings > Apps > Default apps > Meshtastic > Opening - links -
- 2. Make sure you have in "links/web address": www.meshtastic.org -
- 3. If you see the option "Open the supported links", make sure it is - enabled. -
-
-
-
+:::info If a QR or URL opens a webpage instead of the APP. +1. Go to Android Settings > Apps > Default apps > Meshtastic > Opening links +2. Make sure you have in "links/web address": www.meshtastic.org +3. If you see the option "Open the supported links", make sure it is enabled. +::: [![Accept new channel](/img/android/android-accept-channel-c.png)](/img/android/android-accept-channel.png) From 048154b2a7233d43855254998ef5f61249d4ecf8 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Sun, 24 Sep 2023 20:40:52 -0700 Subject: [PATCH 09/21] tweaks --- docs/software/android/usage.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/software/android/usage.mdx b/docs/software/android/usage.mdx index d5e69927..d25878a3 100644 --- a/docs/software/android/usage.mdx +++ b/docs/software/android/usage.mdx @@ -82,7 +82,7 @@ The app will generate a new QR code on the screen. This encodes the channel det 2. If the channel is shared from a file or link using the `Share` button, you can click on the file or link and you need to choose "Open with Meshtastic". -:::info If a QR or URL opens a webpage instead of the APP. +:::info If a QR or URL opens a webpage instead of the APP or "Open with Meshtastic" is not an option: 1. Go to Android Settings > Apps > Default apps > Meshtastic > Opening links 2. Make sure you have in "links/web address": www.meshtastic.org 3. If you see the option "Open the supported links", make sure it is enabled. From ef729572e8ebd550003135e7818920650d4fa7de Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Sun, 24 Sep 2023 21:33:17 -0700 Subject: [PATCH 10/21] add private primary qr's --- .../private-primary-ANZ.png | Bin 0 -> 948 bytes .../private-primary-CN.png | Bin 0 -> 938 bytes .../private-primary-EU_433.png | Bin 0 -> 938 bytes .../private-primary-EU_868.png | Bin 0 -> 951 bytes .../private-primary-IN.png | Bin 0 -> 941 bytes .../private-primary-JP.png | Bin 0 -> 940 bytes .../private-primary-KR.png | Bin 0 -> 949 bytes .../private-primary-LORA_24.png | Bin 0 -> 947 bytes .../private-primary-NZ_865.png | Bin 0 -> 943 bytes .../private-primary-RU.png | Bin 0 -> 934 bytes .../private-primary-TH.png | Bin 0 -> 944 bytes .../private-primary-TW.png | Bin 0 -> 935 bytes .../private-primary-UA_433.png | Bin 0 -> 948 bytes .../private-primary-UA_868.png | Bin 0 -> 940 bytes .../private-primary-US.png | Bin 0 -> 940 bytes 15 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-ANZ.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-CN.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-EU_433.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-EU_868.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-IN.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-JP.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-KR.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-LORA_24.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-NZ_865.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-RU.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-TH.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-TW.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-UA_433.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-UA_868.png create mode 100644 static/img/configuration/qr-private-primary-example/private-primary-US.png diff --git a/static/img/configuration/qr-private-primary-example/private-primary-ANZ.png b/static/img/configuration/qr-private-primary-example/private-primary-ANZ.png new file mode 100644 index 0000000000000000000000000000000000000000..3579b1deea849d814dbc476fc1be6ec303d72a06 GIT binary patch literal 948 zcmV;l155mgP)vCM~raFPIS(~^1B#4B;ev=HtRdhgL> zI#;Ze|KJ{+G$Gs~SeU1W8;p@&GEe{*vhX3?B51=ahe*pdE~pTqQsN)^tt(F9L>e zl28tpn!2>Y&X`#bJcMh6l`k(GtBRJFUU*9u!YRTNGBgFdGF6WOPL~i)610FdDTWQ+ zJAh-xj1bNdm?pei86^z`A|04&2sa6o2R~dYLgpZLGH4LOO@fA2ij*AlAxkPAS|OYy zv^X_4R+l$A0w{sZ4&fXD+7+ifNXxX6em{*0;SPbXk4n0Ei|XiY`xU}b0)=9OJ~WU# zoh?-bBV_Xt{#DBb>yQlo8_+Cw->c$%e(EfWvoJpfTdI7=9hlpw9q z=DNbqkwYegbA)>J%AB!_Yg>bPRAdP`if>A>1UCyzz#0Sw(14Rp}VQNrLx1U)=|hwnXj<;T!>wISU4L&8YfR ztq^V!mM6swsg*W0Rd>m*5H1qvi54T1qlLz~*1Ql-6P8)}wM%vlQc&F?947#Z7YXE$ zDG62U3gI9@cg0ERX>TM^cRi>Ot`ZKs~Ey9!k?}XLI@#*5JCvy(+FSn WJ&W1ZjG=7+0000OVt z-YLov1q$)X7MI~D3gIqc+TXrtwFW@jCO`=H2%RTZi(LiOPr>Nn-h^3Rj;Us|_E}Xix z!p@jkw^|{bBdmOR;Z*&!XZMD1lJJC#Ou??Gy2pSfhH#SLh0{dVfTsCm!#oaF;$&goeY`3hE zrQ@(eI7dLA(!U;rOSQ6opGJjnhoEh#g!aqlD%WoN6~a-1gi?cFG_X9%9kRi+VIkZk zNERoJW@}|)gL*84lZ46(Yh-Uqn%SriJ-uKdTq2B7+bL)_bJznkD}-|dpN&B(+B3Iw z1LRW(X9-)BY8SNN%Pfr|gqwtFwkoF5JeUV8Y6xcuqlyy*^6VWbaHmiR;Us~tUYj#^ zQKx-FndYMqju9jgoF&$!!-Rep`AoYIZW1_^YFU!ae5)n(zz}W{U}K&R0c+jz>>k}1 z!c7A0jV3YT%v{Ba8f0GxhY3EX!^3?|+7fldgm8`k*qk9*DsV>KH^zlmpLb6p762=c@W88r&Eaa}832&W0ltVWP%*NXFO+#SMk0^oSDV|K@#vkl=W!QYM( z`nSEYMAgN?hH#Gnd*WPiTc5ibZPhAk8WG+-g+X0n*>S&cd1VYaMxakaGD?p3@bk%UR4Ochw$-fnd5I! zH$9sW&JxPj^jz^i0##qIRL^h-rwCT%+doc(aFL*kp+bw6Q9V;jw>1>PJpz4_DkWR! z&5*EPg%C~>x=^YJLXRX?4|x=Nc?kCiJcQz;OJm!L89eb5!a+j)n=bN-x#IjO&(CNG z_XwJL2|NIB7z-MX)ef6_jK$mN!b}(GZRibWqd;lBVX5#_7>74dEoA_P0ijDBoB>?NJ6y z2=@r?tlbM`%jW0`;WA;`Uthq(832F9dA)F(ue0gxJ7TX`atY8QS37sXJo64?wjMb_TjuNzhH5rNY5=?_U3*jh%X`)b( zGHs6qA|1MvHzAxOR3`|nDc?sTFHul4J3}}}`1Gi3p+=_KuVD0iaWaHEgl_Nhvl?$o zDlO^64&fXDI-REmdqg@x`h7JjggXS-An1nW%hSF63gIY$La||ea!PFQq!tSyoFz~e zB@JhL#m`K?=@|>*B%ycGNZzzG)~vh5c-#u%7GaFqPJz3b!yYKHLbygK>NDBW_LMB+ zuBHKdGK6acJtRuEH<$cn)-;E3k^m{Pl4f`i4_MR?&Jv^wN(my`8z@jGQ3&BAp`Kou zGj@?JuX@3g5bhBu5tJp;#bMF|fHFqA5N;A`DzHYjNAp&T>Y+loNq~$g{n+XQ)b8OM zL%2yOdE*1?vWn28s?srplLVbJL!2;j3XepNm=Mkp0Gac(0Zy9Tr)q_8lduNqR?pk0 z5lmgOD};*#dZLAlvO+e_HJBX2S;8{QIU>i}Do8ww3L%6LLI@#*5Plos57i!<$$=YKx&QzG M07*qoM6N<$f~C5Y@c;k- literal 0 HcmV?d00001 diff --git a/static/img/configuration/qr-private-primary-example/private-primary-EU_868.png b/static/img/configuration/qr-private-primary-example/private-primary-EU_868.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb3f2e69566c7502ef9df79cc293e776185904c GIT binary patch literal 951 zcmV;o14#UdP)(NWhLjug|gm9CgcfEdh~24J(U+v^(GZRiTqvjPihUWM;E0(kLO4jE3z7+X1$j&d;2xEK zA>1RVSvk_}L_@U^4xKh3oFq*9+ZV0YK)a@V3E?1tSR`-Mtz1zZ?pvD>&JieQS{((= zxC7cZF0(>7Nthyb&cNf_rE2Pf5DpSr7>-oxqffo;5r%M;00VU94<|-`7chjA1a`P^ z&aD-8#>~3a3gH}K<;x4F(}|X)7v7SEaEkDRj7-6t`1JYqnD%4{M+sgyO=Jydngv=h z(~J<#5tJql6)WSzQB2M54dEz32_kEjTChZ(tlbb(X0@z z5q>eKp_qm7KKA7y93%9;MX7c{=Zb#gxH*KI1pNVYBL zB*4Zz9Rk+6<=H*DF@&20+M80v0rO^8tVp!6FNCXv?TNms4<>Di`j!yR5dfPrB+iSa zN8RUBhH#UxJSl}#pB(XNciFBGE)wL47dEODYUBD$@e{&j!ZOQ0{&d7>)3p$86CkPj z&Em1{oNWk43I2ARa6PMNiK>gM62dt`Yh#Pt=JCD*ZPhvq;TGXfpAbR_A%qY@2;tiZ Z{{TmVYx%G|cA5YH002ovPDHLkV1oIqsO10v literal 0 HcmV?d00001 diff --git a/static/img/configuration/qr-private-primary-example/private-primary-IN.png b/static/img/configuration/qr-private-primary-example/private-primary-IN.png new file mode 100644 index 0000000000000000000000000000000000000000..29d5e8263177974c325587b50c53cc4f46449e77 GIT binary patch literal 941 zcmV;e15*5nP)KXgAz(8p@b4jDB&j(@ScBve-(bc ze!X7-d`FxmW}<|X1gQZFmY>(=lgB1zqJ*0SEQc6Vo;o_FHf91P949dGVRLNHLXai= z90H$KF-KpPyw+7E+$D$;rKtCk>OBvfi4sl{qRRjN(?kgu2}>7_Ma!r+!=>9AD&ZbM zK3Nso7I`xy?5j}1Ny5hw`Q!MYnDBvyG74W_!a0IedMJ8m*|uT^U-47ILBfENF7YZi z5aG^cB^)Kdx~yc;83&bltxC8_*rqI)+0GYRmP<-FNx;O0gmR$3YOTZ>(@MBZpqk>7 z-;7f6861FSt(8TkawD6C!y z*9dM$oFNv}V{i^l+LUmT0CjkHQiMqxUIk|V`e?@60Q+ezI@>vDp@VPqF@OJ34HyUOU2dC+hfBn;U>Wgr-`ibSR!S|Oc*7c zBLK1Kz35QcQImW@swLbcNFLZ1q}>vE_8qAiCEO%<2pT~aP7+U9q8yZPkMP==@KERW z##elHRtY5>C16ei)8HGiPOyHz8&$#`g0}cdnepYTd;3+wQG$e01BS!RCJ}@UE8!+V zvN&lpE60>AM7}>7E8!&J?W~c#8IzD1n(^gU3C9RAYC8q(W^PE3eI;BZ$eXRxr$}3- z9as2_izQqmj6N0xqnR|?X3-j!aFh^bI6~1pnD+sgTEba^Iyezy+IOJ9QVE3;P7?Ul zYjegfvF+7c=%j>u1W5#EiFL7C8UUOz-j#5Zz^Sa{z;E+W3#+Y!g9O+Z;tMzj;8%}U zC7dMC-oUhoGjlIiK0m73yb?|le6C?SVHS5uw34WVV+6qF42kn$$*B9rxDrkhmM0PG zc|^{*Glr{L!byTW@xn$$p%|B%;-`emgk@F`U#B^)I9 z?Kt83eTSClb#a}PaE<_b;#_gtaMg@hwTdO&BK*};LJ1|5P(leM{4~NpZm~=m0{^`6 P00000NkvXXu0mjfRgwiPpY#ZL$a30w%%6JnCl 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 literal 0 HcmV?d00001 From c03c3d47ba5641c81e71b430d7d764b0e7042221 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Sun, 24 Sep 2023 21:33:52 -0700 Subject: [PATCH 11/21] tweaks --- docs/configuration/tips.mdx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/configuration/tips.mdx b/docs/configuration/tips.mdx index 41ca29bc..0527bfa9 100644 --- a/docs/configuration/tips.mdx +++ b/docs/configuration/tips.mdx @@ -8,11 +8,11 @@ sidebar_position: 3 ## (Not) Sharing Your Location -Telemetry is shared over your [PRIMARY channel](/docs/settings/config/channels#role). This means that if your node has acquired GPS coordinates from an integrated GPS chip, or from your mobile device, your coordinates will be sent to the mesh over this channel, using it's defined encryption. +Telemetry is shared over your [PRIMARY channel](/docs/settings/config/channels#role). This means that if your node has acquired GPS coordinates from an integrated GPS chip, or from your mobile device, your coordinates will be sent to the mesh over this channel, using it's defined encryption (if any). By default the PRIMARY channel's name is LongFast with the encryption key "AQ==" (Base64 equivalent of Hex 0x01). If this is left unchanged, your location will be shared with all nodes in range that are also using the default channel. -If you don't want anyone to see that your node exists, change your PRIMARY channel name and PSK. +If you don't want anyone to see your node, change your PRIMARY channel name and PSK. ### Creating a Private Primary with Default Secondary @@ -21,7 +21,9 @@ If you'd like to connect with other Meshtastic users but only share your locatio 1. Ensure you have not changed the LoRa [Modem Preset](/docs/settings/config/lora#modem-preset) from the default `unset` / `LONG_FAST`. 2. On your PRIMARY channel, set anything you'd like for the channel's name and choose a random PSK. 3. Enable a SECONDARY channel with a blank name (will default to LongFast) with PSK "AQ==". -3. Since the radio's frequency is automatically changed based on your PRIMARY channel's name, you will have to manually set it back to Channel 20 (in LoRa settings) in order to interface with users on the default channel. +4. Since the radio's frequency is automatically changed based on your PRIMARY channel's name, you will have to manually set it back to Channel 20 (in LoRa settings) in order to interface with users on the default channel. + +To quickly test this configuration, scan your region's QR from [this folder](https://github.com/meshtastic/meshtastic/tree/master/static/img/configuration/qr-private-primary-example/). Remember to generate a new PSK for your private channel before sharing with your trusted nodes. ## Rebroadcast "Public" Traffic @@ -31,19 +33,19 @@ Meshtastic nodes will rebroadcast all packets if they share [LoRa modem settings If you would like your nodes to include/expand the "public" mesh, you must use the default [modem preset](/docs/settings/config/lora#modem-preset) `LONG_FAST`. If you change your PRIMARY channel name, you must manually set the LoRa channel to 20. ::: -## LoRa Modem Channels VS Chat Channels +## Chat Channels VS LoRa Modem Channels -Meshtastic uses the word "channel" to define two different configuration properties: +Meshtastic uses the word "channels" to define two different configuration properties: [Messaging Channels](/docs/settings/config/channels) & [LoRa Modem Channels](/docs/settings/config/lora#channel-number) -### 1. Device Config -> Channels +### Device Config: Channels -These refer to "message groups" and include your PRIMARY and SECONDARY channels. All SECONDARY channels use the same LoRa modem config as your PRIMARY channel (including LoRa channel number). +These configure "message groups" and include your PRIMARY and SECONDARY channels. All SECONDARY channels use the same LoRa modem config as your PRIMARY channel (including LoRa channel number). There are 8 total chat channels. Channel 0 is your PRIMARY channel, with channels 1-7 available for private group messaging and/or special channels such as [`admin`](/docs/configuration/remote-admin). -### 2. Device Config -> LoRa -> Channel Number +### Device Config: LoRa: Channel Number -This refers to the frequency the radio is set to. Check out the [frequency calculator](/docs/overview/radio-settings#channel-frequency-calculator) to view the relationship between "channel number" and radio frequency. +This configures the frequency the radio is set to. Check out the [frequency calculator](/docs/overview/radio-settings#channel-frequency-calculator) to view the relationship between "channel number" and radio frequency. ## Best Practices - If you are part of a large mesh and don't know what a setting does, don't change it (unless you're super curious). From 4f5cb063c0b510813b8e788ecf8179fec99ccdb1 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Sun, 24 Sep 2023 22:40:54 -0700 Subject: [PATCH 12/21] remove possibly confusing line --- docs/configuration/tips.mdx | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/configuration/tips.mdx b/docs/configuration/tips.mdx index 0527bfa9..1dcbc630 100644 --- a/docs/configuration/tips.mdx +++ b/docs/configuration/tips.mdx @@ -12,8 +12,6 @@ Telemetry is shared over your [PRIMARY channel](/docs/settings/config/channels#r By default the PRIMARY channel's name is LongFast with the encryption key "AQ==" (Base64 equivalent of Hex 0x01). If this is left unchanged, your location will be shared with all nodes in range that are also using the default channel. -If you don't want anyone to see your node, change your PRIMARY channel name and PSK. - ### Creating a Private Primary with Default Secondary If you'd like to connect with other Meshtastic users but only share your location with trusted parties, you may create a private PRIMARY channel and use the defaults for a SECONDARY channel. From e1a080151b27e17ab1f434ae5681a4bf63dd8fa4 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Mon, 25 Sep 2023 16:08:33 -0700 Subject: [PATCH 13/21] fix sidebar_position --- docs/configuration/tips.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/tips.mdx b/docs/configuration/tips.mdx index 1dcbc630..51679762 100644 --- a/docs/configuration/tips.mdx +++ b/docs/configuration/tips.mdx @@ -2,7 +2,7 @@ id: tips title: Configuration Tips sidebar_label: Tips -sidebar_position: 3 +sidebar_position: 4 --- From 5860e4ca5dd0e553108a9e515ac98f5dbc71f177 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Mon, 25 Sep 2023 17:17:53 -0700 Subject: [PATCH 14/21] smaller image --- .../software/mqtt/ha_input_text_helper.png | Bin 62409 -> 55017 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/img/software/mqtt/ha_input_text_helper.png b/static/img/software/mqtt/ha_input_text_helper.png index 80f5645390b532f01cc05e9debcf3f502f6d0b26..02e1d424254c530f6e131154e380bbeb5c935357 100644 GIT binary patch literal 55017 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 ioXb%9cfz?GO`*^cyG?3boYvvx*eT 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 W~ za2vKX0|-es??}R9LTn&Tq4{HOY$D#Z!*?K6vz}c~O>LSnw;cPrrBoiWhXM55AY5>x zrLfJDJ%9c_5qF^l^rw_EkE!dvihyGX2B7}WPgoIKM&tA7mQxYYU6#;9fmq?`Qqa;$ zfS(cQf><07>LoWNJ*g-9B@cf$Nl(vQ_8Rv-1?c>OO{u-Obn~f^9|mM^sh+QJ6s&=p zbM((FKjx;ZeNIHCdD zxqW+WXXEq!kM4*N5JIpqy$D65aYolRb;sPocw&C=ePLS1mKU@$4f=N)Jjer@p*mDs zo%p>Fj`1u8?)0;N&O>e|T?5(GU^hH88eDHw4?&RU=I@KerKQq-a95J11&H4FCi|{O zl=tO6p^&Q z-n1aosQ#!-hyd9!M)qSwX0JJnU7PI=Jxq{pY}6OXEmbu&fgS3}xPB+ZML}RWfmVHH zSsYmhG1D<;(-y=xSWK0iR3;1tfuXdtKUTAZ06cJM>oD;(R4jt^B{2ujPmQ&}T{+Kq09yoe5ZuG>&p*^7e*n#DAf!!4 zq$F!~!0(1r;GQy9!n8-whEp*^!XUDe^2_d2*xIOEfj@ZZSnWBQ^UjmN(qI@gYu#DoTQ{v zj)%TYUrlif(Nidg?kYq`qyFiUukn5f%0(bES!rqD}dR zq|zkr*YUNldtLV*&;2}WUF&()y4L+%Yp-?f-)=g;=lMB5pW}E>hkT=}Cjyf+va$`a(e}^g%Jsb`E-+TEF~PAitLbPR#}Qe>p(5|DtqmIXY^GQM=g} z<)=$Z@|454T?RDP0q>G|_p@2ZM>CtYLhoVMqLtURVf+1`3d(LA0h4rPchvnUFDP#vH1WLNc+1J*F{3w%+;sFi_V0qSK{B}ed(z^fL znj=bRPiX3bIo|7uPVKGMU%I7hITvqTnKL5&C}?>6f{oj#1thx#V|vb+^=q!pk9&Xd zq1DWp`5!E~G{3!L>$-23w=NoTPQ(G>VPU1ivmmn34FJ#&+U>S<{mjHq_VdIvTtT-O zYc|jM1N)%Jp)XhTrf{#iDjF_2;+F%0_RylY(dIX+IjbZ(lQ#oaAUXQ0pxFctK}##!R}_lJeOk- zTYsIHYea}rx^O(3Az_fBAviAVF&;MnQ$IE`|FsymLStWgPNl3_7-rC;$2i3(M@RoB zzi1=(_CSaEbdB=ij_#%oH#^jCU{-_9!xa(x25LT6mzsKsBpdH=l0_#)JG zt-FsOKfZUrevgLh8XC@~7cRA3KeJ@cxXt|1$yBPXyXxnktB34*Kl-K+PWfD?Znp_} zs1WoS%xmGb1Viz`0}`D9!WObQppc3UdfDiGm;F3r0XX75Kj>?XKNB8$-90y!Y`zx9 zi2vBlo-Ab(7)~eW?J0+E*WaObs#_+)WbvFm>>tZPKTgZ%1C@kmI;~t>T(;TebZFS9 zQL%9NqN^f3%j3EznT{tyz6Ats867fJ#gDS#J2t0jQ+&g9||#=3ZKkqV`JaT7*bP44e+| zQpL}lTXv*blg2I0TTs~g*&D8UcA>?!C)9iuv59s5iAB?^gtkVkCK45Zj|%q@THSl~ zn&|trpi56P3230YyD=X$@8*3J{f=x7==-qr>4fo$DZX{+euD*XGIakKMXIkPYLy-` zxpV(_c#e0u*JE)bW>;vim8t9n96+-i<2Tt?aEFN3lUuR*-~EPuwO|eif*ciQPkA~0 zojZFQk9VjVYGlaLe#@!n7<*+M$B=NsNC7{E`FibMPP*DUKZnO7rqkb04kyjaZW5jI zLHF{_`=u|}&YLd~yK~63Px%O3hJ5?}QXT_ukABnE2l~xD4HguYp4)cgroAmW#D@^} z#OZnQd0}4=Cg55}4jnOwU}F!_HuhxUO+)x8?ra@Q9^q(Z1Up34c6r&u_EKshM%Qxd z+aDk$L!xucgg6XhHA|?E6#!*ATr)qZ6nPQwemHOWR0Wlw8`YU3T*H*<)2$K53k4)W zJZv5-OFcys^eozbKg=r)!H4IUCW#JGIAHJTP%+5kdYjqaSRXCXG^Jm`^bC+!^d~Rm zxx3}8Srt3&zK(^*v4;Gji@1!t83l)>6q75v=Cfn~O6SYhIbP&_MkMx*?P+ysm*W4e z%5kuMM9RQj=T$rgX~;h`qpod3^E&J5kj zi329w$E*e$l7Y|H^}u!dMp2ag>t6i2jm9Qs&8x9nwrw+f{_NlfamoJ@kGiv;Mi zTi@A{`tEZ`&@q%nubC`=hEIG@#~8=3{8s-$_5-mtOi{GZG79E0^&K}*7keT$UKVS3 z{MCoNL_0RNb4j~3F(pX`Sr66Ts80Y>1qa&wtkGqUhI%3(*3>FN5hH@!0$&FW)~71w z2=KB~(l;`gNF<58U)FQwlVc+mKJUcqkiYa7N*+#8!=^1|fhv{CUUmg*hU>$41-Si! znY~Ht>=c|AHx}G((nsZ|rW9^cRa+}5A`U}F_14pS3hA+0_`-#nK6xi37zBl8F(*R? z>b9j&o8mKYf4&Sl(e}ck-!YL>i>tI?=!X@-u)Oa?B!fPI+_KL7?GkRJp7td*BBHhS zDm1d}5Z1i>EG+}%bOkR@MDrf7Qd7xTIZJP&?`Z<@BJxc<|LA5_nP#|I#8@E4epzqe zg&C+{&f;uNp6(M#ipUFu(f``8RD=`|#{?x;-0MI3UdERcV9<}suAEJ4I?(0e z!-qZpHyXPoH|(Sn`De{=bVI?=9+MT4GonPJvR{X$x^q@7x7*JM^K%@sKH~)ahmcQ$ zF_zPO$N{cB(ts*p@Gtc~Y=vyPiU3Z8A_4Z&%F@djc}-2)Z8LLbpeVfxG(WQIa~G$G zOW(isK+z1q;`y)TXpn+lbM*}iU{dz;%0p9HA=rfBG*ieKRb5u7IqN4j*vr(-9F(03 zJD=mf8D2X}x@jt;cog=3cF%Xn0)~BCJepoY`b#a?0a@=7H7My!)tyin@rsxt5YgXF zQ#c(jP?`j6;oX5Wzh_@_H`r`1d^prbdC2Ix`vu0{ya8e(%OyFAwIJk5^yC=`ZiD08 z+AE1^Z~|{gs(8r`n(uq0S<9EmrP}|s$&;&;%0U(fwdd3tyX~LY%`aCQrVNjn8^1u! z)*aKo6Q`j#s!Wg^iXf|on;(e`q$IdyOP!VX6+Nf72pH}8`1ePTrb+sf|C13lbt^mG zoR1IkZu##5ZQif=3B>^HgcsiSUh z^2As)$j4>)^u_4UCF4?5)64VHYCJs=E4~m2E3i3TEPAJVs6P0i-7781fcp!Yo${n| z19e`RW?N6nFbNnEA|m$Trz3CM|1zqkOHzze)`Jf&H}*}UAmSyYJIiqJ-dtn47~c?{ ziWz&e90K}u^R6l1qjN3yWBU&4Zoqi8Yu!5aeYqbPPp^OuxZxyLGDc(P^30qck&qeh z4LE4z5pZsZ;^e&z_d4Y#92jTOgoDnQLz~FG4scSAnJ{6CJb96dNY#xevw{LAX55|O z`&)MnoMjZZHt(rR!|4s1J^h|=d^9^zPW$DjkxVI+XVosZoe4i$b~VbvH@W@JGxrO} zjUDR>O5lXZRfI-}bp)#EB;H}uq%gZQN7ydi%PwQQw+~u$Q_VhhNMQfgUGw)@CB_K| zxNTvq&p+eV_Gp}qmMl%O>!=H+glm4Zv9byVEI|3y??_H3p=v*b`24PHLt8U(y`THI z8TCSf>B)#TaIcz)nxqMxo|fkVGYNS8U$q>WI7Ez}c)&ejZc2X@BaOo+LU)Guq)rk^ zs`iGr?weUXW^UI_T`%t(5H}eMi$py^Ud?#mJX(I>au@f-H~aJfJF(1lso%WAoK-U# zwdnk(Rcxjyhw%~P5_p$%lmTZ%Dfc)s7rivUZm@m_?Ku%&_wozW0#}x|Uo%ClO~G-y zzp}L-9Tjq|Kz9j++Fkvvax!?BBQlo`g5oabooy2+5{2MQ2G^e4;`_z;YBqh~&GqFb zf4@AmQLajia%-lD2%jyYrl1K~coMNCSS3f+uzAxaDXzHW>Y4qqeR~R7F~MxV4^cfM-4KLo z)W^!ABT96|okml&zoSZVzLYJWvdSdW^k$!8&RPp%lrrKstP_2bbnt**?72E-U?bM6 zR=pqWo1?9v;plo7;Yc|ripQw$oMmAESSpJFYUy|9FFmnj523o=mD^1U8Ilz*-RZ9v zkRi3u;=i``LEO(llg7%yE4FK8Gm2_#%rr?3zd3K`g%slrg7bY_n`@p$BTo>xt!NM7 z`g4}M$(s5!eV1G=<+f?Ae-yZb>GyyEj%gvnY>{B_N*!1by3&4N_a>`FC88I zYbgbLXPAV6LrhkH9!6{Fa7})DPl6Ua$UV^frv?o!FI%e>8FngXcs1OwAZPpz!D(N7 zZ1dfzb=$VV;00-A)aGP$oJPVLuu}a4^5g%+u$|TF#JP;#? zCp^*HA-}M&P=zzFpZ?7eQkOssc8_VM_FiXRZmzNGdRqm-4tGnhtl!D|rT)wPy)arn z|M0T}Iji~2YF>BiE$idotoh+F;47`W>(ijs+Zrz4p;n|h?C!{?YJJ+s|L{v#Y)>ow z=MY(NKfa`LJpZ>#J$X(oqS35H3mZ;1UM7xhHw3Tklh+v?2Wpla0kn0HBmcNx#}B=a zBm&w5+8+ST&xf37C;6^fKLA3W#@ZXP8GWb-MRi~e$S7*c)d$x;av|~tG&mm2;B2Cy z+_E+OI{u!&$#?3|(-e0;)q9!-2w#!uOlnSY9dn2=Bq>>p%Pe%mpADzXV=nWLK;=S*N=;PPa* z;hlw70$yDfo8$kN8RpzsVv@F{I!02@ny6mfY^eDRLohREQZgUyhr~ILluMe z5Xr-%f)Sv%v^ftry(mS9o7jUfTTI#%&rylrY=J$*Yasj?gaIfeVw_}$zg%L^t|H&nVv8O^Il@ouwZ$!V;_5);JnAOU3#qXBaT zEN7K)s46XdIi4ka6T<+S<{2vAo>)Ca3eBZTNE`LA2q8IK$oDz|=_K(D7&iqI<=ho0 z5_jN?qB15o$mNSH0zVri5hZ?~p+nOOZcx+q0cRlW4(YE%XS72I3vNlpF_quzR6aNR zgS)t3X|iZ3NJmPikC5I3Ztopz-fYykKeg0eHEog^CUJ^>`Ano^=!Y9Z8q#@LLk6Nw zswfB;tv7n~_suU=yGO_X^#)yRFdYa8Nm+>UdR4l`{$Pw%L?GLVCqbP=m`JeY`*^I; zYsf?4C89|%;G-k1k>D>9FANjTXd~+qh@AVI;$TntAwEkaze^f47SAM~O3WK@Uy^Zx zY5UD@5~m>`1|8yyqHE&j62*I}IUh#ox$^SziS?*NHi{XO1qm&U;)!x|AJ6$LEfNQ9 z&=*K6JGv85TY@Q^8N$b7N>B)OW*CbZ>nvbq?jhK6BBCBIIFQhmV(I2ZEj0ns9SKlvAUj594Ek(8q zxf?t-AYX#nj!CD8EYF5gM1Tq5kwpN`Ba?I&i8_&V=%9$RZ$HPndVxiWA3{vC)G91D zM~q2v`5T)FL)dqCWH|Z9+(vj`dP)$vu2ZJVVUdLUVDcuu3e5suW`Q zI7R1!N00Oqa%1Q8qvKQp4@x|TyiIbI_>JVg;_Px{g-qN&M5NntS6Jhe$~;+t>7^|) z_ADQyq+CC#z2W^}K(rZBQ1W@B5O^A7FX+MRM&%~8pj4pjn_@xZEziW$C#->ef_Ng- zUAj{r;fZS7jDZFN)J zH{{x-!ReBw@~mn;IH4;?<-`(u^oW2)XYq(lR*1`*oyzS)wl%U)T~oP(Yvw=Oa%&re zs8Do#A}Bc$#+}G((es(N#&Xh*a(oZPc~v&GHJ;8tmg6 zgt@#*s%cRpv~%fv@5!$U3v~%zw~vfnJg-7)ZJ0~!_L|*w2=$h3ZlsVMpIwU1CPtZ{ zp-c-2;JA|otu^AezYDH`x3W}_w%spS50b=3)XbPOXHF<^Wb#~_fd)^O@lG&m&k5z?_{L-V9mu+3>MwXe}KQZ|abIuN?0<$l^i}^qF z;>D*`2WsZ%&%YNHVWW&%U0C$wQg9oMU)S`@GB#?va;MXz@#7~;3aN}<2`E&K+flQ2 zH;PITS>P2JH8!A4>WjjA=EA9{nK$5cJa_UtgmV;kJrs8s&D>0ur{|aVVLV33P*K>% zpXst&v_Cl?MCcfOb?LaIp_ZmKc}6Xp|J7c8&nE+X7k`UU7K@W)ii&*?R;B{+;GxJ_ zer*oIXk!j2FLxC~-}J=$1JPk}yEp_{RYy7-tIEFwzo>|jJK);{@)S1!Y@yYH1|(icks`g=nzqp+lOVMLX0O( zBG$GyLXOd-V7ArL$}KYB{8cD3mw&3P)EzJPFQpqfm1gLv_`*sA(&SjB1N3LFN;O`M zVl@qTg6yjEqQqyh{b1Gr06*{OR!2|)s&n6VT3Qj51&#p6qO9O=zgaU}#13RRY0u8# zOyEtItx-}`?VX$PiIFI9e+)gRPn@`wk1b!wbxoTtt>Z$EH~ZVfPnSz`Xw4Fl^a-v< z!+(%K?DV*yetv3j14#wfxXThn!03RxoxKk}Ji{aA1?{maG$I0d=M}0&E_75jgTGS2 z2Pl1a74j(Ytbh&6Kpl&n8II2B6M2ZJ6Ew6ADko|NpE(mo8hpoZP}GvI#QPiS`~4eJ zx!6u5-BI=i_AifBW^)idBN|ZBo%?4eCnslNXU1FltmqnG4WCXk@1Xci zsgz)7Ay&n1Ja~UMXg#)5K@O9;|4}hZTN%55lr6V|f^F2xhwM;-%?eb>TBgF~H42n+ zP(Tz`?x@TKgyKF0+!Ko_wv-L4&RoN874$d=#cf|><6K?!PI3>A?-g!;dZl}_#*HQW zW8)hsJ-L#7;knGL_N=%4_)(Dmv4c*4eucKW&)8U zIdM~4U#@-po22VGN1_}Y$CvF`)Vx8}E?65rc&*opt3I!i$P1Oj8A}J&9t$+Y z!zS*W#+)Bs2hO=wp9lIN&Ol4y^{r0Yt~I|cYFa;k8MG6BH%=LTZr7c`dliawf^-Rz z>NHE0t9A1zi&bq_$Nc7~c$HaEC#CEJL1a_z3+*aI_#9Qtn`zSGrkixph?;Z-6yt~> zjfj7MU--v)*mPB+XHLdsevif~NnzEH_7>pe{NH~y1E**_u4(G3q7OqY}&b7US1T1r#eH8y;a*O)!!06wD{9s;CpNQbsp zM`o^Q*-8`&g&~=Co8)eZeTp*7`%)q4#OoBwiQVMuYAGj>gUqCTDqRa0d#Mmcaf$+( zK0CgbeEDXWzuK)vl%|a4+SXvY9P`0(Tl$WyeZ614td>XJxrtuO|0F5tM~zF0+8O+H z`*!vvfw8#LyZK>WgMt;Y*Qc+0u6p?SS6g+JFRF=@)8xsL=*!Ac6MrZ`v)iy4h1+$u zP#iN~ajB4Z$Dmq6^{v?&e1(?Nz{kXM%$=>u*bV(SVYsXf2jwkM8@>hqq`XBxE;Gz` z00(}qlWGYb%a%_F);{?3A`F0!PZ%z}*UC)Xx+8-J$PeEP+sS2e&%IG>DS~&j(FG8_ znmPhk&n&tGot2nl|MTq(B3&3WRRlGF*wpE?4NqtiH6(5?Gr=oqW=kS|Kpr8Dr(zm7 z`tf@Qm3G?g>e+-3l?Mc2X8OwU^OAvs~WCOL>+sCRO&kuI}Ut~UH zW_tB8{Zn~X?<;JE^^_@pwAK+%0==AAM#zsZc+*tQ+WddU`{g4ksAt!#l@gtt#5mG3 zvK1(Da?f^AdBp%`2-~$l6isyzR#x@b6&1|Mw?+{$GDa)d#?B zhau>$ud3qGZOM_%IaiPR>_2J zh6N>bxmQ$nwlq@z7D2EsE7trZpY@nyQOjYn+nrU332%lyPEHPJb*hQTx~)|2p=sWQ z!7umxH2JW6yIOg3O+l6SF$W7ONWSzV3+=y4UaR_#(`wO!_8mJ8PwcPhI=r*<^ZDD# z_&@h1(w%_wz-+^U(%wCPUCnFEnF(NYfC`q)>3UX2+7<*;oShJMF|`#pKD6|$+O)N0 zmq_aILq6IGZzX3&4A&G|q!xLq6g`1y6ds=inLm5>?DU*Vu`8V%+R%eY+6)IuIS`x@ z-{)*+XXi_T11evvO&0xfLiJnCw6dJrQnpghDfzv#@!(uv*z7I*0BBbamIDO9tnTTu zJW`?$-TuFY{g%bJKbjOrnI=kXK9kmO#+UnH+!i4TUZURDkI$DGlBVznpB7WmkXU3* z^LwdKqO@UpB2HXc6g?+9_zG=av0Su=NA<6lawAVo zlYYoC5x$C-54G@s*qq!V8K@*g4+83^U<5~2B@z54FdG;eovd_lAW*E=P(fvwWN8%6#>t)(H z&IM!`vp{0RYfOPAK{T|50kx8!K=peW05rg$k+S%FWMn2h6Be@D9Y_1zpjQ-KJm*Z` zUcK(FZz*ac@DH$<-e6~7j>!5fC|Gh&@X&_!2F>}Aq-AceYV57i~GP2`quIv$hL7b`=;9w;e6)47%^^OQZ^Ed%K z9pUt;2ZQdb-9pAC!bF@_8IJoInG2Ld=&!^Mi8x5Xa7jsv1v;C?wIeqgv~V=&nIJ7p z{@aoITpLtX8d9K$)E=gXhW~n6z+rxbR9gU!2MAb^1xs=Yg@yrec7Uxp2_|&}^?$jV z2t5k2ayj+%7UUOF%+rn=t8Zo)AQK~}3a|$ZSNb7=kWo~olGGzGIxWDEvmU#UH}l5U zV9MNGJCsk5N-z_;2LD>d#tCMHj6RYz)5BCADEu5K%6aZ#L3}4*c<~bRMD93bG06^A zFLUMhsQB95Q5SD~AN|dwNAc3u3e(1$<8Mz~I%7iTtER1Eug=zriEvBzadxh|=IC4; z>Skkm&aK(@-V?q|-1>fy`r^&4#=8HeI96KQ<3vv9CuScTTx=XwSa9pFW3?|T-Rue* zv@G<=%c{7xwS~dUz5z)=U|T@iqP_wjpj9};t6Xg##;d-ktqY?_$BvPvvj{g?h9;-P&+v) zLbr1vSYrZ#BVvLPj~zd zv>3uQ?5gwu<`xK3#DZ*J`VW*MT~#x;OE-16OXV+q7DV%I%5)hEd3P<{B-0w@+=RPNw%Ue z1U%r;reTZ_2|F!4ngpU_(+&-bW`7k{n;@zug_E8pq?nmbq zR|ticP1cJn_H&VOQ}AC=f;&f)q|^>rbS|^qr}d*SARN%K&;C6i?Ol4beG-aYr}@sO zhjFR(|1helInEGamVo^RUVQAWVwTs`oL9IO7mp2VLNFb6@~@7KJCFEnJOXXU+_)G{ z%dfj1-n;inQ)?#b8W2Ef&epZo&{xWx^Stw7AK7y-3-t$bZXZ5o z(88$M#H-lQy8!F$BN-kH{={#4jPr^b#^x;eu(tWFtdd2ApN!WHIoECc#EG)QAtgqi zHtA*=cZtsxnX#pMM~O3RD#aH;ZVL)(&0md^tMaGi=~TAhnZzIfAj_u1lCT2T;UP&T z8+To?wCzvlB^6E*jd{fcZNgO~xp%;5n6rf$+;k$VptNI$nuNurp9;@?pJ{1%nisp# zD8eUv_+Skqrd!MlxoD)S57SW;r~M7_AyL_qUnu7-A5SE-h6b<3vs=#M76`f&U{Z50 zYVtx(*>GbQdQslFnFKr_F9}2`xe~~+qQ=vF9pZA-ovePDV;IwIXHr2EjgRSnQ=M>; z@B|g9*79jXJEWTqpZ*WSdBA0aDFGsYU|hV*B-ETU??-9$-f*>v4so1!!iX+q?y6u0 zVjl0}Q+0~B(tto*%7pYOq|5PK|~x(Vt_B|QS-P# zi`k{6x`B41C`l}o{y)pkO*tV$tzhZdrE+b4owz9^Ifu!chZMfzW9~d*G8Zmf=%2(} zbDu+<7%yQJKx!yMoFs(?!khx4^k~pYC=B{=QAH!q$`D4BKndPMd1`J6dwuleu^|_h z1VT1HAT7a2Wc%3mSE@r@s5vjaNFpIlSUw_%`=5`O??r&g#woXqtwPV(c!7c_U31pPRF+&CZ>ol~ z-e0Kfg}sw24w~pcWWa7Dedb}2rrxEV@e;*Ej!h5;+B>2v1;wXiWYa_Pj=Hz|!H3p` z`F9FR9a!W4(!r5%eha{yWyfa|PFa)BC%gOGA(`>Vv#*feBkQ56aeLmmMN*0K(ycbz zj-7NdcYo&LEldHh&~9zxa896(IXidm6uun78gcrq)%S06Ymr6^CWw6Yvu8a2$O%q` zOrgZTxdB};esHGv9`V;8ON9qoO!+GtxdcBm(bT!^C$d2#h!UGAi;w+)F!VD#Iq@tZ z^c{4d=dK+)gc=4Ij$RcMP!d_aTWjRk8s`{W^4xFwG1{mHHIfIfwdAQ z1|P@g&W_&@t3zOC7#paYV{#i}I%)q>b2;#M=iOD@XT@%c4CC3;i z&5)Pt@_yOP&;3AV)6o^e;7RQRQQ9$R=8c6>vY-jsv~T)1B$>|rss(a%a!&aa@-kcT zwE0jO{Wc0j6F6c-ZeowDb&K7ndU<)pA9z+7vCKD)^2Sj)K)*4+6wZQO%An}tj*7>m z@FM{jaPVQ&?s04F0qA`)v%Uv&XP_2%ZD1SNXkbE8F*WEhEsC*ON~%YnBm%N~xGrud zyj6aBmCL8&k>M|IM6_hj83&a?;=&1=SHD}0IF?BDJ$G9p%QuaQN}ap9!w0Ei7_}&r z9VZM54~}@6ldO(getSLnCo|AtI**0QHy(aF0p`o1|$>1QaKck^B4JW2khic24NQ<>NA|y>yqBEIxVrI!J5V8CC zFy|uzP!>d^RODroyk&Nsa2f%j@ZVH;ZqoL}IikGPsLQ_Gh1FTX1oQAvAQdT(6;h{2 zLM@RyAys;EztkRU0Vx^KPe>dilh4V<4lAQ@4=}vFiHNdytS6amEhV=k$4c;;VBcEC zo>q9Cn+`XjXqVuro@N{jX+Q%}>@(u}m1Y9<&v{&G#^h^Br1^{wcT}L&5o5=$`mlIrGLSTqQHO$Is!C zT&DvcK3T4TJ$Zn~C~ekie@0UNFe?GLaLv!c66VXNH61$1FJ&6&xb(WBlT~H@;yDPQ zE?#)fp1sPU?MN?N1nMW&k+_QMp{JQ74w8*iTzLcgf*ej}QV-I5s%JC!I)<{Xr*-CB z`Sog-S5a7|GbAopI0Q5qQDxC!90zo`EEu?@O*g~d_TgGu?Vb=S+LyhR6fq@~dg2+6J^A-lVoW6qU`yf197nxhN<`NwL57qv(5 z0}B;b?03Ll?Nr0h3(Ax3-p#yva&^?XIG#;&T0<8R%%wQk02x#FAe zXdD}Uo<2`@(hx>s=MKc^rGNtc5F3wn;%+kgUxv1wt*ztNRqaKMP6I>v+0i=%AlRNIAK+^j|gG7k5Cb~LWOLr34*oV@f?;~GhM09cX21`+{fh_7{mVjoU< z_9baL?n-WKy3%WxOqo;T7PM~Me;+`B%xH{Q7;meP;6P%%LxD!Hs$_^qiDJfV$bq%x zVMb@Vk*c4)7NF}VV--G{@_CT@sfG{XDcj5#bqd^%X89fk6#3e0wk@{(H78+k-@Xq^ zu7>ych2#7TEn7q9yx14^oS85l_2X4rgy~vSzcoL>#11>Ks=O0`hE5ohjxZXPZ-`WG zZ@|OYRWc&);+`Lu%v8M}1F(ybo-Me=Ry|VTNCf}ys@F>%<-fgv=+w*J%Jim0QIuab+JZGi+In%xN zO~*AmND;$fB#~&C6jD)z3E7J%LV~C>G6z(N!Wp&7!&hrmaYJ%9A<@WPEfoGZZ=IL1>}`v>eA2NU!4PnCT6Ne=M!d%IPx3saWUIE7G{c=^W!r&23^#iez5Ll`z;^m2Bnmj z9KD*PmQp447YLb5gNU$=v7}?5@6<8lU686CAX*v-UK<3dmv(IUIe+{Cj+E8j!#cKZ zZE^B(J++j6*M2d2Fk(sEgC}uTAD>-uGs--0^2~*bOYIVrJ)Q?F)1TS0Uf??krbmk_ z`eJ|yrRyqmv{K}YRu`uCchAO`SN(Vq>#^wE@^|l^eZRUg%r!lx;_1S_|7iJ7)t7e9 zo32%!F;;VELC++3936MY)D6tnPUSNQXEE?Yy%kM`^Eop4{->3C*WO!r+%9(S@OW3o zT%DxzE8fhhGmF2{Ol^8M;Cq>(N3LT0m3iP+++$XUtie;@;iHE3jyW zZ{DJ)dTJWkbROrl+@P%^*~J9qLSR8557Bg3M>M^_08|%Nzx{R**1*zPEgIJ_$ko+b z3+tySsA|!($*%g**$@^0FQOs`%Z#xYKhmRR4v(AUc7ORsA=6+f>x za($>C<5{^PBzu{fgR21M2L~)rze0r|`s);S$Tt<4AD_b02yek~28MBX-7G^*bp*_{ zPh}^EcQVq*VSL7xMtd%uoc+(~b>?9oUN?yiuX<|NXcZEuHF04BM$JK=2nDl#igQbH zcNrtm;+gq&wL|Ah)NZ|9Gu&tP$>uc&meff1-?+ctx};g3C|bY8dByetes5QQttu7mY2Fp^-^V131H2l) z`4Z51#A&vDN;xx*-)Gt#I_M&i2Ff}4d4%7A2XB7MaN3aR>D-(omGJ%j+E1Oeu7|)k zG2mBtRp-wNF?UveJhn$9&|h0X+r3QBt@kNN@hVN-QG0W+Z`9Q+7t4FMA}ZWZ{JCjf z-<)aRU#{NpF4W0-h?i~r@kVMIW0{(1`gjup!(zgO89?G5e_R(`rkz*m7Q}+@W8-mM zVbqR@EmI3U%sZGezwWJJVk%h&+0t5xFWQ0QFz(HPd5*@F z&D2u#U!<1GicNIB@<{(qLfO!{Q$H)~yfPJ|w~EpV*L`$8b-3M?~T;*+wMQ+Yj@Mqe{dI*=i zju~6O@lM{;_sq#r(at^1GQakF-g1>iQRbH4&esxH7}3+?kLpi@-as6R81&$Xw4Z*m`&ZI3-nR#VK30q3L%l=aSKe&Hi;LIj1)dCN%?dkgS zp}1BfYO6Iu`g83QdUi1BI%EECH`kuHx^#b1&vRZktM#sZ@)_~AZu)LFy9Um>|K!_D zc;fRi>cSEhL%Zmz1#D!;UNm!DB%KQe0;TICY42!q^k)XB>2H1Z?3rI!vxf%m7^7~RA*hEHYHF@^2!V}yx0v)(;D>T&8Q$|jHDzpP{ z>>PTu28}binhtseRt4Xc=qv_m9SL}l00z{w<=aMo9Yc)s)D*pge0PoS_mb}hQ_u{A z++`=uv!A!z*8g1pw&vbr&)B zh*p_H?_?-hULeIxFj{_dFpb*k^B>K^J1?&zSwEaY9sjvS&D zQ=(WGOShR=9wbYha20Xf$h-~yRh&jjxG}@{z%DSv@(p00eaORtiQvdSD1#Ibt3E5Q z;(}$Wn+De<96Fp7#lXt9kCX$and91*W~3Of(;8X_fLulw3KJl>N3pm6?EGm~FPCk9 zF*cn(|M@I)y-}a~Xsz9}s?n7O$DicSDLXu6fbX;u7bcr2MqY_{ zaQ$bCq9%O}^c%rj|9bNZQ`Q{tHOM^>@n5f^c79vaBNvREFrm&$_be96)J79Ty}auME%{=fk>~E$xF&pO(cT<8FO&+O%o29|#?kNGT8n{;~`|`|E&52nvcp z_ap`(9cymEHC`a`9SM6#Xh%6ya89Ia6%$ZWB+rkkrtV5Cj1tgk1~WLzY3&>(w|cFF zFt8$!A-ggjvSIU9u#%EEE>{O(7}KJqP8iTVP+}0vK~mG90CGyI5%#VmK=}_`=KvjH zGL?iTvNR`z>t<-ub$x~m=K6lG%Q#VtswHFA4C6PkKd-^ z8UNYkudmwMR?Y3|vB}rv!2GJ4eNIOGbGy;TtZ|<_+g@Du`-83X-)6K)@vy{M%V>J8MJD*dW(n9Sd0b}>E|eFpSjJHS zn};87X@GPCZ1^2OYbt1>%z8wjqUx`?$>JRs;de>*#9{Q;vY`5+yn!{A>6tO)Lxbgt zyi~P-Aj#`qcSua(p!ARNU{uRxht%%V0Wvw5^gm|LHgHJk+9N*FW%I_vGVvCOcJ+_*|Q`dMVy|AYdnCcWo(iz zv_hjUUW4*?7upjzD8m)tQY3R;c6HI{+%3NXDNu0f8*gJK;prNM6V&@Z+Ob8=JMa6E z+gx3pI*D9=_bQ(14Q0$d+>3Tbd(iap3ZxutiR(nrB*(B-_2FuuU4n>AntJ|T!fQ)c zt|YU7K^AZB4TE&yB$nu!ES5w4-8fd`s$TDu!0Nu3Uy9~|*-2sqs95&1%42Jvq~iFC zq>wHqXQib>G04~~dJ$k66VS@El4}eQ9V5saUaJaU0;qhFNzRyxq#}eedH}i)1T0d& zP!^})tZTdG1h}?$&B`}ZCdx@6$BX!^IH={fu!jA;bqRct7=5aFMKIBU?}!K&zm)0q zPb-|2EiO0U-c8)t;rvC%=^_*YS~q(toYQuE^V} zdt&`q2{95c4xh=12pv`Mf3r%$R#K~ev7RRr48fdms%m?E8Y4nskwj3!pO-n1p4>|v zYxCBjwoPU$INWu^KATrFcv3xE8;w}-gE#BVuRI7t%(9v>QrxNyLj4QjLpn<_ah5{| z1cSpz5Y;2mIsi>az-v#lsnoW+GAg=+*u2a70Tk z!z_^D8peT0WVx6DS&Nc3LT<_8_tz~K z#;?KV8AQ^fJZPW3N!7&N74c0^39-!v}_hayYZ zRq_PDRy=-;Tv(ClIixr%YBrCbcdG6W+bR2d_;7WYZ5Ml0M#;c)bP@F$4j<{J43?u` z;#6U+q{5RRUR-u5tkh7Bx^9b_Sg`b&_{??4(Fcq$Sb5vpEyp=ljwXLl2-%Tgmn9zz z16!gb&)l?Y{Iylr^!mJ{ls0B=-&5Er_v9`d(Mo4d&1?X2=~yIeN)lWhbLPf4TBn>I z%-eAHYdX8WlxA+qJY?mPL#AX#-Wfm{jZa_MPpm90yPFAJoVQjoZ%oq9wZB?QrrECG z2Lm@J3{yJd{}W-#%`dQe8g?CF4JB);(fhshqB?IWGJjtG?RK+)`V%LA<-fNyy0Zkr zN)l*;A2jpMD|uQ-MRCCD@Xx+v;nhnzNEaq^t-e&?B3ghANfAuh`BU%}%QxGuL`}R) zoas5|W_}}P?DB2AYNSu^BA<#88i8?FfKFv%F( zP5ES9ha9q+FYNIAW&OuCweE4z7&wd1Um~{T%lpAsMs{vd$8Y; zEIDKpdWntD?AFArV{J>#E=(Q`sw&ct_cl|~P5~tDzgpArmw`-^gB}V=dEQIxN8|`9c3?#996B1Q6hpR zOj54wzSm?4C{QkonIlJ{Pa@+peeb^sXHI;SY$B2b47lW9d66AMj!PX1<-@9ZF0d&w zi_Ej;U5LNawM9W2Ezr}PsQT!hRWUG!WGMgqe1h|yGQXt$mujA?42Y1Of2gtVpoBeY zmTzuchT|c_b$)01Cl!GDf^lfrBNuwIM16K`hIE1z{%m! z>rV~55$aj_ZhV5rvRenbmibS4Mp^3r>M`4uj&v|WJbgdawZnk2rRBsM8ofX!evNa>Wb(y?XVZ6BA{okU5Q#TsV7y+kWXJ&zS&nL zMtPgnduX*AlQP?pnB2tSM^9034eC~Ced_bF+DIQ(PB^c=L;`$cb=G?4$s94+{mu5L zbqSw0u}bzoZYe`i`$uItc_k$fc7rujCQ%nL_-xXT(VrGFqh;L5fxFBYi*{$psTS&f%cF?QMvsU!yh)s8 zij0xt<(}~a9xbo!e0;QTf(S-oPL(o5B;kSyU4yRi>E>!059w&W4hUun2(gJ7@YLv8 z9u`+9Ii-*0>8%h&X^Bte^}r95{vy5Ryl56$@6}Pgk+}Kc_Nu&BFJOWkp@|(+PLv$t z$Pvw`k6|rG*{;+k*3!XA#go@qQd6b=k-#@vS2xBtI)PZ;4ShkQJGJQzv$vZ2Tb+M` zoI<@u@V+Tip8D0Rf0+PUKkxAC)$jUF{&>CK`tEs&23`jvv2qwsHa8#kc5%(eyIFUD zJ!RrIz0*g5Ox~tdR}x^anuTA>oQSGSr_94UL8G1Gdqdxh%9^F$ z7Eb=wqlbBCMf+)F2!PEWaqZo0jnSn8`|q{+miBb%iR}&`k@YJdCWjyF{zt-Ezd?YwHDjIV19GFV5;Gl2pO4JT}UT{PG$Pj z4taw-Prj{*zZec!SKY9&iA~(wV9{NB-&AXV)hklG>sE>p_ykosKvDLk`>&}wFTW@78 zJKQ1c;)CzJvHg(93g^JSUGL$2FOnohu@hsKOXVCy&7_&uQ6zb9dd*l?Gj<%E`XO;p zuSp-Z>MA;cyUErE4}``2e0Z*AMwo_%G|>-|Ti*C{gvEk`vGqQ+ak^!ZsCFwiZd{7m zEuTd@9~Ad7z0l>^FRs_G$9x~MGIQfiBmIz}c5bC$VNR5g1|R2Dtj#RsNP!NBv~b$G zIK;F7l;%sbR@e@Y_A~tyF+RWG`mKy(GB>MaDBw>KS9>-uO&5X6ByErJ6pp;TsYo># z|J0LJT2xdNm}iK~#!Y}F^wmf31c>Lo+qkVoD@NBIMtNIK7NyMMsh4C-N>g|<;RETv2CSEkx zybD1G4qAECe^P1W7`LOa?=K~qTjpu9>)+is{6I4kB10#|0x&@Cxwt?u6M_gR~%Emh5W)XYl8h?3aUy);`HU_(3wZCE-$t@T6cQo(3V8f8K9h$IRC-M{< zV^WDJ6egdyz>|9{@r{Yh1Aq9oXt$Nl;hJU+q-ezoV zwA>qQ_OJn7)Qt1(Yi@Jqth4-mynU&EFDla+{VYE_S{&S#;d{*{^}aWCZ#2PgDGcChu50W>))OO-f(fvT5$r1glS9 zWPmcN9&L8BIHNhvl9(Z$ElEn18C6K(7*jRQe@lLV*2uGx5*;w=^Y&kdu6=R!*SnT) zOc2wFkw-WMDnA@U)&4G@GV~}xSEambX8ES=zVqiFgn3&}@|dl1{X6Qp`gCWy#I$Wr zc?t3NUxv1*ce~G3L9G97Gh=f2w1&4M!w*TDVD)obJM|qD?$P8?XFR@Fh zxD0P2H|5d>jZv4ks8ZC@RZa=-99}%{%0)e@lU5Ard`G@1v(DLi$JXPcMvZ%1+2f!OtUN3&ZCy`7 zVJEih=oNYObyJy_MxiZlfq(0tTN;j&Jl%9O5f+(2wpN{E>u$p5C zMR`W%AECQTmgi9nYLr*+?LXYNS2xo^i(_nMn}Syn=8RvHBE6IVXwumLpNj+w?cYV4 zva}hOfdK9IZ(%}|jX)w+R&T!MQ1=MvC)}1!ryi|0nxT4=#ALPNBi z!4H;QRK`7e!jh$@(=2PS)@*t zTwh5{M<&&_o!L_!aHKSKcT4`AjN*w-lo*E?vbf|>tLOaagmKQ~+b41V%S>hwVrMw2 zQ0|<(Z#D?5!=t;%bUpS`%KLJvq?L~j4Zd6Q?A00v-U0!2^u23bbAjb5s@torIELt9 z**VMfls4_d6pLp!$jyrW*la?-k<}iRtsj2tpAm9ngjx;ub21)^kJcr)%&cK`IlyWA;5>G2?L?LGoK(*D>JSWXuy+Tfj zp>G?Py=gVvjgH>O?Ff2#C+qju5&%$ZGL~TQbBzA$skdQUz+mU|mR+rV@_fmNCLR1u z`StK_;k?9Dh};(e89EuHda34u?jKisZnxfCvPcEDzyAKBU-DZvlum`u*x5}-d-rI{ z%M`q8*Dk*rXR&Kgp$UX8Ai(1B*0Q@(qY7^&T%6A@^?Rj07fY_RlXe zrhrv{_uw@SmwUw(;hgir`^0>p(~{c3sN_bOj=}fTMkXR5<%l^)?y8L56m6*3zCVUa6_xL&7B#L&pXK@X@CtN}D%>!@_{$-D^}7l{I2zeoO&lZ%P0$u+WV>c6 zr6&&qqv=`75x1h0TZhJ8Twl6`Waki{No|LxZHYJ;p;+r;sC{sEyxH!IlMQkWYsyC3 zd>s0AtI_cuOP(kC+i&WlwPBX&N!!!JW=}^qEUp&8`~<{eMM%s$>NNa66_6vjjkC|0 zFPH=VlJ_}a;EhikAp}-VTNYYVGL5Q1Xg)eeCBaS^z?8s#?*q5|rI!9Aa>4ao%c=k> zOO->8-7q;;RVSu7f6s4s%SD4su$O2@WoD>&O?Wii%KZrK5D!GRU24sJ+zmD+E!4l} zLPD($uvacU|KbxEb5*Q@#epT^QRImGyKAavLtcr`g)VC(Uh>7K1m% z@icU*157^6r8-w_|9OjW50uO3a)uaX^pAaU8gmF&aXxG*$FSbN|wp*8-8yWJ4ZiCFQ(jDKv2K-TzpK6;i{=!>roAgEjnH{y; z&bVs*(f!+BV`sddHPu4W$w|GJ9ACV4;;h7BE1n2Blq5OLo8;!Z-$cSLU&M^yH`ANy zMJ6@$G)t_yGf>^eMFs(}Z?wfnLQ$dF@T%IeV{K-?;VDMB8(EI)sP8cI=JzDsFJV3J zBckPKcIY=d2Z%*t!UV$>a``&|hhpjc{Myb)zp;gFvlw`mGD+U$eF#&j{smD_n{DU) zX5BOlNHS+O9!NlfkAPQQ(YS}R*2I7!nf{z)!yHCee#lvo-l=i>uB-AAazlSzv!rfQ zI4?-Z$d6aYaknif$5dk#2o_WkyoB!&39~k4L%~K>_CF!$W>f)=ls>d8JwSIU3TN{; z%gtgpoV~zY%0_k@N^~&4q_0@JBAA-Dr><@>$#xWykR#BfG=vo^oZ4;e;9k`&A>x8Z05Ln@#6AJI`e>&sD zvj?UbM^5&v{k?zF+_($b8+Vwr)2h*{JT;^4%7pV(rl}{tebZTZ=UoWpJ#<+bl##zh zqY5$UgWLd2>DN`Z^ScJmR@*$}V6dR-w`MP$OkDsLT6aZE)4iW&J!OHjC5~a6cRMlm zI1i8gwl60=^g)b?9cUWh^;rxBv#+~u7{?$E@f34dV?i&jxOAPhN5PMwXH8II z>RMPn+_q2U%fmiFEzdvce#dyj@2j@xb{Vd2I__6ek~p{Ol&vt?2~#yZY)@27Yc$~^ zkn%T?5kk`Z7iOgR4ISg%sPVMLra=PI$_#I4C6BVV25#%r0w-R%-Fd|F>Xyl_vBhCu z=h^K~N)3ORT=?r{%Wn};KTTV(=8@-tPim%@5Fsv^wya_Yo0`md|McmT=V&`lUWT%t z7Jblx{yj#iX*8*)t}zWhQaE+-N8CLUZRcATGq|LQ+L572${B5=U)N7`Znt1-Z$4Cb zQA+H~C$mydtzLF?!PYA0fH|dOV(w_x3%vFWHOS2ewg?F1w99+y7ovxT6Li>uelYI~ zWwOM|RJd!a8Q8b`N&gUdO!ge@iQ)aiKXc9+E)Gx&bU8h`F8;+}XRDVbAr+T$KX}Rt zX*Z(QW5NK>!hP8TPpmoj$H3$Q52(+*^4|L4AC+71e%?b zCf@qLz7|BUZ+0>YK@8orU*`21(FPe7SklFj66!+)5 zyC`BVn=1a>$^R#+&)2g7 z#D}iD(=gvEx+$9T>A_2@^!LyI5}K#{x#E_xpTa)#Qu-*hlyMR?g9&Ikmc=v- z+^v#&{xrXd)|<|Q7c5(`KyTfu93w5Khsl=DYMwW>tJw2CX^2MXHno&;5`Qzu9+mgd z!op26o>ncGcUB^J84$fXP+Psfrl@rvPxCm~O|N9ww8(uvpD(}bK4Y4u$L-Dvq&Pdy zH=MN0_{ad&Hgsv?sdssXzXsF`EETgghp4#N)A0Z@1W=>lGpv%*s6ddxWELZfBOP?r zYwh|WqyHnuB|M>i1E=^aDyxQ?ty#-OO4wNB+nO)UxW%)+n^BsZk|; zhX{m;A5}pX`P0VXrsJH)b*opjmheIvGk=|xc$Ng|Tb_J^k*ZJczVEJ->FEHs`#JaN zUbJ0L!lX#ipt$T&Mpk+x-y`?iYNy(%!?;G}JT8gl)aZ>r4r7@GD83{h12IVa^7Qnn z>34-BAt8bwB**%j2?ls~dglOzj##k~ulYZpAipoPJ?2L6Kr%KH0+Z#4qM(csH6$@7 z=cqSPaI7tGR~cH?Obp!qdgY@J?qFtfaX~ABDdn=1!;e08w=5j_yg+%~zs6n9+i^ft zk}9DZwQ7vF*07@=_B|1&P=5KH#+%dT<7hxAhiP_2`h?+lDJ@XUN)`*Z@ILXjIFAMT zfX)H?o9A3hc_*kir(q~ON9fh7bL7jCY)tnfzHf#8>X)NPTK&E+`8eumwO8jf$~ttj9DQzbk{cjKqyrU0 zC|`z6g7uMXi0liCH)TdH=nDq;J_nXpOzetujQwVot5%&C>uJz;BnBxkuBuUw`n%(4 zhu)N~mq_uJqrVOc?D9jz9V-0;m7ov>RLJnwC)@Y84d&+f!LoD;64xqMB+b~95rv&4 zzMN;xGRXkb{rd8pBubNgor3-*oq;KGSRmKMJ|T)pl$MKYR3YUKof@~YRSQV!5%ziG zkVDu{?LdS+=NzCz{Fkglq(32LM71z7RDs}Ft5@x0%qMMRI@%bS1xoRxAlG8M=ZH#3 zTgjPVb)c6rlT2+o;L;n9m#6hSIR7+&A>zLxDf8b&l#YCol?6O4%gD!jHzBmt6Y1bC z67ejf3)QokTrW=-ocqJN4ki%2lX;_vPpi36x7RJ~ay{2&)x$@R%8Tbg zUYJd+y|plzB+*bx=Ne~$Vukl7Kj^OzJgS9O3+g$6!i5*7d7!|RUI-vDZ=uPU_nYbK<%u0|hir+qQ@igMH z$&-~~42odf0)h!Dg5h%~@k;vi&oW)s`vMUn4j_O_%_ zN_aTQJ44PknG=!ew}w$7jwJmnf@uj?%HKel1}r8a7v2aZjC{UcEqz%%{J8nQIx_-i zx$V2Eu3&M|n5B*tx=wu$PmM2YeyG`nry3836y3CMAu=nN)k0&L4kzZHwTCzvwgH>k z|Iyx+#zVcneWLwHjz;GoR61oXWjB_HNcI`S*eXN_S+X^gl%r&eXtP(A8QaK`y>y6C zCq!9ncU?5=)q%nhnLvVqK#VN@>DJfQf5oJs4gR=HYkXAtwChFkfw?P&b5sJ|S z#y$bjE5xuNzXr&IHR!*?yb-GceKmRjSx$U*9&8o#mi%f4PF?qJ&)hx~2HPhYW&)FD z++~?0K9cYRt#Al&-W5e#3PMC}aHSK4qzvd(4DMhyTF}mEx0Z9GASeh!iRvN91Sr}} zCjznvs6IactBL9v9`EUWe(CWO`d2{!6DWUOW1x~PHIHBmjDi_sUw)FAi4-_uBU%TM zd<_ywlUaSLj8xY8;!uj*aYbw!aV3J?_lmLR_zrcxi33^CZg$$XF4&K#%!rVAo*uRg^LUFEr&4x}h5 z#Nz6IB=CYACmN_^O_HRgq#&#aI&$#kIH^D+u{q!aGzk9hT%-j+ViopCT=iw)?Hf3< z3%k-hE>y$b|83)00b+0PF%IM+K;-Vtv6i0~0WKVmK&vR1u}4|fIoQ}&=>^IY#qXjFR>WD)by4cL zT*qNqxV|zUi@;73I zBRqq_`~O%#;>x0YrYluag8%vji+{s}VJZIph1|v7J{z2m}>)fK3hv+XpD~ zh8D_HF|=m~A@n%htn4i_lVT%Ka-c9|Is0Q{(Vp@Y-?G!t4Dto6ydf~<(b`8S&{b)o zx3@RMs6hb?^z{%<>Lil{ko=K||{d=Fc`9gTVvG+*GMg zD$a7CmC&9K09#-8em^(Z)Z0FjYt1zj4eA-g5vS zB?7hmj+HEDNa-@76PzQ6YtTwsGy*{UcHpg%|x=1nVF+#j%do1TH; zr{wv6l5nuZgH#O96HqoR>|Xj6@(;*uFm&0*k{009f~|zSWN;%7;Q7q4w0%qjAA;jt z?>!WLmj!Zw{oE$7s0cO+&K82QBGC@ZT=iAoE;xyRa3rb+3!n`y*g#?sUq3$)<_p9- za!Nchy(TGUy8+tleB*b(CnFmzit_nq+O;ntEC2%5_1F19h{?Tb&V0Xx1!A$t0KcGq z*BvO-;tYo>+P^?GL|&kkds$t+xmLmLtNr18a7jQ6Phe?kv>N-izXAj?95fr|7lEXJ zhw41=)F?s?2?hDSn!hEd5R(d(0fD>@V{QUXU2tmFHP44u0HfB4&4)~ zQEh}eg3C;V$|#r$MjyL+y!Ud3G~93@Bhr&!@(NsYL^?q08hJKA8d(ij>(GI#5oAu# zeFSQ^0dk~9j0f!>0K=?ADM6?U@xLIB3KF6^VEW;3oZhYm>)xqdPw~>m&3eeOK@n%Y za`3Rx&H`|RX0fayCe<&^_b5K_CM1;?09M?7mlmT_1pp+# z(Thu_7X;3^pqm=HHo_|45gHmE{))t5E@wA@`!WUn_#(u?B zI?j1xfw|}Y1TB#J5VRz6FLHy1EeHd`%)y%6U@nXdFHWiVW$BnEDXD@6ei$g{q#C~V zud)T4w16BJ|K~*aQk645v<={*wKBGTl#=#qXc&XjiL}b0tOEcp27^@w;FwLBssS!hV$CI*944*8a1$g4RzI6zS*L5C96Mcei3 zujx>+0|cI20G^rowjERibHSO`HO(E9Lmy;Yp>2D$mAE9nE_2g;7PILpqI|RdR|JLL zS-E94W5mkUbK^vjo7t>*u+TqWunkd0Js61Rq|mm*^8n3YSyTlN98w?sw)>P zFm^v?iF2Ko9SFG_Zj@UK-<=bD`dOchr_K@_NlXHnJ>;O8b{%2GE;l;5OYt6C+O;F0 zpH82pWmQg<(JMw&%gB{o@`Em&O+P(jo)lh-yS|D2Ws4KOFQSGrR9O*eFFE|QP`KCi zif;Mi&v@C@XmKGw?PR;0go78W!zkSk< zIuuUHbdI_o$E7XvAFr{su~)xt5Tvtu zhEsF9!}RkAby&5blf^Hxme>1JKZ)VVCmWe-tCE1`28_oIrI z^<2&`;|f^qR+^6fC}-!B(mr>slh;3wx0$!-FjVSGaEY2$5#j>flwWufN>(yAM_IJp zq~)}52BZ`9V{1Ff88H+3pwQL(XCtPw`ip%~K?7C3n~%D4VX(+L_z^(4P~n7bWuf;|6?6#if_)q!R{Kl1vlt=y#p zbH*>{u2Qf%rbEoNyqj~+T(Kyx@BGWKO&I@U?r+P0?I9XZRKH`cg<`7*UJR*t`bugm zsjGSt5^(~>zT%ymos}Q~BvQKHup{O>J%v{}8|#~R>Ljk2xA5*gI&J1UfAqqM*VM`d zf4x`|a}x`_F>oKw$(bA46t_{FHhI~lSl9<7%j#Rs>o?u-Sjy*1skr$VR6oavwMpGnKbwiO6x z{%&FIxNY&1RXkUcIKesy^xHC8d#TrjrXs@?$R&J&st@k%#I12%ja5;r^A{`|P10G6 zK?!k}1LgFEft96Yp>OU<`{J1vCuF289aj%#UwN@{=EMnoI3K0%s=E3`UQ`S-jGw)+ z@1`13;9~SF;DWwo+X}ZI^fUF_!<;E_xy5r<6H@X6O;RT$k(gJ<29$Lv~Edw zwpNQuzDLvEBr>BE@S;bU{_k!T?NabK4G`E}n&jrq7( z)!Ffp1{(IK*PVp-D=yL0=<(}I4o%(E`_W|H6}^6nhw~9IVKEaw+3k}o^k6OtJmb~4 zW;2PQ;%>Z}b75r)NSj1Qdw0d-g)DJCYb`6urFd$>;O*n%Rqu=S;qKJp$`Zt9@_Y-V*?$79979srvjPS5Sw+ z8}+GsPt(0V{58{Ok5`_rr>CfJn_u+k{IKnrk;`!5(sQ*eql9o%^E0lRoLii>xL&xX zd0CneFy@bp#kdmj)1#5)iNWG9ire?P`oWpx$GARkT=7NaFaxe7_Ot21P0K+Vyt|-Na1f(==pW`}W$KuT3 zQB%`Ccpr^OvDv!E^<$~?%;BM>=?bs*&clt#Rr%edSML)96quR|dHBVFMz51~)b!W7 z@pFO`H4Z_ll>BjyB0=+6o7Qu8RU(C}N@9XDo0gI#qW7D}I$R<&5X}XDM0+^LP-iW@ z4qV>he9&#&PrX=a$TT4Lr8gzqkOQyw9avG78p-B*85?;fK76fjG4Wm#U5>_>_X3*D zlOgPaMHmui=eHue`+{3*418QvIu#Bwu|4sl20gmCOQ3p?jjRH5bLV zzTb@okY<6E4kf8K`CI#Z$RA$46fj2#Z>iF<4Z1Jdn7mdciD?cdxqP;myOX0XT`}t3 zfAT3_XKQ=rQn{K&oAXUq?~Efw8c+9UG%XJbifNyqVtqrzmAPXj;{!|@^6=ZTy%g*y zmACEsyo*E|KTDc-b!an6gyEo$PYenZ&HnbS2_rX^&%ROroZ6cDu-f-D2O7oyeHF#I z4S&{(uOZ={nBSG~Qzvbu2${!YMSI@)XiJmwoAcYqo>am9%Jk2-$lQt4T z&DWGmQAnsgtRbJ7KEpoJ1RHQz^`yjt6VtTop%KQ*p%e=WcjF3;_xa9bdx|eLIgMZ0 zahqx#wV0pnyd-=;@4)U=>raoW@6_3tOvqrsfx(V-kM-nu(rNSFgO^Bl!tJ|_9IPYr zwPN?lzqwOfRB*icY6d!4!=<-Z*M^9K{gL=XH536}q6M!Y6JT55 zG;xP|QK8JfhmtdLD0ISNtkg)io;#e(Jd3fJji{V&70wj5{;ew|U9hhC$`R+|ue)!q zOd7;Ljf#U+IP>R8%0T%DV~HV<^#TI%!GD~Uk}&`F$WNR(-#P5gFwDEV=JoUkcUQ}2 zaYFk+BYJY#?33m}i-pirEoEAhe;Im}PNv41bRP2hT0`lrfvtf5@tftuY)QIc4O?0@ zn2g&8r7i0SYLv>FZ0!G4Z(7H}l!4gh7>|)$=8?QIZ z)aimBl|e(fub=K0_`JjxN!^?GRtkyicDn#$*iGJwB!7$Vg)4WwN?y_~ez9@dYJ43M ziw;g`J{J!Bs#IMUL$JS9>&f>sI0KMtX zI>p~52iJporx`)P1JnLv6?)JfL`pYvUAkx(%=%qpyEl<@OHS?ji#C^=uCtr6ue~_5 zUh(arj+RXvuL$d(tszKF6aD7WQK(mDY=FYD zY{4S@GsMc58#wdO3QyKAgl2`uxghX>)TSVmGw?;vLe0AgqCiZtoKv4sQ&r9`**f$=Ky*NKeCDS z<&*IG__ZDJHxg%R+9kNtxT**(we>;_ST>Pr^coWm&g`Rmp;kpC ziOBj7ku$%uM|A&+fT~8!KW}byp}3Cyv32K1cLg(4%m8kcP?nC770OF>iDf%ZIepq9 zo^@dl?w0qIrwr@TxOtQ$qmO%SlBMM6}imu;qyEqy79M8c?Te41ZTaA^gXI& zWS56Ldr140KOI?rY`yz%(1&>*1MieLcH~#qV|ivkZw;zHYaV$k4ZUh+y;1R)TO~M$vDu~t@a!qp`WqpZoC;kC>Nn`FHO1J%Nnr6mk(#fx1Trck?^!5 z^8Wg(=0(=}(s=e|+CRc%E|c0OuMs1Dl^xng1*v-`I9USg!RMjGNW-vK(&aWxh*B;G zr*MDKrjYfIdbh@gaHQ}-&A6W-oK%K5U_Bqb?Py=GrkQvgp1@kV^MWcqO<77@QDb{Gnaz?+lk5E*!NpQgaE_D>%AQic{aSM-|yuex3#1Gs>aM51({a8ib zqEWUq3gs3kjmm7;sB@6jz?+|WVx+6Y8Qtq+i8Ab(c-#EWta}4ya=7oR^Q+nAEbM6N za27u&Y~8`=C&!c}w|t5CWoO7%K5^FPgHJ`Q56ypEo|x6#|5__!Ob&-5SL)m2`dJgH Nr)_v5PxDO3e*vuvDU<*J From d00a35ae72b201b45a977ba8b9e7e4a0470b2cd2 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Mon, 25 Sep 2023 18:50:51 -0700 Subject: [PATCH 15/21] info box with link to info --- docs/configuration/device-config/lora.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/configuration/device-config/lora.mdx b/docs/configuration/device-config/lora.mdx index 821e7a7c..e6dd9073 100644 --- a/docs/configuration/device-config/lora.mdx +++ b/docs/configuration/device-config/lora.mdx @@ -103,6 +103,10 @@ Defaults to true 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/settings/config/channels). See [Chat Channels VS Lora Modem Channels](/docs/configuration/tips#chat-channels-vs-lora-modem-channels) for further clarification. +::: + ### Ignore Incoming Array For testing it is useful sometimes to force a node to never listen to particular other nodes (simulating radio out of range). All nodenums listed in the ignore_incoming array will have packets they send dropped on receive (by router.cpp) From 6217a428056c60af121106443cad65a2da6d54ca Mon Sep 17 00:00:00 2001 From: GUVWAF Date: Tue, 26 Sep 2023 20:22:01 +0200 Subject: [PATCH 16/21] Update SerialModule with reference to Arduino client library --- docs/configuration/module-config/serial.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/configuration/module-config/serial.mdx b/docs/configuration/module-config/serial.mdx index fb01189c..7426e3e4 100644 --- a/docs/configuration/module-config/serial.mdx +++ b/docs/configuration/module-config/serial.mdx @@ -34,8 +34,8 @@ Available Values: - `DEFAULT` - `SIMPLE` operate as an dumb UART tunnel. What goes in will come out, Requires a channel named 'serial'. -- `PROTO` Exposes the Protobuf Client API on this serial port. You can use this to connect from another device. [API Reference](/docs/development/device/client-api) -- `TEXTMSG` Will send the string received over the serial port as a Text Message for Display on the other devices. +- `PROTO` Exposes the Protobuf Client API on this serial port. You can use this to connect from another device, see the [Arduino client library](https://github.com/meshtastic/Meshtastic-arduino) and the [API Reference](/docs/development/device/client-api). +- `TEXTMSG` Will broadcast the string received over the serial port as a Text Message to the default channel. - `NMEA` Will output a NMEA 0183 Data stream containing the internal GPS or fixed position and other node locations as Waypoints (WPL). - `CALTOPO` Will output NMEA 0183 Waypoints (WPL) every 10 seconds for all valid node locations, to be consumed by [CalTopo / SARTopo](/docs/software/integrations/caltopo.mdx). @@ -112,7 +112,7 @@ All serial module config options are available in the python CLI. Example comman | serial.mode | `DEFAULT` `SIMPLE` `PROTO` `TEXTMSG`, `NMEA`, `CALTOPO` | `DEFAULT` | | serial.rxd | GPIO Pin Number 1-39 | Default of `0` is Unset | | serial.txd | GPIO Pin Number 1-33 | Default of `0` is Unset | -| serial.baud | `BAUD_DEFAULT` `BAUD_110` `BAUD_300` `BAUD_600` `BAUD_1200` `BAUD_2400` `BAUD_4800` `BAUD_9600` `BAUD_19200` `BAUD_38400` `BAUD_57600` `BAUD_115200` `BAUD_230400` `BAUD_460800` `BAUD_576000` `BAUD_921600` | `BAUD_DEFAULT` | +| serial.baud | `BAUD_DEFAULT` `BAUD_110` `BAUD_300` `BAUD_600` `BAUD_1200` `BAUD_2400` `BAUD_4800` `BAUD_9600` `BAUD_19200` `BAUD_38400` `BAUD_57600` `BAUD_115200` `BAUD_230400` `BAUD_460800` `BAUD_576000` `BAUD_921600` | `BAUD_DEFAULT` (38400) | | serial.timeout | `integer` (milli seconds) | Default of `0` corresponds to 250 ms | | serial.override_console_serial_port | `true`, `false` | `false` | @@ -186,12 +186,12 @@ Default is to use RX GPIO 16 and TX GPIO 17. - RXD 13 - TXD 14 3. Set `serial.timeout` to the amount of time to wait before we consider your packet as "done". -4. (Optional) set serial.mode to TEXTMSG if you want to send messages to/from the general text message channel +4. (Optional) set serial.mode to `TEXTMSG` if you want to send messages to/from the general text message channel. For more specific control, use the `PROTO` mode, e.g. in combination with the [Arduino client library](https://github.com/meshtastic/Meshtastic-arduino/blob/master/examples/SendReceiveClient/SendReceiveClient.ino). 5. Connect to your device over the serial interface at `38400 8N1`. With [tio](https://github.com/tio/tio) – `tio -e -b 38400 -f none /dev/myserialport` -6. Send a packet up to 237 bytes in length. This will get relayed over the mesh network. +6. Send a packet up to 237 bytes in length. This will get broadcasted over the default channel. 7. (Optional) Set `serial.echo` to `1` and any message you send out will be echoed back to your device. ### Interfacing PIR Sensor With External Microcontroller @@ -200,7 +200,7 @@ The following are examples of using either a Raspberry Pi Pico or Arduino Mini P #### Meshtastic Software Configuration -- Serial module enabled, mode: TXTMSG +- Serial module enabled, mode: TEXTMSG - GPIO Pins (For T-Beam) RX 13, TX 14 - 38400 Baud From 157505ddc5da0429a185f04c14f45ac072e59f70 Mon Sep 17 00:00:00 2001 From: linagee Date: Thu, 28 Sep 2023 03:29:37 -0600 Subject: [PATCH 17/21] Clarify serial port name may be different --- .../getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx b/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx index 90d814b5..d91560c8 100644 --- a/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx +++ b/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx @@ -24,6 +24,7 @@ Here are two ways to flash the bootloader: ```shell adafruit-nrfutil --verbose dfu serial --package ./WisCore_RAK4631_Board_Bootloader.zip -p /dev/ttyACM0 -b 115200 --singlebank --touch 1200 ``` + Note: The serial port name (`/dev/ttyACM0`) may differ depending on your operating system. Make sure to identify the correct port name for your setup. 6. Continue with the normal [flashing instructions](/docs/getting-started/flashing-firmware/nrf52/drag-n-drop) ## Debugger From abe4a3431367e3407dc907109bfca6ea62cb4912 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Thu, 28 Sep 2023 19:10:42 -0700 Subject: [PATCH 18/21] new directory structure and forwarding --- docs/about/contributing.mdx | 2 +- docs/about/faq.mdx | 4 +-- docs/configuration/_category_.yml | 2 +- docs/configuration/device-config/index.mdx | 21 ---------------- docs/configuration/module-config/index.mdx | 25 ------------------- .../ambient-lighting.mdx | 1 - .../{module-config => module}/audio.mdx | 1 - .../canned-message.mdx | 1 - .../detection-sensor.mdx | 1 - .../external-notification.mdx | 1 - docs/configuration/module/index.mdx | 25 +++++++++++++++++++ .../{module-config => module}/mqtt.mdx | 3 +-- .../neighbor-info.mdx | 1 - .../{module-config => module}/range-test.mdx | 1 - .../remote-hardware.mdx | 1 - .../{module-config => module}/serial.mdx | 1 - .../store-and-forward-module.mdx | 1 - .../{module-config => module}/telemetry.mdx | 1 - .../{module-config => module}/traceroute.mdx | 1 - .../{device-config => radio}/bluetooth.mdx | 1 - .../{device-config => radio}/channels.mdx | 7 +++--- .../{device-config => radio}/device.mdx | 1 - .../{device-config => radio}/display.mdx | 1 - docs/configuration/radio/index.mdx | 20 +++++++++++++++ .../{device-config => radio}/lora.mdx | 3 +-- .../{device-config => radio}/network.mdx | 1 - .../{device-config => radio}/position.mdx | 1 - .../{device-config => radio}/power.mdx | 3 +-- .../{device-config => radio}/user.mdx | 1 - docs/configuration/remote-admin.mdx | 2 +- docs/configuration/tips.mdx | 16 ++++++------ docs/development/device/module-api.mdx | 2 +- docs/development/web/index.mdx | 2 +- docs/getting-started/initial-config.mdx | 2 +- docs/hardware/antennas/testing.mdx | 2 +- docs/software/android/usage.mdx | 8 +++--- docs/software/integrations/caltopo.mdx | 2 +- docs/software/mqtt/index.mdx | 10 ++++---- docs/software/python-cli/index.mdx | 4 +-- docs/software/python-cli/usage.mdx | 6 ++--- docs/software/web-client.mdx | 2 +- vercel.json | 24 ++++++++++++++++++ 42 files changed, 108 insertions(+), 107 deletions(-) delete mode 100644 docs/configuration/device-config/index.mdx delete mode 100644 docs/configuration/module-config/index.mdx rename docs/configuration/{module-config => module}/ambient-lighting.mdx (98%) rename docs/configuration/{module-config => module}/audio.mdx (99%) rename docs/configuration/{module-config => module}/canned-message.mdx (99%) rename docs/configuration/{module-config => module}/detection-sensor.mdx (98%) rename docs/configuration/{module-config => module}/external-notification.mdx (99%) create mode 100644 docs/configuration/module/index.mdx rename docs/configuration/{module-config => module}/mqtt.mdx (97%) rename docs/configuration/{module-config => module}/neighbor-info.mdx (97%) rename docs/configuration/{module-config => module}/range-test.mdx (99%) rename docs/configuration/{module-config => module}/remote-hardware.mdx (99%) rename docs/configuration/{module-config => module}/serial.mdx (99%) rename docs/configuration/{module-config => module}/store-and-forward-module.mdx (99%) rename docs/configuration/{module-config => module}/telemetry.mdx (99%) rename docs/configuration/{module-config => module}/traceroute.mdx (98%) rename docs/configuration/{device-config => radio}/bluetooth.mdx (99%) rename docs/configuration/{device-config => radio}/channels.mdx (94%) rename docs/configuration/{device-config => radio}/device.mdx (99%) rename docs/configuration/{device-config => radio}/display.mdx (99%) create mode 100644 docs/configuration/radio/index.mdx rename docs/configuration/{device-config => radio}/lora.mdx (97%) rename docs/configuration/{device-config => radio}/network.mdx (99%) rename docs/configuration/{device-config => radio}/position.mdx (99%) rename docs/configuration/{device-config => radio}/power.mdx (97%) rename docs/configuration/{device-config => radio}/user.mdx (98%) create mode 100644 vercel.json diff --git a/docs/about/contributing.mdx b/docs/about/contributing.mdx index 94f77693..cd4cd29d 100644 --- a/docs/about/contributing.mdx +++ b/docs/about/contributing.mdx @@ -33,7 +33,7 @@ The [firmware repo](https://github.com/meshtastic/firmware) is where all of the ### Firmware Modules -[Modules](/docs/settings/moduleconfig) extend device and mesh functionality beyond core functions. These are also implemented mainly in the firmware repo above. Typically, you would add functions in the protobufs repo and the device repo to implement module functionality. You probably also want to have some client or device, use or interact with the module. This is where Device Interface support comes into play. +[Modules](/docs/configuration/module) extend device and mesh functionality beyond core functions. These are also implemented mainly in the firmware repo above. Typically, you would add functions in the protobufs repo and the device repo to implement module functionality. You probably also want to have some client or device, use or interact with the module. This is where Device Interface support comes into play. ### CLI Apps (Device Interface) diff --git a/docs/about/faq.mdx b/docs/about/faq.mdx index 2a03e9a9..33e29282 100644 --- a/docs/about/faq.mdx +++ b/docs/about/faq.mdx @@ -117,7 +117,7 @@ Once the node wakes up from sleep, your phone will relay any delayed messages th ### How can I tell the device not to sleep? -See [Device Power Configuration](/docs/settings/config/power) options. +See [Device Power Configuration](/docs/configuration/radio/power) options. ### I am in Europe and my device seems to stop transmitting after a while, what is going on? @@ -187,7 +187,7 @@ Modules are features that expand the basic device functionality and/or integrate ### What modules do we have available? -A list of available modules is available [here](/docs/settings/moduleconfig). +A list of available modules is available [here](/docs/configuration/module). ### I'd like to write a module. How do I get started? diff --git a/docs/configuration/_category_.yml b/docs/configuration/_category_.yml index 49411e73..e9edc265 100644 --- a/docs/configuration/_category_.yml +++ b/docs/configuration/_category_.yml @@ -4,4 +4,4 @@ position: 4 link: type: generated-index title: Configuration - slug: /settings + slug: /configuration diff --git a/docs/configuration/device-config/index.mdx b/docs/configuration/device-config/index.mdx deleted file mode 100644 index 54578d4d..00000000 --- a/docs/configuration/device-config/index.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: config -title: Device Configuration -sidebar_label: Device Config -slug: /settings/config -sidebar_position: 1 ---- - -There are several config sections in the Meshtastic firmware, these are broken out so they can be sent as small admin messages over the mesh. - -| Name | Description | -| :------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| [Bluetooth](/docs/settings/config/bluetooth) | Bluetooth config options are: Enabled, Pairing Mode and Fixed PIN. | -| [Channels](/docs/settings/config/channels) | Channels config options are: Index, Role and Settings. | -| [Device](/docs/settings/config/device) | Device config options are: Device Role, Serial Output, Debug Log and Factory Reset. | -| [Display](/docs/settings/config/display) | Display config options are: Screen On Duration, Auto Carousel Interval, Always Point North, and GPS Format. | -| [LoRa](/docs/settings/config/lora) | The LoRa config options are: Region, Modem Preset, Max Hops, Transmit Power, Bandwidth, Spread Factor, Coding Rate, Frequency Offset, Transmit Disabled and Ignore Incoming Array. | -| [Network](/docs/settings/config/network) | Network config options are: WiFi Enabled, WiFi SSID, WiFi PSK, WiFi Mode and NTP Server. | -| [Position](/docs/settings/config/position) | Position config options are: GPS Enabled, GPS Update Interval, GPS Attempt Time, Fixed Position, Smart Broadcast, Broadcast Interval and Position Packet Flags. | -| [Power](/docs/settings/config/power) | Power config options are: Charge Current, Power Saving, Shutdown after losing power, ADC Multiplier Override Wait Bluetooth Interval, Light Sleep Interval and Minimum Wake Interval. | -| [User](/docs/settings/config/user) | The user config options are: Long Name, Short Name, and Is Licensed | diff --git a/docs/configuration/module-config/index.mdx b/docs/configuration/module-config/index.mdx deleted file mode 100644 index d7086b3a..00000000 --- a/docs/configuration/module-config/index.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -id: module-config -title: Module Configuration -sidebar_label: Module Config -slug: /settings/moduleconfig -sidebar_position: 3 ---- - -Modules are included in the firmware and allow users to extend the functionality of their mesh or device. - -| Name | Description | -| :------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| [Ambient Lighting](/docs/settings/moduleconfig/ambient-lighting) | Adjust the brightness of NCP5623 I2C RGB LEDs | -| [Audio](/docs/settings/moduleconfig/audio) | Enable Support for Codec2 Voice Comms on certain devices. | -| [Canned Message](/docs/settings/moduleconfig/canned-message) | Set a number of predefined messages to send out directly from the device with the use of an input device like a rotary encoder. | -| [Detection Sensor](/docs/settings/moduleconfig/detection-sensor) | Configure a GPIO pin to be monitored for specified high/low status and send text alerts. | -| [External Notification](/docs/settings/moduleconfig/external-notification) | Incoming messages are able to alert you using circuits you attach to the device (LEDs, Buzzers, etc). | -| [MQTT](/docs/settings/moduleconfig/mqtt) | Forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on another mesh over the internet. | -| [Neighbor Info](/docs/settings/moduleconfig/neighbor-info) | Send info on 0-hop neighbors to the mesh. | -| [Range Test](/docs/settings/moduleconfig/range-test) | Send messages with GPS location at an interval to test the distance your devices can communicate. Requires (at least) one device set up as a sender and one as a receiver. The receiver(s) will log all incoming messages to a CSV. | -| [Remote Hardware](/docs/settings/moduleconfig/remote-hardware) | Set and read a GPIO status remotely over the mesh. | -| [Serial Module](/docs/settings/moduleconfig/serial) | Send messages across the mesh by sending strings over a serial port. | -| [Store & Forward](/docs/settings/moduleconfig/store-and-forward-module) | Stores messages on a device for delivery after disconnected clients rejoin the mesh. | -| [Telemetry](/docs/settings/moduleconfig/telemetry) | Attach sensors to the device and transmit readings on a regular interval to the mesh. | -| [Traceroute](/docs/settings/moduleconfig/traceroute) | Track which nodes are used to hop a message to a certain destination. | diff --git a/docs/configuration/module-config/ambient-lighting.mdx b/docs/configuration/module/ambient-lighting.mdx similarity index 98% rename from docs/configuration/module-config/ambient-lighting.mdx rename to docs/configuration/module/ambient-lighting.mdx index 02b5db59..0efa5399 100644 --- a/docs/configuration/module-config/ambient-lighting.mdx +++ b/docs/configuration/module/ambient-lighting.mdx @@ -1,7 +1,6 @@ --- id: ambient-lighting title: Ambient Lighting Module Usage -slug: /settings/moduleconfig/ambient-lighting sidebar_label: Ambient Lighting --- diff --git a/docs/configuration/module-config/audio.mdx b/docs/configuration/module/audio.mdx similarity index 99% rename from docs/configuration/module-config/audio.mdx rename to docs/configuration/module/audio.mdx index 59f6cb03..13763017 100644 --- a/docs/configuration/module-config/audio.mdx +++ b/docs/configuration/module/audio.mdx @@ -1,7 +1,6 @@ --- id: audio title: Audio Module Configuration -slug: /settings/moduleconfig/audio sidebar_label: Audio --- diff --git a/docs/configuration/module-config/canned-message.mdx b/docs/configuration/module/canned-message.mdx similarity index 99% rename from docs/configuration/module-config/canned-message.mdx rename to docs/configuration/module/canned-message.mdx index 5eb94b93..75fcb1b1 100644 --- a/docs/configuration/module-config/canned-message.mdx +++ b/docs/configuration/module/canned-message.mdx @@ -1,7 +1,6 @@ --- id: canned-message title: Canned Message Module Configuration -slug: /settings/moduleconfig/canned-message sidebar_label: Canned Message --- diff --git a/docs/configuration/module-config/detection-sensor.mdx b/docs/configuration/module/detection-sensor.mdx similarity index 98% rename from docs/configuration/module-config/detection-sensor.mdx rename to docs/configuration/module/detection-sensor.mdx index 13b66840..cb79654f 100644 --- a/docs/configuration/module-config/detection-sensor.mdx +++ b/docs/configuration/module/detection-sensor.mdx @@ -1,7 +1,6 @@ --- id: detection-sensor title: Detection Sensor Module Usage -slug: /settings/moduleconfig/detection-sensor sidebar_label: Detection Sensor --- diff --git a/docs/configuration/module-config/external-notification.mdx b/docs/configuration/module/external-notification.mdx similarity index 99% rename from docs/configuration/module-config/external-notification.mdx rename to docs/configuration/module/external-notification.mdx index 79ccf02f..648c1a66 100644 --- a/docs/configuration/module-config/external-notification.mdx +++ b/docs/configuration/module/external-notification.mdx @@ -1,7 +1,6 @@ --- id: external-notification title: External Notification Module Configuration -slug: /settings/moduleconfig/external-notification sidebar_label: External Notification --- diff --git a/docs/configuration/module/index.mdx b/docs/configuration/module/index.mdx new file mode 100644 index 00000000..94ccbab8 --- /dev/null +++ b/docs/configuration/module/index.mdx @@ -0,0 +1,25 @@ +--- +id: module-config +title: Module Configuration +sidebar_label: Module Config +sidebar_position: 2 +slug: /configuration/module +--- + +Modules are included in the firmware and allow users to extend the functionality of their mesh or device. + +| Name | Description | +| :------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| [Ambient Lighting](/docs/configuration/module/ambient-lighting) | Adjust the brightness of NCP5623 I2C RGB LEDs | +| [Audio](/docs/configuration/module/audio) | Enable Support for Codec2 Voice Comms on certain devices. | +| [Canned Message](/docs/configuration/module/canned-message) | Set a number of predefined messages to send out directly from the device with the use of an input device like a rotary encoder. | +| [Detection Sensor](/docs/configuration/module/detection-sensor) | Configure a GPIO pin to be monitored for specified high/low status and send text alerts. | +| [External Notification](/docs/configuration/module/external-notification) | Incoming messages are able to alert you using circuits you attach to the device (LEDs, Buzzers, etc). | +| [MQTT](/docs/configuration/module/mqtt) | Forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on another mesh over the internet. | +| [Neighbor Info](/docs/configuration/module/neighbor-info) | Send info on 0-hop neighbors to the mesh. | +| [Range Test](/docs/configuration/module/range-test) | Send messages with GPS location at an interval to test the distance your devices can communicate. Requires (at least) one device set up as a sender and one as a receiver. The receiver(s) will log all incoming messages to a CSV. | +| [Remote Hardware](/docs/configuration/module/remote-hardware) | Set and read a GPIO status remotely over the mesh. | +| [Serial Module](/docs/configuration/module/serial) | Send messages across the mesh by sending strings over a serial port. | +| [Store & Forward](/docs/configuration/module/store-and-forward-module) | Stores messages on a device for delivery after disconnected clients rejoin the mesh. | +| [Telemetry](/docs/configuration/module/telemetry) | Attach sensors to the device and transmit readings on a regular interval to the mesh. | +| [Traceroute](/docs/configuration/module/traceroute) | Track which nodes are used to hop a message to a certain destination. | diff --git a/docs/configuration/module-config/mqtt.mdx b/docs/configuration/module/mqtt.mdx similarity index 97% rename from docs/configuration/module-config/mqtt.mdx rename to docs/configuration/module/mqtt.mdx index ee8126c2..cff825b5 100644 --- a/docs/configuration/module-config/mqtt.mdx +++ b/docs/configuration/module/mqtt.mdx @@ -1,14 +1,13 @@ --- id: mqtt title: MQTT Module Configuration -slug: /settings/moduleconfig/mqtt sidebar_label: MQTT --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -If your device is connected to Internet via wifi or ethernet, you can enable it to forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on the internet. One or more channels must also be enabled as uplink and/or downlink for packets to be transmitted from and/or to your mesh (See [channels](/docs/settings/config/channels#downlink-enabled)). Without these settings enabled, the node will still connect to the MQTT server but only send status messages. +If your device is connected to Internet via wifi or ethernet, you can enable it to forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on the internet. One or more channels must also be enabled as uplink and/or downlink for packets to be transmitted from and/or to your mesh (See [channels](/docs/configuration/radio/channels#downlink-enabled)). Without these settings enabled, the node will still connect to the MQTT server but only send status messages. The MQTT module config options are: Enabled, Server Address, Username, Password, Encryption Enabled, JSON Enabled, TLS Enabled, and Root Topic. MQTT Module config uses an admin message sending a `ConfigModule.MQTT` protobuf. diff --git a/docs/configuration/module-config/neighbor-info.mdx b/docs/configuration/module/neighbor-info.mdx similarity index 97% rename from docs/configuration/module-config/neighbor-info.mdx rename to docs/configuration/module/neighbor-info.mdx index 053a7d4c..5e0ff182 100644 --- a/docs/configuration/module-config/neighbor-info.mdx +++ b/docs/configuration/module/neighbor-info.mdx @@ -1,7 +1,6 @@ --- id: neighbor-info title: Neighbor Info Module Usage -slug: /settings/moduleconfig/neighbor-info sidebar_label: Neighbor Info --- diff --git a/docs/configuration/module-config/range-test.mdx b/docs/configuration/module/range-test.mdx similarity index 99% rename from docs/configuration/module-config/range-test.mdx rename to docs/configuration/module/range-test.mdx index 0177b933..bfe8d0a0 100644 --- a/docs/configuration/module-config/range-test.mdx +++ b/docs/configuration/module/range-test.mdx @@ -1,7 +1,6 @@ --- id: range-test title: Range Test Module Configuration -slug: /settings/moduleconfig/range-test sidebar_label: Range Test --- diff --git a/docs/configuration/module-config/remote-hardware.mdx b/docs/configuration/module/remote-hardware.mdx similarity index 99% rename from docs/configuration/module-config/remote-hardware.mdx rename to docs/configuration/module/remote-hardware.mdx index 2f75ae29..3df2c3cb 100644 --- a/docs/configuration/module-config/remote-hardware.mdx +++ b/docs/configuration/module/remote-hardware.mdx @@ -1,7 +1,6 @@ --- id: remote-hardware title: Remote Hardware Module Usage -slug: /settings/moduleconfig/remote-hardware sidebar_label: Remote Hardware --- diff --git a/docs/configuration/module-config/serial.mdx b/docs/configuration/module/serial.mdx similarity index 99% rename from docs/configuration/module-config/serial.mdx rename to docs/configuration/module/serial.mdx index 7426e3e4..35947c8a 100644 --- a/docs/configuration/module-config/serial.mdx +++ b/docs/configuration/module/serial.mdx @@ -1,7 +1,6 @@ --- id: serial title: Serial Module Configuration -slug: /settings/moduleconfig/serial sidebar_label: Serial --- diff --git a/docs/configuration/module-config/store-and-forward-module.mdx b/docs/configuration/module/store-and-forward-module.mdx similarity index 99% rename from docs/configuration/module-config/store-and-forward-module.mdx rename to docs/configuration/module/store-and-forward-module.mdx index b7ee2852..89026fcb 100644 --- a/docs/configuration/module-config/store-and-forward-module.mdx +++ b/docs/configuration/module/store-and-forward-module.mdx @@ -1,7 +1,6 @@ --- id: store-and-forward-module title: Store & Forward Module Settings -slug: /settings/moduleconfig/store-and-forward-module sidebar_label: Store & Forward --- diff --git a/docs/configuration/module-config/telemetry.mdx b/docs/configuration/module/telemetry.mdx similarity index 99% rename from docs/configuration/module-config/telemetry.mdx rename to docs/configuration/module/telemetry.mdx index d28647ce..e27d6c24 100644 --- a/docs/configuration/module-config/telemetry.mdx +++ b/docs/configuration/module/telemetry.mdx @@ -1,7 +1,6 @@ --- id: telemetry title: Telemetry Module Configuration -slug: /settings/moduleconfig/telemetry sidebar_label: Telemetry --- diff --git a/docs/configuration/module-config/traceroute.mdx b/docs/configuration/module/traceroute.mdx similarity index 98% rename from docs/configuration/module-config/traceroute.mdx rename to docs/configuration/module/traceroute.mdx index 0fc12c63..26e8a528 100644 --- a/docs/configuration/module-config/traceroute.mdx +++ b/docs/configuration/module/traceroute.mdx @@ -1,7 +1,6 @@ --- id: traceroute title: Traceroute Module Usage -slug: /settings/moduleconfig/traceroute sidebar_label: Traceroute --- diff --git a/docs/configuration/device-config/bluetooth.mdx b/docs/configuration/radio/bluetooth.mdx similarity index 99% rename from docs/configuration/device-config/bluetooth.mdx rename to docs/configuration/radio/bluetooth.mdx index a9b7f05d..17ce3b05 100644 --- a/docs/configuration/device-config/bluetooth.mdx +++ b/docs/configuration/radio/bluetooth.mdx @@ -1,7 +1,6 @@ --- id: bluetooth title: Bluetooth Settings -slug: /settings/config/bluetooth sidebar_label: Bluetooth --- diff --git a/docs/configuration/device-config/channels.mdx b/docs/configuration/radio/channels.mdx similarity index 94% rename from docs/configuration/device-config/channels.mdx rename to docs/configuration/radio/channels.mdx index 1f0589b8..63ca1244 100644 --- a/docs/configuration/device-config/channels.mdx +++ b/docs/configuration/radio/channels.mdx @@ -1,7 +1,6 @@ --- id: channels title: Channel Configuration -slug: /settings/config/channels sidebar_label: Channels --- @@ -11,9 +10,9 @@ import TabItem from "@theme/TabItem"; The Channels config options are: Index, Roles, and Settings. Channel config uses an admin message sending a `Channel` protobuf which also consists of a `ChannelSettings` protobuf. :::info -**Channel Settings** (as described on this page) should not be confused with [Modem Preset Settings](/docs/settings/config/lora#modem-preset) +**Channel Settings** (as described on this page) should not be confused with [Modem Preset Settings](/docs/configuration/radio/lora#modem-preset) -[Modem Preset Settings](/docs/settings/config/lora#modem-preset) contain the modem configuration (frequency settings, spreading factor, bandwidth, etc.) used for the LoRa radio. These settings are identical for all channels and can **not** be unique per channel. +[Modem Preset Settings](/docs/configuration/radio/lora#modem-preset) contain the modem configuration (frequency settings, spreading factor, bandwidth, etc.) used for the LoRa radio. These settings are identical for all channels and can **not** be unique per channel. **Channel Settings** contain information for segregating message groups, configuring optional encryption, and enabling or disabling messaging over internet gateways. These settings **are** unique and configurable per channel. ::: @@ -205,7 +204,7 @@ meshtastic --ch-set psk none --ch-index 0 ### Uplink / Downlink -For configuring gateways, please see [MQTT](/docs/settings/moduleconfig/mqtt) +For configuring gateways, please see [MQTT](/docs/configuration/module/mqtt) ```shell title="Enable/Disable Uplink on PRIMARY channel" meshtastic --ch-set uplink_enabled true --ch-index 0 diff --git a/docs/configuration/device-config/device.mdx b/docs/configuration/radio/device.mdx similarity index 99% rename from docs/configuration/device-config/device.mdx rename to docs/configuration/radio/device.mdx index bec43c9b..0d7f6990 100644 --- a/docs/configuration/device-config/device.mdx +++ b/docs/configuration/radio/device.mdx @@ -1,7 +1,6 @@ --- id: device title: Device Configuration -slug: /settings/config/device sidebar_label: Device --- diff --git a/docs/configuration/device-config/display.mdx b/docs/configuration/radio/display.mdx similarity index 99% rename from docs/configuration/device-config/display.mdx rename to docs/configuration/radio/display.mdx index 68a06058..15f2eae6 100644 --- a/docs/configuration/device-config/display.mdx +++ b/docs/configuration/radio/display.mdx @@ -1,7 +1,6 @@ --- id: display title: Display Configuration -slug: /settings/config/display sidebar_label: Display --- diff --git a/docs/configuration/radio/index.mdx b/docs/configuration/radio/index.mdx new file mode 100644 index 00000000..466c0753 --- /dev/null +++ b/docs/configuration/radio/index.mdx @@ -0,0 +1,20 @@ +--- +id: config +title: Radio Configuration +sidebar_label: Radio Config +sidebar_position: 1 +--- + +There are several config sections in the Meshtastic firmware, these are broken out so they can be sent as small admin messages over the mesh. + +| Name | Description | +| :------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| [Bluetooth](/docs/configuration/radio/bluetooth) | Bluetooth config options are: Enabled, Pairing Mode and Fixed PIN. | +| [Channels](/docs/configuration/radio/channels) | Channels config options are: Index, Role and Settings. | +| [Device](/docs/configuration/radio/device) | Device config options are: Device Role, Serial Output, Debug Log and Factory Reset. | +| [Display](/docs/configuration/radio/display) | Display config options are: Screen On Duration, Auto Carousel Interval, Always Point North, and GPS Format. | +| [LoRa](/docs/configuration/radio/lora) | The LoRa config options are: Region, Modem Preset, Max Hops, Transmit Power, Bandwidth, Spread Factor, Coding Rate, Frequency Offset, Transmit Disabled and Ignore Incoming Array. | +| [Network](/docs/configuration/radio/network) | Network config options are: WiFi Enabled, WiFi SSID, WiFi PSK, WiFi Mode and NTP Server. | +| [Position](/docs/configuration/radio/position) | Position config options are: GPS Enabled, GPS Update Interval, GPS Attempt Time, Fixed Position, Smart Broadcast, Broadcast Interval and Position Packet Flags. | +| [Power](/docs/configuration/radio/power) | Power config options are: Charge Current, Power Saving, Shutdown after losing power, ADC Multiplier Override Wait Bluetooth Interval, Light Sleep Interval and Minimum Wake Interval. | +| [User](/docs/configuration/radio/user) | The user config options are: Long Name, Short Name, and Is Licensed | diff --git a/docs/configuration/device-config/lora.mdx b/docs/configuration/radio/lora.mdx similarity index 97% rename from docs/configuration/device-config/lora.mdx rename to docs/configuration/radio/lora.mdx index e6dd9073..8c177307 100644 --- a/docs/configuration/device-config/lora.mdx +++ b/docs/configuration/radio/lora.mdx @@ -1,7 +1,6 @@ --- id: lora title: LoRa Configuration -slug: /settings/config/lora sidebar_label: LoRa --- @@ -104,7 +103,7 @@ Defaults to true 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/settings/config/channels). See [Chat Channels VS Lora Modem Channels](/docs/configuration/tips#chat-channels-vs-lora-modem-channels) for further clarification. +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. ::: ### Ignore Incoming Array diff --git a/docs/configuration/device-config/network.mdx b/docs/configuration/radio/network.mdx similarity index 99% rename from docs/configuration/device-config/network.mdx rename to docs/configuration/radio/network.mdx index 92d0c92b..099fa20d 100644 --- a/docs/configuration/device-config/network.mdx +++ b/docs/configuration/radio/network.mdx @@ -1,7 +1,6 @@ --- id: network title: Network Configuration -slug: /settings/config/network sidebar_label: Network --- diff --git a/docs/configuration/device-config/position.mdx b/docs/configuration/radio/position.mdx similarity index 99% rename from docs/configuration/device-config/position.mdx rename to docs/configuration/radio/position.mdx index d9d70f82..592c26ce 100644 --- a/docs/configuration/device-config/position.mdx +++ b/docs/configuration/radio/position.mdx @@ -1,7 +1,6 @@ --- id: position title: Position Configuration -slug: /settings/config/position sidebar_label: Position --- diff --git a/docs/configuration/device-config/power.mdx b/docs/configuration/radio/power.mdx similarity index 97% rename from docs/configuration/device-config/power.mdx rename to docs/configuration/radio/power.mdx index 8f80d332..000b990f 100644 --- a/docs/configuration/device-config/power.mdx +++ b/docs/configuration/radio/power.mdx @@ -1,7 +1,6 @@ --- id: power title: Power Configuration -slug: /settings/config/power sidebar_label: Power --- @@ -10,7 +9,7 @@ import TabItem from "@theme/TabItem"; import calculateADC from "/src/utils/calculateADC"; :::info -Power settings are advanced configuration, most users should choose a role under [Device Config](/docs/settings/config/device) to manage power for their device and shouldn't ever need to adjust these settings. +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. diff --git a/docs/configuration/device-config/user.mdx b/docs/configuration/radio/user.mdx similarity index 98% rename from docs/configuration/device-config/user.mdx rename to docs/configuration/radio/user.mdx index d83a2600..92be4b96 100644 --- a/docs/configuration/device-config/user.mdx +++ b/docs/configuration/radio/user.mdx @@ -1,7 +1,6 @@ --- id: user title: User Configuration -slug: /settings/config/user sidebar_label: User --- diff --git a/docs/configuration/remote-admin.mdx b/docs/configuration/remote-admin.mdx index 866bb4e9..a4960851 100644 --- a/docs/configuration/remote-admin.mdx +++ b/docs/configuration/remote-admin.mdx @@ -198,5 +198,5 @@ You've finished setting up and adding two devices to the admin channel. Remember For further reading, I recommend starting out with the [Meshtastic Python CLI Guide](/docs/software/python/cli/) if you haven't already gone through this (hopefully you have since you are reading this). But for a full reference to the settings you can change, please see: -[Settings Overview](/docs/settings) and +[Settings Overview](/docs/configuration) and [Complete list of user settings in Protobufs](https://buf.build/meshtastic/protobufs/docs/main:meshtastic#meshtastic.User) \ No newline at end of file diff --git a/docs/configuration/tips.mdx b/docs/configuration/tips.mdx index 51679762..6d9676ad 100644 --- a/docs/configuration/tips.mdx +++ b/docs/configuration/tips.mdx @@ -8,7 +8,7 @@ sidebar_position: 4 ## (Not) Sharing Your Location -Telemetry is shared over your [PRIMARY channel](/docs/settings/config/channels#role). This means that if your node has acquired GPS coordinates from an integrated GPS chip, or from your mobile device, your coordinates will be sent to the mesh over this channel, using it's defined encryption (if any). +Telemetry is shared over your [PRIMARY channel](/docs/configuration/radio/channels#role). This means that if your node has acquired GPS coordinates from an integrated GPS chip, or from your mobile device, your coordinates will be sent to the mesh over this channel, using it's defined encryption (if any). By default the PRIMARY channel's name is LongFast with the encryption key "AQ==" (Base64 equivalent of Hex 0x01). If this is left unchanged, your location will be shared with all nodes in range that are also using the default channel. @@ -16,7 +16,7 @@ By default the PRIMARY channel's name is LongFast with the encryption key "AQ==" If you'd like to connect with other Meshtastic users but only share your location with trusted parties, you may create a private PRIMARY channel and use the defaults for a SECONDARY channel. -1. Ensure you have not changed the LoRa [Modem Preset](/docs/settings/config/lora#modem-preset) from the default `unset` / `LONG_FAST`. +1. Ensure you have not changed the LoRa [Modem Preset](/docs/configuration/radio/lora#modem-preset) from the default `unset` / `LONG_FAST`. 2. On your PRIMARY channel, set anything you'd like for the channel's name and choose a random PSK. 3. Enable a SECONDARY channel with a blank name (will default to LongFast) with PSK "AQ==". 4. Since the radio's frequency is automatically changed based on your PRIMARY channel's name, you will have to manually set it back to Channel 20 (in LoRa settings) in order to interface with users on the default channel. @@ -25,15 +25,15 @@ To quickly test this configuration, scan your region's QR from [this folder](htt ## Rebroadcast "Public" Traffic -Meshtastic nodes will rebroadcast all packets if they share [LoRa modem settings](/docs/settings/config/lora#lora-config-values), regardless of encryption (unless [Rebroadcast mode](/docs/settings/config/device#rebroadcast-mode) is set to `LOCAL_ONLY`). +Meshtastic nodes will rebroadcast all packets if they share [LoRa modem settings](/docs/configuration/radio/lora#lora-config-values), regardless of encryption (unless [Rebroadcast mode](/docs/configuration/radio/device#rebroadcast-mode) is set to `LOCAL_ONLY`). :::info - If you would like your nodes to include/expand the "public" mesh, you must use the default [modem preset](/docs/settings/config/lora#modem-preset) `LONG_FAST`. If you change your PRIMARY channel name, you must manually set the LoRa channel to 20. + If you would like your nodes to include/expand the "public" mesh, you must use the default [modem preset](/docs/configuration/radio/lora#modem-preset) `LONG_FAST`. If you change your PRIMARY channel name, you must manually set the LoRa channel to 20. ::: ## Chat Channels VS LoRa Modem Channels -Meshtastic uses the word "channels" to define two different configuration properties: [Messaging Channels](/docs/settings/config/channels) & [LoRa Modem Channels](/docs/settings/config/lora#channel-number) +Meshtastic uses the word "channels" to define two different configuration properties: [Messaging Channels](/docs/configuration/radio/channels) & [LoRa Modem Channels](/docs/configuration/radio/lora#channel-number) ### Device Config: Channels @@ -47,7 +47,7 @@ This configures the frequency the radio is set to. Check out the [frequency cal ## Best Practices - If you are part of a large mesh and don't know what a setting does, don't change it (unless you're super curious). -- Leave your [MAX HOPS](/docs/settings/config/lora#max-hops) set to 3 unless you're sure you need more (or less) to reach your destination node. -- Leave your [ROLE](/docs/settings/config/device#role) set to `CLIENT` unless you're sure another role would suit the node's purpose. For example, MQTT nodes do not need to be set to `ROUTER`. +- Leave your [MAX HOPS](/docs/configuration/radio/lora#max-hops) set to 3 unless you're sure you need more (or less) to reach your destination node. +- Leave your [ROLE](/docs/configuration/radio/device#role) set to `CLIENT` unless you're sure another role would suit the node's purpose. For example, MQTT nodes do not need to be set to `ROUTER`. - TEST your settings and hardware before you install in hard-to-reach locations. -- Connecting a node to the [public MQTT server](http://localhost:3000/docs/settings/moduleconfig/mqtt#connect-to-the-default-public-server) may publish the locations of all nodes in your mesh to the internet. This will also add every globally connected node to your node database and potentially flood your mesh with all types of packets. \ No newline at end of file +- Connecting a node to the [public MQTT server](http://localhost:3000/docs/configuration/module/mqtt#connect-to-the-default-public-server) may publish the locations of all nodes in your mesh to the internet. This will also add every globally connected node to your node database and potentially flood your mesh with all types of packets. \ No newline at end of file diff --git a/docs/development/device/module-api.mdx b/docs/development/device/module-api.mdx index fa61fa22..e47ffac1 100644 --- a/docs/development/device/module-api.mdx +++ b/docs/development/device/module-api.mdx @@ -57,7 +57,7 @@ A number of [key services](http://github.com/meshtastic/firmware/tree/master/src - [NodeInfoModule](http://github.com/meshtastic/firmware/tree/master/src/modules/NodeInfoModule.h) - Receives/sends User information to other nodes so that usernames are available in the databases. -- [RemoteHardwareModule](http://github.com/meshtastic/firmware/tree/master/src/modules/RemoteHardwareModule.h) - A module that provides easy remote access to device hardware (for things like turning GPIOs on or off). Intended to be a more extensive example and provide a useful feature of its own. See [remote-hardware](/docs/settings/moduleconfig/remote-hardware) for details. +- [RemoteHardwareModule](http://github.com/meshtastic/firmware/tree/master/src/modules/RemoteHardwareModule.h) - A module that provides easy remote access to device hardware (for things like turning GPIOs on or off). Intended to be a more extensive example and provide a useful feature of its own. See [remote-hardware](/docs/configuration/module/remote-hardware) for details. - [ReplyModule](http://github.com/meshtastic/firmware/tree/master/src/modules/ReplyModule.h) - A simple module that just replies to any packet it receives (provides a 'ping' service). diff --git a/docs/development/web/index.mdx b/docs/development/web/index.mdx index 9f4c5be6..2e3466db 100644 --- a/docs/development/web/index.mdx +++ b/docs/development/web/index.mdx @@ -11,7 +11,7 @@ The Meshtastic web interface can be hosted or served from a node. The official hosted version can be found at [https://client.meshtastic.org](https://client.meshtastic.org). -The version served from a node can be accessed by first [connecting your node to your network](/docs/settings/config/network) and then navigating to http://meshtastic.local (or your_node_ip.local). +The version served from a node can be accessed by first [connecting your node to your network](/docs/configuration/radio/network) and then navigating to http://meshtastic.local (or your_node_ip.local). ## Development & Building diff --git a/docs/getting-started/initial-config.mdx b/docs/getting-started/initial-config.mdx index 4ab135ad..554f15ef 100644 --- a/docs/getting-started/initial-config.mdx +++ b/docs/getting-started/initial-config.mdx @@ -113,7 +113,7 @@ Now that you have set the LoRa region on your device, you can continue with conf
Device Configuration diff --git a/docs/hardware/antennas/testing.mdx b/docs/hardware/antennas/testing.mdx index f69e16fa..da8d3d68 100644 --- a/docs/hardware/antennas/testing.mdx +++ b/docs/hardware/antennas/testing.mdx @@ -42,7 +42,7 @@ As mentioned, while stating the obvious, the simplest way of performing a test i - Change aerials, repeat, and evaluate results. :::note -The [range test module](/docs/settings/moduleconfig/range-test) has been designed for exactly this purpose. It allows one node to transmit a frequent message, and another node to record which messages were received. This data is saved and can be imported to applications such as Google Earth. +The [range test module](/docs/configuration/module/range-test) has been designed for exactly this purpose. It allows one node to transmit a frequent message, and another node to record which messages were received. This data is saved and can be imported to applications such as Google Earth. ::: On the topic of testing - performing your own testing and providing feedback is the lifeblood of Meshtastic and open source projects. diff --git a/docs/software/android/usage.mdx b/docs/software/android/usage.mdx index d25878a3..9a517b00 100644 --- a/docs/software/android/usage.mdx +++ b/docs/software/android/usage.mdx @@ -126,7 +126,7 @@ By default there is no long-term store-and-forward of messages, so messages not The network list shows all the users (devices) that have connected to the same Channel. For each entry, it shows the last time they were active, their location and distance (when available), and their last known power status. In the example above, Monkey is the local user, Rabbit was last heard from 10 minutes ago and is 50m away, and Panda was last heard 11 minutes ago and 5m away. -- Tap on a node from the list to start Direct Messaging, request a position update, request a [traceroute](/docs/settings/moduleconfig/traceroute) or add it to your [Ignore Incoming Array](/docs/settings/config/lora#ignore-incoming-array). +- Tap on a node from the list to start Direct Messaging, request a position update, request a [traceroute](/docs/configuration/module/traceroute) or add it to your [Ignore Incoming Array](/docs/configuration/radio/lora#ignore-incoming-array). - If you have an [Admin Channel](/docs/configuration/remote-admin) enabled on your devices, tapping on the node will also display an option to remotely configure the node. ### View the map @@ -163,13 +163,13 @@ The debug panel allows you to see all packets sent between the application and t [![Meshtastic configuration options](/img/android/android-radio-configuration-c.png)](/img/android/android-radio-configuration.png) Radio Configuration opens a list of all radio and module configuration settings. -- See [Device Config](/docs/settings/config) for radio settings. -- See [Module Config](/docs/settings/moduleconfig) for module settings. +- See [Device Config](/docs/configuration/radio) for radio settings. +- See [Module Config](/docs/configuration/module) for module settings. - At the end of this list are buttons for Reboot, Shutdown, Factory reset, and NodeDB reset. ### Export rangetest.csv -Allows you to save all your network's position data with GPS coordinates into a .csv (comma separated value) file on your phone. This file can be imported into the spreadsheet application of your choice for easy viewing. This feature is similar but independent from the device [range test module](/docs/settings/moduleconfig/range-test), and results may differ. +Allows you to save all your network's position data with GPS coordinates into a .csv (comma separated value) file on your phone. This file can be imported into the spreadsheet application of your choice for easy viewing. This feature is similar but independent from the device [range test module](/docs/configuration/module/range-test), and results may differ. ### Theme diff --git a/docs/software/integrations/caltopo.mdx b/docs/software/integrations/caltopo.mdx index 90ef51e1..651a6c28 100644 --- a/docs/software/integrations/caltopo.mdx +++ b/docs/software/integrations/caltopo.mdx @@ -15,7 +15,7 @@ Meshtastic can integrate with [CalTopo](https://caltopo.com/) Desktop edition qu ### Configuring the Meshtastic device -To configure our Meshtastic device for this integration, we have a couple of different options, both of which utilize the [Serial module](/docs/settings/moduleconfig/serial): +To configure our Meshtastic device for this integration, we have a couple of different options, both of which utilize the [Serial module](/docs/configuration/module/serial): #### Enabling serial over the device's USB port ```shell title="Serial over USB" diff --git a/docs/software/mqtt/index.mdx b/docs/software/mqtt/index.mdx index f2640ac6..2150ca5d 100644 --- a/docs/software/mqtt/index.mdx +++ b/docs/software/mqtt/index.mdx @@ -11,7 +11,7 @@ Meshtastic networks in different locations beyond the reach of LoRa can be easil You can also share channel settings with a remote network. If you use the default Meshtastic MQTT server, packets are always encrypted. If you use a custom MQTT broker (ie set `mqtt.address`), the `mqtt.encryption_enabled` setting applies, which by default is false. You can also specify your own private MQTT broker and specify authentication for that broker to bridge several mesh networks together, via the internet (or just a local IP network). -You can find the settings available for MQTT [here](/docs/settings/moduleconfig/mqtt). +You can find the settings available for MQTT [here](/docs/configuration/module/mqtt). :::important When MQTT is turned on, you are potentially broadcasting your entire mesh's traffic onto the public internet. This includes messages and position information. @@ -25,7 +25,7 @@ When MQTT is enabled, the Meshtastic device simply uplinks and/or downlinks ever ### MQTT [Topics](https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices) -If no specific [root topic](/docs/settings/moduleconfig/mqtt#root-topic) is configured, the default root topic will be `msh/`. +If no specific [root topic](/docs/configuration/module/mqtt#root-topic) is configured, the default root topic will be `msh/`. Each device that is connected to MQTT will publish its MQTT state (`online`/`offline`) to: `msh/2/stat/USERID`, where `USERID` is the node ID of the gateway device (the one connected to MQTT). @@ -47,10 +47,10 @@ The payload is a raw protobuf, whose definitions for Meshtastic can be found [he ShortFast !937bed1c ``` -If [encryption_enabled](/docs/settings/moduleconfig/mqtt#encryption-enabled) is set to true, the payload of the MeshPacket will remain encrypted with the key for the specified channel. +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 -If [JSON is enabled](/docs/settings/moduleconfig/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`, and `NEIGHBORINFO_APP`. These are then forwarded to the topic: +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`, and `NEIGHBORINFO_APP`. These are then forwarded to the topic: `msh/2/json/CHANNELNAME/USERID`. @@ -108,7 +108,7 @@ If the message received contains valid JSON in the payload, the JSON is deserial ### Basic Configuration -Check out [MQTT Settings](/docs/settings/moduleconfig/mqtt) for full information. For quick start instructions, read on. +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`. diff --git a/docs/software/python-cli/index.mdx b/docs/software/python-cli/index.mdx index 417ebc07..5577fdee 100644 --- a/docs/software/python-cli/index.mdx +++ b/docs/software/python-cli/index.mdx @@ -124,7 +124,7 @@ meshtastic --qr Gets a preferences field. -Configuration values are described in: [Configuration](https://meshtastic.org/docs/settings). +Configuration values are described in: [Configuration](https://meshtastic.org/docs/configuration). ```shell title="Usage" meshtastic --get lora @@ -135,7 +135,7 @@ meshtastic --get lora.region Sets a preferences field. -Configuration values are described in: [Configuration](https://meshtastic.org/docs/settings). +Configuration values are described in: [Configuration](https://meshtastic.org/docs/configuration). ```shell title="Usage" meshtastic --set lora.region Unset diff --git a/docs/software/python-cli/usage.mdx b/docs/software/python-cli/usage.mdx index 13bd32b0..65a765af 100644 --- a/docs/software/python-cli/usage.mdx +++ b/docs/software/python-cli/usage.mdx @@ -95,9 +95,9 @@ Toggling `set-ham` changes your device settings in the following ways. | Setting | `set-ham` Default | Normal Default | | :----------: | :---------------: | :------------------------------------------------------------------------: | -| `IsLicensed` | `true` | See [User Config - IsLicensed](/docs/settings/config/user#is-licensed-ham) | -| `LongName` | _Your CallSign_ | See [User Config - LongName](/docs/settings/config/user#long-name) | -| `ShortName` | _Abrv CallSign_ | See [User Config - ShortName](/docs/settings/config/user#short-name) | +| `IsLicensed` | `true` | See [User Config - IsLicensed](/docs/configuration/radio/user#is-licensed-ham) | +| `LongName` | _Your CallSign_ | See [User Config - LongName](/docs/configuration/radio/user#long-name) | +| `ShortName` | _Abrv CallSign_ | See [User Config - ShortName](/docs/configuration/radio/user#short-name) | | `PSK` | `""` | See [Channel Settings - PSK](#changing-the-preshared-key) | ## Changing the preshared key diff --git a/docs/software/web-client.mdx b/docs/software/web-client.mdx index 8f50fa3e..2b984430 100644 --- a/docs/software/web-client.mdx +++ b/docs/software/web-client.mdx @@ -31,7 +31,7 @@ This can be found on the screen of the device, via your router's DHCP lease page ::: -You can accessing your device over HTTP after you set up your [Network Connection](/docs/settings/config/network) +You can accessing your device over HTTP after you set up your [Network Connection](/docs/configuration/radio/network) ### Bluetooth diff --git a/vercel.json b/vercel.json new file mode 100644 index 00000000..3fec1b6e --- /dev/null +++ b/vercel.json @@ -0,0 +1,24 @@ +{ + "redirects": [ + { + "source": "/settings", + "destination": "/configuration" + }, + { + "source": "/settings/moduleconfig", + "destination": "/configuration/module" + }, + { + "source": "/settings/moduleconfig/:path*", + "destination": "/configuration/module/:path*" + }, + { + "source": "/settings/config", + "destination": "/configuration/radio" + }, + { + "source": "/settings/config/:path*", + "destination": "/configuration/radio/:path*" + } + ] +} \ No newline at end of file From 7db60c691b55f206bd68ee4522caa0fc2623d610 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Thu, 28 Sep 2023 19:46:24 -0700 Subject: [PATCH 19/21] forwarding work --- vercel.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/vercel.json b/vercel.json index 3fec1b6e..67aa3b06 100644 --- a/vercel.json +++ b/vercel.json @@ -1,24 +1,24 @@ { "redirects": [ { - "source": "/settings", + "source": "/docs/settings", "destination": "/configuration" }, { - "source": "/settings/moduleconfig", - "destination": "/configuration/module" + "source": "/docs/settings/moduleconfig", + "destination": "/docs/configuration/module" }, { - "source": "/settings/moduleconfig/:path*", - "destination": "/configuration/module/:path*" + "source": "/docs/settings/moduleconfig/:path*", + "destination": "/docs/configuration/module/:path*" }, { - "source": "/settings/config", - "destination": "/configuration/radio" + "source": "/docs/settings/config", + "destination": "/docs/configuration/radio" }, { - "source": "/settings/config/:path*", - "destination": "/configuration/radio/:path*" + "source": "/docs/settings/config/:path*", + "destination": "/docs/configuration/radio/:path*" } ] } \ No newline at end of file From df32694e6f0b73864b9c437f3e776052b36aee88 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Thu, 28 Sep 2023 20:09:42 -0700 Subject: [PATCH 20/21] fix settings redirect --- vercel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vercel.json b/vercel.json index 67aa3b06..9b29715d 100644 --- a/vercel.json +++ b/vercel.json @@ -2,7 +2,7 @@ "redirects": [ { "source": "/docs/settings", - "destination": "/configuration" + "destination": "/docs/configuration" }, { "source": "/docs/settings/moduleconfig", From f12b074337ec23272bd03c561923e7a08afe29f3 Mon Sep 17 00:00:00 2001 From: pdxlocations Date: Thu, 28 Sep 2023 21:40:08 -0700 Subject: [PATCH 21/21] trunk-ignore --- docs/about/faq.mdx | 2 ++ docs/configuration/radio/channels.mdx | 4 ++-- docs/configuration/remote-admin.mdx | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/about/faq.mdx b/docs/about/faq.mdx index 33e29282..ba1e9775 100644 --- a/docs/about/faq.mdx +++ b/docs/about/faq.mdx @@ -51,6 +51,7 @@ The Meshtastic App on Apple Clients require the following minimum OS versions: i See [Apple Apps](/docs/software/apple/installation) + ### After a fresh firmware install, my node is not connecting via Bluetooth. What should I do? Try forgetting the Bluetooth connection from the iOS/iPadOS/macOS System Settings. Re-pair and try again. This is a security measure and there is no workaround for it. It prevents apps and other accessories from spoofing an existing accessory by un-pairing and "re-pairing" themselves without the users' knowledge. @@ -111,6 +112,7 @@ Updating firmware varies with hardware. See [Flashing Firmware](/docs/getting-st The LoRa radio on the node is still active and will wake up the CPU when the device is sleeping. If your phone is in range, the node will relay any messages your phone may have missed. If you're in range and your device is active, messages have not been lost. + ### My device has gone to sleep and I can't send any messages. Once the node wakes up from sleep, your phone will relay any delayed messages through your node and to the mesh network. Give it a few minutes and it'll do the right thing. diff --git a/docs/configuration/radio/channels.mdx b/docs/configuration/radio/channels.mdx index 63ca1244..ab0e2f05 100644 --- a/docs/configuration/radio/channels.mdx +++ b/docs/configuration/radio/channels.mdx @@ -153,7 +153,7 @@ meshtastic --ch-set name "My Channel" --ch-set psk random --ch-set uplink_enable ::: - + ### Name ```shell title="Set channel name for the PRIMARY channel" @@ -162,7 +162,7 @@ meshtastic --ch-set name MyChannel --ch-index 0 # with spaces meshtastic --ch-set name "My Channel" --ch-index 0 ``` - + ### 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. diff --git a/docs/configuration/remote-admin.mdx b/docs/configuration/remote-admin.mdx index a4960851..cf1422fb 100644 --- a/docs/configuration/remote-admin.mdx +++ b/docs/configuration/remote-admin.mdx @@ -76,7 +76,7 @@ For this step you need physical access to both the nodes. ```shell meshtastic --seturl the-url-from-step-2 ``` - + 5. Run `meshtastic --info` and confirm that the "Complete URL" is the same for both of the nodes. At this point you can take your remote node and install it far away. You will still be able to change any of its settings.