Skip to content

Commit

Permalink
Upload prepared Example
Browse files Browse the repository at this point in the history
  • Loading branch information
bergmanu committed Oct 25, 2021
0 parents commit c168199
Show file tree
Hide file tree
Showing 53 changed files with 1,075 additions and 0 deletions.
26 changes: 26 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# **Legal information**

## **Use of application examples**

Application examples illustrate the solution of automation tasks through an interaction of several components in the form of text, graphics and/or software modules. The application examples are a free service by Siemens AG and/or a subsidiary of Siemens AG (“Siemens”). They are non-binding and make no claim to completeness or functionality regarding configuration and equipment. The application examples merely offer help with typical tasks; they do not constitute customer-specific solutions. You yourself are responsible for the proper and safe operation of the products in accordance with applicable regulations and must also check the function of the respective application example and customize it for your system.

Any change to the application examples is your responsibility. The application examples are not required to undergo the customary tests and quality inspections of a chargeable product; they may have functional and performance defects as well as errors. It is your responsibility to use them in such a manner that any malfunctions that may occur do not result in property damage or injury to persons. Siemens reserves the right to make changes to the application examples at any time without notice. The application examples of this repository are licensed under the MIT License (see below).

## MIT License

Copyright 2021 Siemens AG

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

## **Security information**

