diff --git a/README.md b/README.md index 1c463ee..d58eb1f 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,20 @@ [![Build Status](https://dev.azure.com/epicstuff/TypeEdge/_apis/build/status/Azure.TypeEdge)](https://dev.azure.com/epicstuff/TypeEdge/_build/latest?definitionId=15) -**TypeEdge** introduces a strongly-typed flavor of the inherently loosely coupled vanilla [Azure IoT Edge](https:/azure.microsoft.com/en-us/services/iot-edge). +**TypeEdge** is a strongly-typed development experience for [Azure IoT Edge](https:/azure.microsoft.com/en-us/services/iot-edge). -Specifically, **TypeEdge**: +**TypeEdge**: -- Removes all configuration burden from an IoT Edge application, because configuration can be now automatically generated. -- Introduces compile-time types checking across all modules -- Adds the ability to **emulate an IoT Edge device in-memory** with no containers involved -- Simplifies the IoT Edge development, down to an single F5 experience +- Removes all plain-text configuration files from an IoT Edge application. Configuration is automatically generated by TypeEdge code bindings. +- Introduces compile-time type checking across all modules. +- Adds the ability to **emulate an IoT Edge device in-memory** without containers. +- Simplifies IoT Edge development, down to a simple F5 experience. Here is a quick video that demonstrates the value of **TypeEdge** [![TypeEdge: Into](images/image.png)](https://youtu.be/_vWcpEjjtI0) ->Note: **TypeEdge** is an **experiment** created by a customer facing team at Microsoft called, Commercial Software Engineering. We work with customers on a daily basis and as a result of that work we created **TypeEdge**. It is being used by partners today across the globe. Please help us improve it by trying it out and providing us feedback. +>Note: **TypeEdge** is an **experiment** created by a customer facing team at Microsoft called, Commercial Software Engineering. We work with customers on a daily basis and as a result of that work we created **TypeEdge**. It is being used by partners today around the globe. Please help us improve it by trying it out and providing us feedback. ## Prerequisites @@ -30,7 +30,7 @@ To be able to publish your application, you will also need: ## Create a new **TypeEdge** application -Here is the quickest way to get started with **TypeEdge**. In this quick start you will create an IoT Edge application with two modules and run it in the emulator: +Here is the quickest way to get started with **TypeEdge**. In this quickstart you will create an IoT Edge application with two modules and run it in the emulator: 1. Install the TypeEdge .NET Core solution template. Just type: ``` @@ -63,22 +63,22 @@ After you use the template to create a new **TypeEdge** application, all you hav 1. Open in VS Code/Visual Studio 2017 and hit F5: - - For VS Code run + - VS Code: code . - - For VS 2017 run + - Visual Studio: Thermostat.sln - - To run the application in the command line (no IDE): + - .NET Core: ``` dotnet build Thermostat.sln cd Thermostat.Emulator dotnet run ``` - >Note: In all three cases, your application is being emulated in-memory **without any containers involved**. This is very useful for quick develop and test iterations. + >Note: In all three cases, your application is being emulated in-memory **without containers**. This is very useful for quick develop and test iterations. You should see now the Edge Hub starting up.. @@ -89,7 +89,7 @@ You should see now the Edge Hub starting up.. ## Debugging inside the containers -If your modules have system dependencies and you want to debug them inside the containers, you can leverage the *docker support* feature of VS 2017. Simply right click the **docker-compose** project and start it from VS 2017 to **debug your application inside the docker containers**. +If your modules have system dependencies and you want to debug them inside the containers, you can leverage Visual Studio's *docker support* feature. Simply right click the **docker-compose** project and start it to **debug your application inside the docker containers**. Alternatively, you can run your application inside the containers in command line: @@ -186,7 +186,8 @@ public class SensorModule : TypeModule, ISensorModule ```
-A TypeEdge module can override any of the virtual methods of the base class ``TypeModule``. As demonstrated in the above example, the ``RunAsync`` method is used for defining long running loops, typically useful for modules that read sensor values. Another virtual method is ``Configure``, which can be used to read custom module configuration during startup. + +A **TypeEdge** module can override any of the virtual methods of the base class ``TypeModule``. As demonstrated in the above example, the ``RunAsync`` method is used for defining long running loops, typically useful for modules that read sensor values. Another virtual method is ``Configure``, which can be used to read custom module configuration during startup. The complete ``TypeModule`` definition is: @@ -210,6 +211,7 @@ public abstract class TypeModule : IDisposable ### Module Subscriptions **TypeEdge** uses the pub/sub pattern for all module I/O, except for the direct methods. This means that a module can subscribe to other module outputs, and publish messages to their inputs. To do this, a reference to the module interface definition is required. **TypeEdge** uses dependency injection to determine the referenced modules. + Below is the constructor of the second module included in the application template called ``PreprocessorModule``, that references the ``SensorModule`` via its interface. Using this proxy, the ``PreprocessorModule`` module can subscribe to the ``SensorModule``: ```cs