From fe4554e2f35357dc13585599d28622f28954b0d8 Mon Sep 17 00:00:00 2001 From: Catalin Ioana Date: Thu, 24 Oct 2019 18:06:54 +0300 Subject: [PATCH 1/6] Added Pymesh library --- config.toml | 43 +++- content/pymesh/_index.md | 13 +- content/pymesh/lib-api.md | 67 ++++++ content/pymesh/lib-ble-rpc.md | 99 +++++++++ content/pymesh/lib-cli.md | 210 ++++++++++++++++++ content/pymesh/library.md | 72 ------ content/pymesh/licence.md | 48 ++++ content/pymesh/pymesh-br.md | 207 +++++------------ content/pymesh/simple-example.md | 146 ++++++++++++ .../assets/pymesh/pymesh_firmware_update.png | Bin 0 -> 119497 bytes 10 files changed, 662 insertions(+), 243 deletions(-) create mode 100644 content/pymesh/lib-api.md create mode 100644 content/pymesh/lib-ble-rpc.md create mode 100644 content/pymesh/lib-cli.md delete mode 100644 content/pymesh/library.md create mode 100644 content/pymesh/licence.md create mode 100644 content/pymesh/simple-example.md create mode 100644 static/gitbook/assets/pymesh/pymesh_firmware_update.png diff --git a/config.toml b/config.toml index 625af85..2d6bcc1 100644 --- a/config.toml +++ b/config.toml @@ -1272,39 +1272,60 @@ theme = "doc-theme" weight = 95 [[menu.main]] - name = "Pymesh Library API" - url = "/pymesh/library" - identifier = "pymesh@library" + name = "Pymesh LICENCE" + url = "/pymesh/licence" + identifier = "pymesh@licence" parent = "pymesh" weight = 10 [[menu.main]] - name = "Micropython API" - url = "/firmwareapi/pycom/network/lora/pymesh" - identifier = "pymesh@api" + name = "Simple Example" + url = "/pymesh/simple-example" + identifier = "pymesh@simple-example" parent = "pymesh" weight = 20 [[menu.main]] - name = "Simple Example" - url = "/pymesh/lora-mesh" - identifier = "pymesh@lora-mesh" + name = "Pymesh Library API" + url = "/pymesh/lib-api" + identifier = "pymesh@lib-api" parent = "pymesh" weight = 30 +[[menu.main]] + name = "Pymesh Library CLI" + url = "/pymesh/lib-cli" + identifier = "pymesh@lib-cli" + parent = "pymesh" + weight = 40 + +[[menu.main]] + name = "Pymesh Library BLE RPC" + url = "/pymesh/lib-ble-rpc" + identifier = "pymesh@lib-ble-rpc" + parent = "pymesh" + weight = 50 + [[menu.main]] name = "Border Router Examplee" url = "/pymesh/pymesh-br" identifier = "pymesh@pymesh-br" parent = "pymesh" - weight = 40 + weight = 60 [[menu.main]] name = "Advanced Security Example" url = "/pymesh/security" identifier = "pymesh@security" parent = "pymesh" - weight = 50 + weight = 70 + +[[menu.main]] + name = "Micropython API" + url = "/firmwareapi/pycom/network/lora/pymesh" + identifier = "pymesh@api" + parent = "pymesh" + weight = 90 # *** Documentation Notes [[menu.main]] diff --git a/content/pymesh/_index.md b/content/pymesh/_index.md index 1f15b80..7ff0156 100644 --- a/content/pymesh/_index.md +++ b/content/pymesh/_index.md @@ -12,11 +12,12 @@ Pymesh is the LoRa full-mesh network technology. A Mesh network acts like a net, this means that any node within the network can connect with any other node. - Mesh networks essentially get rid of gateways, which decentralises the network's infrastructure. This then means that the network becomes flexible, so it can do many wonderful things – such as generate, change and fix itself. The success of the Mesh network is down to its parts, as any node within the network will automatically connect to the best radio-link available. Pymesh solution works on all of our LoRa supporting development boards, the LoPy4 and FiPy as well as on our OEM modules, L01 and L04. +_**Note: For obtaining the Pymesh firmware please follow the steps from [Pymesh LICENCE page](/pymesh/licence).**_ + ## What does Pymesh offer you? * Ad-hoc communication network over raw-LoRa radio @@ -29,7 +30,11 @@ Pymesh solution works on all of our LoRa supporting development boards, the LoPy ## Let's get started! -* [Pymesh Micropython API](/firmwareapi/pycom/network/lora/pymesh) -* [Simple Example](/pymesh/lora-mesh) -* [Border Router Example](/pymesh/pymesh-br) +* [Pymesh LICENCE](/pymesh/licence) +* [Simple Example](/pymesh/simple-example) +* [Pymesh library API](/pymesh/lib-api) +* [Pymesh library CLI](/pymesh/lib-cli) +* [Pymesh library BLE RPC](/pymesh/lib-ble-rpc) +* [Border Router](/pymesh/pymesh-br) * ​[Advanced Security Example](/pymesh/security)​ +* [Pymesh Micropython API](/firmwareapi/pycom/network/lora/pymesh) diff --git a/content/pymesh/lib-api.md b/content/pymesh/lib-api.md new file mode 100644 index 0000000..06c191a --- /dev/null +++ b/content/pymesh/lib-api.md @@ -0,0 +1,67 @@ +--- +title: "Pymesh Library API" +aliases: + - pymesh/lib-api +--- + +## Overview + +This Micropython library is included as frozen scripts in the Pymesh firmware release. + +Code is open-sourced in [pycom-libraries repository](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh). + +It is easily customisable and contributions are highly recommend using [Github PRs](https://github.com/pycom/pycom-libraries/pulls). + +### Main features + +* Start Pymesh over LoRa on 863Mhz, bandwidth 250kHz, spreading-factor 7 (please check `pymesh_config.py` defaults for exact values). +* Pymesh parameters are automatically saved in NVM, so in the next restart/deepsleep, the node will try to maintain its IP addresses and connections with neighbour nodes. +* Start Bluetooth LE server with name `PyGo ` + * BLE is used with an RPC protocol, presented int [Pymesh library BLE RPC](/pymesh/lib-ble-rpc) +* Internal CLI for controlling/triggering Pymesh features, as explained in [Pymesh library CLI](/pymesh/lib-cli). + +### Color coding LED + +The LED color represents the state of the node in the Mesh network. + +``` + +Blinking - Send/Receive packet +Magenta - LEADER +Green - ROUTER +White - CHILD, +Red - Searching / Detached from any Pymesh +Cyan - SINGLE LEADER (no other Router in the same Pymesh) +``` + +## Example of usage + +A simple example of usage is in the [main.py](https://github.com/pycom/pycom-libraries/blob/master/lib/pymesh/main.py). + +## Specifications + +It can be easily customised, by modifying any file from [/lib folder](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh/lib) and flashing it to the board. Automatically the uploaded file will be executed instead of the _frozen_ one, already embedded into the binary firmware. + +### Structure + +* `pymesh.py` + * contains all the methods accessible from `main.py` +* `cli.py` + * [Pymesh library CLI](/pymesh/lib-cli) +* BLE services + * `ble_rpc.py` + * [Pymesh library BLE RPC](/pymesh/lib-ble-rpc) + * `ble_services.py` + * setting BLE server +* auxiliary files: + * `pymesh-debug.py` + * debugging on levels, allowing dynamically changing debug level + * `pymesh-config.py` + * reading/writing Pymesh configuration file + * `gps.py` + * maintaining location coordinates, as an extension `Pytrack` GPS can be used +* Mesh internals + * `mesh-interface.py` + * methods to inquire Mesh-internal parameters + * `mesh-internal.py` and `loramesh.py` + * 2 layers of internal mesh maintenance diff --git a/content/pymesh/lib-ble-rpc.md b/content/pymesh/lib-ble-rpc.md new file mode 100644 index 0000000..14f9940 --- /dev/null +++ b/content/pymesh/lib-ble-rpc.md @@ -0,0 +1,99 @@ +--- +title: "Pymesh Library Bluetooth LE RPC" +aliases: + - pymesh/simple-example +--- + +## RPC protocol + +It is implemented in [ble_rpc.py](https://github.com/pycom/pycom-libraries/blob/master/lib/pymesh/lib/ble_rpc.py). + +In the class `RPCHandler` methods can be added to expand RPC set. + +The internal RPC are calling methods from file `mesh_interface.py`. + +## Methods + +#### mesh_is_connected() + +This returns `True` if Node is connected to a Pymesh. + +#### mesh_ip() + +This returns the IP RLOC16 in a string. + +#### set_gps(latitude, longitude) + +This sets the location coordinates. + +#### get_mesh_mac_list() + +This returns list of distinct MAC address that are in this mesh network, for example `[mac1, mac2, mac 3]`.` + +#### get_mesh_pairs() + +This returns list of pairs that is a mesh connection, as shown bellow: + +``` +[ + ('mac1', 'mac2', rssi), + ('mac1', 'mac3', rssi), + #... +] +``` + +#### get_node_info(mac_id = ' ') + +This returns the node data for a specified mac address, or own data id `mac_id` is not specified. Node data is dictionary with the following structure: +``` +{ + 'ip': 4c00, # last 2bytes from the ip v6 RLOC16 address + 'r': 3, # not_connected:0 | child:1 | leader:2 | router:3 + 'a': 100, # age[sec], time since last info about this node + 'nn' : 20 # neighbours number + 'nei': { # neighbours enumerated, if any + (mac, ip, role, rssi, age), + (mac, ip, role, rssi, age) + } + 'l': { # location, if available + 'lng': 7, + 'lat': 20, + }, + 'b' : { # BLE infos + 'a': 100 # age, seconds since last ping with that device, None if properly disconnected + 'id': '' # 16byte + 'n': '', # name, max. 16 chars + } +} +``` + +#### send_message(data) + +This sends a message with another node. It return True if there is buffer to store it (to be sent). + +`data` is a dictionary with the following structure: +``` +{ + 'to': 0x5, + 'b': 'text', + 'id': 12345, + 'ts': 123123123, +} +``` + + +#### send_message_was_sent(mac, msg_id) + +This checks if acknowledge was received for the specified `mac` and `msg_id`. It returns `True` if message was delivered. + +#### receive_message() + +This returns the received messages, in a dictionary with the next structure: +``` +{ + 'b': 'text', + 'from': 'ble_device_id', + 'ts': 123123123, + 'id': '', +} +``` diff --git a/content/pymesh/lib-cli.md b/content/pymesh/lib-cli.md new file mode 100644 index 0000000..4fb8371 --- /dev/null +++ b/content/pymesh/lib-cli.md @@ -0,0 +1,210 @@ +--- +title: "Pymesh Library CLI" +aliases: + - pymesh/simple-example +--- + +## Overview + +The Pymesh micropython library is included as frozen in the Pymesh firmware releases. + +Instead of REPL, a specific Pymesh CLI is interpreting commands and it is recognised, by starting with `>`. + +The CLI is executed on a separate thread inside the Pymesh library. + +For example: +``` +>mml +mesh_mac_list [1, 6, 2] +``` + +## Internal CLI + +``` +List of available commands +ip - display current IPv6 unicast addresses +mac - set or display the current LoRa MAC address +self - display all info about current node +mml - display the Mesh Mac List (MAC of all nodes inside this Mesh), also inquires Leader +mp - display the Mesh Pairs (Pairs of all nodes connections), also inquires Leader +s - send message +ws - verifies if message sent was acknowledged +rm - verifies if any message was received +sleep - deep-sleep +br - enable/disable or display the current Border Router functionality +brs - send packet for Mesh-external, to BR, if any +rst - reset NOW, including NVM Pymesh IPv6 +buf - display buffer info +ot - sends command to openthread internal CLI +debug - set debug level +config - print config file contents +``` + +### Debug commands + +``` +> debug +5 +``` +This sets the debug level. Possible values are: +``` +# recommended debug levels, from the most verbose to off +DEBUG_DEBG = const(5) +DEBUG_INFO = const(4) +DEBUG_NOTE = const(3) +DEBUG_WARN = const(2) +DEBUG_CRIT = const(1) +DEBUG_NONE = const(0) +``` + +``` +>rst +Mesh Reset NVM settings ... +deepsleep_init +>deepsleep_now +Cleanup code, all Alarms cb should be stopped +Going to deepsleep for 1 seconds +``` +This resets the Pymesh parameters saved in NVM, and resets the Node. + +``` +>sleep +(time[sec])<10 +deepsleep_init +>deepsleep_now +Cleanup code, all Alarms cb should be stopped +Going to deepsleep for 10 seconds +``` +This puts the device in deepsleep for designated number of seconds. + +``` +>buf +Buffer info: total: 200 +free: 200 +6lo send: 0 0 +6lo reas: 0 0 +ip6: 0 0 +mpl: 0 0 +mle: 0 0 +arp: 0 0 +coap: 0 0 +coap secure: 0 0 +application coap: 0 0 +``` +This displays the number of buffers for each layer of the Pymesh. + +``` +>ot +(openthread cli)mac +1 +``` +This shows LoRa MAC, this address is used as unique identifier in the Pymesh. Bellow there's a section on how to set MAC specific MAC address (useful for debugging, the MAC could be consecutive small numbers like `0x1`, `0x2`, `...`) + +``` +>mml +mesh_mac_list [1, 6, 2] +``` +This shows the list of all MAC Nodes attached to Pymesh. It inquires Leader, which centralises this data. + +``` +>mp +Send pack: 0xF3 to IP fdde:ad00:beef:0:0:ff:fe00:fc00 +last_mesh_pairs [[2, 6, -87], [1, 6, -77]] +``` +This shows Mesh Pairs list, with each direct connected nodes (by their MAC address) and the averaged RSSI value. + +``` +>mni +last_mesh_node_info {1: {"ip": 2048, "l": {"lng": 5.45313, "lat": 51.45}, "a": 10, "r": 3, "nn": 1, "nei": [[6, 55296, 3, -76, 23]]}, 6: {"ip": 55296, "l": {"lng": 5.45313, "lat": 51.45}, "a": 7, "r": 3, "nn": 2, "nei": [[2, 50176, 3, -89, 28], [1, 2048, 3, -77, 23]]}, 2: {"ip": 50176, "l": {"lng": 5.45313, "lat": 51.45}, "a": 7, "r": 3, "nn": 1, "nei": [[6, 55296, 3, -86, 25]]}} +``` +This shows the properties for all the nodes in this Pymesh, together with its neighbours. + +``` +>s +(to)<1 +(txt)>>>>>>> +Added new message for 1: Hello World! +Send pack: 0x10 to IP fdde:ad00:beef:0::1 +True +>Incoming 13 bytes from fdde:ad00:beef:0:f67b:3d1e:f07:8341 (port 1234): +PACK_MESSAGE_ACK received +1945883 ================= ACK RECEIVED :) :) :) +``` +This sends text messages to another Node inside Pymesh. The messaging waits for acknowledgement (ACK message type) from the destination node. + +``` +>ws +(to)<1 +ACK? mac 1, id 12345 => 1 +True +``` +This shows if a message was acknowledged by the destination Node. + +``` +>rm +{'b': (b'Hello World!',), 'id': 12345, 'ts': 3301, 'from': 6} +``` +This shows the received messages. + +### Auxiliary commands +``` +>gps +(lat [Enter for read])< +Gps: (51.45, 5.45313) + +> gps +(lat [Enter for read])<11.234 +(lon)<23.45 +Gps: (11.234, 23.45) +``` + +This reads the GPS coordinates or sets them to known values. + +``` +>config +{'ble_api': True, 'MAC': 6, 'autostart': True, 'debug': 5, 'LoRa': {'sf': 7, 'region': 5, 'freq': 863000000, 'bandwidth': 2}, 'ble_name_prefix': 'PyGo ', 'Pymesh': {'key': '112233'}} +``` +This displays the configuration, stored on `/flash/pymesh_config.json`. + +### Border Router specific + +``` +>br +(state 0=Disable, 1=Enable, 2=Display [Default Display])< +Border Router state: [] + +>br +(state 0=Disable, 1=Enable, 2=Display [Default Display])<1 +(priority -1=Low, 0=Normal or 1=High [Default Normal])< +State: True BR: [] +Force add BR +BR: [(net='2001:cafe:cafe:cafe::/64', preference=0)] + +>br +(state 0=Disable, 1=Enable, 2=Display [Default Display])< +Border Router state: [(net='2001:cafe:cafe:cafe::/64', preference=0)] +``` +This enables/disables and shows the state of the current node as Border Router. + +``` +>brs +brs +(message<) +(IP destination, Mesh-external [Default: 1:2:3::4])< +(port destination [Default: 5555])< +Send BR message: {'ip': '1:2:3::4', 'b': '', 'port': 5555} +``` +This sends a packet to an IP address external of the Pymesh. This packet will be received by the designated Border Router and it can be further forwarded to another network interface, like: BLE, Wifi, Sigfox or Cellular (Fipy only). diff --git a/content/pymesh/library.md b/content/pymesh/library.md deleted file mode 100644 index 35f84e3..0000000 --- a/content/pymesh/library.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Pymesh Library" -aliases: - - pymesh/library ---- - -## What is Pymesh micropython library? - -Pymesh micropython library is a set of scripts included (as frozen) in the Pymesh firmware binary release (Not yet released). - -[Open-source on github](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh) - -It allows users to use Pymesh in a few lines of code, as shown in the following code snippet. - -```python - -import pycom -import time - -from _pymesh_config import PymeshConfig -from _pymesh import Pymesh - -# stop LED heartbeat, because it will be used to indicate current Node role -pycom.heartbeat(False) - -# read config file, or set default values -pymesh_config = PymeshConfig.read_config() - -#initialize Pymesh -pymesh = Pymesh(pymesh_config, new_message_cb) - -while not pymesh.is_connected(): - print(pymesh.status_str()) - time.sleep(3) - -# send message to the Node having MAC address 6 -pymesh.send_mess(6, "Hello World") - -def new_message_cb(rcv_ip, rcv_port, rcv_data): - ''' callback triggered when a new packet arrived ''' - print('Incoming %d bytes from %s (port %d):' % - (len(rcv_data), rcv_ip, rcv_port)) - print(rcv_data) - - # user code to be inserted, to send packet to the designated Mesh-external interface - # ... - return - -###################################################################################### -# Adding current node as Border Router, with a normal priority and a message handler callback -pymesh.br_set(PymeshConfig.BR_PRIORITY_NORM, new_br_message_cb) - -# remove Border Router function from current node -#pymesh.br_remove() - -# send data for Mesh-external, basically to the BR -ip = "1:2:3::4" -port = 5555 -pymesh.send_mess_external(ip, port, "Hello World") - -def new_br_message_cb(rcv_ip, rcv_port, rcv_data, dest_ip, dest_port): - ''' callback triggered when a new packet arrived for the current Border Router, - having destination an IP which is external from Mesh ''' - print('Incoming %d bytes from %s (port %d), to external IPv6 %s (port %d)' % - (len(rcv_data), rcv_ip, rcv_port, dest_ip, dest_port)) - print(rcv_data) - - # user code to be inserted, to send packet to the designated Mesh-external interface - # ... - return - -``` diff --git a/content/pymesh/licence.md b/content/pymesh/licence.md new file mode 100644 index 0000000..c2b466a --- /dev/null +++ b/content/pymesh/licence.md @@ -0,0 +1,48 @@ +--- +title: "Pymesh Library CLI" +aliases: + - pymesh/simple-example +--- + +## Licensing process + +In order to receive access to the Pymesh firmware releases (for Lopy4, Fipy, L01 or L04), the next process should be followed: + + +1. Complete the Pymesh LICENCE PDF document(not yet available), sign it and send us by [this email](mailto:catalin@pycom.io?subject=[Pymesh_LICENCE]). +1. You will receive on email an archive containing the images for all boards. +1. Extract the corresponding image, for example Lopy4.tar.gz, and upload the firmware to your board, using the [Pycom Firmware Update Tool](https://pycom.io/downloads/), like in the following image: +Pymesh Firmware Update + +## Test Pymesh firmware loading + +### Method 1 + +The simplest method to check if Pymesh class is successfully installed, just try this code directly in REPL: + +```python +>>> from network import LoRa +>>> lora = LoRa(mode=LoRa.LORA) +>>> mesh = lora.Mesh() +``` + +### Method 2 + +Upload the `main.py` from the [Simple Example](/pymesh/simple-example). + +## FAQ + +Q: **I've received an error, such as `(LoadProhibited). Exception was unhandled.`, what should I do?** + +A: In some cases, the NVM partition needs to be formatted. For this a format of whole Flash Memory should be performed. + +This can be done using the cli version of the Firmware Update Tool, so please navigate where this app was installed (search for pycom-fwtool-cli executable) and execute: +``` +pycom-fwtool-cli -p erase_all +``` + +`` should be replaced with the actual USB COM port, for example: + +* on Windows `COM10` +* on Linux `/dev/ttyACM0` +* on MacOS ``/dev/tty.usbmodemPy8eaa911` diff --git a/content/pymesh/pymesh-br.md b/content/pymesh/pymesh-br.md index d8d758e..75fc5dc 100644 --- a/content/pymesh/pymesh-br.md +++ b/content/pymesh/pymesh-br.md @@ -5,168 +5,63 @@ aliases: - tutorials/lora/pymesh-br.md --- +Pymesh -{{% hint style="info" %}} -These API's are currently only available in the latest RC builds. -{{% /hint %}} +## Overview -The following script exemplifies the declaration of a Border Router inside Pymesh. +The Border Router role, of a Node inside Pymesh, takes the traffic from the Pymesh and forwards it to the Cloud (Pymesh-external). -The Border Router is a role of a Pymesh node that can forward the Pymesh internal data to the Cloud. This is accomplished with the following steps: +Several things must be accomplished: -- declare the BR network address prefix, like `2001:dead:beef:cafe::/64`. - - in this particular script, as example the node which has LoRa MAC as value `8` will set BR interface. - - in a more practical usecase, the BR should be enabled if Wifi/BLE/Cellular connections are setup. +* The BR node should have connection with the Cloud, using another network interface (than LoRa-Pymesh), for example: BLE, Wifi or Cellular. +* The node has to be declared as BR, so all the other nodes send packets to it, with destination Cloud. +* Dynamically multiple nodes can be BR, each of them having different priorities levels (Normal, High or Low) + * The BR with the smallest routing cost is chosen. + * If multiple BR have the same routing cost, the priority level is used. -- all the nodes within the Pymesh will create a random IPv6 unicast address with this prefix. +## Border Router using CLI -- if a node sends data to an IPv6 which is external (like `1:2:3::4`), this UDP datagram will be routed to the BR. +As explained in [Pymesh CLI - Border Router section](pymesh/lib-cli/#border-router-specific), using commands `br` and `brs`, a simple testing scenario can be easily implemented. -- BR will receive the UDP datagrams for external with an appended header, which contains: - - MAGIC byte: `0xBB` - - IPv6 destination as bytearray (16 bytes) - - port destination as 2 bytes (1-65535 values). -- the IPv6 destination is important so BR could actually route (forward) the UDP datagram content to the right interface (Wifi/BLE/cellular). - -After this script is executed, some example of testing: - -- send data to the cloud - - `eid_socket.sendto("01234567890123456789", ("1::2", 1235))` - -- send data to the EID ipv6 of another Node inside Pymesh - - `eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:4623:91c8:64b2:d9ec", 1235))` - -- send data to the Leader - - `eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:0:ff:fe00:fc00", 1235))` - -- send data to the RLOC of another Node inside Pymesh - - `eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:0:ff:fe00:6800", 1235))` - - - -## Border Router example - -- Source: [https://github.com/pycom/pycom-libraries/blob/master/lib/lora_mesh/main_border_router.py](https://github.com/pycom/pycom-libraries/blob/master/lib/lora_mesh/main_border_router.py) -- `Loramesh` micropython library is available at [https://github.com/pycom/pycom-libraries/blob/master/lib/lora\_mesh/loramesh.py](https://github.com/pycom/pycom-libraries/blob/master/lib/lora_mesh/loramesh.py). - -```python - -from network import LoRa -import ubinascii -from loramesh import Loramesh -import pycom -import time -import socket -import struct - -BORDER_ROUTER_HEADER_FORMAT = '!BHHHHHHHHH' -BORDER_ROUTER_MAGIC_BYTE = 0xBB - -pycom.wifi_on_boot(False) -pycom.heartbeat(False) -border_router_net = "2001:dead:beef:cafe::/64" - -lora = LoRa(mode=LoRa.LORA, region=LoRa.EU868, bandwidth=LoRa.BW_125KHZ, sf=7) -#mesh = lora.Mesh() -MAC = str(ubinascii.hexlify(lora.mac()))[2:-1] -print("LoRa MAC: %s"%MAC) - -mesh = Loramesh(lora) - -# waiting until it connected to Mesh network -while True: - mesh.led_state() - print("%d: State %s, single %s"%(time.time(), mesh.cli('state'), mesh.cli('singleton'))) - time.sleep(2) - if not mesh.is_connected(): - continue - - print('Neighbors found: %s'%mesh.neighbors()) - print('IPs: %s'%mesh.mesh.ipaddr()) - break - -sockets = [] -#add BR for a certain MAC address -# or in a certain condition (Wifi/BLE/cellular connection to Internet) -if int(MAC, 16) == 8: - if len(mesh.mesh.border_router()) == 0: - mesh.mesh.border_router(border_router_net, 0) - print("Set Border Router with prefix %s"%border_router_net) - - # create UDP socket for Border Router interface - br_socket = socket.socket(socket.AF_LORA, socket.SOCK_RAW) - myport = 1234 - print("Please wait until BR gets propagated to the Leader ...") - while True: - ip = mesh.ip(border_router_net) - if ip is not None: - br_socket.bind((ip, myport)) - print("Created socked for (%s, %d)"%(ip, myport)) - break - time.sleep(1) - sockets.append(br_socket) - -eid_socket = socket.socket(socket.AF_LORA, socket.SOCK_RAW) -myport = 1235 -#ip = mesh.ip()# ipv6 EID -ip = "::" # in this case, socket can be bind just on a port, like: eid_socket.bind(myport) -if ip is not None: - eid_socket.bind((ip, myport)) - #eid_socket.bind(myport) - print("Created socked for (%s, %d)"%(ip, myport)) -sockets.append(eid_socket) - -# handler responsible for receiving packets on UDP Pymesh socket -def receive_pack(sockets): - # listen for incoming packets on all sockets - while True: - is_new_data = False - for sock in sockets: - # check if data received on all sockets - rcv_data, rcv_addr = sock.recvfrom(128) - if len(rcv_data) > 0: - is_new_data = True - break # out of for sock - if not is_new_data: - break # out of while True - rcv_ip = rcv_addr[0] - rcv_port = rcv_addr[1] - print('Incoming %d bytes from %s (port %d)'%(len(rcv_data), rcv_ip, rcv_port)) - - #check if data is for the external of the Pymesh (for The Cloud) - if rcv_data[0] == BORDER_ROUTER_MAGIC_BYTE and len(rcv_data) >= struct.calcsize(BORDER_ROUTER_HEADER_FORMAT): - br_header = struct.unpack(BORDER_ROUTER_HEADER_FORMAT, rcv_data) - print("IP dest: %x:%x:%x:%x:%x:%x:%x:%x (port %d)"%( - br_header[1],br_header[2],br_header[3],br_header[4], - br_header[5],br_header[6],br_header[7],br_header[8], br_header[9])) - rcv_data = rcv_data[struct.calcsize(BORDER_ROUTER_HEADER_FORMAT):] - - print(rcv_data) - - # send some ACK - if not rcv_data.startswith("ACK"): - print("Sent ACK back") - sock.sendto('ACK', (rcv_ip, rcv_port)) - -mesh.mesh.rx_cb(receive_pack, sockets) - -print('IPs: %s'%mesh.mesh.ipaddr()) -print('BRs: %s'%mesh.mesh.border_router()) - -""" -Example of usage: -* send data to the cloud -eid_socket.sendto("01234567890123456789", ("1::2", 1235)) -* send data to the EID ip of another Node inside Pymesh -eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:4623:91c8:64b2:d9ec", 1235)) -* send data to the Leader -eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:0:ff:fe00:fc00", 1235)) -* send data to the RLOC of another Node inside Pymesh -eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:0:ff:fe00:6800", 1235)) -""" +## Border Router using Pymesh API ``` +def new_br_message_cb(rcv_ip, rcv_port, rcv_data, dest_ip, dest_port): + ''' callback triggered when a new packet arrived for the current Border Router, + having destination an IP which is external from Mesh ''' + print('Incoming %d bytes from %s (port %d), to external IPv6 %s (port %d)' % + (len(rcv_data), rcv_ip, rcv_port, dest_ip, dest_port)) + print(rcv_data) + + # user code to be inserted, to send packet to the designated Mesh-external interface + # ... + return + +add current node as Border Router, with a priority and a message handler callback +pymesh.br_set(PymeshConfig.BR_PRIORITY_NORM, new_br_message_cb) + +remove Border Router function from current node +pymesh.br_remove() + +send data for Mesh-external, basically to the BR +ip = "1:2:3::4" +port = 5555 +pymesh.send_mess_external(ip, port, "Hello World") + +``` + +## Technical deep dive + +Internally, the Border Router mechanism is implemented with the following steps: + +* declare the BR network address prefix, like `2001:dead:beef:cafe::/64` +* this piece of information is sent to the `Leader` and the dataset will increase version (it will be updated) +* the dataset is propagated to all Pymesh nodes +* all the nodes will be assigned a random IPv6 unicast address with this network prefix (like `2001:dead:beef:cafe:1234:5678:9ABC:DEF0`) +* if a node sends data to an IPv6 which is external (it doesn't have prefix from Pymesh already existent networks, like `1:2:3::4`), this UDP datagram will be routed to the BR + * this UDP packet will have as source the random IPv6 from BR network address +* BR will receive the UDP datagrams for external with an appended header, which contains: + * MAGIC byte: `0xBB` + * IPv6 destination as bytearray (16 bytes) + * port destination as 2 bytes (1-65535 values). +* the IPv6 destination is important so BR could actually route (forward) the UDP datagram content to the right interface (Wifi/BLE/cellular). diff --git a/content/pymesh/simple-example.md b/content/pymesh/simple-example.md new file mode 100644 index 0000000..b83a3a9 --- /dev/null +++ b/content/pymesh/simple-example.md @@ -0,0 +1,146 @@ +--- +title: "Pymesh Library" +aliases: + - pymesh/simple-example +--- + +## What is Pymesh micropython library? + +Pymesh micropython library is a set of scripts included (as frozen) in the Pymesh firmware binary release (not yet released). + +[Open-source on github](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh) + +It allows users to use Pymesh in a few lines of code, as shown in the following code snippet. + +```python + +import pycom +import time + +try: + from pymesh_config import PymeshConfig +except: + from _pymesh_config import PymeshConfig + +try: + from pymesh import Pymesh +except: + from _pymesh import Pymesh + +def new_message_cb(rcv_ip, rcv_port, rcv_data): + ''' callback triggered when a new packet arrived ''' + print('Incoming %d bytes from %s (port %d):' % + (len(rcv_data), rcv_ip, rcv_port)) + print(rcv_data) + + # user code to be inserted, to send packet to the designated Mesh-external interface + for _ in range(3): + pycom.rgbled(0x888888) + time.sleep(.2) + pycom.rgbled(0) + time.sleep(.1) + return + + +pycom.heartbeat(False) + +# read config file, or set default values +pymesh_config = PymeshConfig.read_config() + +#initialize Pymesh +pymesh = Pymesh(pymesh_config, new_message_cb) + +mac = pymesh.mac() +# based on LoRa MAC address, some nodes could be forced to be +# sleep-end-devices (always Child) or to have increased Leader priority +# if mac > 10: +# pymesh.end_device(True) +# elif mac == 5: +# pymesh.leader_priority(255) + +while not pymesh.is_connected(): + print(pymesh.status_str()) + time.sleep(3) + +# send message to the Node having MAC address 5 +pymesh.send_mess(5, "Hello World") + +# def new_br_message_cb(rcv_ip, rcv_port, rcv_data, dest_ip, dest_port): +# ''' callback triggered when a new packet arrived for the current Border Router, +# having destination an IP which is external from Mesh ''' +# print('Incoming %d bytes from %s (port %d), to external IPv6 %s (port %d)' % +# (len(rcv_data), rcv_ip, rcv_port, dest_ip, dest_port)) +# print(rcv_data) + +# # user code to be inserted, to send packet to the designated Mesh-external interface +# # ... +# return + +# add current node as Border Router, with a priority and a message handler callback +# pymesh.br_set(PymeshConfig.BR_PRIORITY_NORM, new_br_message_cb) + +# remove Border Router function from current node +#pymesh.br_remove() + +# send data for Mesh-external, basically to the BR +# ip = "1:2:3::4" +# port = 5555 +# pymesh.send_mess_external(ip, port, "Hello World") + +print("done Pymesh init, forever loop, exit/stop with Ctrl+C multiple times") +# set BR with callback + +while True: + time.sleep(3) + +``` + +## Output + +An example of output is bellow. + +At any point pressing `Enter` will try to execute CLI commands, more details are presented in [Pymesh library CLI](/pymesh/lib-cli). + +``` + +rst:0x7 (TG0WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) +configsip: 0, SPIWP:0xee +clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 +mode:DIO, clock div:1 +load:0x3fff8020,len:8 +load:0x3fff8028,len:2164 +load:0x4009fa00,len:19944 +entry 0x400a05e8 +MAC ok 11 +Settings: {'ble_api': True, 'MAC': 11, 'autostart': True, 'debug': 5, 'LoRa': {'sf': 7, 'region': 5, 'freq': 863000000,'bandwidth': 2}, 'ble_name_prefix': 'PyGo ', 'Pymesh': {'key': '112233'}} +LoRa MAC: 0xb, short: 11 +OT stack: 6412 +Statistics file ok?! +============ MESH THREAD >>>>>>>>>>> +3: MAC 0xb(11), State Detached, Single True +['fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +>>>>>>>>>>> DONE MESH THREAD ============ 40 + +BLE name: PyGo 11 +Role 3, Single False, IPv6: ['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +>Role 3, Single False, IPv6: ['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +Role 3, Single False, IPv6: ['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +Role 3, Single False, IPv6: ['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +============ MESH THREAD >>>>>>>>>>> +13: MAC 0xb(11), State Router, Single False +['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +Leader: mac 0x4, rloc 0xb800, net: 0x591354fb +Socket created on port 1234 +Neighbors Table: [(mac=6, role=3, rloc16=28672, rssi=-67, age=0), (mac=4, role=3, rloc16=47104, rssi=-97, age=4)] +Neighbors: Router MAC 0xB, rloc16 0xc400, coord (51.45, 5.45313), neigh_num 2, ts 14 +MAC 0x6, rloc16 0x7000, role 3, rssi -67, age 0 +MAC 0x4, rloc16 0xb800, role 3, rssi -97, age 4 + +>>>>>>>>>>> DONE MESH THREAD ============ 76 + +Send message to 5, typ 0, load Hello World +Added new message for 5: Hello World +Send message b'\x00\x00\x00\x00\x00\x00\x00\x0b09\x00\x0bHello World' +Send pack: 0x10 to IP fdde:ad00:beef:0::5 +done Pymesh init, forever loop, exit/stop with Ctrl+C multiple times +``` diff --git a/static/gitbook/assets/pymesh/pymesh_firmware_update.png b/static/gitbook/assets/pymesh/pymesh_firmware_update.png new file mode 100644 index 0000000000000000000000000000000000000000..71a02a3216a6966e8874cc833048995d77e3f602 GIT binary patch literal 119497 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�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 literal 0 HcmV?d00001 From 8644592a0f315b2084f47ff77bcd701a6c8564c9 Mon Sep 17 00:00:00 2001 From: Catalin Ioana Date: Thu, 31 Oct 2019 18:15:20 +0200 Subject: [PATCH 2/6] Pymesh corrected documentation --- content/pymesh/_index.md | 2 +- content/pymesh/lib-api.md | 10 +++++----- content/pymesh/lib-ble-rpc.md | 10 +++++----- content/pymesh/lib-cli.md | 28 +++++++++++++++------------- content/pymesh/licence.md | 10 +++++----- content/pymesh/pymesh-br.md | 30 +++++++++++++++--------------- content/pymesh/simple-example.md | 8 ++++---- 7 files changed, 50 insertions(+), 48 deletions(-) diff --git a/content/pymesh/_index.md b/content/pymesh/_index.md index 7ff0156..ad32a12 100644 --- a/content/pymesh/_index.md +++ b/content/pymesh/_index.md @@ -20,7 +20,7 @@ _**Note: For obtaining the Pymesh firmware please follow the steps from [Pymesh ## What does Pymesh offer you? -* Ad-hoc communication network over raw-LoRa radio +* An ad-hoc communication network over raw-LoRa radio * Multi-gateway (Border Routers) Nodes that connect Mesh-internal data with the Cloud * Each Node uses LBS - Listen Before Talk * Security on multiple levels diff --git a/content/pymesh/lib-api.md b/content/pymesh/lib-api.md index 06c191a..7d42622 100644 --- a/content/pymesh/lib-api.md +++ b/content/pymesh/lib-api.md @@ -8,9 +8,9 @@ aliases: This Micropython library is included as frozen scripts in the Pymesh firmware release. -Code is open-sourced in [pycom-libraries repository](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh). +The code is open-sourced in [pycom-libraries repository](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh). -It is easily customisable and contributions are highly recommend using [Github PRs](https://github.com/pycom/pycom-libraries/pulls). +It is easily customisable and contributions are welcome using [Github PRs](https://github.com/pycom/pycom-libraries/pulls). ### Main features @@ -40,7 +40,7 @@ A simple example of usage is in the [main.py](https://github.com/pycom/pycom-lib ## Specifications -It can be easily customised, by modifying any file from [/lib folder](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh/lib) and flashing it to the board. Automatically the uploaded file will be executed instead of the _frozen_ one, already embedded into the binary firmware. +It can be easily customised, by modifying any file from [/lib folder](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh/lib) and flashing it to the board. The uploaded file will automatically be executed instead of the _frozen_ one, which is already embedded into the binary firmware. ### Structure @@ -55,9 +55,9 @@ It can be easily customised, by modifying any file from [/lib folder](https://gi * setting BLE server * auxiliary files: * `pymesh-debug.py` - * debugging on levels, allowing dynamically changing debug level + * debugging on multiple levels, allowing dynamically changing the current debug level * `pymesh-config.py` - * reading/writing Pymesh configuration file + * reading/writing the Pymesh configuration file * `gps.py` * maintaining location coordinates, as an extension `Pytrack` GPS can be used * Mesh internals diff --git a/content/pymesh/lib-ble-rpc.md b/content/pymesh/lib-ble-rpc.md index 14f9940..faa9a1a 100644 --- a/content/pymesh/lib-ble-rpc.md +++ b/content/pymesh/lib-ble-rpc.md @@ -28,11 +28,11 @@ This sets the location coordinates. #### get_mesh_mac_list() -This returns list of distinct MAC address that are in this mesh network, for example `[mac1, mac2, mac 3]`.` +This returns the list of distinct MAC address that are within this mesh network, for example `[mac1, mac2, mac 3]`.` #### get_mesh_pairs() -This returns list of pairs that is a mesh connection, as shown bellow: +This returns the list of pairs that form a mesh connection, as shown bellow: ``` [ @@ -69,7 +69,7 @@ This returns the node data for a specified mac address, or own data id `mac_id` #### send_message(data) -This sends a message with another node. It return True if there is buffer to store it (to be sent). +This sends a message to another node. It return True if there is a buffer to store it (to be sent onwards). `data` is a dictionary with the following structure: ``` @@ -84,11 +84,11 @@ This sends a message with another node. It return True if there is buffer to sto #### send_message_was_sent(mac, msg_id) -This checks if acknowledge was received for the specified `mac` and `msg_id`. It returns `True` if message was delivered. +This checks if acknowledgement was received from the specified `mac` and `msg_id`. It returns `True` if message was delivered. #### receive_message() -This returns the received messages, in a dictionary with the next structure: +This returns the received messages, in a dictionary with the following structure: ``` { 'b': 'text', diff --git a/content/pymesh/lib-cli.md b/content/pymesh/lib-cli.md index 4fb8371..aa206fe 100644 --- a/content/pymesh/lib-cli.md +++ b/content/pymesh/lib-cli.md @@ -6,9 +6,9 @@ aliases: ## Overview -The Pymesh micropython library is included as frozen in the Pymesh firmware releases. +The Pymesh micropython library is included as a `frozen python script` in the Pymesh firmware releases. -Instead of REPL, a specific Pymesh CLI is interpreting commands and it is recognised, by starting with `>`. +Instead of REPL, a specific Pymesh CLI interprets commands. This is shown by `>`. The CLI is executed on a separate thread inside the Pymesh library. @@ -25,10 +25,10 @@ List of available commands ip - display current IPv6 unicast addresses mac - set or display the current LoRa MAC address self - display all info about current node -mml - display the Mesh Mac List (MAC of all nodes inside this Mesh), also inquires Leader -mp - display the Mesh Pairs (Pairs of all nodes connections), also inquires Leader +mml - display the Mesh Mac List (MAC of all nodes inside this Mesh) +mp - display the Mesh Pairs (pairs of all nodes connections) s - send message -ws - verifies if message sent was acknowledged +ws - verifies if the message sent was acknowledged rm - verifies if any message was received sleep - deep-sleep br - enable/disable or display the current Border Router functionality @@ -75,7 +75,7 @@ deepsleep_init Cleanup code, all Alarms cb should be stopped Going to deepsleep for 10 seconds ``` -This puts the device in deepsleep for designated number of seconds. +This puts the device into deepsleep for a designated number of seconds. ``` >buf @@ -110,20 +110,22 @@ This executes an Openthread CLI command. The list of CLI commands is [here](http >mac 1 ``` -This shows LoRa MAC, this address is used as unique identifier in the Pymesh. Bellow there's a section on how to set MAC specific MAC address (useful for debugging, the MAC could be consecutive small numbers like `0x1`, `0x2`, `...`) +This shows the LoRa MAC or sets it to a known value. This address is used as a unique identifier within the Pymesh. + +This can be useful for debugging and the MAC could be set to consecutive small numbers, such as `0x1`, `0x2`, ... ``` >mml mesh_mac_list [1, 6, 2] ``` -This shows the list of all MAC Nodes attached to Pymesh. It inquires Leader, which centralises this data. +This shows the list of all MAC Nodes attached to Pymesh. It inquires the Leader, which centralises this data. ``` >mp Send pack: 0xF3 to IP fdde:ad00:beef:0:0:ff:fe00:fc00 last_mesh_pairs [[2, 6, -87], [1, 6, -77]] ``` -This shows Mesh Pairs list, with each direct connected nodes (by their MAC address) and the averaged RSSI value. +This shows the Mesh Pairs list. It lists each directly connected node (by their MAC address) and the averaged RSSI value. ``` >mni @@ -143,7 +145,7 @@ True PACK_MESSAGE_ACK received 1945883 ================= ACK RECEIVED :) :) :) ``` -This sends text messages to another Node inside Pymesh. The messaging waits for acknowledgement (ACK message type) from the destination node. +This sends text messages to another Node within the Pymesh. The messaging node waits for acknowledgement (ACK message type) from the destination node. ``` >ws @@ -151,7 +153,7 @@ This sends text messages to another Node inside Pymesh. The messaging waits for ACK? mac 1, id 12345 => 1 True ``` -This shows if a message was acknowledged by the destination Node. +This shows if the message was acknowledged by the destination Node. ``` >rm @@ -197,7 +199,7 @@ BR: [(net='2001:cafe:cafe:cafe::/64', preference=0)] (state 0=Disable, 1=Enable, 2=Display [Default Display])< Border Router state: [(net='2001:cafe:cafe:cafe::/64', preference=0)] ``` -This enables/disables and shows the state of the current node as Border Router. +This enables/disables the Border Router functionality of the current node. It also shows the state of the current node as Border Router. ``` >brs @@ -207,4 +209,4 @@ brs (port destination [Default: 5555])< Send BR message: {'ip': '1:2:3::4', 'b': '', 'port': 5555} ``` -This sends a packet to an IP address external of the Pymesh. This packet will be received by the designated Border Router and it can be further forwarded to another network interface, like: BLE, Wifi, Sigfox or Cellular (Fipy only). +This sends a packet to an external IP address, outside of the Pymesh. The packet will be received by the designated Border Router and it can be further forwarded to another network interface, such as: BLE, Wifi, Sigfox or Cellular (Fipy only). diff --git a/content/pymesh/licence.md b/content/pymesh/licence.md index c2b466a..0707fa0 100644 --- a/content/pymesh/licence.md +++ b/content/pymesh/licence.md @@ -10,15 +10,15 @@ In order to receive access to the Pymesh firmware releases (for Lopy4, Fipy, L01 1. Complete the Pymesh LICENCE PDF document(not yet available), sign it and send us by [this email](mailto:catalin@pycom.io?subject=[Pymesh_LICENCE]). -1. You will receive on email an archive containing the images for all boards. -1. Extract the corresponding image, for example Lopy4.tar.gz, and upload the firmware to your board, using the [Pycom Firmware Update Tool](https://pycom.io/downloads/), like in the following image: +1. You will receive by email an archive containing the images for all boards. +1. Extract the corresponding image, for example Lopy4.tar.gz, and upload the firmware to your board, using the [Pycom Firmware Update Tool](https://pycom.io/downloads/), similar in the following image: Pymesh Firmware Update ## Test Pymesh firmware loading ### Method 1 -The simplest method to check if Pymesh class is successfully installed, just try this code directly in REPL: +The simplest way to check if the Pymesh class has been successfully installed is to try the following code, directly in REPL: ```python >>> from network import LoRa @@ -36,7 +36,7 @@ Q: **I've received an error, such as `(LoadProhibited). Exception was unhandled. A: In some cases, the NVM partition needs to be formatted. For this a format of whole Flash Memory should be performed. -This can be done using the cli version of the Firmware Update Tool, so please navigate where this app was installed (search for pycom-fwtool-cli executable) and execute: +This can be done using the cli version of the `Firmware Update Tool`, so please navigate where the app was installed (search for pycom-fwtool-cli executable) and execute: ``` pycom-fwtool-cli -p erase_all ``` @@ -45,4 +45,4 @@ pycom-fwtool-cli -p erase_all * on Windows `COM10` * on Linux `/dev/ttyACM0` -* on MacOS ``/dev/tty.usbmodemPy8eaa911` +* on MacOS `/dev/tty.usbmodemPy8eaa911` diff --git a/content/pymesh/pymesh-br.md b/content/pymesh/pymesh-br.md index 75fc5dc..202153f 100644 --- a/content/pymesh/pymesh-br.md +++ b/content/pymesh/pymesh-br.md @@ -9,19 +9,19 @@ aliases: ## Overview -The Border Router role, of a Node inside Pymesh, takes the traffic from the Pymesh and forwards it to the Cloud (Pymesh-external). +Any node inside of the Pymesh can take on the role as a Border Router, which takes the traffic from the Pymesh and forwards it to the Cloud (Pymesh-external). Several things must be accomplished: -* The BR node should have connection with the Cloud, using another network interface (than LoRa-Pymesh), for example: BLE, Wifi or Cellular. -* The node has to be declared as BR, so all the other nodes send packets to it, with destination Cloud. -* Dynamically multiple nodes can be BR, each of them having different priorities levels (Normal, High or Low) - * The BR with the smallest routing cost is chosen. - * If multiple BR have the same routing cost, the priority level is used. +* The Border Router node should have connection with the Cloud. This should occur using another network interface (other than LoRa-Pymesh), for example: BLE, Wifi or Cellular. +* The node has to be declared as a Border Router, so that all the other nodes send packets to it. The final destination is the Cloud. +* To add flexibility, at runtime (dynamically), multiple nodes can act as Border Routers. Each of them can have different priority levels (Normal, High or Low). + * The Border Router with the smallest routing cost is selected. + * If multiple Border Routers have the same routing cost, then the priority level is used. ## Border Router using CLI -As explained in [Pymesh CLI - Border Router section](pymesh/lib-cli/#border-router-specific), using commands `br` and `brs`, a simple testing scenario can be easily implemented. +As explained in [Pymesh CLI - Border Router section](pymesh/lib-cli/#border-router-specific), using commands `br` and `brs`, a simple test scenario can be easily implemented. ## Border Router using Pymesh API @@ -54,14 +54,14 @@ pymesh.send_mess_external(ip, port, "Hello World") Internally, the Border Router mechanism is implemented with the following steps: -* declare the BR network address prefix, like `2001:dead:beef:cafe::/64` -* this piece of information is sent to the `Leader` and the dataset will increase version (it will be updated) -* the dataset is propagated to all Pymesh nodes -* all the nodes will be assigned a random IPv6 unicast address with this network prefix (like `2001:dead:beef:cafe:1234:5678:9ABC:DEF0`) -* if a node sends data to an IPv6 which is external (it doesn't have prefix from Pymesh already existent networks, like `1:2:3::4`), this UDP datagram will be routed to the BR - * this UDP packet will have as source the random IPv6 from BR network address -* BR will receive the UDP datagrams for external with an appended header, which contains: +* Declare the Border Router network address prefix, for example `2001:dead:beef:cafe::/64` +* The network address prefix is then sent to the `Leader` and the dataset will increase the version, meaning that it will be updated. +* The dataset is propagated to all Pymesh nodes. +* All the nodes will be assigned a random IPv6 unicast address with this network prefix (for example `2001:dead:beef:cafe:1234:5678:9ABC:DEF0`) +* If a node sends data to an IPv6 which is external (meaning it doesn't have a prefix from already existent networks in Pymesh, for example `1:2:3::4`), then the UDP datagram will be routed to the Border Router + * This UDP packet will have as source the random IPv6 from BR network address +* The Border Router will receive the external UDP datagrams with an appended header, which contains: * MAGIC byte: `0xBB` * IPv6 destination as bytearray (16 bytes) * port destination as 2 bytes (1-65535 values). -* the IPv6 destination is important so BR could actually route (forward) the UDP datagram content to the right interface (Wifi/BLE/cellular). +* The IPv6 destination is important, because it means that the Border Router can route (forward) the UDP datagram content to the correct interface (Wifi/BLE/cellular). diff --git a/content/pymesh/simple-example.md b/content/pymesh/simple-example.md index b83a3a9..b477164 100644 --- a/content/pymesh/simple-example.md +++ b/content/pymesh/simple-example.md @@ -6,11 +6,11 @@ aliases: ## What is Pymesh micropython library? -Pymesh micropython library is a set of scripts included (as frozen) in the Pymesh firmware binary release (not yet released). +The Pymesh Micropython library is a set of frozen scripts in the Pymesh firmware binary release (which has not yet been released). [Open-source on github](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh) -It allows users to use Pymesh in a few lines of code, as shown in the following code snippet. +It allows users to access Pymesh in a few lines of code, as shown in the following code snippet. ```python @@ -97,9 +97,9 @@ while True: ## Output -An example of output is bellow. +An example of possible output is below. -At any point pressing `Enter` will try to execute CLI commands, more details are presented in [Pymesh library CLI](/pymesh/lib-cli). +At any point pressing `Enter` will result in the attempt to execute CLI commands. More details are found in [Pymesh library CLI](/pymesh/lib-cli). ``` From ce6d44bf9197abe32b973e062a5606e9f141780e Mon Sep 17 00:00:00 2001 From: Catalin Ioana Date: Thu, 24 Oct 2019 18:06:54 +0300 Subject: [PATCH 3/6] Added Pymesh library --- config.toml | 43 +++- content/pymesh/_index.md | 13 +- content/pymesh/lib-api.md | 67 ++++++ content/pymesh/lib-ble-rpc.md | 99 +++++++++ content/pymesh/lib-cli.md | 210 ++++++++++++++++++ content/pymesh/library.md | 72 ------ content/pymesh/licence.md | 48 ++++ content/pymesh/pymesh-br.md | 207 +++++------------ content/pymesh/simple-example.md | 146 ++++++++++++ .../assets/pymesh/pymesh_firmware_update.png | Bin 0 -> 119497 bytes 10 files changed, 662 insertions(+), 243 deletions(-) create mode 100644 content/pymesh/lib-api.md create mode 100644 content/pymesh/lib-ble-rpc.md create mode 100644 content/pymesh/lib-cli.md delete mode 100644 content/pymesh/library.md create mode 100644 content/pymesh/licence.md create mode 100644 content/pymesh/simple-example.md create mode 100644 static/gitbook/assets/pymesh/pymesh_firmware_update.png diff --git a/config.toml b/config.toml index 625af85..2d6bcc1 100644 --- a/config.toml +++ b/config.toml @@ -1272,39 +1272,60 @@ theme = "doc-theme" weight = 95 [[menu.main]] - name = "Pymesh Library API" - url = "/pymesh/library" - identifier = "pymesh@library" + name = "Pymesh LICENCE" + url = "/pymesh/licence" + identifier = "pymesh@licence" parent = "pymesh" weight = 10 [[menu.main]] - name = "Micropython API" - url = "/firmwareapi/pycom/network/lora/pymesh" - identifier = "pymesh@api" + name = "Simple Example" + url = "/pymesh/simple-example" + identifier = "pymesh@simple-example" parent = "pymesh" weight = 20 [[menu.main]] - name = "Simple Example" - url = "/pymesh/lora-mesh" - identifier = "pymesh@lora-mesh" + name = "Pymesh Library API" + url = "/pymesh/lib-api" + identifier = "pymesh@lib-api" parent = "pymesh" weight = 30 +[[menu.main]] + name = "Pymesh Library CLI" + url = "/pymesh/lib-cli" + identifier = "pymesh@lib-cli" + parent = "pymesh" + weight = 40 + +[[menu.main]] + name = "Pymesh Library BLE RPC" + url = "/pymesh/lib-ble-rpc" + identifier = "pymesh@lib-ble-rpc" + parent = "pymesh" + weight = 50 + [[menu.main]] name = "Border Router Examplee" url = "/pymesh/pymesh-br" identifier = "pymesh@pymesh-br" parent = "pymesh" - weight = 40 + weight = 60 [[menu.main]] name = "Advanced Security Example" url = "/pymesh/security" identifier = "pymesh@security" parent = "pymesh" - weight = 50 + weight = 70 + +[[menu.main]] + name = "Micropython API" + url = "/firmwareapi/pycom/network/lora/pymesh" + identifier = "pymesh@api" + parent = "pymesh" + weight = 90 # *** Documentation Notes [[menu.main]] diff --git a/content/pymesh/_index.md b/content/pymesh/_index.md index 1f15b80..7ff0156 100644 --- a/content/pymesh/_index.md +++ b/content/pymesh/_index.md @@ -12,11 +12,12 @@ Pymesh is the LoRa full-mesh network technology. A Mesh network acts like a net, this means that any node within the network can connect with any other node. - Mesh networks essentially get rid of gateways, which decentralises the network's infrastructure. This then means that the network becomes flexible, so it can do many wonderful things – such as generate, change and fix itself. The success of the Mesh network is down to its parts, as any node within the network will automatically connect to the best radio-link available. Pymesh solution works on all of our LoRa supporting development boards, the LoPy4 and FiPy as well as on our OEM modules, L01 and L04. +_**Note: For obtaining the Pymesh firmware please follow the steps from [Pymesh LICENCE page](/pymesh/licence).**_ + ## What does Pymesh offer you? * Ad-hoc communication network over raw-LoRa radio @@ -29,7 +30,11 @@ Pymesh solution works on all of our LoRa supporting development boards, the LoPy ## Let's get started! -* [Pymesh Micropython API](/firmwareapi/pycom/network/lora/pymesh) -* [Simple Example](/pymesh/lora-mesh) -* [Border Router Example](/pymesh/pymesh-br) +* [Pymesh LICENCE](/pymesh/licence) +* [Simple Example](/pymesh/simple-example) +* [Pymesh library API](/pymesh/lib-api) +* [Pymesh library CLI](/pymesh/lib-cli) +* [Pymesh library BLE RPC](/pymesh/lib-ble-rpc) +* [Border Router](/pymesh/pymesh-br) * ​[Advanced Security Example](/pymesh/security)​ +* [Pymesh Micropython API](/firmwareapi/pycom/network/lora/pymesh) diff --git a/content/pymesh/lib-api.md b/content/pymesh/lib-api.md new file mode 100644 index 0000000..06c191a --- /dev/null +++ b/content/pymesh/lib-api.md @@ -0,0 +1,67 @@ +--- +title: "Pymesh Library API" +aliases: + - pymesh/lib-api +--- + +## Overview + +This Micropython library is included as frozen scripts in the Pymesh firmware release. + +Code is open-sourced in [pycom-libraries repository](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh). + +It is easily customisable and contributions are highly recommend using [Github PRs](https://github.com/pycom/pycom-libraries/pulls). + +### Main features + +* Start Pymesh over LoRa on 863Mhz, bandwidth 250kHz, spreading-factor 7 (please check `pymesh_config.py` defaults for exact values). +* Pymesh parameters are automatically saved in NVM, so in the next restart/deepsleep, the node will try to maintain its IP addresses and connections with neighbour nodes. +* Start Bluetooth LE server with name `PyGo ` + * BLE is used with an RPC protocol, presented int [Pymesh library BLE RPC](/pymesh/lib-ble-rpc) +* Internal CLI for controlling/triggering Pymesh features, as explained in [Pymesh library CLI](/pymesh/lib-cli). + +### Color coding LED + +The LED color represents the state of the node in the Mesh network. + +``` + +Blinking - Send/Receive packet +Magenta - LEADER +Green - ROUTER +White - CHILD, +Red - Searching / Detached from any Pymesh +Cyan - SINGLE LEADER (no other Router in the same Pymesh) +``` + +## Example of usage + +A simple example of usage is in the [main.py](https://github.com/pycom/pycom-libraries/blob/master/lib/pymesh/main.py). + +## Specifications + +It can be easily customised, by modifying any file from [/lib folder](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh/lib) and flashing it to the board. Automatically the uploaded file will be executed instead of the _frozen_ one, already embedded into the binary firmware. + +### Structure + +* `pymesh.py` + * contains all the methods accessible from `main.py` +* `cli.py` + * [Pymesh library CLI](/pymesh/lib-cli) +* BLE services + * `ble_rpc.py` + * [Pymesh library BLE RPC](/pymesh/lib-ble-rpc) + * `ble_services.py` + * setting BLE server +* auxiliary files: + * `pymesh-debug.py` + * debugging on levels, allowing dynamically changing debug level + * `pymesh-config.py` + * reading/writing Pymesh configuration file + * `gps.py` + * maintaining location coordinates, as an extension `Pytrack` GPS can be used +* Mesh internals + * `mesh-interface.py` + * methods to inquire Mesh-internal parameters + * `mesh-internal.py` and `loramesh.py` + * 2 layers of internal mesh maintenance diff --git a/content/pymesh/lib-ble-rpc.md b/content/pymesh/lib-ble-rpc.md new file mode 100644 index 0000000..14f9940 --- /dev/null +++ b/content/pymesh/lib-ble-rpc.md @@ -0,0 +1,99 @@ +--- +title: "Pymesh Library Bluetooth LE RPC" +aliases: + - pymesh/simple-example +--- + +## RPC protocol + +It is implemented in [ble_rpc.py](https://github.com/pycom/pycom-libraries/blob/master/lib/pymesh/lib/ble_rpc.py). + +In the class `RPCHandler` methods can be added to expand RPC set. + +The internal RPC are calling methods from file `mesh_interface.py`. + +## Methods + +#### mesh_is_connected() + +This returns `True` if Node is connected to a Pymesh. + +#### mesh_ip() + +This returns the IP RLOC16 in a string. + +#### set_gps(latitude, longitude) + +This sets the location coordinates. + +#### get_mesh_mac_list() + +This returns list of distinct MAC address that are in this mesh network, for example `[mac1, mac2, mac 3]`.` + +#### get_mesh_pairs() + +This returns list of pairs that is a mesh connection, as shown bellow: + +``` +[ + ('mac1', 'mac2', rssi), + ('mac1', 'mac3', rssi), + #... +] +``` + +#### get_node_info(mac_id = ' ') + +This returns the node data for a specified mac address, or own data id `mac_id` is not specified. Node data is dictionary with the following structure: +``` +{ + 'ip': 4c00, # last 2bytes from the ip v6 RLOC16 address + 'r': 3, # not_connected:0 | child:1 | leader:2 | router:3 + 'a': 100, # age[sec], time since last info about this node + 'nn' : 20 # neighbours number + 'nei': { # neighbours enumerated, if any + (mac, ip, role, rssi, age), + (mac, ip, role, rssi, age) + } + 'l': { # location, if available + 'lng': 7, + 'lat': 20, + }, + 'b' : { # BLE infos + 'a': 100 # age, seconds since last ping with that device, None if properly disconnected + 'id': '' # 16byte + 'n': '', # name, max. 16 chars + } +} +``` + +#### send_message(data) + +This sends a message with another node. It return True if there is buffer to store it (to be sent). + +`data` is a dictionary with the following structure: +``` +{ + 'to': 0x5, + 'b': 'text', + 'id': 12345, + 'ts': 123123123, +} +``` + + +#### send_message_was_sent(mac, msg_id) + +This checks if acknowledge was received for the specified `mac` and `msg_id`. It returns `True` if message was delivered. + +#### receive_message() + +This returns the received messages, in a dictionary with the next structure: +``` +{ + 'b': 'text', + 'from': 'ble_device_id', + 'ts': 123123123, + 'id': '', +} +``` diff --git a/content/pymesh/lib-cli.md b/content/pymesh/lib-cli.md new file mode 100644 index 0000000..4fb8371 --- /dev/null +++ b/content/pymesh/lib-cli.md @@ -0,0 +1,210 @@ +--- +title: "Pymesh Library CLI" +aliases: + - pymesh/simple-example +--- + +## Overview + +The Pymesh micropython library is included as frozen in the Pymesh firmware releases. + +Instead of REPL, a specific Pymesh CLI is interpreting commands and it is recognised, by starting with `>`. + +The CLI is executed on a separate thread inside the Pymesh library. + +For example: +``` +>mml +mesh_mac_list [1, 6, 2] +``` + +## Internal CLI + +``` +List of available commands +ip - display current IPv6 unicast addresses +mac - set or display the current LoRa MAC address +self - display all info about current node +mml - display the Mesh Mac List (MAC of all nodes inside this Mesh), also inquires Leader +mp - display the Mesh Pairs (Pairs of all nodes connections), also inquires Leader +s - send message +ws - verifies if message sent was acknowledged +rm - verifies if any message was received +sleep - deep-sleep +br - enable/disable or display the current Border Router functionality +brs - send packet for Mesh-external, to BR, if any +rst - reset NOW, including NVM Pymesh IPv6 +buf - display buffer info +ot - sends command to openthread internal CLI +debug - set debug level +config - print config file contents +``` + +### Debug commands + +``` +> debug +5 +``` +This sets the debug level. Possible values are: +``` +# recommended debug levels, from the most verbose to off +DEBUG_DEBG = const(5) +DEBUG_INFO = const(4) +DEBUG_NOTE = const(3) +DEBUG_WARN = const(2) +DEBUG_CRIT = const(1) +DEBUG_NONE = const(0) +``` + +``` +>rst +Mesh Reset NVM settings ... +deepsleep_init +>deepsleep_now +Cleanup code, all Alarms cb should be stopped +Going to deepsleep for 1 seconds +``` +This resets the Pymesh parameters saved in NVM, and resets the Node. + +``` +>sleep +(time[sec])<10 +deepsleep_init +>deepsleep_now +Cleanup code, all Alarms cb should be stopped +Going to deepsleep for 10 seconds +``` +This puts the device in deepsleep for designated number of seconds. + +``` +>buf +Buffer info: total: 200 +free: 200 +6lo send: 0 0 +6lo reas: 0 0 +ip6: 0 0 +mpl: 0 0 +mle: 0 0 +arp: 0 0 +coap: 0 0 +coap secure: 0 0 +application coap: 0 0 +``` +This displays the number of buffers for each layer of the Pymesh. + +``` +>ot +(openthread cli)mac +1 +``` +This shows LoRa MAC, this address is used as unique identifier in the Pymesh. Bellow there's a section on how to set MAC specific MAC address (useful for debugging, the MAC could be consecutive small numbers like `0x1`, `0x2`, `...`) + +``` +>mml +mesh_mac_list [1, 6, 2] +``` +This shows the list of all MAC Nodes attached to Pymesh. It inquires Leader, which centralises this data. + +``` +>mp +Send pack: 0xF3 to IP fdde:ad00:beef:0:0:ff:fe00:fc00 +last_mesh_pairs [[2, 6, -87], [1, 6, -77]] +``` +This shows Mesh Pairs list, with each direct connected nodes (by their MAC address) and the averaged RSSI value. + +``` +>mni +last_mesh_node_info {1: {"ip": 2048, "l": {"lng": 5.45313, "lat": 51.45}, "a": 10, "r": 3, "nn": 1, "nei": [[6, 55296, 3, -76, 23]]}, 6: {"ip": 55296, "l": {"lng": 5.45313, "lat": 51.45}, "a": 7, "r": 3, "nn": 2, "nei": [[2, 50176, 3, -89, 28], [1, 2048, 3, -77, 23]]}, 2: {"ip": 50176, "l": {"lng": 5.45313, "lat": 51.45}, "a": 7, "r": 3, "nn": 1, "nei": [[6, 55296, 3, -86, 25]]}} +``` +This shows the properties for all the nodes in this Pymesh, together with its neighbours. + +``` +>s +(to)<1 +(txt)>>>>>>> +Added new message for 1: Hello World! +Send pack: 0x10 to IP fdde:ad00:beef:0::1 +True +>Incoming 13 bytes from fdde:ad00:beef:0:f67b:3d1e:f07:8341 (port 1234): +PACK_MESSAGE_ACK received +1945883 ================= ACK RECEIVED :) :) :) +``` +This sends text messages to another Node inside Pymesh. The messaging waits for acknowledgement (ACK message type) from the destination node. + +``` +>ws +(to)<1 +ACK? mac 1, id 12345 => 1 +True +``` +This shows if a message was acknowledged by the destination Node. + +``` +>rm +{'b': (b'Hello World!',), 'id': 12345, 'ts': 3301, 'from': 6} +``` +This shows the received messages. + +### Auxiliary commands +``` +>gps +(lat [Enter for read])< +Gps: (51.45, 5.45313) + +> gps +(lat [Enter for read])<11.234 +(lon)<23.45 +Gps: (11.234, 23.45) +``` + +This reads the GPS coordinates or sets them to known values. + +``` +>config +{'ble_api': True, 'MAC': 6, 'autostart': True, 'debug': 5, 'LoRa': {'sf': 7, 'region': 5, 'freq': 863000000, 'bandwidth': 2}, 'ble_name_prefix': 'PyGo ', 'Pymesh': {'key': '112233'}} +``` +This displays the configuration, stored on `/flash/pymesh_config.json`. + +### Border Router specific + +``` +>br +(state 0=Disable, 1=Enable, 2=Display [Default Display])< +Border Router state: [] + +>br +(state 0=Disable, 1=Enable, 2=Display [Default Display])<1 +(priority -1=Low, 0=Normal or 1=High [Default Normal])< +State: True BR: [] +Force add BR +BR: [(net='2001:cafe:cafe:cafe::/64', preference=0)] + +>br +(state 0=Disable, 1=Enable, 2=Display [Default Display])< +Border Router state: [(net='2001:cafe:cafe:cafe::/64', preference=0)] +``` +This enables/disables and shows the state of the current node as Border Router. + +``` +>brs +brs +(message<) +(IP destination, Mesh-external [Default: 1:2:3::4])< +(port destination [Default: 5555])< +Send BR message: {'ip': '1:2:3::4', 'b': '', 'port': 5555} +``` +This sends a packet to an IP address external of the Pymesh. This packet will be received by the designated Border Router and it can be further forwarded to another network interface, like: BLE, Wifi, Sigfox or Cellular (Fipy only). diff --git a/content/pymesh/library.md b/content/pymesh/library.md deleted file mode 100644 index 35f84e3..0000000 --- a/content/pymesh/library.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Pymesh Library" -aliases: - - pymesh/library ---- - -## What is Pymesh micropython library? - -Pymesh micropython library is a set of scripts included (as frozen) in the Pymesh firmware binary release (Not yet released). - -[Open-source on github](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh) - -It allows users to use Pymesh in a few lines of code, as shown in the following code snippet. - -```python - -import pycom -import time - -from _pymesh_config import PymeshConfig -from _pymesh import Pymesh - -# stop LED heartbeat, because it will be used to indicate current Node role -pycom.heartbeat(False) - -# read config file, or set default values -pymesh_config = PymeshConfig.read_config() - -#initialize Pymesh -pymesh = Pymesh(pymesh_config, new_message_cb) - -while not pymesh.is_connected(): - print(pymesh.status_str()) - time.sleep(3) - -# send message to the Node having MAC address 6 -pymesh.send_mess(6, "Hello World") - -def new_message_cb(rcv_ip, rcv_port, rcv_data): - ''' callback triggered when a new packet arrived ''' - print('Incoming %d bytes from %s (port %d):' % - (len(rcv_data), rcv_ip, rcv_port)) - print(rcv_data) - - # user code to be inserted, to send packet to the designated Mesh-external interface - # ... - return - -###################################################################################### -# Adding current node as Border Router, with a normal priority and a message handler callback -pymesh.br_set(PymeshConfig.BR_PRIORITY_NORM, new_br_message_cb) - -# remove Border Router function from current node -#pymesh.br_remove() - -# send data for Mesh-external, basically to the BR -ip = "1:2:3::4" -port = 5555 -pymesh.send_mess_external(ip, port, "Hello World") - -def new_br_message_cb(rcv_ip, rcv_port, rcv_data, dest_ip, dest_port): - ''' callback triggered when a new packet arrived for the current Border Router, - having destination an IP which is external from Mesh ''' - print('Incoming %d bytes from %s (port %d), to external IPv6 %s (port %d)' % - (len(rcv_data), rcv_ip, rcv_port, dest_ip, dest_port)) - print(rcv_data) - - # user code to be inserted, to send packet to the designated Mesh-external interface - # ... - return - -``` diff --git a/content/pymesh/licence.md b/content/pymesh/licence.md new file mode 100644 index 0000000..c2b466a --- /dev/null +++ b/content/pymesh/licence.md @@ -0,0 +1,48 @@ +--- +title: "Pymesh Library CLI" +aliases: + - pymesh/simple-example +--- + +## Licensing process + +In order to receive access to the Pymesh firmware releases (for Lopy4, Fipy, L01 or L04), the next process should be followed: + + +1. Complete the Pymesh LICENCE PDF document(not yet available), sign it and send us by [this email](mailto:catalin@pycom.io?subject=[Pymesh_LICENCE]). +1. You will receive on email an archive containing the images for all boards. +1. Extract the corresponding image, for example Lopy4.tar.gz, and upload the firmware to your board, using the [Pycom Firmware Update Tool](https://pycom.io/downloads/), like in the following image: +Pymesh Firmware Update + +## Test Pymesh firmware loading + +### Method 1 + +The simplest method to check if Pymesh class is successfully installed, just try this code directly in REPL: + +```python +>>> from network import LoRa +>>> lora = LoRa(mode=LoRa.LORA) +>>> mesh = lora.Mesh() +``` + +### Method 2 + +Upload the `main.py` from the [Simple Example](/pymesh/simple-example). + +## FAQ + +Q: **I've received an error, such as `(LoadProhibited). Exception was unhandled.`, what should I do?** + +A: In some cases, the NVM partition needs to be formatted. For this a format of whole Flash Memory should be performed. + +This can be done using the cli version of the Firmware Update Tool, so please navigate where this app was installed (search for pycom-fwtool-cli executable) and execute: +``` +pycom-fwtool-cli -p erase_all +``` + +`` should be replaced with the actual USB COM port, for example: + +* on Windows `COM10` +* on Linux `/dev/ttyACM0` +* on MacOS ``/dev/tty.usbmodemPy8eaa911` diff --git a/content/pymesh/pymesh-br.md b/content/pymesh/pymesh-br.md index d8d758e..75fc5dc 100644 --- a/content/pymesh/pymesh-br.md +++ b/content/pymesh/pymesh-br.md @@ -5,168 +5,63 @@ aliases: - tutorials/lora/pymesh-br.md --- +Pymesh -{{% hint style="info" %}} -These API's are currently only available in the latest RC builds. -{{% /hint %}} +## Overview -The following script exemplifies the declaration of a Border Router inside Pymesh. +The Border Router role, of a Node inside Pymesh, takes the traffic from the Pymesh and forwards it to the Cloud (Pymesh-external). -The Border Router is a role of a Pymesh node that can forward the Pymesh internal data to the Cloud. This is accomplished with the following steps: +Several things must be accomplished: -- declare the BR network address prefix, like `2001:dead:beef:cafe::/64`. - - in this particular script, as example the node which has LoRa MAC as value `8` will set BR interface. - - in a more practical usecase, the BR should be enabled if Wifi/BLE/Cellular connections are setup. +* The BR node should have connection with the Cloud, using another network interface (than LoRa-Pymesh), for example: BLE, Wifi or Cellular. +* The node has to be declared as BR, so all the other nodes send packets to it, with destination Cloud. +* Dynamically multiple nodes can be BR, each of them having different priorities levels (Normal, High or Low) + * The BR with the smallest routing cost is chosen. + * If multiple BR have the same routing cost, the priority level is used. -- all the nodes within the Pymesh will create a random IPv6 unicast address with this prefix. +## Border Router using CLI -- if a node sends data to an IPv6 which is external (like `1:2:3::4`), this UDP datagram will be routed to the BR. +As explained in [Pymesh CLI - Border Router section](pymesh/lib-cli/#border-router-specific), using commands `br` and `brs`, a simple testing scenario can be easily implemented. -- BR will receive the UDP datagrams for external with an appended header, which contains: - - MAGIC byte: `0xBB` - - IPv6 destination as bytearray (16 bytes) - - port destination as 2 bytes (1-65535 values). -- the IPv6 destination is important so BR could actually route (forward) the UDP datagram content to the right interface (Wifi/BLE/cellular). - -After this script is executed, some example of testing: - -- send data to the cloud - - `eid_socket.sendto("01234567890123456789", ("1::2", 1235))` - -- send data to the EID ipv6 of another Node inside Pymesh - - `eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:4623:91c8:64b2:d9ec", 1235))` - -- send data to the Leader - - `eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:0:ff:fe00:fc00", 1235))` - -- send data to the RLOC of another Node inside Pymesh - - `eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:0:ff:fe00:6800", 1235))` - - - -## Border Router example - -- Source: [https://github.com/pycom/pycom-libraries/blob/master/lib/lora_mesh/main_border_router.py](https://github.com/pycom/pycom-libraries/blob/master/lib/lora_mesh/main_border_router.py) -- `Loramesh` micropython library is available at [https://github.com/pycom/pycom-libraries/blob/master/lib/lora\_mesh/loramesh.py](https://github.com/pycom/pycom-libraries/blob/master/lib/lora_mesh/loramesh.py). - -```python - -from network import LoRa -import ubinascii -from loramesh import Loramesh -import pycom -import time -import socket -import struct - -BORDER_ROUTER_HEADER_FORMAT = '!BHHHHHHHHH' -BORDER_ROUTER_MAGIC_BYTE = 0xBB - -pycom.wifi_on_boot(False) -pycom.heartbeat(False) -border_router_net = "2001:dead:beef:cafe::/64" - -lora = LoRa(mode=LoRa.LORA, region=LoRa.EU868, bandwidth=LoRa.BW_125KHZ, sf=7) -#mesh = lora.Mesh() -MAC = str(ubinascii.hexlify(lora.mac()))[2:-1] -print("LoRa MAC: %s"%MAC) - -mesh = Loramesh(lora) - -# waiting until it connected to Mesh network -while True: - mesh.led_state() - print("%d: State %s, single %s"%(time.time(), mesh.cli('state'), mesh.cli('singleton'))) - time.sleep(2) - if not mesh.is_connected(): - continue - - print('Neighbors found: %s'%mesh.neighbors()) - print('IPs: %s'%mesh.mesh.ipaddr()) - break - -sockets = [] -#add BR for a certain MAC address -# or in a certain condition (Wifi/BLE/cellular connection to Internet) -if int(MAC, 16) == 8: - if len(mesh.mesh.border_router()) == 0: - mesh.mesh.border_router(border_router_net, 0) - print("Set Border Router with prefix %s"%border_router_net) - - # create UDP socket for Border Router interface - br_socket = socket.socket(socket.AF_LORA, socket.SOCK_RAW) - myport = 1234 - print("Please wait until BR gets propagated to the Leader ...") - while True: - ip = mesh.ip(border_router_net) - if ip is not None: - br_socket.bind((ip, myport)) - print("Created socked for (%s, %d)"%(ip, myport)) - break - time.sleep(1) - sockets.append(br_socket) - -eid_socket = socket.socket(socket.AF_LORA, socket.SOCK_RAW) -myport = 1235 -#ip = mesh.ip()# ipv6 EID -ip = "::" # in this case, socket can be bind just on a port, like: eid_socket.bind(myport) -if ip is not None: - eid_socket.bind((ip, myport)) - #eid_socket.bind(myport) - print("Created socked for (%s, %d)"%(ip, myport)) -sockets.append(eid_socket) - -# handler responsible for receiving packets on UDP Pymesh socket -def receive_pack(sockets): - # listen for incoming packets on all sockets - while True: - is_new_data = False - for sock in sockets: - # check if data received on all sockets - rcv_data, rcv_addr = sock.recvfrom(128) - if len(rcv_data) > 0: - is_new_data = True - break # out of for sock - if not is_new_data: - break # out of while True - rcv_ip = rcv_addr[0] - rcv_port = rcv_addr[1] - print('Incoming %d bytes from %s (port %d)'%(len(rcv_data), rcv_ip, rcv_port)) - - #check if data is for the external of the Pymesh (for The Cloud) - if rcv_data[0] == BORDER_ROUTER_MAGIC_BYTE and len(rcv_data) >= struct.calcsize(BORDER_ROUTER_HEADER_FORMAT): - br_header = struct.unpack(BORDER_ROUTER_HEADER_FORMAT, rcv_data) - print("IP dest: %x:%x:%x:%x:%x:%x:%x:%x (port %d)"%( - br_header[1],br_header[2],br_header[3],br_header[4], - br_header[5],br_header[6],br_header[7],br_header[8], br_header[9])) - rcv_data = rcv_data[struct.calcsize(BORDER_ROUTER_HEADER_FORMAT):] - - print(rcv_data) - - # send some ACK - if not rcv_data.startswith("ACK"): - print("Sent ACK back") - sock.sendto('ACK', (rcv_ip, rcv_port)) - -mesh.mesh.rx_cb(receive_pack, sockets) - -print('IPs: %s'%mesh.mesh.ipaddr()) -print('BRs: %s'%mesh.mesh.border_router()) - -""" -Example of usage: -* send data to the cloud -eid_socket.sendto("01234567890123456789", ("1::2", 1235)) -* send data to the EID ip of another Node inside Pymesh -eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:4623:91c8:64b2:d9ec", 1235)) -* send data to the Leader -eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:0:ff:fe00:fc00", 1235)) -* send data to the RLOC of another Node inside Pymesh -eid_socket.sendto("0123456789", ("fdde:ad00:beef:0:0:ff:fe00:6800", 1235)) -""" +## Border Router using Pymesh API ``` +def new_br_message_cb(rcv_ip, rcv_port, rcv_data, dest_ip, dest_port): + ''' callback triggered when a new packet arrived for the current Border Router, + having destination an IP which is external from Mesh ''' + print('Incoming %d bytes from %s (port %d), to external IPv6 %s (port %d)' % + (len(rcv_data), rcv_ip, rcv_port, dest_ip, dest_port)) + print(rcv_data) + + # user code to be inserted, to send packet to the designated Mesh-external interface + # ... + return + +add current node as Border Router, with a priority and a message handler callback +pymesh.br_set(PymeshConfig.BR_PRIORITY_NORM, new_br_message_cb) + +remove Border Router function from current node +pymesh.br_remove() + +send data for Mesh-external, basically to the BR +ip = "1:2:3::4" +port = 5555 +pymesh.send_mess_external(ip, port, "Hello World") + +``` + +## Technical deep dive + +Internally, the Border Router mechanism is implemented with the following steps: + +* declare the BR network address prefix, like `2001:dead:beef:cafe::/64` +* this piece of information is sent to the `Leader` and the dataset will increase version (it will be updated) +* the dataset is propagated to all Pymesh nodes +* all the nodes will be assigned a random IPv6 unicast address with this network prefix (like `2001:dead:beef:cafe:1234:5678:9ABC:DEF0`) +* if a node sends data to an IPv6 which is external (it doesn't have prefix from Pymesh already existent networks, like `1:2:3::4`), this UDP datagram will be routed to the BR + * this UDP packet will have as source the random IPv6 from BR network address +* BR will receive the UDP datagrams for external with an appended header, which contains: + * MAGIC byte: `0xBB` + * IPv6 destination as bytearray (16 bytes) + * port destination as 2 bytes (1-65535 values). +* the IPv6 destination is important so BR could actually route (forward) the UDP datagram content to the right interface (Wifi/BLE/cellular). diff --git a/content/pymesh/simple-example.md b/content/pymesh/simple-example.md new file mode 100644 index 0000000..b83a3a9 --- /dev/null +++ b/content/pymesh/simple-example.md @@ -0,0 +1,146 @@ +--- +title: "Pymesh Library" +aliases: + - pymesh/simple-example +--- + +## What is Pymesh micropython library? + +Pymesh micropython library is a set of scripts included (as frozen) in the Pymesh firmware binary release (not yet released). + +[Open-source on github](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh) + +It allows users to use Pymesh in a few lines of code, as shown in the following code snippet. + +```python + +import pycom +import time + +try: + from pymesh_config import PymeshConfig +except: + from _pymesh_config import PymeshConfig + +try: + from pymesh import Pymesh +except: + from _pymesh import Pymesh + +def new_message_cb(rcv_ip, rcv_port, rcv_data): + ''' callback triggered when a new packet arrived ''' + print('Incoming %d bytes from %s (port %d):' % + (len(rcv_data), rcv_ip, rcv_port)) + print(rcv_data) + + # user code to be inserted, to send packet to the designated Mesh-external interface + for _ in range(3): + pycom.rgbled(0x888888) + time.sleep(.2) + pycom.rgbled(0) + time.sleep(.1) + return + + +pycom.heartbeat(False) + +# read config file, or set default values +pymesh_config = PymeshConfig.read_config() + +#initialize Pymesh +pymesh = Pymesh(pymesh_config, new_message_cb) + +mac = pymesh.mac() +# based on LoRa MAC address, some nodes could be forced to be +# sleep-end-devices (always Child) or to have increased Leader priority +# if mac > 10: +# pymesh.end_device(True) +# elif mac == 5: +# pymesh.leader_priority(255) + +while not pymesh.is_connected(): + print(pymesh.status_str()) + time.sleep(3) + +# send message to the Node having MAC address 5 +pymesh.send_mess(5, "Hello World") + +# def new_br_message_cb(rcv_ip, rcv_port, rcv_data, dest_ip, dest_port): +# ''' callback triggered when a new packet arrived for the current Border Router, +# having destination an IP which is external from Mesh ''' +# print('Incoming %d bytes from %s (port %d), to external IPv6 %s (port %d)' % +# (len(rcv_data), rcv_ip, rcv_port, dest_ip, dest_port)) +# print(rcv_data) + +# # user code to be inserted, to send packet to the designated Mesh-external interface +# # ... +# return + +# add current node as Border Router, with a priority and a message handler callback +# pymesh.br_set(PymeshConfig.BR_PRIORITY_NORM, new_br_message_cb) + +# remove Border Router function from current node +#pymesh.br_remove() + +# send data for Mesh-external, basically to the BR +# ip = "1:2:3::4" +# port = 5555 +# pymesh.send_mess_external(ip, port, "Hello World") + +print("done Pymesh init, forever loop, exit/stop with Ctrl+C multiple times") +# set BR with callback + +while True: + time.sleep(3) + +``` + +## Output + +An example of output is bellow. + +At any point pressing `Enter` will try to execute CLI commands, more details are presented in [Pymesh library CLI](/pymesh/lib-cli). + +``` + +rst:0x7 (TG0WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) +configsip: 0, SPIWP:0xee +clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 +mode:DIO, clock div:1 +load:0x3fff8020,len:8 +load:0x3fff8028,len:2164 +load:0x4009fa00,len:19944 +entry 0x400a05e8 +MAC ok 11 +Settings: {'ble_api': True, 'MAC': 11, 'autostart': True, 'debug': 5, 'LoRa': {'sf': 7, 'region': 5, 'freq': 863000000,'bandwidth': 2}, 'ble_name_prefix': 'PyGo ', 'Pymesh': {'key': '112233'}} +LoRa MAC: 0xb, short: 11 +OT stack: 6412 +Statistics file ok?! +============ MESH THREAD >>>>>>>>>>> +3: MAC 0xb(11), State Detached, Single True +['fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +>>>>>>>>>>> DONE MESH THREAD ============ 40 + +BLE name: PyGo 11 +Role 3, Single False, IPv6: ['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +>Role 3, Single False, IPv6: ['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +Role 3, Single False, IPv6: ['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +Role 3, Single False, IPv6: ['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +============ MESH THREAD >>>>>>>>>>> +13: MAC 0xb(11), State Router, Single False +['fdde:ad00:beef:0:0:ff:fe00:c400', 'fdde:ad00:beef:0:0:0:0:b', 'fdde:ad00:beef:0:2c1a:56c0:ebbd:d46', 'fe80:0:0:0:200:0:0:b'] +Leader: mac 0x4, rloc 0xb800, net: 0x591354fb +Socket created on port 1234 +Neighbors Table: [(mac=6, role=3, rloc16=28672, rssi=-67, age=0), (mac=4, role=3, rloc16=47104, rssi=-97, age=4)] +Neighbors: Router MAC 0xB, rloc16 0xc400, coord (51.45, 5.45313), neigh_num 2, ts 14 +MAC 0x6, rloc16 0x7000, role 3, rssi -67, age 0 +MAC 0x4, rloc16 0xb800, role 3, rssi -97, age 4 + +>>>>>>>>>>> DONE MESH THREAD ============ 76 + +Send message to 5, typ 0, load Hello World +Added new message for 5: Hello World +Send message b'\x00\x00\x00\x00\x00\x00\x00\x0b09\x00\x0bHello World' +Send pack: 0x10 to IP fdde:ad00:beef:0::5 +done Pymesh init, forever loop, exit/stop with Ctrl+C multiple times +``` diff --git a/static/gitbook/assets/pymesh/pymesh_firmware_update.png b/static/gitbook/assets/pymesh/pymesh_firmware_update.png new file mode 100644 index 0000000000000000000000000000000000000000..71a02a3216a6966e8874cc833048995d77e3f602 GIT binary patch literal 119497 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�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 literal 0 HcmV?d00001 From 12edd447adcc8994eb1225bd84dfcbd18e85d201 Mon Sep 17 00:00:00 2001 From: Catalin Ioana Date: Thu, 31 Oct 2019 18:15:20 +0200 Subject: [PATCH 4/6] Pymesh corrected documentation --- content/pymesh/_index.md | 2 +- content/pymesh/lib-api.md | 10 +++++----- content/pymesh/lib-ble-rpc.md | 10 +++++----- content/pymesh/lib-cli.md | 28 +++++++++++++++------------- content/pymesh/licence.md | 10 +++++----- content/pymesh/pymesh-br.md | 30 +++++++++++++++--------------- content/pymesh/simple-example.md | 8 ++++---- 7 files changed, 50 insertions(+), 48 deletions(-) diff --git a/content/pymesh/_index.md b/content/pymesh/_index.md index 7ff0156..ad32a12 100644 --- a/content/pymesh/_index.md +++ b/content/pymesh/_index.md @@ -20,7 +20,7 @@ _**Note: For obtaining the Pymesh firmware please follow the steps from [Pymesh ## What does Pymesh offer you? -* Ad-hoc communication network over raw-LoRa radio +* An ad-hoc communication network over raw-LoRa radio * Multi-gateway (Border Routers) Nodes that connect Mesh-internal data with the Cloud * Each Node uses LBS - Listen Before Talk * Security on multiple levels diff --git a/content/pymesh/lib-api.md b/content/pymesh/lib-api.md index 06c191a..7d42622 100644 --- a/content/pymesh/lib-api.md +++ b/content/pymesh/lib-api.md @@ -8,9 +8,9 @@ aliases: This Micropython library is included as frozen scripts in the Pymesh firmware release. -Code is open-sourced in [pycom-libraries repository](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh). +The code is open-sourced in [pycom-libraries repository](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh). -It is easily customisable and contributions are highly recommend using [Github PRs](https://github.com/pycom/pycom-libraries/pulls). +It is easily customisable and contributions are welcome using [Github PRs](https://github.com/pycom/pycom-libraries/pulls). ### Main features @@ -40,7 +40,7 @@ A simple example of usage is in the [main.py](https://github.com/pycom/pycom-lib ## Specifications -It can be easily customised, by modifying any file from [/lib folder](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh/lib) and flashing it to the board. Automatically the uploaded file will be executed instead of the _frozen_ one, already embedded into the binary firmware. +It can be easily customised, by modifying any file from [/lib folder](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh/lib) and flashing it to the board. The uploaded file will automatically be executed instead of the _frozen_ one, which is already embedded into the binary firmware. ### Structure @@ -55,9 +55,9 @@ It can be easily customised, by modifying any file from [/lib folder](https://gi * setting BLE server * auxiliary files: * `pymesh-debug.py` - * debugging on levels, allowing dynamically changing debug level + * debugging on multiple levels, allowing dynamically changing the current debug level * `pymesh-config.py` - * reading/writing Pymesh configuration file + * reading/writing the Pymesh configuration file * `gps.py` * maintaining location coordinates, as an extension `Pytrack` GPS can be used * Mesh internals diff --git a/content/pymesh/lib-ble-rpc.md b/content/pymesh/lib-ble-rpc.md index 14f9940..faa9a1a 100644 --- a/content/pymesh/lib-ble-rpc.md +++ b/content/pymesh/lib-ble-rpc.md @@ -28,11 +28,11 @@ This sets the location coordinates. #### get_mesh_mac_list() -This returns list of distinct MAC address that are in this mesh network, for example `[mac1, mac2, mac 3]`.` +This returns the list of distinct MAC address that are within this mesh network, for example `[mac1, mac2, mac 3]`.` #### get_mesh_pairs() -This returns list of pairs that is a mesh connection, as shown bellow: +This returns the list of pairs that form a mesh connection, as shown bellow: ``` [ @@ -69,7 +69,7 @@ This returns the node data for a specified mac address, or own data id `mac_id` #### send_message(data) -This sends a message with another node. It return True if there is buffer to store it (to be sent). +This sends a message to another node. It return True if there is a buffer to store it (to be sent onwards). `data` is a dictionary with the following structure: ``` @@ -84,11 +84,11 @@ This sends a message with another node. It return True if there is buffer to sto #### send_message_was_sent(mac, msg_id) -This checks if acknowledge was received for the specified `mac` and `msg_id`. It returns `True` if message was delivered. +This checks if acknowledgement was received from the specified `mac` and `msg_id`. It returns `True` if message was delivered. #### receive_message() -This returns the received messages, in a dictionary with the next structure: +This returns the received messages, in a dictionary with the following structure: ``` { 'b': 'text', diff --git a/content/pymesh/lib-cli.md b/content/pymesh/lib-cli.md index 4fb8371..aa206fe 100644 --- a/content/pymesh/lib-cli.md +++ b/content/pymesh/lib-cli.md @@ -6,9 +6,9 @@ aliases: ## Overview -The Pymesh micropython library is included as frozen in the Pymesh firmware releases. +The Pymesh micropython library is included as a `frozen python script` in the Pymesh firmware releases. -Instead of REPL, a specific Pymesh CLI is interpreting commands and it is recognised, by starting with `>`. +Instead of REPL, a specific Pymesh CLI interprets commands. This is shown by `>`. The CLI is executed on a separate thread inside the Pymesh library. @@ -25,10 +25,10 @@ List of available commands ip - display current IPv6 unicast addresses mac - set or display the current LoRa MAC address self - display all info about current node -mml - display the Mesh Mac List (MAC of all nodes inside this Mesh), also inquires Leader -mp - display the Mesh Pairs (Pairs of all nodes connections), also inquires Leader +mml - display the Mesh Mac List (MAC of all nodes inside this Mesh) +mp - display the Mesh Pairs (pairs of all nodes connections) s - send message -ws - verifies if message sent was acknowledged +ws - verifies if the message sent was acknowledged rm - verifies if any message was received sleep - deep-sleep br - enable/disable or display the current Border Router functionality @@ -75,7 +75,7 @@ deepsleep_init Cleanup code, all Alarms cb should be stopped Going to deepsleep for 10 seconds ``` -This puts the device in deepsleep for designated number of seconds. +This puts the device into deepsleep for a designated number of seconds. ``` >buf @@ -110,20 +110,22 @@ This executes an Openthread CLI command. The list of CLI commands is [here](http >mac 1 ``` -This shows LoRa MAC, this address is used as unique identifier in the Pymesh. Bellow there's a section on how to set MAC specific MAC address (useful for debugging, the MAC could be consecutive small numbers like `0x1`, `0x2`, `...`) +This shows the LoRa MAC or sets it to a known value. This address is used as a unique identifier within the Pymesh. + +This can be useful for debugging and the MAC could be set to consecutive small numbers, such as `0x1`, `0x2`, ... ``` >mml mesh_mac_list [1, 6, 2] ``` -This shows the list of all MAC Nodes attached to Pymesh. It inquires Leader, which centralises this data. +This shows the list of all MAC Nodes attached to Pymesh. It inquires the Leader, which centralises this data. ``` >mp Send pack: 0xF3 to IP fdde:ad00:beef:0:0:ff:fe00:fc00 last_mesh_pairs [[2, 6, -87], [1, 6, -77]] ``` -This shows Mesh Pairs list, with each direct connected nodes (by their MAC address) and the averaged RSSI value. +This shows the Mesh Pairs list. It lists each directly connected node (by their MAC address) and the averaged RSSI value. ``` >mni @@ -143,7 +145,7 @@ True PACK_MESSAGE_ACK received 1945883 ================= ACK RECEIVED :) :) :) ``` -This sends text messages to another Node inside Pymesh. The messaging waits for acknowledgement (ACK message type) from the destination node. +This sends text messages to another Node within the Pymesh. The messaging node waits for acknowledgement (ACK message type) from the destination node. ``` >ws @@ -151,7 +153,7 @@ This sends text messages to another Node inside Pymesh. The messaging waits for ACK? mac 1, id 12345 => 1 True ``` -This shows if a message was acknowledged by the destination Node. +This shows if the message was acknowledged by the destination Node. ``` >rm @@ -197,7 +199,7 @@ BR: [(net='2001:cafe:cafe:cafe::/64', preference=0)] (state 0=Disable, 1=Enable, 2=Display [Default Display])< Border Router state: [(net='2001:cafe:cafe:cafe::/64', preference=0)] ``` -This enables/disables and shows the state of the current node as Border Router. +This enables/disables the Border Router functionality of the current node. It also shows the state of the current node as Border Router. ``` >brs @@ -207,4 +209,4 @@ brs (port destination [Default: 5555])< Send BR message: {'ip': '1:2:3::4', 'b': '', 'port': 5555} ``` -This sends a packet to an IP address external of the Pymesh. This packet will be received by the designated Border Router and it can be further forwarded to another network interface, like: BLE, Wifi, Sigfox or Cellular (Fipy only). +This sends a packet to an external IP address, outside of the Pymesh. The packet will be received by the designated Border Router and it can be further forwarded to another network interface, such as: BLE, Wifi, Sigfox or Cellular (Fipy only). diff --git a/content/pymesh/licence.md b/content/pymesh/licence.md index c2b466a..0707fa0 100644 --- a/content/pymesh/licence.md +++ b/content/pymesh/licence.md @@ -10,15 +10,15 @@ In order to receive access to the Pymesh firmware releases (for Lopy4, Fipy, L01 1. Complete the Pymesh LICENCE PDF document(not yet available), sign it and send us by [this email](mailto:catalin@pycom.io?subject=[Pymesh_LICENCE]). -1. You will receive on email an archive containing the images for all boards. -1. Extract the corresponding image, for example Lopy4.tar.gz, and upload the firmware to your board, using the [Pycom Firmware Update Tool](https://pycom.io/downloads/), like in the following image: +1. You will receive by email an archive containing the images for all boards. +1. Extract the corresponding image, for example Lopy4.tar.gz, and upload the firmware to your board, using the [Pycom Firmware Update Tool](https://pycom.io/downloads/), similar in the following image: Pymesh Firmware Update ## Test Pymesh firmware loading ### Method 1 -The simplest method to check if Pymesh class is successfully installed, just try this code directly in REPL: +The simplest way to check if the Pymesh class has been successfully installed is to try the following code, directly in REPL: ```python >>> from network import LoRa @@ -36,7 +36,7 @@ Q: **I've received an error, such as `(LoadProhibited). Exception was unhandled. A: In some cases, the NVM partition needs to be formatted. For this a format of whole Flash Memory should be performed. -This can be done using the cli version of the Firmware Update Tool, so please navigate where this app was installed (search for pycom-fwtool-cli executable) and execute: +This can be done using the cli version of the `Firmware Update Tool`, so please navigate where the app was installed (search for pycom-fwtool-cli executable) and execute: ``` pycom-fwtool-cli -p erase_all ``` @@ -45,4 +45,4 @@ pycom-fwtool-cli -p erase_all * on Windows `COM10` * on Linux `/dev/ttyACM0` -* on MacOS ``/dev/tty.usbmodemPy8eaa911` +* on MacOS `/dev/tty.usbmodemPy8eaa911` diff --git a/content/pymesh/pymesh-br.md b/content/pymesh/pymesh-br.md index 75fc5dc..202153f 100644 --- a/content/pymesh/pymesh-br.md +++ b/content/pymesh/pymesh-br.md @@ -9,19 +9,19 @@ aliases: ## Overview -The Border Router role, of a Node inside Pymesh, takes the traffic from the Pymesh and forwards it to the Cloud (Pymesh-external). +Any node inside of the Pymesh can take on the role as a Border Router, which takes the traffic from the Pymesh and forwards it to the Cloud (Pymesh-external). Several things must be accomplished: -* The BR node should have connection with the Cloud, using another network interface (than LoRa-Pymesh), for example: BLE, Wifi or Cellular. -* The node has to be declared as BR, so all the other nodes send packets to it, with destination Cloud. -* Dynamically multiple nodes can be BR, each of them having different priorities levels (Normal, High or Low) - * The BR with the smallest routing cost is chosen. - * If multiple BR have the same routing cost, the priority level is used. +* The Border Router node should have connection with the Cloud. This should occur using another network interface (other than LoRa-Pymesh), for example: BLE, Wifi or Cellular. +* The node has to be declared as a Border Router, so that all the other nodes send packets to it. The final destination is the Cloud. +* To add flexibility, at runtime (dynamically), multiple nodes can act as Border Routers. Each of them can have different priority levels (Normal, High or Low). + * The Border Router with the smallest routing cost is selected. + * If multiple Border Routers have the same routing cost, then the priority level is used. ## Border Router using CLI -As explained in [Pymesh CLI - Border Router section](pymesh/lib-cli/#border-router-specific), using commands `br` and `brs`, a simple testing scenario can be easily implemented. +As explained in [Pymesh CLI - Border Router section](pymesh/lib-cli/#border-router-specific), using commands `br` and `brs`, a simple test scenario can be easily implemented. ## Border Router using Pymesh API @@ -54,14 +54,14 @@ pymesh.send_mess_external(ip, port, "Hello World") Internally, the Border Router mechanism is implemented with the following steps: -* declare the BR network address prefix, like `2001:dead:beef:cafe::/64` -* this piece of information is sent to the `Leader` and the dataset will increase version (it will be updated) -* the dataset is propagated to all Pymesh nodes -* all the nodes will be assigned a random IPv6 unicast address with this network prefix (like `2001:dead:beef:cafe:1234:5678:9ABC:DEF0`) -* if a node sends data to an IPv6 which is external (it doesn't have prefix from Pymesh already existent networks, like `1:2:3::4`), this UDP datagram will be routed to the BR - * this UDP packet will have as source the random IPv6 from BR network address -* BR will receive the UDP datagrams for external with an appended header, which contains: +* Declare the Border Router network address prefix, for example `2001:dead:beef:cafe::/64` +* The network address prefix is then sent to the `Leader` and the dataset will increase the version, meaning that it will be updated. +* The dataset is propagated to all Pymesh nodes. +* All the nodes will be assigned a random IPv6 unicast address with this network prefix (for example `2001:dead:beef:cafe:1234:5678:9ABC:DEF0`) +* If a node sends data to an IPv6 which is external (meaning it doesn't have a prefix from already existent networks in Pymesh, for example `1:2:3::4`), then the UDP datagram will be routed to the Border Router + * This UDP packet will have as source the random IPv6 from BR network address +* The Border Router will receive the external UDP datagrams with an appended header, which contains: * MAGIC byte: `0xBB` * IPv6 destination as bytearray (16 bytes) * port destination as 2 bytes (1-65535 values). -* the IPv6 destination is important so BR could actually route (forward) the UDP datagram content to the right interface (Wifi/BLE/cellular). +* The IPv6 destination is important, because it means that the Border Router can route (forward) the UDP datagram content to the correct interface (Wifi/BLE/cellular). diff --git a/content/pymesh/simple-example.md b/content/pymesh/simple-example.md index b83a3a9..b477164 100644 --- a/content/pymesh/simple-example.md +++ b/content/pymesh/simple-example.md @@ -6,11 +6,11 @@ aliases: ## What is Pymesh micropython library? -Pymesh micropython library is a set of scripts included (as frozen) in the Pymesh firmware binary release (not yet released). +The Pymesh Micropython library is a set of frozen scripts in the Pymesh firmware binary release (which has not yet been released). [Open-source on github](https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh) -It allows users to use Pymesh in a few lines of code, as shown in the following code snippet. +It allows users to access Pymesh in a few lines of code, as shown in the following code snippet. ```python @@ -97,9 +97,9 @@ while True: ## Output -An example of output is bellow. +An example of possible output is below. -At any point pressing `Enter` will try to execute CLI commands, more details are presented in [Pymesh library CLI](/pymesh/lib-cli). +At any point pressing `Enter` will result in the attempt to execute CLI commands. More details are found in [Pymesh library CLI](/pymesh/lib-cli). ``` From d0b4f62718533a85916e28ee68d14457d2de59c3 Mon Sep 17 00:00:00 2001 From: Catalin Ioana Date: Fri, 1 Nov 2019 17:14:30 +0200 Subject: [PATCH 5/6] [Pymesh] Added licence file --- content/pymesh/_index.md | 2 +- content/pymesh/lib-ble-rpc.md | 2 +- content/pymesh/licence.md | 2 +- .../pymesh/Pymesh_Licence_Copyright_Notice.pdf | Bin 0 -> 266384 bytes 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 static/gitbook/assets/pymesh/Pymesh_Licence_Copyright_Notice.pdf diff --git a/content/pymesh/_index.md b/content/pymesh/_index.md index ad32a12..d1dda56 100644 --- a/content/pymesh/_index.md +++ b/content/pymesh/_index.md @@ -14,7 +14,7 @@ A Mesh network acts like a net, this means that any node within the network can Mesh networks essentially get rid of gateways, which decentralises the network's infrastructure. This then means that the network becomes flexible, so it can do many wonderful things – such as generate, change and fix itself. The success of the Mesh network is down to its parts, as any node within the network will automatically connect to the best radio-link available. -Pymesh solution works on all of our LoRa supporting development boards, the LoPy4 and FiPy as well as on our OEM modules, L01 and L04. +Pymesh works on all of our LoRa supporting development boards, the LoPy4 and FiPy as well as on our OEM modules, L01 and L04. _**Note: For obtaining the Pymesh firmware please follow the steps from [Pymesh LICENCE page](/pymesh/licence).**_ diff --git a/content/pymesh/lib-ble-rpc.md b/content/pymesh/lib-ble-rpc.md index faa9a1a..0f4c6ae 100644 --- a/content/pymesh/lib-ble-rpc.md +++ b/content/pymesh/lib-ble-rpc.md @@ -44,7 +44,7 @@ This returns the list of pairs that form a mesh connection, as shown bellow: #### get_node_info(mac_id = ' ') -This returns the node data for a specified mac address, or own data id `mac_id` is not specified. Node data is dictionary with the following structure: +This returns the node data for a specified mac address, or own data if `mac_id` is not specified. Node data is dictionary with the following structure: ``` { 'ip': 4c00, # last 2bytes from the ip v6 RLOC16 address diff --git a/content/pymesh/licence.md b/content/pymesh/licence.md index 0707fa0..8203104 100644 --- a/content/pymesh/licence.md +++ b/content/pymesh/licence.md @@ -9,7 +9,7 @@ aliases: In order to receive access to the Pymesh firmware releases (for Lopy4, Fipy, L01 or L04), the next process should be followed: -1. Complete the Pymesh LICENCE PDF document(not yet available), sign it and send us by [this email](mailto:catalin@pycom.io?subject=[Pymesh_LICENCE]). +1. Complete the the Pymesh LICENCE PDF document , sign it and send us by [this email](mailto:catalin@pycom.io?subject=[Pymesh_LICENCE]). 1. You will receive by email an archive containing the images for all boards. 1. Extract the corresponding image, for example Lopy4.tar.gz, and upload the firmware to your board, using the [Pycom Firmware Update Tool](https://pycom.io/downloads/), similar in the following image: Pymesh Firmware Update diff --git a/static/gitbook/assets/pymesh/Pymesh_Licence_Copyright_Notice.pdf b/static/gitbook/assets/pymesh/Pymesh_Licence_Copyright_Notice.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6843a2acd957be473d280493977d89aff60e2812 GIT binary patch literal 266384 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