mirror of
https://github.com/meshtastic/meshtastic.git
synced 2024-12-26 22:19:46 -08:00
Merge branch 'master' into remoteHardware
This commit is contained in:
commit
2eeab13db9
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
|
@ -9,12 +9,12 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code & submodules
|
- name: Checkout code & submodules
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v2.2.1
|
uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
version: latest
|
version: latest
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ Most communication and interactions happen with protocol buffers. The [Meshtasti
|
||||||
|
|
||||||
### Device Firmware
|
### Device Firmware
|
||||||
|
|
||||||
The [firmware repo](https://github.com/meshtastic/firmware) is where all of the device firmware development happens. This is where the code for the ESP32 and nRF52 based devices is developed. It is mainly C and C++ code. Think Arduino. It is where the first level of hardware interaction begins and ends.
|
The [firmware repo](https://github.com/meshtastic/firmware) is where all of the device firmware development happens. This is where the code for the ESP32, nRF52 and RP2040 based devices is developed. It is mainly C and C++ code. Think Arduino. It is where the first level of hardware interaction begins and ends.
|
||||||
|
|
||||||
### Firmware Modules
|
### Firmware Modules
|
||||||
|
|
||||||
|
|
|
@ -131,6 +131,10 @@ All MQTT module config options are available for the Web UI.
|
||||||
|
|
||||||
## Connect to the Default Public Server
|
## Connect to the Default Public Server
|
||||||
|
|
||||||
|
:::important
|
||||||
|
The default channel (LongFast) on the public server usually has a lot of traffic. Your device may get overloaded and may no longer function properly anymore. It is recommended to use a different channel or to use your own MQTT server if you experience issues.
|
||||||
|
:::
|
||||||
|
|
||||||
<Tabs
|
<Tabs
|
||||||
defaultValue="apple"
|
defaultValue="apple"
|
||||||
values={[
|
values={[
|
||||||
|
|
|
@ -15,7 +15,7 @@ Power settings are advanced configuration, most users should choose a role under
|
||||||
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.
|
The power config options are: Power Saving, Shutdown after losing power, ADC Multiplier Override, Wait Bluetooth Interval, Light Sleep Interval, Minimum Wake Interval, and Device Battery INA2xx Address. Power config uses an admin message sending a `Config.Power` protobuf.
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
ADC Multiplier, The Light Sleep setting only applies to ESP32-based boards. This settings will have no effect on nRF52 modules.
|
ADC Multiplier, The Light Sleep setting only applies to ESP32-based boards. This settings will have no effect on nRF52/RP2040 modules.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Power Config Values
|
## Power Config Values
|
||||||
|
|
|
@ -29,7 +29,7 @@ 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/configuration/radio/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.
|
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 named "LongFast" with PSK "AQ==".
|
3. Enable a SECONDARY channel named "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 your region's default (in LoRa settings) in order to interface with users on the default channel:
|
4. If your LoRa channel is set to the default (`0`), the radio's frequency will be automatically changed based on your PRIMARY channel's name. In this case, you will have to manually set it back to your region's default (in LoRa settings) in order to interface with users on the default channel:
|
||||||
|
|
||||||
### Default Primary Channels by Region
|
### Default Primary Channels by Region
|
||||||
|
|
||||||
|
@ -65,4 +65,5 @@ This configures the frequency the radio is set to. Check out the [frequency cal
|
||||||
- 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).
|
- 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/configuration/radio/lora#max-hops) set to 3 unless you're sure you need more (or less) to reach your destination node.
|
- 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.
|
||||||
- TEST your settings and hardware before you install in hard-to-reach locations.
|
- 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/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.
|
- Connecting a node to the [public MQTT server](./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.
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ sidebar_label: Connecting
|
||||||
```tsx
|
```tsx
|
||||||
import type React from "React";
|
import type React from "React";
|
||||||
|
|
||||||
import { IHTTPConnection } from "@meshtastic/meshtasticjs";
|
import { IHTTPConnection } from "@meshtastic/js";
|
||||||
|
|
||||||
export const Connection = (): JSX.Element => {
|
export const Connection = (): JSX.Element => {
|
||||||
const connection = new IHTTPConnection();
|
const connection = new IHTTPConnection();
|
||||||
|
|
|
@ -14,7 +14,7 @@ import {
|
||||||
Types,
|
Types,
|
||||||
Protobuf,
|
Protobuf,
|
||||||
SettingsManager
|
SettingsManager
|
||||||
} from "@meshtastic/meshtasticjs";
|
} from "@meshtastic/js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connection method
|
* Connection method
|
||||||
|
|
|
@ -42,7 +42,7 @@ The nRF52 chip is much more power efficient than the ESP32 chip and easier to up
|
||||||
|
|
||||||
The RP2040 is a dual-core ARM chip developed by Raspberry Pi. Supported RP2040 devices include:
|
The RP2040 is a dual-core ARM chip developed by Raspberry Pi. Supported RP2040 devices include:
|
||||||
|
|
||||||
- Raspberry Pi Pico + Waveshare LoRa Module (Note: **Bluetooth and Wi-Fi on the Pico W is not yet supported by Meshtastic**)
|
- Raspberry Pi Pico + Waveshare LoRa Module (Note: **Bluetooth on the Pico W is not yet supported by Meshtastic**)
|
||||||
- RAK11310 Core module for RAK WisBlock modular boards
|
- RAK11310 Core module for RAK WisBlock modular boards
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
|
@ -67,7 +67,7 @@ Some cables only provide _charging_, verify that your cable is also capable of _
|
||||||
|
|
||||||
:::caution
|
:::caution
|
||||||
|
|
||||||
nRF52 devices typically do not require serial drivers. They use the UF2 bootloader which makes the devices appear as flash drives. Do _NOT_ download the USB device drivers unless required to install UF2 support.
|
nRF52/RP2040 devices typically do not require serial drivers. They use the UF2 bootloader which makes the devices appear as flash drives. Do _NOT_ download the USB device drivers unless required to install UF2 support.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ If you require serial drivers installed on your computer, please choose one of t
|
||||||
className={'button button--outline button--lg cta--button'}
|
className={'button button--outline button--lg cta--button'}
|
||||||
to={'/docs/getting-started/serial-drivers/nrf52'}
|
to={'/docs/getting-started/serial-drivers/nrf52'}
|
||||||
>
|
>
|
||||||
Install NRF52 Drivers
|
Install nRF52/RP2040 Drivers
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -115,7 +115,7 @@ After completing the previous steps, you can now flash the Meshtastic firmware o
|
||||||
className={"button button--outline button--lg cta--button"}
|
className={"button button--outline button--lg cta--button"}
|
||||||
to={"/docs/getting-started/flashing-firmware/nrf52/"}
|
to={"/docs/getting-started/flashing-firmware/nrf52/"}
|
||||||
>
|
>
|
||||||
Flash nRF52 Firmware
|
Flash nRF52/RP2040 Firmware
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
id: nrf52
|
id: nrf52
|
||||||
title: nRF52 Serial Drivers
|
title: nRF52/RP2040 Serial Drivers
|
||||||
sidebar_label: nRF52 Drivers
|
sidebar_label: nRF52/RP2040 Drivers
|
||||||
sidebar_position: 2
|
sidebar_position: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -9,11 +9,11 @@ import Tabs from "@theme/Tabs";
|
||||||
import TabItem from "@theme/TabItem";
|
import TabItem from "@theme/TabItem";
|
||||||
import Link from "@docusaurus/Link";
|
import Link from "@docusaurus/Link";
|
||||||
|
|
||||||
## Install nRF52 USB to Serial Drivers
|
## Install nRF52/RP2040 USB to Serial Drivers
|
||||||
|
|
||||||
:::caution
|
:::caution
|
||||||
|
|
||||||
nRF52 devices typically do not require serial drivers. They use the UF2 bootloader which makes the devices appear as flash drives. Do _NOT_ download the USB device drivers unless required to install UF2 support.
|
nRF52/RP2040 devices typically do not require serial drivers. They use the UF2 bootloader which makes the devices appear as flash drives. Do _NOT_ download the USB device drivers unless required to install UF2 support.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
@ -86,6 +86,6 @@ After installing the serial drivers, you can now flash the Meshtastic firmware o
|
||||||
className={"button button--outline button--lg cta--button"}
|
className={"button button--outline button--lg cta--button"}
|
||||||
to={"/docs/getting-started/flashing-firmware/nrf52/"}
|
to={"/docs/getting-started/flashing-firmware/nrf52/"}
|
||||||
>
|
>
|
||||||
Flash nRF52 Firmware
|
Flash nRF52/RP2040 Firmware
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -94,7 +94,7 @@ After completing the previous steps, you can now flash the Meshtastic firmware o
|
||||||
className={"button button--outline button--lg cta--button"}
|
className={"button button--outline button--lg cta--button"}
|
||||||
to={"/docs/getting-started/flashing-firmware/nrf52/"}
|
to={"/docs/getting-started/flashing-firmware/nrf52/"}
|
||||||
>
|
>
|
||||||
Flash nRF52 Firmware
|
Flash nRF52/RP2040 Firmware
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
144
docs/legal/code_of_conduct.mdx
Normal file
144
docs/legal/code_of_conduct.mdx
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
---
|
||||||
|
id: conduct
|
||||||
|
title: Code of Conduct
|
||||||
|
sidebar_label: Conduct
|
||||||
|
---
|
||||||
|
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||||
|
identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the overall
|
||||||
|
community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||||
|
any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email address,
|
||||||
|
without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official email address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement using one or more of the methods:
|
||||||
|
|
||||||
|
* In Discord, send a private message to an Admin
|
||||||
|
* In Email, send a message to all of these:
|
||||||
|
* conduct@meshtastic.org
|
||||||
|
* jm@meshtastic.org
|
||||||
|
* sachaw@meshtastic.org
|
||||||
|
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of
|
||||||
|
actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or permanent
|
||||||
|
ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||||
|
community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.1, available at
|
||||||
|
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||||
|
[https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||||
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
|
@ -11,12 +11,14 @@ sidebar_position: 6
|
||||||
|
|
||||||
Meshtastic networks in different locations beyond the reach of LoRa can be easily bridged together using MQTT. The simplest option is to connect your mesh to the official Meshtastic MQTT broker. This makes your devices appear on the world map, and provides a copy of your mesh traffic, translated into JSON. All you have to do to join the public MQTT server is to Enable MQTT and set Uplink and Downlink on the channels that you want to share over MQTT. The default device configuration using the public MQTT Server is encrypted.
|
Meshtastic networks in different locations beyond the reach of LoRa can be easily bridged together using MQTT. The simplest option is to connect your mesh to the official Meshtastic MQTT broker. This makes your devices appear on the world map, and provides a copy of your mesh traffic, translated into JSON. All you have to do to join the public MQTT server is to Enable MQTT and set Uplink and Downlink on the channels that you want to share over MQTT. The default device configuration using the public MQTT Server is encrypted.
|
||||||
|
|
||||||
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 also specify your own private MQTT broker to bridge mesh networks together, via the internet (or just a local IP network).
|
||||||
|
|
||||||
You can find the settings available for MQTT [here](/docs/configuration/module/mqtt).
|
You can find the settings available for MQTT [here](/docs/configuration/module/mqtt).
|
||||||
|
|
||||||
:::important
|
:::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.
|
When MQTT is turned on, you are potentially broadcasting your entire mesh's traffic onto the public internet. This includes messages and position information.
|
||||||
|
|
||||||
|
The default channel (LongFast) on the public MQTT server usually has a lot of traffic. Your device may get overloaded and may no longer function properly anymore. It is recommended to use a different channel or to use your own MQTT server if you experience issues.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Software Integrations
|
## Software Integrations
|
||||||
|
|
|
@ -5,7 +5,56 @@ sidebar_label: Node-RED
|
||||||
sidebar_position: 3
|
sidebar_position: 3
|
||||||
---
|
---
|
||||||
|
|
||||||
### Using MQTT with Node-RED
|
## Using MQTT with Node-RED
|
||||||
|
|
||||||
|
Node-RED is a free cross-platform programming tool for wiring together hardware, APIs, and online services developed originally by IBM for IOT. It is widely used for home automation by many non-professional programmers and runs well on Pi's. Node-RED has many plug-in modules written by the community.
|
||||||
|
|
||||||
|
I will use this platform as a practical example on how to interface with the MQTT features of Meshtastic. Everything can be done from GUI's without using command line.
|
||||||
|
|
||||||
|
|
||||||
|
### Enabling MQTT
|
||||||
|
|
||||||
|
Use http://client.meshtastic.org/ , the python CLI, or an Apple or Android app to connect to your device and adjust these settings.
|
||||||
|
|
||||||
|
|
||||||
|
1. Settings--> Radio Config--> Network
|
||||||
|
- On the node that will act as the gateway between the mesh and MQTT enable a network connection (i.e. Wifi, Ethernet).
|
||||||
|
- Save
|
||||||
|
|
||||||
|
2. Settings--> Module Config--> MQTT config
|
||||||
|
- Configure the MQTT gateway's network configuration.
|
||||||
|
- Verify Encryption Enabled is OFF.
|
||||||
|
- (optional) Turn JSON Output Enabled ON.
|
||||||
|
- Save
|
||||||
|
3. Channel Editor
|
||||||
|
- Go to Channel Editor and enable Uplink and Downlink on the channels you wish to publish to MQTT.
|
||||||
|
- Save
|
||||||
|
|
||||||
|
|
||||||
|
### Using Node-RED with Meshtastic
|
||||||
|
There are three common approaches:
|
||||||
|
|
||||||
|
1. Using JSON-encoded messages
|
||||||
|
2. Using protobuf-encoded messages with the Meshtastic decode node
|
||||||
|
3. Using protobuf-encoded messages with a protobuf decode node and the Meshtastic protobuf definitions
|
||||||
|
|
||||||
|
The JSON output only publishes the following subset of the messages on a Meshtastic network:
|
||||||
|
- Text Message
|
||||||
|
- Telemetry
|
||||||
|
- Device Metrics
|
||||||
|
- Environment Metrics
|
||||||
|
- Power Metrics
|
||||||
|
- Node Info
|
||||||
|
- Position
|
||||||
|
- Waypoint
|
||||||
|
- Neighbor Info
|
||||||
|
|
||||||
|
> JSON is intended to be a convenience for consuming data in other applications like Home Assistant.
|
||||||
|
|
||||||
|
> Protobufs are mesh native.
|
||||||
|
|
||||||
|
#### 1. Using JSON-encoded messages
|
||||||
|
Make sure that option *JSON Output Enabled* is set in MQTT module options.
|
||||||
|
|
||||||
Below is a valid JSON envelope for information sent by MQTT to a device for broadcast onto the mesh.
|
Below is a valid JSON envelope for information sent by MQTT to a device for broadcast onto the mesh.
|
||||||
|
|
||||||
|
@ -16,21 +65,25 @@ Below is a valid JSON envelope for information sent by MQTT to a device for broa
|
||||||
"payload": text or a json object go here
|
"payload": text or a json object go here
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
#### 2. Using protobuf-encoded messages with the Meshtastic decode node
|
||||||
|
Install Node-Red plug-in:
|
||||||
|
https://flows.nodered.org/node/@meshtastic/node-red-contrib-meshtastic
|
||||||
|
|
||||||
Node-RED is a free cross-platform programming tool for wiring together hardware, APIs, and online services developed originally by IBM for IOT. It is widely used for home automation by many non-professional programmers and runs well on Pi's. Node-RED has many plug-in modules written by the community. I will use this platform as a practical example on how to interface with the MQTT features of Meshtastic. Everything can be done from GUI's without using command line.
|
More info is in the plug-in source repository.
|
||||||
|
|
||||||
Step one: use http://client.meshtastic.org/ , the python CLI, or an Apple or Android app to connect to your device and adjust these settings.
|
There is an example flow using this mechanism available
|
||||||
Enable and enter network SSID/PSK. Settings--> Radio Config--> Network; Save.
|
https://github.com/scruplelesswizard/meshtastic-node-red
|
||||||
Set MQTT server address. Settings--> Module Config--> MQTT config; Verify Encryption Enabled is OFF. Turn JSON Output Enabled ON. Save.
|
|
||||||
Go to Channel Editor and set Uplink and Downlink enabled to True. Save.
|
|
||||||
|
|
||||||
Step two: if you don't want to depend on JSON decoding on the device, you can decode the protobuf messages off-device. To do that you will need to get the .proto files from https://github.com/meshtastic/protobufs. They function as a schema and are required for decoding in Node-RED. Save the files where the node-RED application can access them and note the file path of the "mqtt.proto" file.
|
|
||||||
|
|
||||||
Step three: install Node-RED plug-ins to your node-RED application for an embedded MQTT server and a protobuf decoder.
|
#### 3. Using protobuf-encoded messages with a protobuf decode node and the Meshtastic protobuf definitions
|
||||||
|
|
||||||
|
If you don't want to depend on JSON decoding on the device, you can decode the protobuf messages off-device. To do that you will need to get the .proto files from https://github.com/meshtastic/protobufs. They function as a schema and are required for decoding in Node-RED. Save the files where the node-RED application can access them and note the file path of the "mqtt.proto" file.
|
||||||
|
|
||||||
|
Install Node-RED plug-ins to your Node-RED application for an embedded MQTT server and a protobuf decoder.
|
||||||
https://flows.nodered.org/node/node-red-contrib-aedes
|
https://flows.nodered.org/node/node-red-contrib-aedes
|
||||||
https://flows.nodered.org/node/node-red-contrib-protobuf
|
https://flows.nodered.org/node/node-red-contrib-protobuf
|
||||||
|
|
||||||
Drag, drop, and wire the nodes like this. For this example, I ran node-RED on a Windows machine. Note that file paths might be specified differently on different platforms. MQTT server wild cards are usually the same. A "+" is a single level wildcard for a specific topic level. A "#" is a multiple level wildcard that can be used at the end of a topic filter. The debug messages shown are what happens when the inject button sends a JSON message with a topic designed to be picked up by the specified Meshtastic device and then having it rebroadcast the message.
|
Drag, drop, and wire the nodes like this. For this example, I ran Node-RED on a Windows machine. Note that file paths might be specified differently on different platforms. MQTT server wild cards are usually the same. A "+" is a single level wildcard for a specific topic level. A "#" is a multiple level wildcard that can be used at the end of a topic filter. The debug messages shown are what happens when the inject button sends a JSON message with a topic designed to be picked up by the specified Meshtastic device and then having it rebroadcast the message.
|
||||||
|
|
||||||
[<img src="/documents/mqtt/NodeRedTwo.jpg" style={{zoom:'50%'}} />](/documents/mqtt/NodeRedTwo.jpg)
|
[<img src="/documents/mqtt/NodeRedTwo.jpg" style={{zoom:'50%'}} />](/documents/mqtt/NodeRedTwo.jpg)
|
||||||
[<img src="/documents/mqtt/NodeRedThree.jpg" style={{zoom:'50%'}} />](/documents/mqtt/NodeRedThree.jpg)
|
[<img src="/documents/mqtt/NodeRedThree.jpg" style={{zoom:'50%'}} />](/documents/mqtt/NodeRedThree.jpg)
|
||||||
|
|
18
package.json
18
package.json
|
@ -12,34 +12,34 @@
|
||||||
"clear": "docusaurus clear"
|
"clear": "docusaurus clear"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@algolia/client-search": "^4.20.0",
|
"@algolia/client-search": "^4.22.0",
|
||||||
"@docusaurus/core": "3.0.1",
|
"@docusaurus/core": "3.0.1",
|
||||||
"@docusaurus/plugin-content-docs": "3.0.1",
|
"@docusaurus/plugin-content-docs": "3.0.1",
|
||||||
"@docusaurus/preset-classic": "3.0.1",
|
"@docusaurus/preset-classic": "3.0.1",
|
||||||
"@docusaurus/theme-common": "3.0.1",
|
"@docusaurus/theme-common": "3.0.1",
|
||||||
"@docusaurus/theme-mermaid": "3.0.1",
|
"@docusaurus/theme-mermaid": "3.0.1",
|
||||||
"@heroicons/react": "^2.0.18",
|
"@heroicons/react": "^2.1.1",
|
||||||
"@mdx-js/react": "^3.0.0",
|
"@mdx-js/react": "^3.0.0",
|
||||||
"@meshtastic/meshtasticjs": "2.2.13-1",
|
"@meshtastic/js": "2.2.16-0",
|
||||||
"autoprefixer": "^10.4.16",
|
"autoprefixer": "^10.4.16",
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
"dotenv": "^16.3.1",
|
"dotenv": "^16.3.1",
|
||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.32",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-icons": "^4.12.0",
|
"react-icons": "^4.12.0",
|
||||||
"swr": "^2.2.4",
|
"swr": "^2.2.4",
|
||||||
"tailwindcss": "^3.3.5"
|
"tailwindcss": "^3.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@docusaurus/module-type-aliases": "3.0.1",
|
"@docusaurus/module-type-aliases": "3.0.1",
|
||||||
"@tailwindcss/typography": "^0.5.10",
|
"@tailwindcss/typography": "^0.5.10",
|
||||||
"@tsconfig/docusaurus": "^2.0.2",
|
"@tsconfig/docusaurus": "^2.0.2",
|
||||||
"@types/node": "^20.9.3",
|
"@types/node": "^20.10.5",
|
||||||
"@types/react": "^18.2.38",
|
"@types/react": "^18.2.45",
|
||||||
"@types/react-dom": "^18.2.16",
|
"@types/react-dom": "^18.2.18",
|
||||||
"biome": "^0.3.3",
|
"biome": "^0.3.3",
|
||||||
"typescript": "^5.3.2"
|
"typescript": "^5.3.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
913
pnpm-lock.yaml
913
pnpm-lock.yaml
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
||||||
import { Protobuf, Types } from "@meshtastic/meshtasticjs";
|
import { Protobuf, Types } from "@meshtastic/js";
|
||||||
import React, { useEffect } from "react";
|
import React, { useEffect } from "react";
|
||||||
|
|
||||||
interface Region {
|
interface Region {
|
||||||
|
|
|
@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
|
||||||
|
|
||||||
import { fromByteArray, toByteArray } from "base64-js";
|
import { fromByteArray, toByteArray } from "base64-js";
|
||||||
|
|
||||||
import { Protobuf } from "@meshtastic/meshtasticjs";
|
import { Protobuf } from "@meshtastic/js";
|
||||||
import Layout from "@theme/Layout";
|
import Layout from "@theme/Layout";
|
||||||
|
|
||||||
const OEM = (): JSX.Element => {
|
const OEM = (): JSX.Element => {
|
||||||
|
|
|
@ -1,54 +1,3 @@
|
||||||
export interface Showcase {
|
|
||||||
id: string;
|
|
||||||
title: string;
|
|
||||||
summary: string;
|
|
||||||
body: string;
|
|
||||||
createdAt: Date;
|
|
||||||
updatedAt: Date;
|
|
||||||
|
|
||||||
tags: ShowcaseTag[];
|
|
||||||
nodes?: Node[];
|
|
||||||
materials?: Material[];
|
|
||||||
author?: Author;
|
|
||||||
authorId?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ShowcaseTag {
|
|
||||||
id: string;
|
|
||||||
label: string;
|
|
||||||
description: string;
|
|
||||||
color: string;
|
|
||||||
|
|
||||||
showcases?: Showcase[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Node {
|
|
||||||
id: string;
|
|
||||||
latitude: string;
|
|
||||||
longitude: string;
|
|
||||||
|
|
||||||
showcase?: Showcase;
|
|
||||||
showcaseId?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Material {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
details: string;
|
|
||||||
image: string;
|
|
||||||
url: string;
|
|
||||||
|
|
||||||
showcases?: Showcase[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Author {
|
|
||||||
id: string;
|
|
||||||
githubUsername: string;
|
|
||||||
bio: string;
|
|
||||||
|
|
||||||
showcase?: Showcase[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface DeviceFirmwareResource {
|
export interface DeviceFirmwareResource {
|
||||||
id: string;
|
id: string;
|
||||||
title: string;
|
title: string;
|
||||||
|
|
Loading…
Reference in a new issue