diff --git a/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_3wirevalve_cover.svg b/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_3wirevalve_cover.svg new file mode 100644 index 00000000..d93642d2 --- /dev/null +++ b/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_3wirevalve_cover.svg @@ -0,0 +1,672 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_connect_power_source.svg b/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_connect_power_source.svg new file mode 100644 index 00000000..050eea1a --- /dev/null +++ b/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_connect_power_source.svg @@ -0,0 +1,491 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_connect_valve.svg b/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_connect_valve.svg new file mode 100644 index 00000000..389960bf --- /dev/null +++ b/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_connect_valve.svg @@ -0,0 +1,854 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_valve_wires.svg b/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_valve_wires.svg new file mode 100644 index 00000000..968a64cb --- /dev/null +++ b/content/tutorials/portenta-h7/ec-ard-3wirevalve/assets/ec_ard_valve_wires.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/tutorials/portenta-h7/ec-ard-3wirevalve/content.md b/content/tutorials/portenta-h7/ec-ard-3wirevalve/content.md new file mode 100644 index 00000000..0a96ac22 --- /dev/null +++ b/content/tutorials/portenta-h7/ec-ard-3wirevalve/content.md @@ -0,0 +1,160 @@ +--- +title: Connecting and Controlling a Motorized Ball Valve +coverImage: assets/ec_ard_3wirevalve_cover.svg +tags: [Edge Control, Motorised Valve, Irrigation] +description: This tutorial will give you an overview of the core features of the board, setup the development environment and introduce the APIs required to program the board. +--- + +# Connecting and Controlling a Motorized Ball Valve + +## Overview + +A ball valve is a form of quarter-turn [valve](https://en.wikipedia.org/wiki/Valve) which uses a hollow, perforated and pivoting ball to control flow of liquids and gasses through it. This tutorial will guide you through connecting the board to a 3 Wire-Valve and writing a sketch that controls the basic operations such as the opening and closing of the valves. + +***Tip : If this is for your first Edge Control project, we recommend you to take a look at the [Getting Started Tutorial](https://www.arduino.cc/pro/tutorials/portenta-h7/ec-ard-gs) to setup the development environment before you proceed.*** + +### You Will Learn + +- How to connect a motorized valve to the Edge Control board +- How to control the valve through basic commands provided by the `Arduino_EdgeControl` library +- How to power the board with an external power supply + +### Required Hardware and Software + +- 1 x [Arduino Edge control board](https://store.arduino.cc/edge-control) +- 1 x [US Solid Motorised Ball Valve (9 - 24 V)](https://ussolid.com/u-s-solid-motorized-ball-valve-1-2-brass-electrical-ball-valve-with-full-port-9-24-v-ac-dc-3-wire-setup.html) (or compatible) +- External power source: 12V battery (LiPo / SLA) or power supply +- 1 x Micro USB cable +- Arduino IDE 1.8.10+ +- 2 x Phoenix connectors 1844646 +- 2 x Jumper cables + +## Instructions + +### 1. Connecting the Valves + +The motorized valve comes with three wires primarily marked as blue, yellow and red. The red and blue cables are for the positive and negative signals and the yellow is for the ground. + +![Schematics of the 3 wire motor](assets/ec_ard_valve_wires.svg) + +You need to ensure that the Phoenix connectors are in place before plugging in the wires to the respective pins. If you havent link + +Connect the red and the blue wire to any of the 8 pairs of `LATCHING OUT` pins. In this example we will use `1N` and `1P` of your Edge Control board. Latches allow you to store the state of the pins based on the previous output. As the valve doesn't come with internal drivers to store the state of the motor, we will use the `Latching_out` pins (instead of `Latching_out_cmd`) that are the ones that include drivers on the Edge Control. + +![Connecting the valves to the Phoenix](assets/ec_ard_connect_valve.svg) + +Connect the yellow wire to the nearby `GND` pin. Ensure that the wires are fastened securely and tightly to the Phoenix connectors so that they make contact with the pins. + +### 2. Opening And Closing the Valves + +Open a new sketch file on the Arduino IDE and name it `ValveControl.ino`. Add the header file `Arduino_EdgeControl.h` to your sketch + +```cpp +#include +``` + +Inside `void setup()` , after enabeling the serial communication, run the initialization routine `EdgeControl.begin()` . This routine is in charge of enabling the default power areas of the board. Then use `Latching.begin()` to configure the expander pins as outputs. + +```cpp +void setup() +{ + Serial.begin(9600); + while(!Serial); + + delay(1000); + + Serial.println("3-Wire Valve Demo"); + + EdgeControl.begin(); + Latching.begin(); + + Serial.println("Starting"); +} + +``` + +Inside the `loop()`you will add the instructions to open and close the valve. `Latching.channelDirection()` is used to control the signal to a particular pin using the parameter `LATCHING_OUT_1` and its direction using the parameters, `POSITIVE` or `NEGATIVE`. Hence, if you want the valve to open you will use the instruction, + +```cpp +Latching.channelDirection(LATCHING_OUT_1, POSITIVE) +``` + +and to close the valve, you need to send a signal in the opposite direction using the command, + +```cpp +Latching.channelDirection(LATCHING_OUT_1, NEGATIVE) +``` + +As it takes a few seconds for the valve to fully open or close, you need to maintain the signal for a set amount of time. Using the command, `Latching.strobe(4500)` you can adjust the duration (milliseconds) of signal passing through a particular pin. + +```cpp +void loop() +{ + Serial.println("Closing"); + Latching.channelDirection(LATCHING_OUT_1, POSITIVE); + Latching.strobe(4500); + delay(2500); + + Serial.println("Opening"); + Latching.channelDirection(LATCHING_OUT_1, NEGATIVE); + Latching.strobe(4500); + delay(2500); +} +``` + +### 3. Connecting To A Power Source + +The valves require a power supply of 9 - 12 V and you can either use a regular power supply or a 3 cell LiPo battery to provide the required voltage. Power sources can be connected to the onboard relay ports of the edge control board. Connect two jumper wires to the **GND** and **B** pins of the **Relay ports** + +![The power pins of the Edge Control](assets/ec_ard_connect_power_source.svg) + +Connect the jumper from the **B** pin to the positive terminal of the Battery and the jumper from the **GND** pin to the negative terminal of the battery + +### 4. Uploading the Sketch + +Connect the board to your computer, upload the `ValveControl.ino` sketch and open the **Serial Monitor**. If all the connections are done right, the valve opens and closes and you should be able to see the status as `Open` or `Close` on the serial monitor + +## Conclusion + +In this tutorial you learned how a 3 wire valve works and the basic operations that the Edge Control board uses to control the valves. With this knowledge you can build irrigation systems which periodically control the valves which can be installed in your fields. + +### Complete Sketch + +```cpp +#include + +void setup() +{ + Serial.begin(9600); + while(!Serial); + + delay(1000); + + Serial.println("3-Wire Valve Demo"); + + EdgeControl.begin(); + Latching.begin(); + + Serial.println("Starting"); +} + +void loop() +{ + Serial.println("Closing"); + Latching.channelDirection(LATCHING_OUT_1, POSITIVE); + Latching.strobe(4500); + delay(2500); + + Serial.println("Opening"); + Latching.channelDirection(LATCHING_OUT_1, NEGATIVE); + Latching.strobe(4500); + delay(2500); +} + +``` + +**Authors:** Ernesto E. Lopez, Lenard George Swamy + +**Reviewed by:** Ernesto E. Lopez [2021-03-18] + +**Last revision:** Lenard George Swamy [2021-04-06] diff --git a/content/tutorials/portenta-h7/ec-ard-gs/content.md b/content/tutorials/portenta-h7/ec-ard-gs/content.md index 996773e4..8b2e0ac5 100644 --- a/content/tutorials/portenta-h7/ec-ard-gs/content.md +++ b/content/tutorials/portenta-h7/ec-ard-gs/content.md @@ -20,13 +20,13 @@ The Edge Control board is a versatile tool that allows agriculturalists to devel - Arduino Edge Control () - Micro USB cable - Arduino IDE 1.8.10+ -- External power source : a 12V LiPo/SLA battery or power supply +- External power source : a 12V SLA battery or 12V power supply - 1x Phoenix connector - 2x Jumper wires ## Instructions -In this getting started tutorial you will set up the Edge Control board and blink an LED. You will first learn to install the core from the Boards Manager. You will write a simple blink sketch using some fundamental APIs provided by the Arduino Edge Control Library. You will need to connect your board to an external power source and therefore have a LiPo battery or a power source with you when running the sketch. +In this getting started tutorial you will set up the Edge Control board and blink an LED. You will first learn to install the core from the Boards Manager. You will write a simple blink sketch using some fundamental APIs provided by the Arduino Edge Control Library. You will need to connect your board to an external power source and therefore have a SLA battery or a power source with you when running the sketch. ### 1. Get to Know the Board @@ -81,7 +81,7 @@ The board is designed to be very low power and for this reason some the electron ![Power rails of the Edge Control board](assets/ec_ard_gs_power_rail.svg) -The Edge Control board uses an I/O expander in order to increase the number of digital control signals. If we want to blink the on-board LED we would need to enable the power of the I/O expander to which the LED is connected to and also enable the power to the 5V DCDC converter. 5V power line is powered by the **battery source** for which you can either use a power supply or a 3 cell LiPo battery to provide the required voltage. +The Edge Control board uses an I/O expander in order to increase the number of digital control signals. If we want to blink the on-board LED we would need to enable the power of the I/O expander to which the LED is connected to and also enable the power to the 5V DCDC converter. 5V power line is powered by the **battery source** for which you can either use a power supply or a SLA battery to provide the required voltage. The `Power` class provides API access to enable the different voltages on the board. In this tutorial we need to enable the 3.3V and 5V power lines using the `enable3V3()` and `enable5V()` functions. diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_add_app.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_add_app.png index 6e321924..79407f45 100644 Binary files a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_add_app.png and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_add_app.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_app.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_app.png index 8cb212ad..38edc6dd 100644 Binary files a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_app.png and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_app.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_app_param.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_app_param.png index 9e735b2e..fdf258e3 100644 Binary files a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_app_param.png and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_app_param.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_click_register.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_click_register.png index f773a3c2..d60b929e 100644 Binary files a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_click_register.png and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_click_register.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_device_overview.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_device_overview.png index 34337e97..9da5d782 100644 Binary files a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_device_overview.png and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_device_overview.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_home.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_home.png index 6689bb5d..671a6b49 100644 Binary files a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_home.png and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_home.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_new_app.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_new_app.png deleted file mode 100644 index 74fb7a26..00000000 Binary files a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_new_app.png and /dev/null differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device.png deleted file mode 100644 index 25e506c4..00000000 Binary files a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device.png and /dev/null differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device_1.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device_1.png new file mode 100644 index 00000000..fa057cd7 Binary files /dev/null and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device_1.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device_2.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device_2.png new file mode 100644 index 00000000..eb4fe571 Binary files /dev/null and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_register_device_2.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_serial.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_serial.png new file mode 100644 index 00000000..7a3f3491 Binary files /dev/null and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_serial.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_standalone.png b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_standalone.png new file mode 100644 index 00000000..f14271d2 Binary files /dev/null and b/content/tutorials/portenta-h7/vs-ard-ttn/assets/vs_ard_ttn_standalone.png differ diff --git a/content/tutorials/portenta-h7/vs-ard-ttn/content.md b/content/tutorials/portenta-h7/vs-ard-ttn/content.md index 7112f741..69f97221 100644 --- a/content/tutorials/portenta-h7/vs-ard-ttn/content.md +++ b/content/tutorials/portenta-h7/vs-ard-ttn/content.md @@ -25,7 +25,23 @@ This tutorial explains how to connect your Portenta H7 to The Things Network (TT - [1x Dipole Pentaband antenna](https://store.arduino.cc/antenna) or a UFL Antenna of the H7 - Arduino [offline](https://www.arduino.cc/en/main/software) IDE or Arduino ([Web Editor](https://create.arduino.cc/) - USB C cable (either USB A to USB C or USB C to USB C) -- An [account](https://account.thethingsnetwork.org/users/login) with The Things Network +- An [account](https://console.cloud.thethings.network/) with The Things Network + +### Updating the LoRa® Module Firmware +To be able to use the LoRa® functionality, we need to first update the firmware on the LoRa® modem. This can be done through Arduino IDE by running a sketch included in the examples from the MKRWAN library. + +1. Connect the Portenta H7 and the Portenta Vision Shield to your computer and open the Arduino IDE. +2. Install/update the **MKRWAN** library from Arduino IDE menu **Tools > Manage Libraries**. Type "MKRWAN" to find the library and click 'Install' or 'Update' if necessary. This library provides all the APIs to communicate with LoRa® and LoRaWAN® networks. +3. Open the **MKRWANFWUpdate_standalone** sketch from the Arduino IDE menu: **File > Examples > MKRWAN**. + +4. Upload the sketch. + + +![Finding the sketch](assets/vs_ard_ttn_standalone.png) + +5. Open the serial monitor and wait for the update to be confirmed. + +![Serial Monitor](assets/vs_ard_ttn_serial.png) ## Connecting to the TTN @@ -33,37 +49,35 @@ The Portenta Vision Shield - LoRa® can be connected to the TTN and can transmit ### 1. Setting up the Environment -Start by pointing your browser to www.thethingsnetwork.org and use the Sign Up button to setup an account. Next, then fill all the required fields to complete a new registration (if you already have a TTN account, skip this step and continue by signing in). +Start by going [here](https://console.cloud.thethings.network/). First choose your region. Next, sign in with your The Things Network account. If you don't have an account, create a new one on the login page. Then fill all the required fields to complete a new registration. ![The Things Network homepage](assets/vs_ard_ttn_home.png) ### 2. Creating an App on TTN -Once you have created an account with TTN, you need to create a TTN [application](https://www.thethingsnetwork.org/docs/applications/). An application provides a way to aggregate data from different devices, and then use these data with other 3rd party integrations. Go to your [console](https://console.thethingsnetwork.org), and click on **Applications** +Once you have created an account with TTN, you need to create a TTN [application](https://www.thethingsnetwork.org/docs/applications/). An application provides a way to aggregate data from different devices, and then use these data with other 3rd party integrations. After signing in, click on **Create an application**, or **Go to applications** if you already have one created. ![Select Applications on the Console](assets/vs_ard_ttn_app.png) -Here you'll have a list of all your applications. Now create your first app by pressing the **add application** button. - -![Finding the add application button](assets/vs_ard_ttn_new_app.png) +Here you'll have a list of all your applications. Now create your first app by pressing the **Create an application** button. You have now to fill only the first two fields: -- The first one is the **ID** of your app: this must be lowercase and without spaces. -- The second one is a **Description** of your app, and there's no restrictions on formatting +- The first one is the **Owner** of your app, it will automatically have you as the owner. +- The second one is the **ID** of your app: this must be lowercase and without spaces. ![Adding a application](assets/vs_ard_ttn_app_param.png) -After completing these two fields, press on the "Add application" button located at the bottom right corner of the page. The dashboard will then show you an overview of the newly created app. +After completing these two fields, press the "Create application" button located at the bottom left corner of the page. The dashboard will then show you an overview of the newly created app. ![Adding the App Parameters](assets/vs_ard_ttn_add_app.png) Let's take a closer look at these sections: -- **Application Overview** and Application EUIS: in order to use this app, you'll need the Application ID and its EUIs. An EUI is a globally unique identifier for networks, gateways applications and devices. The EUIs are used to identify all parts of the LoRaWAN® inside the backend server. -- **Devices**: here you can see and manage all the associated devices (e.g. your Portenta H7 with Vision Shield LoRa®, Arduino MKR WAN 1300 or MKR WAN 1310), or proceed with the registration of new one. +- **Application Overview**: in order to use this app, you'll need the Application ID and a device specific AppKey. An EUI is a globally unique identifier for networks, gateways applications and devices. The EUIs are used to identify all parts of the LoRaWAN inside the backend server. +- **End devices**: here you can see and manage all the associated devices (e.g. your Portenta H7 with Vision Shield LoRa, Arduino MKR WAN 1300 or MKR WAN 1310), or proceed with the registration of a new one. Registering a new device lets you generate an AppEUI and an AppKey. - **Collaborators**: here you can see and manage all the app collaborators. To integrate with other collaborative platforms or to manage access rights to the app with other TTN registered profiles. -- **Access keys**: it's the most sensible information. It is basically the key to gain access to your app, so keep it safe. +- **API keys**: here you can create an API key, it's the most sensible information. It is basically the key to gain access to your app, so keep it safe. ### 3. Configuring the Vision Shield @@ -100,14 +114,19 @@ In order to select the way in which the board is going to connect with TTN (OTA ### 4. Registring the Portenta on TTN -Before your Portenta H7 can start communicating with the TTN you need to [register](https://www.thethingsnetwork.org/docs/devices/registration.html) the board with an application. Go back to the TTN portal and scroll to **Devices** section on your Application dashboard, then click **Register Device**. +Before your Portenta H7 can start communicating with the TTN you need to [register](https://www.thethingsnetwork.org/docs/devices/registration.html) the board with an application. Go back to the TTN portal and scroll to **End devices** section on your Application dashboard, then click **Add end device**. ![Registering a Device](assets/vs_ard_ttn_click_register.png) -On the registration page, fill in **Device ID** and **EUI**. -**Note**: The Device ID must be lowercase and without spaces. The **EUI** should be copied from the Serial Monitor. +On the registration page, first we have to fill in information about our board. Select brand Arduino SA, and Portenta Vision Shield LoRa as the model. Hardware and firmware versions will automatically be set to the newest ones. Then set your preferred region. + +![Entering the device EUI](assets/vs_ard_ttn_register_device_1.png) + +In the second step of registering the device, fill in **End device ID** and **DevEUI**. You can click the generate button next to the AppKey field to generate an app key for this device. Similarly, you can press the button next to the AppEUI field to make it all zeros, or enter your own AppEUI. + +**Note**: The Device ID must be lowercase and without spaces. The **DevEUI** should be copied from the Serial Monitor. -![Entering the device EUI](assets/vs_ard_ttn_register_device.png) +![Second step of registering device](assets/vs_ard_ttn_register_device_2.png) After pressing the Register button, your board will show up on the **Device Overview** page. You can now see all the information needed to complete the Arduino setup. @@ -117,7 +136,7 @@ After pressing the Register button, your board will show up on the **Device Over Once your board has been registered you can send information to TTN. Let's come back to the Serial Monitor and proceed. It will ask for: -- Activation mode (that, in this case, is OTAA as you can see in the screenshot above), +- Activation mode (that, in this case, is OTAA), - The Application EUI - The App Key. @@ -156,4 +175,4 @@ If we are within good range of a gateway, we should also try to move our device **Authors:** Lenard George, Ignacio Herrera **Reviewed by:** Jose Garcia, Linnea Åkerberg [2021-02-02] -**Last revision:** Sebastian Romero [2021-02-05] \ No newline at end of file +**Last revision:** Benjamin Dannegård [2021-05-21] diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_add_app.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_add_app.png index 6e321924..79407f45 100644 Binary files a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_add_app.png and b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_add_app.png differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_app.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_app.png index 8cb212ad..38edc6dd 100644 Binary files a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_app.png and b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_app.png differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_app_param.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_app_param.png index 9e735b2e..fdf258e3 100644 Binary files a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_app_param.png and b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_app_param.png differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_click_register.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_click_register.png index f773a3c2..d60b929e 100644 Binary files a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_click_register.png and b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_click_register.png differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_device_overview.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_device_overview.png index 34337e97..9da5d782 100644 Binary files a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_device_overview.png and b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_device_overview.png differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_home.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_home.png index 6689bb5d..671a6b49 100644 Binary files a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_home.png and b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_home.png differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_new_app.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_new_app.png deleted file mode 100644 index 74fb7a26..00000000 Binary files a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_new_app.png and /dev/null differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device.png deleted file mode 100644 index 25e506c4..00000000 Binary files a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device.png and /dev/null differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device_1.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device_1.png new file mode 100644 index 00000000..fa057cd7 Binary files /dev/null and b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device_1.png differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device_2.png b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device_2.png new file mode 100644 index 00000000..eb4fe571 Binary files /dev/null and b/content/tutorials/portenta-h7/vs-openmv-ttn/assets/vs_ard_ttn_register_device_2.png differ diff --git a/content/tutorials/portenta-h7/vs-openmv-ttn/content.md b/content/tutorials/portenta-h7/vs-openmv-ttn/content.md index c1091490..bc0c0630 100644 --- a/content/tutorials/portenta-h7/vs-openmv-ttn/content.md +++ b/content/tutorials/portenta-h7/vs-openmv-ttn/content.md @@ -26,7 +26,7 @@ This tutorial explains how to connect your Portenta H7 to The Things Network (TT - [OpenMV IDE](https://openmv.io/pages/download) - Arduino IDE 1.8.10+ or Arduino Pro IDE 0.0.4+ or Arduino CLI 0.13.0+ - 1 x USB-C cable (either USB-A to USB-C or USB-C to USB-C) -- An [account on The Things Network](https://account.thethingsnetwork.org/users/login) with The Things Network +- An [account on The Things Network](https://console.cloud.thethings.network/) ## Instructions @@ -34,37 +34,35 @@ The Portenta Vision Shield - LoRa can be connected to the TTN and can transmit d ### 1. Setting up the Environment -Start by pointing your browser to www.thethingsnetwork.org and use the Sign Up button to setup an account. Next, then fill all the required fields to complete a new registration (if you already have a TTN account, skip this step and continue by signing in). +Start by going [here](https://console.cloud.thethings.network/). First choose your region. Next, sign in with your The Things Network account, or create a new one on the login page. ![The Things Network homepage](assets/vs_ard_ttn_home.png) ### 2. Creating an App on TTN -Once you have created an account with TTN, you need to create a TTN [application](https://www.thethingsnetwork.org/docs/applications/). An application provides a way to aggregate data from different devices, and then use these data with other 3rd party integrations. Go to your [console](https://console.thethingsnetwork.org), and click on **Applications** +Once you have created an account with TTN, you need to create a TTN [application](https://www.thethingsnetwork.org/docs/applications/). An application provides a way to aggregate data from different devices, and then use these data with other 3rd party integrations. After signing in, click on **Create an application**, or **Go to applications** if you already have one created. -![Select Applications on the Console](assets/vs_ard_ttn_app.png) +![Select Create an application](assets/vs_ard_ttn_app.png) -Here you'll have a list of all your applications. Now create your first app by pressing the **add application** button. - -![Finding the add application button](assets/vs_ard_ttn_new_app.png) +Here you'll have a list of all your applications. Now create your first app by pressing the **Create an application** button. You have now to fill only the first two fields: -- The first one is the **ID** of your app: this must be lowercase and without spaces. -- The second one is a **Description** of your app, and there's no restrictions on formatting +- The first one is the **Owner** of your app, it will automatically have you as the owner. +- The second one is the **ID** of your app: this must be lowercase and without spaces. ![Adding a application](assets/vs_ard_ttn_app_param.png) -After completing these two fields, press on the "Add application" button located at the bottom right corner of the page. The dashboard will then show you an overview of the newly created app. +After completing these two fields, press the "Create application" button located at the bottom left corner of the page. The dashboard will then show you an overview of the newly created app. ![Adding the App Parameters](assets/vs_ard_ttn_add_app.png) Let's take a closer look at these sections: -- **Application Overview** and Application EUIS: in order to use this app, you'll need the Application ID and its EUIs. An EUI is a globally unique identifier for networks, gateways applications and devices. The EUIs are used to identify all parts of the LoRaWAN inside the backend server. -- **Devices**: here you can see and manage all the associated devices (e.g. your Portenta H7 with Vision Shield LoRa, Arduino MKR WAN 1300 or MKR WAN 1310), or proceed with the registration of new one. +- **Application Overview**: in order to use this app, you'll need the Application ID and a device specific AppKey. An EUI is a globally unique identifier for networks, gateways applications and devices. The EUIs are used to identify all parts of the LoRaWAN inside the backend server. +- **End devices**: here you can see and manage all the associated devices (e.g. your Portenta H7 with Vision Shield LoRa, Arduino MKR WAN 1300 or MKR WAN 1310), or proceed with the registration of a new one. Registering a new device lets you generate an AppEUI and an AppKey. - **Collaborators**: here you can see and manage all the app collaborators. To integrate with other collaborative platforms or to manage access rights to the app with other TTN registered profiles. -- **Access keys**: it's the most sensible information. It is basically the key to gain access to your app, so keep it safe. +- **API keys**: here you can create an API key, it's the most sensible information. It is basically the key to gain access to your app, so keep it safe. ### 3. Updating the Modems Firmware @@ -74,8 +72,7 @@ To be able to use the LoRa functionality, we need to first update the modems fir The code you need to upload and run is from the **MKRWAN** library, and its name is **MKRWANFWUpdate_standalone**. With the Portenta M7 selected, upload the **MKRWANFWUpdate_standalone** sketch. -//REPLACE -![Upload code to IDE, highlight MKRWANFWUpdate_standalone example](assets/vs_mp_select_example.png) +![Upload code to IDE](assets/vs_mp_select_example.png) After uploading the sketch, open the serial monitor to confirm that the firmware has been updated. If the upload was successful it will print the progress in the serial monitor. @@ -139,14 +136,24 @@ In order to select the way in which the board is going to connect with TTN (OTAA ### 5. Registering the Portenta on TTN -Before your Portenta H7 can start communicating with the TTN you need to [register](https://www.thethingsnetwork.org/docs/devices/registration.html) the board with an application. Go back to the TTN portal and scroll to **Devices** section on your Application dashboard, then click **Register Device**. +Before your Portenta H7 can start communicating with the TTN you need to [register](https://www.thethingsnetwork.org/docs/devices/registration.html) the board with an application. Go back to the TTN portal and scroll to **End devices** section on your Application dashboard, then click **Add end device**. ![Registering a Device](assets/vs_ard_ttn_click_register.png) -On the registration page, fill in **Device ID** and **EUI**. -**Note**: The Device ID must be lowercase and without spaces. The **EUI** should be copied from the Serial Monitor. +On the registration page, first we have to fill in information about our board. Select brand Arduino SA, and Portenta Vision Shield LoRa as the model. Hardware and firmware versions will automatically be set the newest ones. Then set your preferred region. + +![First step of registering device](assets/vs_ard_ttn_register_device_1.png) + +In the second step of registering the device, fill in **End device ID** and **EUI**. You can click the generate button next to the AppKey field to generate an app key for this device. Similarly, you can press the button next to the AppEUI field to make it all zeros, or enter your own AppEUI. + +**Note**: The Device ID must be lowercase and without spaces. The **DevEUI** can be copied from the terminal in OpenMV. You can run the following script to obtain it. + +```py +from lora import * +print("Device EUI:", Lora().get_device_eui()) +``` -![Entering the device EUI](assets/vs_ard_ttn_register_device.png) +![Second step of registering device](assets/vs_ard_ttn_register_device_2.png) After pressing the Register button, your board will show up on the **Device Overview** page. You can now see all the information needed to complete the Arduino setup. diff --git a/scripts/validation/package-lock.json b/scripts/validation/package-lock.json index 63d69edf..12051ca4 100644 --- a/scripts/validation/package-lock.json +++ b/scripts/validation/package-lock.json @@ -1,8 +1,513 @@ { "name": "validate", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "validate", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "html-entities": "^2.1.0", + "jsonschema": "^1.2.6", + "marked": "^2.0.0", + "node-html-parser": "^2.1.0", + "path": "^0.12.7", + "title-case": "^3.0.3" + + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.1.0.tgz", + "integrity": "sha512-u+OHVGMH5P1HlaTFp3M4HolRnWepgx5rAnYBo+7/TrBZahuJjgQ4TMv2GjQ4IouGDzkgXYeOI/NQuF95VOUOsQ==" + }, + + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-relative-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-3.0.0.tgz", + "integrity": "sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==", + "dev": true, + "dependencies": { + "is-absolute-url": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "dependencies": { + "punycode": "2.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + + "node_modules/jsonschema": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.6.tgz", + "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==", + "engines": { + "node": "*" + } + }, + + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/link-check": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/link-check/-/link-check-4.5.4.tgz", + "integrity": "sha512-VdjiYrIBNHtqH7NEvIlF/4i0V9xQWkoBry+65DtmmyKyD5qBZ2U9fCJYx75SI5Ms4ILJzGlNNojPKbPMpg5Spg==", + "dev": true, + "dependencies": { + "is-relative-url": "^3.0.0", + "isemail": "^3.2.0", + "ms": "^2.1.2", + "request": "^2.88.2" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/markdown-link-check": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.8.6.tgz", + "integrity": "sha512-GWzd54hNol2Zwf6fFEhUYqi9wbib1BMdcphvGCZqhinaAKhiILDaQkX7sn2u9GMoItmZ1jQK0f8wULOK/M+M4w==", + "dev": true, + "dependencies": { + "async": "^3.2.0", + "chalk": "^4.1.0", + "commander": "^6.2.0", + "link-check": "^4.5.4", + "lodash": "^4.17.20", + "markdown-link-extractor": "^1.2.6", + "progress": "^2.0.3", + "request": "^2.88.2" + }, + "bin": { + "markdown-link-check": "markdown-link-check" + } + }, + "node_modules/markdown-link-extractor": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/markdown-link-extractor/-/markdown-link-extractor-1.2.6.tgz", + "integrity": "sha512-WDiwWTzR/zk0n0As7q1KCB1Jd/T7nJ7IEr6E1QKZR1Agd/xRmB0FjM2IrtC7IZ1ZwxflBE0aLe4pkX8d+rzV8w==", + "dev": true, + "dependencies": { + "marked": "^1.1.1" + } + }, + "node_modules/markdown-link-extractor/node_modules/marked": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz", + "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 8.16.2" + } + }, + + "node_modules/marked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.0.tgz", + "integrity": "sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q==", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 8.16.2" + } + }, + + "node_modules/mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "dependencies": { + "mime-db": "1.46.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + + "node_modules/node-html-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-2.1.0.tgz", + "integrity": "sha512-kbCNfqjrwHAbG+mevL8aqjwVtF0Qv66XurWHoGLOc5G9rPR1L3k602jfeczAUUBldLNnCrdsDmO5G5nqAoMW+g==", + "dependencies": { + "he": "1.2.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + + "node_modules/title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + + "node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + }, + + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + + } + }, "dependencies": { "ajv": { "version": "6.12.6",