diff --git a/README.md b/README.md index 0fe4fc4..9eafe36 100644 --- a/README.md +++ b/README.md @@ -40,22 +40,25 @@ Init files can also be defined for a given device, meshcore-cli will look for `& ### Arguments -Arguments mostly deals with ble connection +Arguments mostly deals with connection to the node
-h : prints this help
-v : prints version
-j : json output (disables init file)
-D : debug
- -S : performs a ble scan and ask for device
- -l : list available ble devices and exit
- -T <timeout> : timeout for the ble scan (-S and -l) default 2s
- -a <address> : specifies device address (can be a name)
- -d <name> : filter meshcore devices with name or address
- -t <hostname> : connects via tcp/ip
- -p <port> : specifies tcp port (default 5000)
- -s <port> : use serial port <port>
- -b <baudrate> : specify baudrate
+ -S : scan for devices and show a selector
+ -l : list available ble/serial devices and exit
+ -T <timeout> : timeout for the ble scan (-S and -l) default 2s
+ -a <address> : specifies device address (can be a name)
+ -d <name> : filter meshcore devices with name or address
+ -P : forces pairing via the OS
+ -t <hostname> : connects via tcp/ip
+ -p <port> : specifies tcp port (default 5000)
+ -s <port> : use serial port <port>
+ -b <baudrate> : specify baudrate
+ -C : toggles classic mode for prompt
+ -c <on/off> : disables most of color output if off
### Available Commands
@@ -63,60 +66,70 @@ Arguments mostly deals with ble connection
Commands are given after arguments, they can be chained and some have shortcuts. Also prefixing a command with a dot `.` will force it to output json instead of synthetic result.
+ ?<cmd> may give you some more help about cmd
General commands
chat : enter the chat (interactive) mode
- chat_to <ct> : enter chat with contact to
- script <filename> : execute commands in filename
+ chat_to <ct> : enter chat with contact to
+ script <filename> : execute commands in filename
infos : print informations about the node i
self_telemetry : print own telemtry t
card : export this node URI e
ver : firmware version v
reboot : reboots node
- sleep <secs> : sleeps for a given amount of secs s
- wait_key : wait until user presses <Enter> wk
- Messenging
- msg <name> <msg> : send message to node by name m {
+ sleep <secs> : sleeps for a given amount of secs s
+ wait_key : wait until user presses <Enter> wk
+ apply_to <f> <cmds> : sends cmds to contacts matching f at
+ Messaging
+ msg <name> <msg> : send message to node by name m {
wait_ack : wait an ack wa }
- chan <nb> <msg> : send message to channel number <nb> ch
- public <msg> : send message to public channel (0) dch
+ chan <nb> <msg> : send message to channel number <nb> ch
+ public <msg> : send message to public channel (0) dch
recv : reads next msg r
wait_msg : wait for a message and read it wm
sync_msgs : gets all unread msgs from the node sm
msgs_subscribe : display msgs as they arrive ms
- get_channel <n> : get info for channel n
+ get_channels : prints all channel info
+ get_channel <n> : get info for channel (by number or name)
set_channel n nm k : set channel info (nb, name, key)
+ remove_channel <n> : remove channel (by number or name)
+ scope <s> : sets node's flood scope
Management
advert : sends advert a
floodadv : flood advert
- get <param> : gets a param, "get help" for more
- set <param> <value> : sets a param, "set help" for more
- time <epoch> : sets time to given epoch
+ get <param> : gets a param, \"get help\" for more
+ set <param> <value> : sets a param, \"set help\" for more
+ time <epoch> : sets time to given epoch
clock : get current time
clock sync : sync device clock st
+ node_discover <filter> : discovers nodes based on their type nd
Contacts
contacts / list : gets contact list lc
- contact_info <ct> : prints information for contact ct ci
- contact_timeout <ct> v : sets temp default timeout for contact
- share_contact <ct> : share a contact with others sc
- export_contact <ct> : get a contact's URI ec
- import_contact <URI> : import a contact from its URI ic
- remove_contact <ct> : removes a contact from this node
- path <ct> : diplays path for a contact
- reset_path <ct> : resets path to a contact to flood rp
- change_path <ct> <pth> : change the path to a contact cp
- change_flags <ct> <f> : change contact flags (tel_l|tel_a|star)cf
- req_telemetry <ct> : prints telemetry data as json rt
- req_mma <ct> : requests min/max/avg for a sensor rm
- req_acl <ct> : requests access control list for sensor
+ reload_contacts : force reloading all contacts rc
+ contact_info <ct> : prints information for contact ct ci
+ contact_timeout <ct> v : sets temp default timeout for contact
+ share_contact <ct> : share a contact with others sc
+ export_contact <ct> : get a contact's URI ec
+ import_contact <URI> : import a contact from its URI ic
+ remove_contact <ct> : removes a contact from this node
+ path <ct> : diplays path for a contact
+ disc_path <ct> : discover new path and display dp
+ reset_path <ct> : resets path to a contact to flood rp
+ change_path <ct> <pth> : change the path to a contact cp
+ change_flags <ct> <f> : change contact flags (tel_l|tel_a|star)cf
+ req_telemetry <ct> : prints telemetry data as json rt
+ req_mma <ct> : requests min/max/avg for a sensor rm
+ req_acl <ct> : requests access control list for sensor
pending_contacts : show pending contacts
- add_pending <key> : manually add pending contact from key
- flush_pending : flush pending contact clist
+ add_pending <pending> : manually add pending contact
+ flush_pending : flush pending contact list
Repeaters
- login <name> <pwd> : log into a node (rep) with given pwd l
- logout <name> : log out of a repeater
- cmd <name> <cmd> : sends a command to a repeater (no ack) c [
+ login <name> <pwd> : log into a node (rep) with given pwd l
+ logout <name> : log out of a repeater
+ cmd <name> <cmd> : sends a command to a repeater (no ack) c [
wmt8 : wait for a msg (reply) with a timeout ]
- req_status <name> : requests status from a node rs
+ req_status <name> : requests status from a node rs
+ req_neighbours <name> : requests for neighbours in binary form rn
+ trace <path> : run a trace, path is comma separated
### Interactive Mode
@@ -138,6 +151,43 @@ When you are connected to a node, the behaviour will depend on the node type, if
You can alse set a channel as recipient, `to public` will switch to the public channel, and `to ch1` to channel 1.
+#### Flood Scope in interactive mode
+
+Flood scope has recently been introduced in meshcore (from `v1.10.0`). It limits the scope of packets to regions, using transport codes in the frame.
+
+When entering chat mode, scope will be reset to `*`, meaning classic flood.
+
+You can switch scope using the `scope` command, or postfixing the `to` command with `%
diff --git a/src/meshcore_cli/meshcore_cli.py b/src/meshcore_cli/meshcore_cli.py
index f675a56..02b6fc8 100644
--- a/src/meshcore_cli/meshcore_cli.py
+++ b/src/meshcore_cli/meshcore_cli.py
@@ -1746,19 +1746,7 @@ async def next_cmd(mc, cmds, json_output=False):
match cmds[1]:
case "help" :
argnum = 1
- print("""Available parameters :
- pin : ble pin
- radio : radio params
- tuning : tuning params
- tx : tx power
- name : node name
- lat : latitude
- lon : longitude
- coords : coordinates
- print_snr : toggle snr display in messages
- print_adverts : display adverts as they come
- print_new_contacts : display new pending contacts when available
- print_path_updates : display path updates as they come""")
+ get_help_for("set")
case "max_flood_attempts":
msg_ack.max_flood_attempts=int(cmds[2])
case "max_attempts":
@@ -1982,21 +1970,7 @@ async def next_cmd(mc, cmds, json_output=False):
argnum = 1
match cmds[1]:
case "help":
- print("""Gets parameters from node
- name : node name
- bat : battery level in mV
- fstats : fs statistics
- coords : adv coordinates
- lat : latitude
- lon : longitude
- radio : radio parameters
- tx : tx power
- print_snr : snr display in messages
- print_adverts : display adverts as they come
- print_new_contacts : display new pending contacts when available
- print_path_updates : display path updates as they come
- custom : all custom variables in json format
- each custom var can also be get/set directly""")
+ get_help_for("get")
case "max_flood_attempts":
if json_output :
print(json.dumps({"max_flood_attempts" : msg_ack.max_flood_attempts}))
@@ -3107,8 +3081,8 @@ def command_help():
reboot : reboots node
sleep : sleeps for a given amount of secs s
wait_key : wait until user presses wk
- apply_to : sends cmds to contacts matching scope at
- Messenging
+ apply_to : sends cmds to contacts matching f at
+ Messaging
msg : send message to node by name m {
wait_ack : wait an ack wa }
chan : send message to channel number ch
@@ -3121,6 +3095,7 @@ def command_help():
get_channel : get info for channel (by number or name)
set_channel n nm k : set channel info (nb, name, key)
remove_channel : remove channel (by number or name)
+ scope : sets scope for flood messages
Management
advert : sends advert a
floodadv : flood advert
@@ -3172,8 +3147,6 @@ def usage () :
-D : debug
-S : scan for devices and show a selector
-l : list available ble/serial devices and exit
- -C : toggles classic mode for prompt
- -c : disables most of color output if off
-T : timeout for the ble scan (-S and -l) default 2s
-a : specifies device address (can be a name)
-d : filter meshcore devices with name or address
@@ -3182,14 +3155,16 @@ def usage () :
-p : specifies tcp port (default 5000)
-s : use serial port
-b : specify baudrate
+ -C : toggles classic mode for prompt
+ -c : disables most of color output if off
Available Commands and shorcuts (can be chained) :""")
command_help()
def get_help_for (cmdname, context="line") :
if cmdname == "apply_to" or cmdname == "at" :
- print("""apply_to : applies cmd to contacts matching scope
- Scope acts like a filter with comma separated fields :
+ print("""apply_to : applies cmd to contacts matching filter
+ Filter is constructed with comma separated fields :
- u, matches modification time < or > than a timestamp
(can also be days hours or minutes ago if followed by d,h or m)
- t, matches the type (1: client, 2: repeater, 3: room, 4: sensor)
@@ -3220,6 +3195,68 @@ def get_help_for (cmdname, context="line") :
nd can be used with no filter parameter ... !!! BEWARE WITH CHAINING !!!
""")
+ elif cmdname == "get" :
+ print("""Gets parameters from node
+ Please see also help for set command, which is more up to date ...
+ name : node name
+ bat : battery level in mV
+ fstats : fs statistics
+ coords : adv coordinates
+ lat : latitude
+ lon : longitude
+ radio : radio parameters
+ tx : tx power
+ print_snr : snr display in messages
+ print_adverts : display adverts as they come
+ print_new_contacts : display new pending contacts when available
+ print_path_updates : display path updates as they come
+ custom : all custom variables in json format
+ each custom var can also be get/set directly""")
+
+ elif cmdname == "set" :
+ print("""Available parameters :
+ device:
+ pin : ble pin
+ radio : radio params
+ tuning : tuning params
+ tx : tx power
+ name : node name
+ lat : latitude
+ lon : longitude
+ coords : coordinates
+ auto_update_contacts <> : automatically updates contact list
+ multi_ack : multi-acks feature
+ telemetry_mode_base : set basic telemetry mode all/selected/off
+ telemetry_mode_loc : set location telemetry mode all/selected/off
+ telemetry_mode_env : set env telemetry mode all/selected/off
+ advert_loc_policy : "share" means loc will be shared in adv
+ display:
+ print_snr : toggle snr display in messages
+ print_adverts : display adverts as they come
+ print_new_contacts : display new pending contacts when available
+ print_path_updates : display path updates as they come
+ json_log_rx : logs packets incoming to device as json
+ channel_echoes : print repeats for channel data
+ echo_unk_channels : also dump unk channels (encrypted)
+ color : color off should remove ANSI codes from output
+ prompt:
+ classic_prompt : activates less fancier prompt
+ arrow_head : change arrow head in prompt
+ slash_start : idem for slash start
+ slash_end : slash end
+ invert_slash : apply color inversion to slash """)
+
+ elif cmdname == "scope":
+ print("""scope : changes flood scope of the node
+
+ The scope command can be used from command line or interactive mode to set the region in which flood packets will be transmitted.
+
+Managing Flood Scope in interactive mode
+ Flood scope has recently been introduced in meshcore (from v1.10.0). It limits the scope of packets to regions, using transport codes in the frame.
+ When entering chat mode, scope will be reset to *, meaning classic flood.
+ You can switch scope using the scope command, or postfixing the to command with %.
+ Scope can also be applied to a command using % before the scope name. For instance login%#Morbihan will limit diffusion of the login command (which is usually sent flood to get the path to a repeater) to the #Morbihan region.""")
+
else:
print(f"Sorry, no help yet for {cmdname}")