From c14b73b47a91da8b9d2b520943747f5b4bd2a3ff Mon Sep 17 00:00:00 2001 From: "serignesaliou.gueye" Date: Fri, 24 Mar 2023 16:50:10 +0100 Subject: [PATCH 1/4] add AWS and Azure tabs in the documentation --- docs/aws.md | 15 ++++++++++ docs/azure.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 2 ++ 3 files changed, 95 insertions(+) create mode 100644 docs/aws.md create mode 100644 docs/azure.md diff --git a/docs/aws.md b/docs/aws.md new file mode 100644 index 000000000..981038007 --- /dev/null +++ b/docs/aws.md @@ -0,0 +1,15 @@ +# AWS configurations + +## Overall Architecture + +## Configurations +Here is the configuration the AWS configuration options: +```json +{ + "CloudProvider": "AWS", + "AWS:Access": "", + "AWS:AccessSecret": "", + "AWS:Region": "" +} +``` +> Note: You must replace all values in the brackets by your own AWS settings. If you can't find them in the AWS Portal, please contact an administrator of this project to have more information. \ No newline at end of file diff --git a/docs/azure.md b/docs/azure.md new file mode 100644 index 000000000..f5157b0a5 --- /dev/null +++ b/docs/azure.md @@ -0,0 +1,78 @@ +# Azure Configurations + +## Overall Architecture + +This schema represent the various components and how they interact to have a better understanding of the various solution elements. + +![images/overall-architecture.png](images/overall-architecture.png) + +1. The user is authenticated by the OpenID Connect server. +1. The user access to the IoT Hub Portal with the OAuth2.0 token. +1. The IoT Hub portal uses the Azure IoT Hub REST API to retrieve the data. +1. The IoT Hub portal uses the Azure Device Provisioning Service to manage IoT Edge devices. +1. The IoT Hub portal uses the Azure Storage account to store the device models configuration (Images, Commands, etc.). +1. The IoT Hub portal uses the LoRa Key Management Facade to send Cloud to Device (C2D) messages to LoRa devices. +1. The LoRa Key Management Facade uses Redis to store its cached data. +1. The LoRa Key Management Facade uses the Azure IoT Hub REST API to retrieve the LoRa device keys and send C2D messages. +1. The IoT Hub portal synchronizes its data with the IoT Hub to provide a consistent view of the data. + +> Note: For more information about the LoRa Key Management Facade, see the [Azure IoT Edge LoRaWAN Starter Kit](https://azure.github.io/iotedge-lorawan-starterkit) page. + +## Prerequisites + +The following should be completed before proceeding with the IoT Hub Portal development or deployment in your environment. + +Before getting started, it is better to master the tools below: + +* Azure platform and Azure IoT Hub. A tutorial can be found [here](https://docs.microsoft.com/en-us/learn/paths/ai-edge-engineer/). +* Blazor WebAssembly and Blazor Server. A traning is available [on this site](https://docs.microsoft.com/en-us/learn/paths/build-web-apps-with-blazor/). +* Docker. An introduction to containerization is available [on this page](https://docs.microsoft.com/en-us/dotnet/architecture/microservices/container-docker-introduction/). +* IoTEdge LoraWAN StarterKit. Have a look at [LoRaWAN Starter Kit](https://azure.github.io/iotedge-lorawan-starterkit) to get more details on this OSS cross platform private network. + +----------------- + +Once you know the basics of these technologies and tools, you must follow these last steps to set up your working environment. + +* IoT Hub Portal uses containers to work correctly. [Docker](https://www.docker.com/) is required to launch this project (version >= 4.11.1). + +> Once you have download Docker, you must install the WSL 2 Linux kernel. To do that, please refer to the official [Microsoft documentation](https://aka.ms/wsl2kernel). You can choose the linux distribution of your choice, for example Ubuntu. + +* Node.js is used to run JavaScript code in the portal. You can download the latest version [here](https://nodejs.org/en/).The minimal version required is 16.17.0. +* You must have an Azure subscription. [Get an Azure Free account to start](https://azure.microsoft.com/en-gb/free/). +* An Identity provider supporting OpenIDConnect protocol configured with 2 applications (API and web) is required to login to the IoT Hub Portal. See [Azure AD B2C Tenant with applications](https://cgi-fr.github.io/IoT-Hub-Portal/stable/b2c-applications/) configuration page for example. +* To develop, you can choose your own IDE or text editor, for example [Visual Studio](https://visualstudio.microsoft.com/). + +### Secrets + +_Secrets_ are used to fill in the login credentials to the cloud platform. You have to enter them in a `json` file to be able to connect to the IoT Hub Portal. Here is a template of a such `json` file : + +```json +{ + "StorageAccount:ConnectionString": "", + "StorageAccount:BlobContainerName": "", + "OIDC:Scope": "", + "OIDC:MetadataUrl": "", + "OIDC:ClientId": "", + "OIDC:Authority": "", + "OIDC:ApiClientId": "", + "LoRaRegionRouterConfig:Url": "", + "LoRaKeyManagement:Url": "", + "LoRaKeyManagement:Code": "", + "LoRaFeature:Enabled": "", + "Kestrel:Certificates:Development:Password": "", + "IoTHub:ConnectionString": "", + "IoTHub:EventHub:Endpoint": "", + "IoTHub:EventHub:ConsumerGroup": "", + "IoTDPS:ServiceEndpoint": "", + "IoTDPS:LoRaEnrollmentGroup": "", + "IoTDPS:DefaultEnrollmentGroup": "", + "IoTDPS:ConnectionString": "", + "PostgreSQL:ConnectionString": "" +} +``` + +> Note: You must replace all values in the brackets by your own Azure settings. If you can't find them in the Azure Portal, please contact an administrator of this project to have more information. + +This `json` file must be added into your project solution. To do that, click on the `AzureIoTHub.Server` project in Visual Studio and select `Manage User Secrets` from the context menu. You can now add your secrets inside this file. + +You are now ready to start your IoT Hub Portal development ! diff --git a/mkdocs.yml b/mkdocs.yml index 30ebdc820..1e50c773c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -119,6 +119,8 @@ nav: - 'dev-guide/migrations/v3-to-v4.md' - 'Project conception': - 'dev-guide/conception/diagrams.md' + - AWS: 'aws.md' + - Azure: 'azure.md' - Concepts: 'concepts.md' - Web API Reference: 'open-api.md' - About: From 7b3f7ecc2d08a764354d13a3f640df06fe5a2be4 Mon Sep 17 00:00:00 2001 From: "serignesaliou.gueye" Date: Mon, 27 Mar 2023 14:10:43 +0200 Subject: [PATCH 2/4] doc tabs uodated --- docs/aws.md | 2 +- docs/azure.md | 27 ++------------------------- mkdocs.yml | 4 ++-- 3 files changed, 5 insertions(+), 28 deletions(-) diff --git a/docs/aws.md b/docs/aws.md index 981038007..a1a1c1e35 100644 --- a/docs/aws.md +++ b/docs/aws.md @@ -3,7 +3,7 @@ ## Overall Architecture ## Configurations -Here is the configuration the AWS configuration options: +This configurations are used to get access to AWS cloud Platform. You have to enter them in a `json` file to be able to connect to the Iot Hub Portal. Here is a template of a such `json` file. ```json { "CloudProvider": "AWS", diff --git a/docs/azure.md b/docs/azure.md index f5157b0a5..eb6662a7d 100644 --- a/docs/azure.md +++ b/docs/azure.md @@ -18,36 +18,13 @@ This schema represent the various components and how they interact to have a bet > Note: For more information about the LoRa Key Management Facade, see the [Azure IoT Edge LoRaWAN Starter Kit](https://azure.github.io/iotedge-lorawan-starterkit) page. -## Prerequisites - -The following should be completed before proceeding with the IoT Hub Portal development or deployment in your environment. - -Before getting started, it is better to master the tools below: - -* Azure platform and Azure IoT Hub. A tutorial can be found [here](https://docs.microsoft.com/en-us/learn/paths/ai-edge-engineer/). -* Blazor WebAssembly and Blazor Server. A traning is available [on this site](https://docs.microsoft.com/en-us/learn/paths/build-web-apps-with-blazor/). -* Docker. An introduction to containerization is available [on this page](https://docs.microsoft.com/en-us/dotnet/architecture/microservices/container-docker-introduction/). -* IoTEdge LoraWAN StarterKit. Have a look at [LoRaWAN Starter Kit](https://azure.github.io/iotedge-lorawan-starterkit) to get more details on this OSS cross platform private network. - ------------------ - -Once you know the basics of these technologies and tools, you must follow these last steps to set up your working environment. - -* IoT Hub Portal uses containers to work correctly. [Docker](https://www.docker.com/) is required to launch this project (version >= 4.11.1). - -> Once you have download Docker, you must install the WSL 2 Linux kernel. To do that, please refer to the official [Microsoft documentation](https://aka.ms/wsl2kernel). You can choose the linux distribution of your choice, for example Ubuntu. - -* Node.js is used to run JavaScript code in the portal. You can download the latest version [here](https://nodejs.org/en/).The minimal version required is 16.17.0. -* You must have an Azure subscription. [Get an Azure Free account to start](https://azure.microsoft.com/en-gb/free/). -* An Identity provider supporting OpenIDConnect protocol configured with 2 applications (API and web) is required to login to the IoT Hub Portal. See [Azure AD B2C Tenant with applications](https://cgi-fr.github.io/IoT-Hub-Portal/stable/b2c-applications/) configuration page for example. -* To develop, you can choose your own IDE or text editor, for example [Visual Studio](https://visualstudio.microsoft.com/). - -### Secrets +## Configurations/Secrets _Secrets_ are used to fill in the login credentials to the cloud platform. You have to enter them in a `json` file to be able to connect to the IoT Hub Portal. Here is a template of a such `json` file : ```json { + "CloudProvider": "Azure", "StorageAccount:ConnectionString": "", "StorageAccount:BlobContainerName": "", "OIDC:Scope": "", diff --git a/mkdocs.yml b/mkdocs.yml index 1e50c773c..67b00ee38 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -110,6 +110,8 @@ extra: # Navigation nav: - index.md + - AWS: 'aws.md' + - Azure: 'azure.md' - Dev Guide: - 'Developer Guide': 'dev-guide.md' - 'Testing': @@ -119,8 +121,6 @@ nav: - 'dev-guide/migrations/v3-to-v4.md' - 'Project conception': - 'dev-guide/conception/diagrams.md' - - AWS: 'aws.md' - - Azure: 'azure.md' - Concepts: 'concepts.md' - Web API Reference: 'open-api.md' - About: From 1e645ff63fe81699786f5ea2c92f950d8f735ea0 Mon Sep 17 00:00:00 2001 From: "serignesaliou.gueye" Date: Mon, 27 Mar 2023 17:21:55 +0200 Subject: [PATCH 3/4] AWS architecture image added --- docs/aws.md | 11 +++++++++++ docs/images/architecture_AWS.png | Bin 0 -> 45769 bytes 2 files changed, 11 insertions(+) create mode 100644 docs/images/architecture_AWS.png diff --git a/docs/aws.md b/docs/aws.md index a1a1c1e35..73f9cffb8 100644 --- a/docs/aws.md +++ b/docs/aws.md @@ -2,6 +2,17 @@ ## Overall Architecture +This schema represent the various components and how they interact to have a better understanding of the various solution elements. + +![images/architecture_AWS.png](images/architecture_AWS.png) + +1. The user is authenticated by the OpenID Connect server. +1. The user access to the IoT Hub Portal with the OAuth2.0 token. +1. The IoT Hub portal uses the AWS IoT REST API to retrieve the data. +1. The IoT Hub portal uses the AWS S3 storage to store the device models configuration (Images, Commands, etc.). +1. The IoT Hub portal synchronizes its data with the IoT Hub to provide a consistent view of the data. + + ## Configurations This configurations are used to get access to AWS cloud Platform. You have to enter them in a `json` file to be able to connect to the Iot Hub Portal. Here is a template of a such `json` file. ```json diff --git a/docs/images/architecture_AWS.png b/docs/images/architecture_AWS.png new file mode 100644 index 0000000000000000000000000000000000000000..656e27863a1bb490cd826252919683febd294084 GIT binary patch literal 45769 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 E51LCJApigX literal 0 HcmV?d00001 From 36802b86bcc30a4862d6c783eb9e40b345e92a1e Mon Sep 17 00:00:00 2001 From: "serignesaliou.gueye" Date: Tue, 28 Mar 2023 09:29:15 +0200 Subject: [PATCH 4/4] Doc -> AWS settings updated --- docs/aws.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/aws.md b/docs/aws.md index 73f9cffb8..cd2516a1e 100644 --- a/docs/aws.md +++ b/docs/aws.md @@ -18,6 +18,13 @@ This configurations are used to get access to AWS cloud Platform. You have to en ```json { "CloudProvider": "AWS", + "S3Storage:ConnectionString": "", + "OIDC:Scope": "", + "OIDC:MetadataUrl": "", + "OIDC:ClientId": "", + "OIDC:Authority": "", + "OIDC:ApiClientId": "", + "PostgreSQL:ConnectionString": "", "AWS:Access": "", "AWS:AccessSecret": "", "AWS:Region": ""