From 0f230166122af412aa843c63bf6bcccb809b5941 Mon Sep 17 00:00:00 2001 From: Damon Barry Date: Thu, 1 Dec 2016 13:04:37 -0800 Subject: [PATCH 1/5] Update stackoverflow tag in Contributing.md --- Contributing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Contributing.md b/Contributing.md index d48505e0..89a9f7c6 100644 --- a/Contributing.md +++ b/Contributing.md @@ -1,6 +1,6 @@ The Azure IoT Gateway SDK shares the same [contribution guidelines](https://github.com/Azure/azure-iot-sdks/blob/master/CONTRIBUTING.md) as the other Azure IoT SDKs. The gateway SDK team also monitors our [GitHub issues](https://github.com/Azure/azure-iot-gateway-sdk/issues) -section and Stack Overflow, especially the [iot-gateway-sdk](http://stackoverflow.com/questions/tagged/iot-gateway-sdk) tag. +section and Stack Overflow, especially the [azure-iot-gateway-sdk](http://stackoverflow.com/questions/tagged/azure-iot-gateway-sdk) tag. ---------- @@ -47,4 +47,4 @@ Your module's documentation must be discoverable from the page at this URL. Add comments to the PR to describe how your module meets the requirements listed here. Also describe what steps you've taken to test your module against the gateway version referenced in the **Targets gateway SDK version** field. -**Note**: We reserve the right to remove a module's entry from the table if it hasn't been updated in a while. \ No newline at end of file +**Note**: We reserve the right to remove a module's entry from the table if it hasn't been updated in a while. From 740debd107ce6891e8373c8baccb804fddab7f0d Mon Sep 17 00:00:00 2001 From: Chipalo Street Date: Fri, 2 Dec 2016 16:24:41 -0800 Subject: [PATCH 2/5] Updated README.md Added a link to the GW SDK homepage --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f378705..699bcff4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments -# Azure IoT Gateway SDK +# [Azure IoT Gateway SDK](https://azure.microsoft.com/en-us/services/iot-hub/iot-gateway-sdk/) Using this SDK, developers write applications that enable gateway-connected devices to communicate with Azure IoT Hub. Such applications use a collection of **modules** to aggregate and transform data, process commands, or perform any number of related tasks. Modules From 3de8992d90d710c2c7f2bb2127ac34ea3fcf313a Mon Sep 17 00:00:00 2001 From: Chipalo Street Date: Mon, 5 Dec 2016 18:58:53 -0800 Subject: [PATCH 3/5] Updated README.md Bumped the version of the gateway used by the Modbus module now that they have released the latest changes which takes a dependancy on V1 of the GW SDK. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 699bcff4..19546a36 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Other people are creating modules for the gateway SDK too! See the **More inform a module to find out how to get it, who supports it, etc. >| Name | More information | Targets gateway SDK version | >|---------------|---------------------------------------------|-----------------------------| ->| Modbus | https://github.com/Azure/iot-gateway-modbus | 2016-11-02 | +>| Modbus | https://github.com/Azure/iot-gateway-modbus | 2016-11-18 | >| OPC-UA Client | https://github.com/Azure/iot-gateway-opc-ua | 2016-11-18 | We'd love to feature your module here! See our [Contribution guidelines](Contributing.md) for From 2e1489f180d5113e2b402c19f935850838e30c6c Mon Sep 17 00:00:00 2001 From: Chipalo Street Date: Fri, 9 Dec 2016 13:54:29 -0800 Subject: [PATCH 4/5] Update README.md for Hello World sample Small doc edit. --- samples/hello_world/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/hello_world/README.md b/samples/hello_world/README.md index 92e2656d..3aa6c61a 100644 --- a/samples/hello_world/README.md +++ b/samples/hello_world/README.md @@ -164,7 +164,7 @@ Linux Windows -- From a Developer Command for VS2015 run `build.cmd`. `build.cmd` produces a folder called `build` in the root repo folder. This is where the two module dlls and executable used in this sample are built. +- `build.cmd` produces a folder called `build` in the root repo folder. This is where the two module dlls and executable used in this sample are built. > Note: The logger module is built as `\modules\logger\Debug\logger.dll`. The hello world module is built as `\modules\hello_world\Debug\hello_world.dll`. The sample exe is built as `\samples\hello_world\Debug\hello_world_sample.exe`. - The hello_world_sample process takes the path to a JSON configuration file as an argument in the command line. An example JSON file has been provided as part of the repo at `azure-iot-gateway-sdk\samples\hello_world\src\hello_world_win.json' and is copied below. It will work as is unless you have modified the build script to place modules or sample executables in non-default locations. From 92be574003c3033fd3b531a1636e1da3042dd254 Mon Sep 17 00:00:00 2001 From: Chipalo Street Date: Fri, 9 Dec 2016 14:21:56 -0800 Subject: [PATCH 5/5] Added a SDK overview to the root README --- README.md | 27 +++++++++++++++++++-------- doc/media/READMEDiagram.png | Bin 0 -> 14349 bytes 2 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 doc/media/READMEDiagram.png diff --git a/README.md b/README.md index 19546a36..876e3d67 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,24 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments -# [Azure IoT Gateway SDK](https://azure.microsoft.com/en-us/services/iot-hub/iot-gateway-sdk/) -Using this SDK, developers write applications that enable gateway-connected devices to -communicate with Azure IoT Hub. Such applications use a collection of **modules** to aggregate -and transform data, process commands, or perform any number of related tasks. Modules -communicate with one another via a message broker. Developers can choose from available modules -or write their own to create gateways tailored to any scenario. - -Visit http://azure.com/iotdev to learn more about developing applications for Azure IoT. +# Azure IoT Gateway SDK +IoT scenarios vary drastically between industries and even between customers within the same industry. +The Azure IoT Gateway SDK lets you build IoT solutions tailored to your exact scenario. Connect new +or existing devices, regardless of protocol. Process the data in an on-premises gateway using the +language of your choice (Java, C#, Node.js, or C), before sending it to the cloud. Deploy the solution +on hardware that meets your performance needs and runs the operating system of your choice. + +In the image below an existing device has been connected to the cloud using edge intelligence. The +on-premises gateway not only preforms protocol adaptation which allows the device to send data to the +cloud, it also filters the data so that only the most important information is uploaded. + +![](doc/media/READMEDiagram.png) + +Using existing modules from the Azure IoT Gateway SDK ecosystem significantly reduces your development +and maintenance costs. Running the gateway on-premises opens up all kinds of scenarios like +communicating between devices in real time, operating your IoT solution with an intermittent cloud +connection, or enforcing additional security requirements. + +Visit https://azure.microsoft.com/en-us/services/iot-hub/iot-gateway-sdk/ to learn more about the Azure IoT Gateway SDK. ## SDK Modules The following modules are available in this repository: diff --git a/doc/media/READMEDiagram.png b/doc/media/READMEDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..808e92019a1f46776b3db19e0b9f213990e17f93 GIT binary patch literal 14349 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 literal 0 HcmV?d00001