Siemens provides products and solutions with industrial security functions that support the secure operation of plants, systems, machines and networks. In order to protect plants, systems, machines and networks against cyber threats, it is necessary to implement – and continuously maintain – a holistic, state-of-the-art industrial security concept. Siemens’ products and solutions constitute one element of such a concept. Customers are responsible for preventing unauthorized access to their plants, systems, machines and networks. Such systems, machines and components should only be connected to an enterprise network or the Internet if and to the extent such a connection is necessary and only when appropriate security measures (e.g. firewalls and/or network segmentation) are in place.
For additional information on industrial security measures that may be implemented, please visit [https://www.siemens.com/industrialsecurity](https://www.siemens.com/industrialsecurity).

Siemens’ products and solutions undergo continuous development to make them more secure. Siemens strongly recommends that product updates are applied as soon as they are available and that the latest product versions are used. Use of product versions that are no longer supported, and failure to apply the latest updates may increase customer’s exposure to cyber threats.

To stay informed about product updates, subscribe to the Siemens Industrial Security RSS Feed at: [https://www.siemens.com/industrialsecurity](https://www.siemens.com/industrialsecurity).
69 changes: 69 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# **IOT-Data-Collector**

- [**IOT-Data-Collector**](#iot-data-collector)
- [**Overview**](#overview)
- [**Used Components**](#used-components)
- [**Goal**](#goal)
- [**Installation and configuration**](#installation-and-configuration)
- [**Related Links**](#related-links)
- [**Contribution**](#contribution)
- [**Licence and Legal Information**](#licence-and-legal-information)

## **Overview**

This application example shows three different options that enable the IOT2050 user to read data from a S7-PLC using Node-RED. The data exchange between a S7-1500 or a S7-1200 and the IOT2050 is carried out using the following protocols:

- S7 Communication
- Modbus TCP
- OPC UA

In addition to collecting data, the example also shows, how this data can be stored in a SQL database. To avoid the loss of data in case the connection to the database is interrupted, 3600 values are stored in a ring buffer on the IOT and are immediately sent to the database whenever the connection is reestablished.

![Figure 1-1 Overview](docs/graphics/1-1-overview.png)

### **Used Components**

This Example was created using the following Software:

- **On Windows:**
- TIA Portal V16 or V17
- **On Ubuntu:**
- Firefox Quantum for Ubuntu canonical - 1.0
- MariaDB
- Node-Red

The Tests were executed on the following Hardware:

- SIMATIC IOT 2050
- SIMATIC S7-1500

### **Goal**

After working through the following documents, you will know how to:

- Use different protocols to read values from a S7-1200 or S7-1500 PLC
- Store data in a SQL database

### **Installation and configuration**

Use the following documents for the configuration of the IOT2050 and S7-1500:

- [Configuration of the TIA Project](docs/README_TIAPROJECT.md)
- [Setting up of the IOT2050](docs/README_IOT2050SETUP.md)
- [Configuration of the Node-Red Flow](docs/README_NODERED_FLOW)

## **Related Links**

||Topic|
|-|-|
|1|SIMATIC IOT2050 forum: [https://support.industry.siemens.com/tf/ww/en/threads/309](https://support.industry.siemens.com/tf/ww/en/threads/309)|
|2|SIMATIC IOT2050 Getting Started: [https://support.industry.siemens.com/tf/ww/en/posts/238945/](https://support.industry.siemens.com/tf/ww/en/posts/238945/)|
|3|Operating Instructions: [https://support.industry.siemens.com/cs/ww/en/view/109779016](https://support.industry.siemens.com/cs/ww/en/view/109779016)|

## **Contribution**

Thanks for your interest in contributing. Anybody is free to report bugs, unclear documenation, and other problems regarding this repository in the Issues section or, even better, is free to propose any changes to this repository using Merge Requests.

## **Licence and Legal Information**

Please read the [Legal information](LICENSE.md).
57 changes: 57 additions & 0 deletions docs/README_IOT2050SETUP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# **IOT2050 Setup**

- [**IOT2050 Setup**](#iot2050-setup)
- [**Prepare the IOT2050**](#prepare-the-iot2050)
- [**MySQL Server via MariaDB**](#mysql-server-via-mariadb)
- [**Create Database, Datatable and User in MySQL**](#create-database-datatable-and-user-in-mysql)

## **Prepare the IOT2050**

Follow [SIMATIC_IOT2050_Setting_up.md](https://github.com/uwedaeumler/IOT2050-SmartFarming-Application/blob/main/docs/SIMATIC_IOT2050_setting_up.md) for the following steps:

- Installing the SD-Card Example Image (in this example the image V1.1.1 was used)
- First commissioning of the SIMATIC IOT2050: Remote access with Putty SSH Connection
- Working internet connection on the IOT2050

## **MySQL Server via MariaDB**

As already described in the Readme-File, the collected data is stored in a MySQL database. You can have the MySQL Server running on the IOT2050 or on any other machine. In this example MariaDB is used. The following steps describe how to install MariaDB using the apt package manager (a network connection is required):

|No.|Action|
|:-:|-|
|1.|Open a valid serial Putty connection and login as root|
|2.|Update the packages index by using the following command:|
||$ *sudo apt update*|
|3.|Install MariaDB after the package list is updated:|
||$ *sudo apt install mariadb-server*|
|4.|After the successful installation the MariaDB service will start automatically. You can verify it by using:|
||$ *sudo systemctl status mariadb*|
||![mariadb active](graphics/3-10-MariaDB-active.png)|
||(You can end a command by the combination CTRL+ C)|

## **Create Database, Datatable and User in MySQL**

|No.|Action|
|:-:|-|
|1.|Open a valid serial Putty connection and login as root|
|2.|Use the command $ *sudo mysql -u root* to enter the MariaDB client shell|
||![6-1 access client shell](graphics/6-1-access-mariadb-client-shell.png)|
|3.|Create a new Database named 'IOTDatabase' with the command $ *create database IOTDatabase;*|
||![6-2 create database](graphics/6-2-create-database.png)|
|4.|Access a list of existing databases by typing the command $ *show databases;*|
||![6-3 show databases](graphics/6-3-show-databases.png)|
|5.|To create a new MariaDB user ('iotuser'), type the following command: $ *create user 'iotuser'@localhost identified by 'password';* (choose a secure password of your choice)|
||![6-4 create new user](graphics/6-5-show-users.png)|
|6.|After you created 'iotuser', you can check its status by the command $ *select user from mysql.user;*|
||![6-5 show users](graphics/6-5-show-users.png)|
|7.|To grant all privileges to 'iotuser' use the command $ *grant all privileges on \*.\* to 'iotuser'@localhost identified by 'password';*. Use $ *flush privileges;* to refresh the privileges.|
||![6-6 privileges](graphics/6-6-grant-and-flush-privileges.png)|
|8.|Verify 'iotuser' has the right permissions by using the following statement: $ *show grants for 'iotuser'@localhost;*|
||![6-7 show privileges](graphics/6-7-show-privileges.png)|
|9.|Select the IOTDatabase: $ *use IOTDatabase;*|
||![6-8 select database](graphics/6-8-select-database.png)|
|10.|Create a new table using the following command: $ *CREATE TABLE IOTDatatable (source TEXT, value_bool INT, value_real FLOAT, value_int FLOAT, value_time INT);*|
||![6-9 create table](graphics/6-9-create-table.png)|
||(You can exit the MariaDB client shell by the combination *CTRL+ C*)|

The next step is to set up the Node-Red flow: [README_NODERED_FLOW](README_NODERED_FLOW.md)
76 changes: 76 additions & 0 deletions docs/README_NODERED_FLOW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# **Node-Red Flow**

- [**Node-Red Flow**](#node-red-flow)
- [**Overview**](#overview)
- [**Node-Red**](#node-red)
- [**Required packages**](#required-packages)
- [**Import Node-Red Flow**](#import-node-red-flow)
- [**Configuration of the Node-Red Flow**](#configuration-of-the-node-red-flow)
- [**Success Control**](#success-control)

## **Overview**

The following figure shows the complete Node-RED flow needed to read data from three plc’s using S7 communication, Modbus TCP and OPC UA. The flow also contains the logic needed to buffer the data and store it in a database.

![Flow overview](graphics/4-1-flow-overview.png)

The values are read from three different PLC’s. Every data set is given a unique ID to identify the data source, be able to distinguish the values when the average is calaculated and when the data is stored in the database.

## **Node-Red**

On the Example Image version 1.1.1 (used in this manual) node-Red is already preinstalled and autostart is enabled. To access it, open a browser on your PC connected to the IOT2050 and open the URL `http://<IP of the IOT2050>:1880/`.

## **Required packages**

For the application some packages are required:

- node-red-contrib-s7 (V 3.0.0)
- node-red-contrib-modbus (V 5.13.3)
- node-red-contrib-opcua (V 0.2.100)
- node-red-node-mysql (V 0.2.1)

The package *node-red-node-mysql* is not yet preinstalled on the image version 1.1.1 and must be installed in Node-Red: Open a browser on your PC connected to the IOT2050 and open the URL `http://<IP of the IOT2050>:1880/`.

Menu -> Manage palette -> Switch to the tab "Install" -> Search for "node-red-node-mysql" -> Click install

You should see the following packages in the "Manage Palette"-Menu:

![manage palette](graphics/4-2-manage-palette.png)

## **Import Node-Red Flow**

Download the ready-made JSON-FIle: [IOTDataCollector_NodeRED_flow.json](../src/IOTDataCollector%20NodeRED%20flow.json)

Import the flow:

Menu -> Import -> Select a file to import -> Press the Import-Button

![imported flow](graphics/4-3-imported-flow.png)

## **Configuration of the Node-Red Flow**

You need to adjust the settings for the MySQL node:

|Node Type|Node|Command|
|-|-|-|
|mysql database|![5-4 mysql](graphics/5-4-mysql.png)| Double-Click on the node -> Click on the pen-symbol next to "Database" -> Set the connection parameters (Host: IP-address of the IOT2050 or 'localhost' / Port: MariaDB default-port is 3306 / User & Password: User from the IOTDatabase)|

If you used other network settings for the PLC, these must be adjusted in the following nodes:

|Node Type|Node|Command|
|-|-|-|
|s7 in|![5-1 s7 in](graphics/5-1-s7in.png)| Double-Click on the node -> Click on the pen-symbol next to "PLC" -> Set the connection parameters (Nb. S7 1200/1500 uses Slot 1 and S7 300/400 uses Slot 2)|
|modbus getter|![5-2 modbus getter](graphics/5-2-ModbusGetter.png)| Double-Click on the node -> Click on the pen-symbol next to "Server" -> Set the connection parameters (default port number is 503)|
|4x OpcUA client|![5-3 OpcUA client](graphics/5-3-OPCUaClient.png)|Double-Click on the node -> Click on the pen-symbol next to "Endpoint" -> Set the connection parameters (make sure you do this for each of the four nodes)|

To implement changes press the deploy-button in the upper right corner.

## **Success Control**

If all configurations are set correctly, the flow will look like the following. All read-nodes are active and the database shows "OK":

![7-1 successful flow](graphics/7-1-success.png)

Also, the contents of the database can be checked. To do this, go to the mariadb control ($ *sudo mysql -u root*) again, select the database ($ *use IOTDatabase;*) and use the following command: $ *SELECT \* from IOTDatatable*;

![7-2 datatable with values](graphics/7-2-show-table-with-values.png)
109 changes: 109 additions & 0 deletions docs/README_TIAPROJECT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# **TIA Portal Project**

- [**TIA Portal Project**](#tia-portal-project)
- [**Download the TIA Portal Project-File**](#download-the-tia-portal-project-file)
- [**Use of the ready-made Project-File**](#use-of-the-ready-made-project-file)
- [**Generation of Test Values**](#generation-of-test-values)
- [**S7 Communication**](#s7-communication)
- [Optimized Block Access](#optimized-block-access)
- [PUT/GET Communication](#putget-communication)
- [**Modbus TCP Communication**](#modbus-tcp-communication)
- [MB_SERVER](#mb_server)
- [Connection Parameters](#connection-parameters)
- [Converting Values](#converting-values)
- [**OPC UA Communication**](#opc-ua-communication)
- [OPC UA Server](#opc-ua-server)
- [Access variables from OPC UA](#access-variables-from-opc-ua)

## **Download the TIA Portal Project-File**

- TIA-Portal v16: [IOTDataCollector.zap16](../src/IOTDataCollector.zap16)

## **Use of the ready-made Project-File**

The following document shows the necessary configurations of the TIA project. If you use the ready-made project-file from the download above all the following configurations are already made. You should only make sure that the IOT2050 and the PLC are in the same subnet. You can find further information in the section [PUT/GET Communication](#putget-communication).

If you have used this way you can start directly with the [Setting up of the IOT2050](README_IOT2050SETUP.md).

## **Generation of Test Values**

The example is meant to show, how common S7 data types can be read using different communication protocols. The data types in question are the following:

- Bool
- Int
- Real
- Time

The generation of the test values is done in a Function Block named (FB_IOTDataGenerator). The values are stored in different Data Blocks depending on the used communication protocol.

The *Real* value is represented by a sinus function. The *Int* value is a random value and the *Bool* value is true if the Int value is greater than zero. For the *Time* value, the TIME_TCK Instruction is used to get the system time of the CPU in the case of a S7-1500 PLC. Because this instruction is not supported on a S7-1200 PLC, RD_SYS_ T is used to read the current time.

![Figure 2-1 DB_IOTDataClassic](graphics/2-1-DB_IOTDataClassic.png)

## **S7 Communication**

For the S7 communication between the IOT2050 and the PLC, some adjustments must be made in the TIA project and loaded into the PLC.

### Optimized Block Access

For the IOT2050 to be able to read the variables stored in the DB, you need to disable the optimized block access.

To do so, right click on the DB and select properties. In the appearing dialog select *Attributes* and uncheck the option.

![Figure 2-2 disable optimized block access](graphics/2-2-disable-optimized-block-access.png)

### PUT/GET Communication

You also need to enable the PUT/GET access because otherwise the PLC would block any attempts to access the DB.

Open the device view and select the PLC. In the properties tab go to *Protection & Security → Connection mechanisms* and check the option.

![Figure 2-3 Enable PUT/GET](graphics/2-3-Enable-PUT-GET.png)

**WARNING:** Please be aware that by enabling the PUT/GET communication you are allowing any application using this method to access the data on your PLC.

The PLC and The IOT2050 should both be on the same Subnet. To set the IP Address of the PLC you must open the device view and select the PROFINET Interface. In the properties tab go to *Ethernet addresses*.

![Figure 2-4 Set PLC IP Address](graphics/2-4-Set-PLC-IP-Address.png)

## **Modbus TCP Communication**

The Modbus TCP communication requires that a Modbus server is implemented on the PLC side. This server processes the requests from the Modbus client running on the IOT2050.

### MB_SERVER

In the standard communication instructions, you can find the MB_SERVER instruction, that can communicate as a Modbus TCP server.

![Figure 2-5 MB_SERVER](graphics/2-5-MB-Server.png)

### Connection Parameters

The connection parameters are described using the TCON_IP_v4 structure. Some of the parameters required are the HW_ID of the PROFINET interface used for the communication. The type of the connection (here 11 for TCP/IP). The IP address of the client is set in the ADR array. You can also use the IP address 0.0.0.0 to accept requests from any client.

![Figure 2-6 Connection Parameters](graphics/2-6-Connection-Parameters.png)

### Converting Values

The read data is stored in the holding register of the Modbus server. The holding register is represented by an array of words, so the data must be converted to an array of words before it can be sent to the client. This is done in the function FC_SetHoldingRegisterData using conversion and shifting functions.

![Figure 2-7 Convert data to word array](graphics/2-7-convert-data-to-word-array.png)

**NOTE:** Please refer to the TIA Portal help for more information on the MB_SERVER instruction and the TCON_IP_v4 structure.

## **OPC UA Communication**

To access variables using OPC UA, two settings must be made. First you have to enable the OPC server. After that you have to make the variables accessible from OPC UA.

### OPC UA Server

To enable the OPC UA server, open the device view and select the PLC. In the properties tab go to *OPC UA → Server* and activate the function by selecting the checkbox.

![Figure 2-8 Activate the OPC UA Server](graphics/2-8-activate-the-OPC-UA-Server.png)

### Access variables from OPC UA

Normally the access from OPC UA is enabled by default, otherwise you can enable it by opening the DB and selecting the checkbox in the column *Accessible from HMI /OPC UA*.

![Figure 2-9 OPC UA Access](graphics/2-9-OPC-UA-Access.png)

The next step is to set up the IOT2050: [README_IOT2050Setup](README_IOT2050SETUP.md)
Binary file added docs/graphics/1-1-overview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/2-1-DB_IOTDataClassic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/2-3-Enable-PUT-GET.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/2-4-Set-PLC-IP-Address.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/2-5-MB-Server.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/2-6-Connection-Parameters.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/2-7-convert-data-to-word-array.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/2-8-activate-the-OPC-UA-Server.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/2-9-OPC-UA-Access.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-1-nmtui_activate_connection.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-10-MariaDB-active.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-2-nmtui_activate_wireless_01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-3-nmtui_activate_wireless_02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-4-nmtui_activate_wireless_03.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-5-nmtui_edit_connection_01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-6-nmtui_edit_connection_02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-7-nmtui_edit_connection_03.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-8-nmtui_eth0_eth1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-9-1-accept_licenses.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/3-9-2-apt_update.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/4-1-flow-overview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/4-2-manage-palette.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/4-3-imported-flow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/5-1-s7in.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/graphics/5-2-ModbusGetter.png
Binary file added docs/graphics/5-3-OPCUaClient.png
Binary file added docs/graphics/5-4-mysql.png
Binary file added docs/graphics/6-2-create-database.png
Binary file added docs/graphics/6-3-show-databases.png
Binary file added docs/graphics/6-4-create-new-user.png
Binary file added docs/graphics/6-5-show-users.png
Binary file added docs/graphics/6-6-grant-and-flush-privileges.png
Binary file added docs/graphics/6-7-show-privileges.png
Binary file added docs/graphics/6-8-select-database.png
Binary file added docs/graphics/6-9-create-table.png
Binary file added docs/graphics/7-1-success.png
Binary file added docs/graphics/7-2-show-table-with-values.png
Binary file added docs/graphics/delete/3-1-iot2050setup.png
Binary file added docs/graphics/delete/3-2-select-software.png
Binary file added docs/graphics/delete/3-5-reboot.png
Binary file added docs/graphics/delete/3-6-iot2050setup.png
Binary file added docs/graphics/delete/3-7-select-networking.png
Loading

0 comments on commit c168199

Please sign in to comment.