From b39969fe10f6c8db563a7a92d04566a35a33d8a5 Mon Sep 17 00:00:00 2001 From: KrazyKerbalnaut Date: Sat, 23 Oct 2021 08:25:33 -0600 Subject: [PATCH 1/2] Grammer, clarification, and needs review --- website/docs/software/device/remote-admin.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/website/docs/software/device/remote-admin.md b/website/docs/software/device/remote-admin.md index ba117905..1b3aafa7 100644 --- a/website/docs/software/device/remote-admin.md +++ b/website/docs/software/device/remote-admin.md @@ -4,11 +4,11 @@ title: Remote node administration sidebar_label: Remote node admininstration --- -This feature will allow you to use the multiple channels feature to enable remote adminstration of meshtastic nodes. This will let you talk through the mesh to some far away node and change that node's settings. This is an advanced feature that (currently) few users would need. Also, keep in mind it is possible (if you are not careful) to assign settings to that remote node that cause it to completely drop off of your mesh. +This feature will allow you to use the multiple channels feature to enable remote adminstration of meshtastic nodes. This will let you talk through the mesh to some far away node and change that node's settings. This is an advanced feature that (currently) few users would need. Also, keep in mind it is possible (if you are not careful) to assign settings to that remote node that cause it to completely drop off of your mesh. We advise network admins have a test node to test settings with before applying changes to a remote node to prevent this. ## Creating the admin channel -By default, nodes will **only** respond to adminstrative commands via the local USB/bluetooth/TCP interface. This provides basic security to prevent unauthorized access. This is how normal administration and settings changes work. The only difference for the remote case is that we are sending those commands over the mesh. +By default, nodes will **only** respond to adminstrative commands via the local USB/bluetooth/TCP interface. This provides basic security to prevent unauthorized access and is how normal administration and settings changes work. The only difference for the remote case is that we are sending those commands over the mesh. Before a node will allow remote admin access, it must have a primary channel: ```bash title="Expected output" @@ -20,16 +20,16 @@ Channels: Primary channel URL: https://www.meshtastic.org/d/#CgUYAyIBAQ ``` -So from this output you see that this node knows about only one channel and that its PSK is set to the default value. +So from this output you see can that this node knows about only one channel and that its PSK is set to the default value. -Now add an admin channel: +Now we add an admin channel: ```bash title="Command" meshtastic --ch-add admin ``` :::note -The name of the channel is important, it must be `admin`. +The name of the channel is important and must be `admin`. ::: Your channels will now look like this: @@ -47,11 +47,11 @@ Primary channel URL: https://www.meshtastic.org/d/#CgUYAyIBAQ Complete URL (includes all channels): https://www.meshtastic.org/d/#CgUYAyIBAQopIiAdbsTecxuI1u-voyGwOicsKaPt5ICG23ONsjH-vk5CaCoFYWRtaW4 ``` -Notice that now we have a new secondary channel. Also, the `--info` option prints out TWO URLs. The `Complete URL` includes all of the channels this node understands. You should consider this URL something you should be very cautious about sharing. In the case of remote adminstration, you only need the node you want to adminster and the node you are locally connected to know this new "admin" channel. +Notice that now we have a new secondary channel and the `--info` option prints out TWO URLs. The `Complete URL` includes all of the channels this node understands. The URL contains the preshared keys and should be treated with caution and kept a secret. In the case of remote adminstration, you only need the node you want to adminster and the node you are locally connected to know this new "admin" channel. ## Sharing the admin channel with other nodes -I'm going to assume you've already created the admin channel on your "local node" i.e. the meshtastic node sitting on your desk at your home. But now you want to enable access on the "remote node" you want to eventually have far away from you. +Creating an "admin" channel automatically generates a preshared key, just like with [Multiple Channels](./channels). In order to administer to other nodes remotely, we need to copy the preshared key to the new nodes. For this step you need physical access to both the nodes. @@ -68,7 +68,7 @@ At this point you can take your remote node and install it far away and still be ## Remotely administering your node -Now that both your local node and the remote node contain your secret admin channel key, you can do things like this: +Now that both your local node and the remote node contain your secret admin channel key, you can do things like: Get the node list from the local node: @@ -94,6 +94,9 @@ INFO:root:Requesting configuration from remote node (this could take a while) :::note You will need to escape the `!` using `\!` otherwise the command will fail. ::: +:::note +The above note needs clarificaiton. Currently, you refer to other nodes with `!########`. No backslashes are used. +::: And you can now confirm via the local node that the remote node has changed: From 2913dd88f1aed68f3626d66ddb10392c37db33bf Mon Sep 17 00:00:00 2001 From: KrazyKerbalnaut Date: Sat, 23 Oct 2021 12:44:51 -0600 Subject: [PATCH 2/2] Clarification, added permissions note/video --- website/docs/software/android/installation.md | 15 +++++++- website/docs/software/device/remote-admin.md | 35 ++++++++++++++---- .../android-bg-location-permissions.png | Bin 0 -> 28743 bytes 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 website/static/img/android/android-bg-location-permissions.png diff --git a/website/docs/software/android/installation.md b/website/docs/software/android/installation.md index bccf3595..8f64dcf2 100644 --- a/website/docs/software/android/installation.md +++ b/website/docs/software/android/installation.md @@ -11,12 +11,23 @@ The app is also available on the Amazon [Appstore](https://www.amazon.com/Geeksv The application may not be found if your phone/Android version are too old. The minimum Android version is 5.0 (Lollipop 2014, first BLE support). However Android 6, Marshmallow 2015, is recommended as the Bluetooth is more stable. -The app can also be sideloaded by downloading the .apk from the GitHub releases page. If you wish to view the code or contribute to development of the app, please visit the app's GitHub page. +The app can also be sideloaded by downloading the .apk from the GitHub releases page. If you do sideload, you may have to give your browser permissions to run a package installer. If you wish to view the code or contribute to development of the app, please visit the app's GitHub page. +:::note +Be aware that you may have to open the drop down menu for "Compare" to see the latest alpha/beta builds. Generally the versions will follow the device versions. +::: -On installing the Meshtastic app, load it and navigate to the settings page. The app will ask you to give it permissions to access your location. This is needed for any app to use bluetooth, as the app is then able to scan the local area for bluetooth devices and, in theory, could triangulate your location based the devices it sees. If you give location permissions "only while using the app", the app will only be able to use bluetooth while it is open and visible to the user. This means if the screen is locked, or you are using another app, Meshtastic will not be able to use bluetooth, and will not be able to receive any messages from the node. +After installing the Meshtastic app, open it and navigate to the settings page. The app will ask you to give it permissions to access your location. This is needed for any app to use bluetooth, as the app is then able to scan the local area for bluetooth devices. If you give location permissions "only while using the app", the app will only be able to use bluetooth while it is open and visible to the user. This means if the screen is locked, or you are using another app, Meshtastic will not be able to use bluetooth, and will not be able to receive any messages from the node. [![Messages page](/img/android/android-messages-sm.png)](/img/android/android-messages-sm.png) [![Nodes page](/img/android/android-nodes-sm.png)](/img/android/android-nodes.png) [![Channel page](/img/android/android-channel-sm.png)](/img/android/android-channel.png) [![Settings page](/img/android/android-settings-sm.png)](/img/android/android-settings.png) [![Debug page](/img/android/android-debug-sm.png)](/img/android/android-debug.png) +:::note +Be aware that every OS has a different way of handling permissions. In order to prevent the user from accidently allowing background location services, the dialog box may not give you the option. + +Click on the image to see a quick video of where I found it on my phone. + +[![Background Permissions Video](/img/android/android-bg-location-permissions.png)](https://youtu.be/YAFLxoeVIHg) +::: + There is a [beta program](https://play.google.com/apps/testing/com.geeksville.mesh) for the app, which will let you test the cutting edge changes, though this may come with extra bugs. You can join this via Google Play. It is recommended that you follow the [Meshtastic Discourse Alpha Testers](https://meshtastic.discourse.group/c/development/alpha-testers) channel if you decide to join this. The app uses anonymous usage statistics and crash reports to allow us to catch problems with Meshtastic and fix them. Analytics are also required to be able to use the "free" plan of our map provider [Mapbox](https://docs.mapbox.com/help/how-mapbox-works/). You can disable this by unticking the checkbox on the settings page. diff --git a/website/docs/software/device/remote-admin.md b/website/docs/software/device/remote-admin.md index ba117905..5e726019 100644 --- a/website/docs/software/device/remote-admin.md +++ b/website/docs/software/device/remote-admin.md @@ -4,11 +4,11 @@ title: Remote node administration sidebar_label: Remote node admininstration --- -This feature will allow you to use the multiple channels feature to enable remote adminstration of meshtastic nodes. This will let you talk through the mesh to some far away node and change that node's settings. This is an advanced feature that (currently) few users would need. Also, keep in mind it is possible (if you are not careful) to assign settings to that remote node that cause it to completely drop off of your mesh. +This feature will allow you to use the multiple channels feature to enable remote adminstration of meshtastic nodes. This will let you talk through the mesh to some far away node and change that node's settings. This is an advanced feature that (currently) few users would need. Also, keep in mind it is possible (if you are not careful) to assign settings to that remote node that cause it to completely drop off of your mesh. We advise network admins have a test node to test settings with before applying changes to a remote node to prevent this. ## Creating the admin channel -By default, nodes will **only** respond to adminstrative commands via the local USB/bluetooth/TCP interface. This provides basic security to prevent unauthorized access. This is how normal administration and settings changes work. The only difference for the remote case is that we are sending those commands over the mesh. +By default, nodes will **only** respond to adminstrative commands via the local USB/bluetooth/TCP interface. This provides basic security to prevent unauthorized access and is how normal administration and settings changes work. The only difference for the remote case is that we are sending those commands over the mesh. Before a node will allow remote admin access, it must have a primary channel: ```bash title="Expected output" @@ -20,16 +20,16 @@ Channels: Primary channel URL: https://www.meshtastic.org/d/#CgUYAyIBAQ ``` -So from this output you see that this node knows about only one channel and that its PSK is set to the default value. +So from this output you see can that this node knows about only one channel and that its PSK is set to the default value. -Now add an admin channel: +Now we add an admin channel: ```bash title="Command" meshtastic --ch-add admin ``` :::note -The name of the channel is important, it must be `admin`. +The name of the channel is important and must be `admin`. ::: Your channels will now look like this: @@ -47,11 +47,11 @@ Primary channel URL: https://www.meshtastic.org/d/#CgUYAyIBAQ Complete URL (includes all channels): https://www.meshtastic.org/d/#CgUYAyIBAQopIiAdbsTecxuI1u-voyGwOicsKaPt5ICG23ONsjH-vk5CaCoFYWRtaW4 ``` -Notice that now we have a new secondary channel. Also, the `--info` option prints out TWO URLs. The `Complete URL` includes all of the channels this node understands. You should consider this URL something you should be very cautious about sharing. In the case of remote adminstration, you only need the node you want to adminster and the node you are locally connected to know this new "admin" channel. +Notice that now we have a new secondary channel and the `--info` option prints out TWO URLs. The `Complete URL` includes all of the channels this node understands. The URL contains the preshared keys and should be treated with caution and kept a secret. Wehn deploying remote adminstration, you only need the node you want to adminster and the node you are locally connected to know this new "admin" channel. All of the other nodes will forward the packets as long as they are a member of the primary channel. ## Sharing the admin channel with other nodes -I'm going to assume you've already created the admin channel on your "local node" i.e. the meshtastic node sitting on your desk at your home. But now you want to enable access on the "remote node" you want to eventually have far away from you. +Creating an "admin" channel automatically generates a preshared key, just like with [Multiple channel support](./device-channels). In order to administer to other nodes remotely, we need to copy the preshared key to the new nodes. For this step you need physical access to both the nodes. @@ -68,7 +68,7 @@ At this point you can take your remote node and install it far away and still be ## Remotely administering your node -Now that both your local node and the remote node contain your secret admin channel key, you can do things like this: +Now that both your local node and the remote node contain your secret admin channel key, you can do things like: Get the node list from the local node: @@ -94,6 +94,9 @@ INFO:root:Requesting configuration from remote node (this could take a while) :::note You will need to escape the `!` using `\!` otherwise the command will fail. ::: +:::note +The above note needs clarificaiton. Currently, you refer to other nodes with `!########`. No backslashes are used. +::: And you can now confirm via the local node that the remote node has changed: @@ -123,6 +126,22 @@ Primary channel URL: https://www.meshtastic.org/d/#CgUYAyIBAQ Complete URL (includes all channels): https://www.meshtastic.org/d/#CgUYAyIBAQopIiAdbsTecxuI1u-voyGwOicsKaPt5ICG23ONsjH-vk5CaCoFYWRtaW4 ``` +## Admin Channel Setup is Complete + +You've finished setting up and adding 2 devices to the admin channel. Remember, because this is a mesh network, it doesn't matter which node you are at; you could adminster your first device we set up from the second one we added to the channel. And the settings and examples on this page are just a tast of the other settings you can set. Also, if you ever want to view a setting without having to read through the `--info`, you can always do the following: + +```bash title="--get vs. --info" +$ meshtastic --dest \!28979058 --get ls_secs +Connected to radio +INFO:root:Requesting preferences from remote node (this could take a while) +ls_secs: 301 +Completed getting preferences +``` + +For further reading, I recommend starting out with [Meshtastic-python](../python/python-cli) if you haven't already gone throught 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) + ## Areas for future development In the future we will add a "deadman timer" to this feature so that the remote node will revert any changes if you fail to send a special "commit changes" command. This will protect against sending bad settings to nodes that you can't physically access. Instead if the node does not receive a commit message within 10 minutes it will revert all changes and (hopefully) rejoin the mesh. \ No newline at end of file diff --git a/website/static/img/android/android-bg-location-permissions.png b/website/static/img/android/android-bg-location-permissions.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3c3915357f2dde11ea1036dde6dbc707abaa51 GIT binary patch literal 28743 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�Y1n)bg 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 B1AG7g literal 0 HcmV?d00001