├── .gitignore ├── HOLs ├── .vscode │ └── settings.json ├── Azure Resource Manager Templates │ ├── DeploymentHelper.cs │ ├── deploy.ps1 │ ├── deploy.sh │ ├── deployer.rb │ ├── parameters.json │ └── template.json ├── FunctionApp │ ├── TempAlert │ │ ├── function.json │ │ ├── project.json │ │ └── run.csx │ └── host.json ├── Node-RED Flows │ ├── Flow 1.json │ ├── Flow 2.json │ ├── Flow 3 - 01 - Temperature on LCD.json │ ├── Flow 3 - 02 - Add Azure IoT Hub Node.json │ ├── Flow 3 - 03 - Alert and Buzzer Nodes Only.json │ └── Flow 3 - 04 - Complete.json ├── PowerBI │ ├── PowerBI CLI Commands.md │ ├── TemperatureChart.pbix │ ├── images │ │ ├── 00010-PowerBiWorkspaceCollectionName.png │ │ └── 00020-PowerBiWorkspaceCollectionAccessKey.png │ ├── sample.powerbirc │ └── update connection command.txt ├── SQL Database Scripts │ ├── Create SQL Database Objects.sql │ ├── Query Measurement Data.sql │ └── Truncate Measurement Table.sql ├── Stream Analytics │ └── Stream Analytics Query.sql ├── Troubleshooting │ ├── images │ │ ├── ConnectToIDPDK-XXXX.png │ │ ├── GRUB097BootMenu.png │ │ ├── IDPDKWiFiConnected.png │ │ ├── IpNetworkConflictProblem.png │ │ ├── IpNetworkConflictSolution.png │ │ ├── NUCWithMonitorAndKeyboard.png │ │ ├── SetDefaultBootOptionToReimage.png │ │ └── TroubleshootingImages.pptx │ ├── nuclogs │ │ └── NUC Repo & Package Update Notes.txt │ ├── readme.md │ └── scripts │ │ └── reimage.sh ├── WebApp │ ├── .gitignore │ ├── bower.json │ ├── config.json │ ├── package.json │ ├── public │ │ ├── images │ │ │ └── chartplaceholder.png │ │ └── index.html │ └── server.js ├── images │ ├── 00000-CopyIcon.png │ ├── 00000-LabArchitecture-NoPowerBi.jpg │ ├── 00000-LabArchitecture.jpg │ ├── 00000-TestBuzzerButton.png │ ├── 00010-IntelLogo.png │ ├── 00020-AzureLogo.jpg │ ├── 01010-GroveStarterKit.png │ ├── 01020-Arduino101.png │ ├── 01030-AttachGroveBaseShield.png │ ├── 01040-BaseShield5V.png │ ├── 01050-RotaryEncoderAndLCD.png │ ├── 01060-RotaryEncoderAndLCDAttached.png │ ├── 01070-AttachArduino101.png │ ├── 01080-IoTGatewayEthernetAndPower.png │ ├── 01090-IPAddressOnLCD.png │ ├── 01100-PrivacyStatement.png │ ├── 01110-Login.png │ ├── 01120-Eula.png │ ├── 01130-IoTGatewayDeveloperHub.png │ ├── 02010-Sensors.png │ ├── 02020-CollapsedDeviceAndSensorData.png │ ├── 02030-Packages.png │ ├── 02040-Administration.png │ ├── 02050-Documentation.png │ ├── 03010-PuttyDownload.png │ ├── 03020-PuTTYConfiguration.png │ ├── 03030-PuTTYSecurityAlert.png │ ├── 03040-LoginAsRoot.png │ ├── 04010-LaunchNodeRed.png │ ├── 04020-NodeRedEnvironment.png │ ├── 04030-NodeRedEnvironmentLayout.png │ ├── 04040-CreateFlow2.png │ ├── 04050-AddGroveLEDNode.png │ ├── 04060-BlinkyProperties.png │ ├── 04070-DeployBlinky.png │ ├── 04080-Arduino101LED.png │ ├── 04090-BlinkyNodeStatus.png │ ├── 05010-AttachTemperatureSensor.png │ ├── 05020-CreateFlow3.png │ ├── 05030-AddGroveTemperatureSensor.png │ ├── 05040-AddFunctionNode.png │ ├── 05050-ConnectNodes.png │ ├── 05060-Flow3Nodes.png │ ├── 05065-Flow3Deploy.png │ ├── 05070-DisableFlow1DebugMessages.png │ ├── 05080-DebugMessagesEnabled.png │ ├── 05090-DebugMessagesDisabled.png │ ├── 05100-DeleteDebugMessages.png │ ├── 05110-Flow3DebugMessages.png │ ├── 05120-DisplayTempOnLcd.png │ ├── 05130-DeployFlow.png │ ├── 05140-TempOnLcd.png │ ├── 05143-SelectAllNodes.png │ ├── 05146-SelectedNodesOrangeBorder.png │ ├── 05150-ImportFromClipboard.png │ ├── 05160-PasteFlowCode.png │ ├── 06010-DocumentingYourChoices.png │ ├── 06015-DefaultLigtColorTheme.png │ ├── 06020-ConvetionRegionAndGroupSection.png │ ├── 06030-ConventionRegionAndGroupDocumented.png │ ├── 07010-NewIoTHub.png │ ├── 07020-NewIoTHubProperites.png │ ├── 07030-IoTHubDeployingTile.png │ ├── 07040-IoTHubProperties.png │ ├── 07050-SASPoliciesLink.png │ ├── 07060-IoTHubOwnerPolicy.png │ ├── 07070-DocumentIoTHubOwnerConnectionString.png │ ├── 07080-ServiceSASPolicy.png │ ├── 07090-DocumentServicePolicyConnectionString.png │ ├── 07095-OpenEventsEndpoint.png │ ├── 07100-StreamAnalyticsConsumerGroup.png │ ├── 08010-CreateNewDeviceInPortal.png │ ├── 08010-IoTHubExplorerHelp.png │ ├── 08020-IoTHubOwnerConnectionString.png │ ├── 08020-OpenNewDeviceIdentity.png │ ├── 08025-CopyPimaryConnectionString.png │ ├── 08030-DocumentDeviceIdentity.png │ ├── 09010-AddRepo.png │ ├── 09020-AddIoTCloudRepo.png │ ├── 09030-UpdateRepositories.png │ ├── 09040-CloseManageRepositoriesWindow.png │ ├── 09050-AddPackagesButton.png │ ├── 09060-InstallPackageGroupCloudAzure.png │ ├── 09070-CloseAddNewPackagesWindow.png │ ├── 09080-AzureIoTHubNode.png │ ├── 09090-AddAzureIoTHubNode.png │ ├── 09100-CopyDeviceConnectionString.png │ ├── 09110-EditDeviceIdInCreatePayload.png │ ├── 09120-DeployChanges.png │ ├── 09125-MessageCountInPortal.png │ ├── 10010-NewSQLDatabase.png │ ├── 10020-NewSqlDbProperties.png │ ├── 10030-NewSQLServerProperites.png │ ├── 10040-SQLDBPricingTier.png │ ├── 10045-BasicPricingTier.png │ ├── 10050-CreateDatabaseAndServer.png │ ├── 10060-ClickOnServerLink.png │ ├── 10070-ShowFirewallSettings.png │ ├── 10080-EveryoneFirewallRule.png │ ├── 10085-DocumentSQL.png │ ├── 10090-HOLsFolderInCode.png │ ├── 10100-InstallVsCodeMssql.png │ ├── 10110-EnableExtension.png │ ├── 10120-ConfirmVSCodeRestart.png │ ├── 10130-OpenWorkspaceSettings.png │ ├── 10140-SQLConnectionProperties.png │ ├── 10145-CompletedSQLConnectionProperties.png │ ├── 10147-SQLToolsInitialization.png │ ├── 10148-FirewallPrompt.png │ ├── 10150-OpenCreateScript.png │ ├── 10155-MSSQLConnect.png │ ├── 10160-SelectConnection.png │ ├── 10170-ConnectionError.png │ ├── 10180-SuccessfulConnection.png │ ├── 10190-RunSQLScript.png │ ├── 10200-SQLMessages.png │ ├── 10210-SQLResults.png │ ├── 10220-NewEventHub.png │ ├── 10230-CreateNamespace.png │ ├── 10240-CreateEventHub.png │ ├── 10250-NewEventHubProperties.png │ ├── 10260-EventHubCreated.png │ ├── 10262-SASPolicies.png │ ├── 10263-RootManagedSharedAccessKey.png │ ├── 10265-DocumentEventHub.png │ ├── 10270-CreateStreamAnalyticsJob.png │ ├── 10280-NewASAJobProperties.png │ ├── 10290-Inputs.png │ ├── 10300-IoTHubInput.png │ ├── 10305-IoTHubSuccessfulTest.png │ ├── 10310-Outputs.png │ ├── 10320-SQLDBOutputProperties.png │ ├── 10330-SuccessfulConnectionTest.png │ ├── 10340-AlertsOuputProperties.png │ ├── 10350-SuccessfulAlertsTest.png │ ├── 10360-Queries.png │ ├── 10370-CopyASAQuery.png │ ├── 10380-CreateQuery.png │ ├── 10385-DropErrors.png │ ├── 10387-Overview.png │ ├── 10390-StartJob.png │ ├── 10400-JobStarted.png │ ├── 10410-SQLData.png │ ├── 11010-NewWebApp.png │ ├── 11020-WebAppProperties.png │ ├── 11030-CreateNewPlan.png │ ├── 11040-AppServicePlanProperties.png │ ├── 11050-CreateWebApp.png │ ├── 11060-SetupGitRepo.png │ ├── 11070-DeploymentCredentials.png │ ├── 11080-DeploymentSourceOk.png │ ├── 11090-GitCloneUrl.png │ ├── 11100-WebAppDocumentation.png │ ├── 11110-ConfigJson.png │ ├── 11120-UpdateWebAppConfigJson.png │ ├── 11125-NewDebugConfig.png │ ├── 11130-CreateDebugConfig.png │ ├── 11140-NodeJsEnvironment.png │ ├── 11150-StartWithServerjs.png │ ├── 11160-Debug.png │ ├── 11165-Firewall.png │ ├── 11170-ListeningOnPort3000.png │ ├── 11180-WebAppRunningLocally.png │ ├── 11190-StopDebugging.png │ ├── 11200-InitLocalGitRepo.png │ ├── 11210-InitialCommit.png │ ├── 11215-StageChanges.png │ ├── 11220-Publish.png │ ├── 11223-Origin.png │ ├── 11230-ConfirmPublish.png │ ├── 11240-DeploymentCredentials.png │ ├── 11250-DeploymentInPortal.png │ ├── 11260-SiteRunningInAzure.png │ ├── 12010-BuzzerAttached.png │ ├── 12020-ImportFromClipboard.png │ ├── 12030-ImportNodes.png │ ├── 12040-ImportedNodes.png │ ├── 12045-NodePurposes.png │ ├── 12050-TestBuzzerOnWebsite.png │ ├── 12060-BuzzerTestMessageOnLcd.png │ ├── 12065-NewFunctionApp.png │ ├── 12070-NewFunctionApp.png │ ├── 12075-NewCustomFunction.png │ ├── 12080-NewCSharpEventHubTriggerFunction.png │ ├── 12090-NewFunctionProperties.png │ ├── 12100-CreateTheFunction.png │ ├── 12100-EventHubConnection.png │ ├── 12110-FunctionIntegration.png │ ├── 12120-DefaultCode.png │ ├── 12126-CopyRunCsxToClipboard.png │ ├── 12128-PasteCodeInRunCsx.png │ ├── 12129-ViewFiles.png │ ├── 12130-AddProjectJson.png │ ├── 12130-UploadFilesButton.png │ ├── 12132-CopyProjectJson.png │ ├── 12134-PasteProjectJson.png │ ├── 12140-UploadFiles.png │ ├── 12150-ReviewFunctionJson.png │ ├── 12155-ServiceStringPlaceHolder.png │ ├── 12160-PasteServiceConnectionString.png │ ├── 12160-ReviewProjectJson.png │ ├── 12170-ExpandLogs.png │ ├── 12170-RevewRunCsx.png │ ├── 12180-CompilationSucceeded.png │ ├── 12190-PinchSensorWithWarmFingers.png │ ├── 12200-FunctionLoggingMessage.png │ ├── 12210-TempAlertOnLcd.png │ ├── 12230-FunctionAppSettings.png │ ├── 12238-OpenAppSettings.png │ ├── 12240-AlwaysOn.png │ ├── 13010-TemperatureChartReportInDesktop.png │ ├── 13020-NewPowerBiEmbeddedCollection.png │ ├── 13030-PowerBiCollectionProperties.png │ ├── 13040-CollectionAccessKeys.png │ ├── 13050-AccessKey1.png │ ├── 13060-DocumentCollectionNameAndKey.png │ ├── 13070-WorkspaceIdDocumented.png │ ├── 13073-DocumentReportAndDataset.png │ ├── 13075-DocumentConnectionString.png │ ├── 13080-PowerBIConfigValues.png │ ├── 13085-PowerBIConfigCompleted.png │ ├── 13090-CommentedOutDiv.png │ ├── 13095-CommentedOutImg.png │ ├── 13100-ImgCommentedOut.png │ ├── 13110-EmbedReportCallUncommented.png │ ├── 13120-CommitChanges.png │ ├── 13130-SyncWithAzure.png │ ├── 13140-VerifyTheDeploymentSucceeded.png │ ├── 13150-EmbeddedReportVisibleInAzure.png │ ├── 14010-ResourceGroupInformation.png │ ├── 14020-DeleteResourceGroup.png │ └── 14030-UnpinTiles.png ├── myresources.txt └── readme.md ├── README.md ├── Slides ├── Microsoft Intel IoT Camp Gateway Overview.pdf ├── Microsoft Intel IoT Camp Train the Trainer.pptx ├── MicrosoftAzureIoTOverview.pptx ├── MicrosoftIntelIoTCampLabArchitecture.pptx ├── Walk In Deck.pptx └── readme.md ├── _layouts └── default.html └── style.css /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | *.pid.lock 11 | 12 | # Directory for instrumented libs generated by jscoverage/JSCover 13 | lib-cov 14 | 15 | # Coverage directory used by tools like istanbul 16 | coverage 17 | 18 | # nyc test coverage 19 | .nyc_output 20 | 21 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 22 | .grunt 23 | 24 | # node-waf configuration 25 | .lock-wscript 26 | 27 | # Compiled binary addons (http://nodejs.org/api/addons.html) 28 | build/Release 29 | 30 | # Dependency directories 31 | node_modules 32 | jspm_packages 33 | 34 | # Optional npm cache directory 35 | .npm 36 | 37 | # Optional eslint cache 38 | .eslintcache 39 | 40 | # Optional REPL history 41 | .node_repl_history 42 | 43 | # Output of 'npm pack' 44 | *.tgz 45 | 46 | #PowerBI config files 47 | .powerbirc -------------------------------------------------------------------------------- /HOLs/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | 4 | "mssql.connections": [ 5 | { 6 | //Leave the authenticationType as 'SqlLogin' 7 | "authenticationType": "SqlLogin", 8 | 9 | // 10 | "server": "paste your Azure SQL Server Fully Qualified Domain Name (FQDN) here", 11 | "database": "paste your Azure SQL Database Name here", 12 | "user": "paste your Azure SQL Server Qualified SQL Login here", 13 | "password": "paste your Azure SQL Server Password here", 14 | "savePassword": true 15 | } 16 | ] 17 | 18 | } -------------------------------------------------------------------------------- /HOLs/Azure Resource Manager Templates/DeploymentHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Management.Resources; 2 | using Microsoft.Azure.Management.Resources.Models; 3 | using Microsoft.IdentityModel.Clients.ActiveDirectory; 4 | using Microsoft.Rest; 5 | using Newtonsoft.Json; 6 | using Newtonsoft.Json.Linq; 7 | using System; 8 | using System.IO; 9 | 10 | namespace PortalGenerated 11 | { 12 | /// 13 | /// This is a helper class for deploying an Azure Resource Manager template 14 | /// More info about template deployments can be found here https://go.microsoft.com/fwLink/?LinkID=733371 15 | /// 16 | class DeploymentHelper 17 | { 18 | string subscriptionId = "your-subscription-id"; 19 | string clientId = "your-service-principal-clientId"; 20 | string clientSecret = "your-service-principal-client-secret"; 21 | string resourceGroupName = "resource-group-name"; 22 | string deploymentName = "deployment-name"; 23 | string resourceGroupLocation = "resource-group-location"; // must be specified for creating a new resource group 24 | string pathToTemplateFile = "path-to-template.json-on-disk"; 25 | string pathToParameterFile = "path-to-parameters.json-on-disk"; 26 | string tenantId = "tenant-id"; 27 | 28 | public void Run() 29 | { 30 | // Try to obtain the authorization token 31 | var clientCredential = new ClientCredential(clientId, clientSecret); 32 | var context = new AuthenticationContext(string.Format("https://login.windows.net/{0}", tenantId)); 33 | var result = context.AcquireTokenAsync("https://management.azure.com/", clientCredential).Result; 34 | 35 | if (result == null) 36 | { 37 | throw new InvalidOperationException("Failed to obtain authorization token"); 38 | } 39 | 40 | // Read the token and create the appropriate credentials object 41 | string token = result.AccessToken; 42 | var credentials = new TokenCredentials(token); 43 | 44 | // Read the template and parameter file contents 45 | JObject templateFileContents = GetJsonFileContents(pathToTemplateFile); 46 | JObject parameterFileContents = GetJsonFileContents(pathToParameterFile); 47 | 48 | // Create the resource manager client 49 | var resourceManagementClient = new ResourceManagementClient(credentials); 50 | resourceManagementClient.SubscriptionId = subscriptionId; 51 | 52 | // Create or check that resource group exists 53 | EnsureResourceGroupExists(resourceManagementClient, resourceGroupName, resourceGroupLocation); 54 | 55 | // Start a deployment 56 | DeployTemplate(resourceManagementClient, resourceGroupName, deploymentName, templateFileContents, parameterFileContents); 57 | } 58 | 59 | /// 60 | /// Reads a JSON file from the specified path 61 | /// 62 | /// The full path to the JSON file 63 | /// The JSON file contents 64 | private JObject GetJsonFileContents(string pathToJson) 65 | { 66 | JObject templatefileContent = new JObject(); 67 | using (StreamReader file = File.OpenText(pathToJson)) 68 | { 69 | using (JsonTextReader reader = new JsonTextReader(file)) 70 | { 71 | templatefileContent = (JObject)JToken.ReadFrom(reader); 72 | return templatefileContent; 73 | } 74 | } 75 | } 76 | 77 | /// 78 | /// Ensures that a resource group with the specified name exists. If it does not, will attempt to create one. 79 | /// 80 | /// The resource manager client. 81 | /// The name of the resource group. 82 | /// The resource group location. Required when creating a new resource group. 83 | private static void EnsureResourceGroupExists(ResourceManagementClient resourceManagementClient, string resourceGroupName, string resourceGroupLocation) 84 | { 85 | if (resourceManagementClient.ResourceGroups.CheckExistence(resourceGroupName) != true) 86 | { 87 | Console.WriteLine(string.Format("Creating resource group '{0}' in location '{1}'", resourceGroupName, resourceGroupLocation)); 88 | var resourceGroup = new ResourceGroup(); 89 | resourceGroup.Location = resourceGroupLocation; 90 | resourceManagementClient.ResourceGroups.CreateOrUpdate(resourceGroupName, resourceGroup); 91 | } 92 | else 93 | { 94 | Console.WriteLine(string.Format("Using existing resource group '{0}'", resourceGroupName)); 95 | } 96 | } 97 | 98 | /// 99 | /// Starts a template deployment. 100 | /// 101 | /// The resource manager client. 102 | /// The name of the resource group. 103 | /// The name of the deployment. 104 | /// The template file contents. 105 | /// The parameter file contents. 106 | private static void DeployTemplate(ResourceManagementClient resourceManagementClient, string resourceGroupName, string deploymentName, JObject templateFileContents, JObject parameterFileContents) 107 | { 108 | Console.WriteLine(string.Format("Starting template deployment '{0}' in resource group '{1}'", deploymentName, resourceGroupName)); 109 | var deployment = new Deployment(); 110 | 111 | deployment.Properties = new DeploymentProperties 112 | { 113 | Mode = DeploymentMode.Incremental, 114 | Template = templateFileContents, 115 | Parameters = parameterFileContents["parameters"].ToObject() 116 | }; 117 | 118 | var deploymentResult = resourceManagementClient.Deployments.CreateOrUpdate(resourceGroupName, deploymentName, deployment); 119 | Console.WriteLine(string.Format("Deployment status: {0}", deploymentResult.Properties.ProvisioningState)); 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /HOLs/Azure Resource Manager Templates/deploy.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .SYNOPSIS 3 | Deploys a template to Azure 4 | 5 | .DESCRIPTION 6 | Deploys an Azure Resource Manager template 7 | 8 | .PARAMETER subscriptionId 9 | The subscription id where the template will be deployed. 10 | 11 | .PARAMETER resourceGroupName 12 | The resource group where the template will be deployed. Can be the name of an existing or a new resource group. 13 | 14 | .PARAMETER resourceGroupLocation 15 | Optional, a resource group location. If specified, will try to create a new resource group in this location. If not specified, assumes resource group is existing. 16 | 17 | .PARAMETER deploymentName 18 | The deployment name. 19 | 20 | .PARAMETER templateFilePath 21 | Optional, path to the template file. Defaults to template.json. 22 | 23 | .PARAMETER parametersFilePath 24 | Optional, path to the parameters file. Defaults to parameters.json. If file is not found, will prompt for parameter values based on template. 25 | #> 26 | 27 | param( 28 | [Parameter(Mandatory=$True)] 29 | [string] 30 | $subscriptionId, 31 | 32 | [Parameter(Mandatory=$True)] 33 | [string] 34 | $resourceGroupName, 35 | 36 | [string] 37 | $resourceGroupLocation, 38 | 39 | [Parameter(Mandatory=$True)] 40 | [string] 41 | $deploymentName, 42 | 43 | [string] 44 | $templateFilePath = "template.json", 45 | 46 | [string] 47 | $parametersFilePath = "parameters.json" 48 | ) 49 | 50 | <# 51 | .SYNOPSIS 52 | Registers RPs 53 | #> 54 | Function RegisterRP { 55 | Param( 56 | [string]$ResourceProviderNamespace 57 | ) 58 | 59 | Write-Host "Registering resource provider '$ResourceProviderNamespace'"; 60 | Register-AzureRmResourceProvider -ProviderNamespace $ResourceProviderNamespace -Force; 61 | } 62 | 63 | #****************************************************************************** 64 | # Script body 65 | # Execution begins here 66 | #****************************************************************************** 67 | $ErrorActionPreference = "Stop" 68 | 69 | # sign in 70 | Write-Host "Logging in..."; 71 | Login-AzureRmAccount; 72 | 73 | # select subscription 74 | Write-Host "Selecting subscription '$subscriptionId'"; 75 | Select-AzureRmSubscription -SubscriptionID $subscriptionId; 76 | 77 | # Register RPs 78 | $resourceProviders = @("microsoft.devices","microsoft.eventhub","microsoft.powerbi","microsoft.sql","microsoft.storage","microsoft.web"); 79 | if($resourceProviders.length) { 80 | Write-Host "Registering resource providers" 81 | foreach($resourceProvider in $resourceProviders) { 82 | RegisterRP($resourceProvider); 83 | } 84 | } 85 | 86 | #Create or check for existing resource group 87 | $resourceGroup = Get-AzureRmResourceGroup -Name $resourceGroupName -ErrorAction SilentlyContinue 88 | if(!$resourceGroup) 89 | { 90 | Write-Host "Resource group '$resourceGroupName' does not exist. To create a new resource group, please enter a location."; 91 | if(!$resourceGroupLocation) { 92 | $resourceGroupLocation = Read-Host "resourceGroupLocation"; 93 | } 94 | Write-Host "Creating resource group '$resourceGroupName' in location '$resourceGroupLocation'"; 95 | New-AzureRmResourceGroup -Name $resourceGroupName -Location $resourceGroupLocation 96 | } 97 | else{ 98 | Write-Host "Using existing resource group '$resourceGroupName'"; 99 | } 100 | 101 | # Start the deployment 102 | Write-Host "Starting deployment..."; 103 | if(Test-Path $parametersFilePath) { 104 | New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile $templateFilePath -TemplateParameterFile $parametersFilePath; 105 | } else { 106 | New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile $templateFilePath; 107 | } -------------------------------------------------------------------------------- /HOLs/Azure Resource Manager Templates/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | usage() { echo "Usage: $0 -t -p -q -l " 1>&2; exit 1; } 4 | 5 | # Initialize parameters specified from command line 6 | while getopts ":t:p:q:l:" o; do 7 | case "${o}" in 8 | t) 9 | echo "in case t" 10 | subscriptionId=${OPTARG} 11 | ;; 12 | p) 13 | resourceGroupName=${OPTARG} 14 | ;; 15 | q) 16 | deploymentName=${OPTARG} 17 | ;; 18 | l) 19 | resourceGroupLocation=${OPTARG} 20 | ;; 21 | esac 22 | done 23 | shift $((OPTIND-1)) 24 | 25 | #Prompt for parameters is some required parameters are missing 26 | if [ -z "$subscriptionId" ]; then 27 | echo "Subscription Id:" 28 | read subscriptionId 29 | fi 30 | 31 | if [ -z "$resourceGroupName" ]; then 32 | echo "ResourceGroupName:" 33 | read resourceGroupName 34 | fi 35 | 36 | if [ -z "$deploymentName" ]; then 37 | echo "DeploymentName:" 38 | read deploymentName 39 | fi 40 | 41 | if [ -z "$resourceGroupLocation" ]; then 42 | echo "Enter a location below to create a new resource group else skip this" 43 | echo "ResourceGroupLocation:" 44 | read resourceGroupLocation 45 | fi 46 | 47 | #templateFile Path - template file to be used 48 | templateFilePath="template.json" 49 | 50 | #parameter file path 51 | parametersFilePath="parameters.json" 52 | 53 | if [ -z "$subscriptionId" ] || [ -z "$resourceGroupName" ] || [ -z "$deploymentName" ]; then 54 | echo "Either one of subscriptionId, resourceGroupName, deploymentName is empty" 55 | usage 56 | fi 57 | 58 | #login to azure using your credentials 59 | azure login 60 | 61 | #set the default subscription id 62 | azure account set $subscriptionId 63 | 64 | #switch the mode to azure resource manager 65 | azure config mode arm 66 | 67 | #Check for existing resource group 68 | if [ -z "$resourceGroupLocation" ] ; 69 | then 70 | echo "Using existing resource group..." 71 | else 72 | echo "Creating a new resource group..." 73 | azure group create --name $resourceGroupName --location $resourceGroupLocation 74 | fi 75 | 76 | #Start deployment 77 | echo "Starting deployment..." 78 | azure group deployment create --name $deploymentName --resource-group $resourceGroupName --template-file $templateFilePath --parameters-file $parametersFilePath -------------------------------------------------------------------------------- /HOLs/Azure Resource Manager Templates/deployer.rb: -------------------------------------------------------------------------------- 1 | require 'azure_mgmt_resources' 2 | 3 | class Deployer 4 | 5 | # Initialize the deployer class with subscription, resource group and resource group location. The class will raise an 6 | # ArgumentError if there are empty values for Tenant Id, Client Id or Client Secret environment variables. 7 | # 8 | # @param [String] subscription_id the subscription to deploy the template 9 | # @param [String] resource_group the resource group to create or update and then deploy the template 10 | # @param [String] resource_group_location the location of the resource group 11 | def initialize(subscription_id, resource_group, resource_group_location) 12 | raise ArgumentError.new("Missing template file 'template.json' in current directory.") unless File.exist?('template.json') 13 | raise ArgumentError.new("Missing parameters file 'parameters.json' in current directory.") unless File.exist?('parameters.json') 14 | @resource_group = resource_group 15 | @subscription_id = subscription_id 16 | @resource_group_location = resource_group_location 17 | provider = MsRestAzure::ApplicationTokenProvider.new( 18 | ENV['AZURE_TENANT_ID'], 19 | ENV['AZURE_CLIENT_ID'], 20 | ENV['AZURE_CLIENT_SECRET']) 21 | credentials = MsRest::TokenCredentials.new(provider) 22 | @client = Azure::ARM::Resources::ResourceManagementClient.new(credentials) 23 | @client.subscription_id = @subscription_id 24 | end 25 | 26 | # Deploy the template to a resource group 27 | def deploy 28 | # ensure the resource group is created 29 | params = Azure::ARM::Resources::Models::ResourceGroup.new.tap do |rg| 30 | rg.location = @resource_group_location 31 | end 32 | @client.resource_groups.create_or_update_async(@resource_group, params).value! 33 | 34 | # build the deployment from a json file template from parameters 35 | template = File.read(File.expand_path(File.join(__dir__, 'template.json'))) 36 | deployment = Azure::ARM::Resources::Models::Deployment.new 37 | deployment.properties = Azure::ARM::Resources::Models::DeploymentProperties.new 38 | deployment.properties.template = JSON.parse(template) 39 | deployment.properties.mode = Azure::ARM::Resources::Models::DeploymentMode::Incremental 40 | 41 | # build the deployment template parameters from Hash to {key: {value: value}} format 42 | deploy_params = File.read(File.expand_path(File.join(__dir__, 'parameters.json'))) 43 | deployment.properties.parameters = JSON.parse(deploy_params)["parameters"] 44 | 45 | # put the deployment to the resource group 46 | @client.deployments.create_or_update(@resource_group, 'azure-sample', deployment).value!.body 47 | end 48 | end 49 | 50 | # Get user inputs and execute the script 51 | if(ARGV.empty?) 52 | puts "Please specify subscriptionId resourceGroupName resourceGroupLocation as command line arguments" 53 | exit 54 | end 55 | 56 | subscription_id = ARGV[0] # Azure Subscription Id 57 | resource_group = ARGV[1] # The resource group for deployment 58 | resource_group_location = ARGV[2] # The resource group location 59 | 60 | msg = "\nInitializing the Deployer class with subscription id: #{subscription_id}, resource group: #{resource_group}" 61 | msg += "\nand resource group location: #{resource_group_location}...\n\n" 62 | puts msg 63 | 64 | # Initialize the deployer class 65 | deployer = Deployer.new(subscription_id, resource_group, resource_group_location) 66 | 67 | puts "Beginning the deployment... \n\n" 68 | # Deploy the template 69 | deployment = deployer.deploy 70 | 71 | puts "Done deploying!!" -------------------------------------------------------------------------------- /HOLs/Azure Resource Manager Templates/parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", 3 | "contentVersion": "1.0.0.0", 4 | "parameters": { 5 | "IotHubs_mic16iot_name": { 6 | "value": null 7 | }, 8 | "namespaces_mic16ns_name": { 9 | "value": null 10 | }, 11 | "workspaceCollections_mic16collection_name": { 12 | "value": null 13 | }, 14 | "servers_mic16sql_name": { 15 | "value": null 16 | }, 17 | "storageAccounts_mic16storage_name": { 18 | "value": null 19 | }, 20 | "serverfarms_mic16plan_name": { 21 | "value": null 22 | }, 23 | "sites_mic16web_name": { 24 | "value": null 25 | }, 26 | "sites_mic16functions_name": { 27 | "value": null 28 | }, 29 | "AuthorizationRules_RootManageSharedAccessKey_name": { 30 | "value": null 31 | }, 32 | "eventhubs_mic16alerts_name": { 33 | "value": null 34 | }, 35 | "consumergroups_$Default_name": { 36 | "value": null 37 | }, 38 | "consumergroups_sbe_name": { 39 | "value": null 40 | }, 41 | "databases_mic16db_name": { 42 | "value": null 43 | }, 44 | "databases_master_name": { 45 | "value": null 46 | }, 47 | "firewallRules_AllowAllWindowsAzureIps_name": { 48 | "value": null 49 | }, 50 | "firewallRules_Everyone_name": { 51 | "value": null 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /HOLs/Azure Resource Manager Templates/template.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 3 | "contentVersion": "1.0.0.0", 4 | "parameters": { 5 | "IotHubs_mic16iot_name": { 6 | "defaultValue": "mic16iot", 7 | "type": "String" 8 | }, 9 | "namespaces_mic16ns_name": { 10 | "defaultValue": "mic16ns", 11 | "type": "String" 12 | }, 13 | "workspaceCollections_mic16collection_name": { 14 | "defaultValue": "mic16collection", 15 | "type": "String" 16 | }, 17 | "servers_mic16sql_name": { 18 | "defaultValue": "mic16sql", 19 | "type": "String" 20 | }, 21 | "storageAccounts_mic16storage_name": { 22 | "defaultValue": "mic16storage", 23 | "type": "String" 24 | }, 25 | "serverfarms_mic16plan_name": { 26 | "defaultValue": "mic16plan", 27 | "type": "String" 28 | }, 29 | "sites_mic16web_name": { 30 | "defaultValue": "mic16web", 31 | "type": "String" 32 | }, 33 | "sites_mic16functions_name": { 34 | "defaultValue": "mic16functions", 35 | "type": "String" 36 | }, 37 | "AuthorizationRules_RootManageSharedAccessKey_name": { 38 | "defaultValue": "mic16ns/RootManageSharedAccessKey", 39 | "type": "String" 40 | }, 41 | "eventhubs_mic16alerts_name": { 42 | "defaultValue": "mic16ns/mic16alerts", 43 | "type": "String" 44 | }, 45 | "consumergroups_$Default_name": { 46 | "defaultValue": "mic16ns/mic16alerts/$Default", 47 | "type": "String" 48 | }, 49 | "consumergroups_sbe_name": { 50 | "defaultValue": "mic16ns/mic16alerts/sbe", 51 | "type": "String" 52 | }, 53 | "databases_mic16db_name": { 54 | "defaultValue": "mic16sql/mic16db", 55 | "type": "String" 56 | }, 57 | "databases_master_name": { 58 | "defaultValue": "mic16sql/master", 59 | "type": "String" 60 | }, 61 | "firewallRules_AllowAllWindowsAzureIps_name": { 62 | "defaultValue": "mic16sql/AllowAllWindowsAzureIps", 63 | "type": "String" 64 | }, 65 | "firewallRules_Everyone_name": { 66 | "defaultValue": "mic16sql/Everyone", 67 | "type": "String" 68 | } 69 | }, 70 | "variables": {}, 71 | "resources": [ 72 | { 73 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Devices/IotHubs/mic16iot'.", 74 | "type": "Microsoft.Devices/IotHubs", 75 | "sku": { 76 | "name": "S1", 77 | "tier": "Standard", 78 | "capacity": 1 79 | }, 80 | "name": "[parameters('IotHubs_mic16iot_name')]", 81 | "apiVersion": "2016-02-03", 82 | "location": "westus", 83 | "tags": {}, 84 | "properties": { 85 | "ipFilterRules": [], 86 | "eventHubEndpoints": { 87 | "events": { 88 | "retentionTimeInDays": 1, 89 | "partitionCount": 4, 90 | "partitionIds": [ 91 | "0", 92 | "1", 93 | "2", 94 | "3" 95 | ], 96 | "path": "[parameters('IotHubs_mic16iot_name')]", 97 | "endpoint": "[concat('sb://iothub-ns-', parameters('IotHubs_mic16iot_name'),'-74337-836f3c3230.servicebus.windows.net/')]" 98 | }, 99 | "operationsMonitoringEvents": { 100 | "retentionTimeInDays": 1, 101 | "partitionCount": 4, 102 | "partitionIds": [ 103 | "0", 104 | "1", 105 | "2", 106 | "3" 107 | ], 108 | "path": "[concat(parameters('IotHubs_mic16iot_name'),'-operationmonitoring')]", 109 | "endpoint": "[concat('sb://iothub-ns-', parameters('IotHubs_mic16iot_name'),'-74337-836f3c3230.servicebus.windows.net/')]" 110 | } 111 | }, 112 | "storageEndpoints": { 113 | "$default": { 114 | "sasTtlAsIso8601": "PT1H", 115 | "connectionString": "", 116 | "containerName": "" 117 | } 118 | }, 119 | "enableFileUploadNotifications": false, 120 | "cloudToDevice": { 121 | "maxDeliveryCount": 10, 122 | "defaultTtlAsIso8601": "PT1H", 123 | "feedback": { 124 | "lockDurationAsIso8601": "PT1M", 125 | "ttlAsIso8601": "PT1H", 126 | "maxDeliveryCount": 10 127 | } 128 | }, 129 | "operationsMonitoringProperties": { 130 | "events": { 131 | "None": "None", 132 | "Connections": "None", 133 | "DeviceTelemetry": "None", 134 | "C2DCommands": "None", 135 | "DeviceIdentityOperations": "None", 136 | "FileUploadOperations": "None" 137 | } 138 | }, 139 | "features": "None" 140 | }, 141 | "resources": [], 142 | "dependsOn": [] 143 | }, 144 | { 145 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourcegroups/mic16group/providers/Microsoft.EventHub/namespaces/mic16ns'.", 146 | "type": "Microsoft.EventHub/namespaces", 147 | "sku": { 148 | "name": "Standard", 149 | "tier": "Standard" 150 | }, 151 | "kind": "EventHub", 152 | "name": "[parameters('namespaces_mic16ns_name')]", 153 | "apiVersion": "2015-08-01", 154 | "location": "West US", 155 | "tags": {}, 156 | "properties": { 157 | "provisioningState": "Succeeded", 158 | "status": "Active", 159 | "createdAt": "2016-10-10T05:59:43.76Z", 160 | "serviceBusEndpoint": "[concat('https://', parameters('namespaces_mic16ns_name'),'.servicebus.windows.net:443/')]", 161 | "enabled": true, 162 | "updatedAt": "2016-10-10T06:00:05.167Z" 163 | }, 164 | "resources": [], 165 | "dependsOn": [] 166 | }, 167 | { 168 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.PowerBI/workspaceCollections/mic16collection'.", 169 | "type": "Microsoft.PowerBI/workspaceCollections", 170 | "sku": { 171 | "name": "S1", 172 | "tier": "Standard" 173 | }, 174 | "name": "[parameters('workspaceCollections_mic16collection_name')]", 175 | "apiVersion": "2016-01-29", 176 | "location": "West US", 177 | "tags": {}, 178 | "properties": { 179 | "provisioningState": "Succeeded", 180 | "createdDate": "2016-10-10T19:46:11.943", 181 | "status": "Active" 182 | }, 183 | "resources": [], 184 | "dependsOn": [] 185 | }, 186 | { 187 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Sql/servers/mic16sql'.", 188 | "type": "Microsoft.Sql/servers", 189 | "kind": "v12.0", 190 | "name": "[parameters('servers_mic16sql_name')]", 191 | "apiVersion": "2014-04-01-preview", 192 | "location": "West US", 193 | "properties": { 194 | "administratorLogin": "sqladmin", 195 | "administratorLoginPassword": null, 196 | "version": "12.0" 197 | }, 198 | "resources": [], 199 | "dependsOn": [] 200 | }, 201 | { 202 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Storage/storageAccounts/mic16storage'.", 203 | "type": "Microsoft.Storage/storageAccounts", 204 | "sku": { 205 | "name": "Standard_LRS", 206 | "tier": "Standard" 207 | }, 208 | "kind": "Storage", 209 | "name": "[parameters('storageAccounts_mic16storage_name')]", 210 | "apiVersion": "2016-01-01", 211 | "location": "westus", 212 | "tags": {}, 213 | "properties": {}, 214 | "resources": [], 215 | "dependsOn": [] 216 | }, 217 | { 218 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Web/serverfarms/mic16plan'.", 219 | "type": "Microsoft.Web/serverfarms", 220 | "sku": { 221 | "name": "B1", 222 | "tier": "Basic", 223 | "size": "B1", 224 | "family": "B", 225 | "capacity": 1 226 | }, 227 | "name": "[parameters('serverfarms_mic16plan_name')]", 228 | "apiVersion": "2015-08-01", 229 | "location": "West US", 230 | "properties": { 231 | "name": "[parameters('serverfarms_mic16plan_name')]", 232 | "numberOfWorkers": 1 233 | }, 234 | "resources": [], 235 | "dependsOn": [] 236 | }, 237 | { 238 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Web/sites/mic16web'.", 239 | "type": "Microsoft.Web/sites", 240 | "name": "[parameters('sites_mic16web_name')]", 241 | "apiVersion": "2015-08-01", 242 | "location": "West US", 243 | "tags": { 244 | "hidden-related:/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourcegroups/mic16group/providers/Microsoft.Web/serverfarms/mic16plan": "empty" 245 | }, 246 | "properties": { 247 | "name": "[parameters('sites_mic16web_name')]", 248 | "hostNames": [ 249 | "mic16web.azurewebsites.net" 250 | ], 251 | "enabledHostNames": [ 252 | "mic16web.azurewebsites.net", 253 | "mic16web.scm.azurewebsites.net" 254 | ], 255 | "hostNameSslStates": [ 256 | { 257 | "name": "[concat(parameters('sites_mic16web_name'),'.azurewebsites.net')]", 258 | "sslState": 0, 259 | "thumbprint": null, 260 | "ipBasedSslState": 0 261 | }, 262 | { 263 | "name": "[concat(parameters('sites_mic16web_name'),'.scm.azurewebsites.net')]", 264 | "sslState": 0, 265 | "thumbprint": null, 266 | "ipBasedSslState": 0 267 | } 268 | ], 269 | "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('serverfarms_mic16plan_name'))]" 270 | }, 271 | "resources": [], 272 | "dependsOn": [ 273 | "[resourceId('Microsoft.Web/serverfarms', parameters('serverfarms_mic16plan_name'))]" 274 | ] 275 | }, 276 | { 277 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Web/sites/mic16functions'.", 278 | "type": "Microsoft.Web/sites", 279 | "kind": "functionapp", 280 | "name": "[parameters('sites_mic16functions_name')]", 281 | "apiVersion": "2015-08-01", 282 | "location": "West US", 283 | "tags": { 284 | "hidden-related:/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourcegroups/mic16group/providers/Microsoft.Web/serverfarms/mic16plan": "empty" 285 | }, 286 | "properties": { 287 | "name": "[parameters('sites_mic16functions_name')]", 288 | "hostNames": [ 289 | "mic16functions.azurewebsites.net" 290 | ], 291 | "enabledHostNames": [ 292 | "mic16functions.azurewebsites.net", 293 | "mic16functions.scm.azurewebsites.net" 294 | ], 295 | "hostNameSslStates": [ 296 | { 297 | "name": "[concat(parameters('sites_mic16functions_name'),'.azurewebsites.net')]", 298 | "sslState": 0, 299 | "thumbprint": null, 300 | "ipBasedSslState": 0 301 | }, 302 | { 303 | "name": "[concat(parameters('sites_mic16functions_name'),'.scm.azurewebsites.net')]", 304 | "sslState": 0, 305 | "thumbprint": null, 306 | "ipBasedSslState": 0 307 | } 308 | ], 309 | "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('serverfarms_mic16plan_name'))]" 310 | }, 311 | "resources": [], 312 | "dependsOn": [ 313 | "[resourceId('Microsoft.Web/serverfarms', parameters('serverfarms_mic16plan_name'))]" 314 | ] 315 | }, 316 | { 317 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourcegroups/mic16group/providers/Microsoft.EventHub/namespaces/mic16ns/AuthorizationRules/RootManageSharedAccessKey'.", 318 | "type": "Microsoft.EventHub/namespaces/AuthorizationRules", 319 | "name": "[parameters('AuthorizationRules_RootManageSharedAccessKey_name')]", 320 | "apiVersion": "2015-08-01", 321 | "properties": { 322 | "rights": [ 323 | "Listen", 324 | "Manage", 325 | "Send" 326 | ] 327 | }, 328 | "resources": [], 329 | "dependsOn": [ 330 | "[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_mic16ns_name'))]" 331 | ] 332 | }, 333 | { 334 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourcegroups/mic16group/providers/Microsoft.EventHub/namespaces/mic16ns/eventhubs/mic16alerts'.", 335 | "type": "Microsoft.EventHub/namespaces/eventhubs", 336 | "name": "[parameters('eventhubs_mic16alerts_name')]", 337 | "apiVersion": "2015-08-01", 338 | "location": "West US", 339 | "properties": { 340 | "messageRetentionInDays": 1, 341 | "status": "Active", 342 | "createdAt": "2016-10-10T06:05:53.953", 343 | "updatedAt": "2016-10-10T06:05:57.017", 344 | "partitionCount": 2, 345 | "partitionIds": [ 346 | "0", 347 | "1" 348 | ] 349 | }, 350 | "resources": [], 351 | "dependsOn": [ 352 | "[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_mic16ns_name'))]" 353 | ] 354 | }, 355 | { 356 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourcegroups/mic16group/providers/Microsoft.EventHub/namespaces/mic16ns/eventhubs/mic16alerts/consumergroups/$Default'.", 357 | "type": "Microsoft.EventHub/namespaces/eventhubs/consumergroups", 358 | "name": "[parameters('consumergroups_$Default_name')]", 359 | "apiVersion": "2015-08-01", 360 | "location": "West US", 361 | "properties": { 362 | "createdAt": "2016-10-10T06:05:54.7439948", 363 | "updatedAt": "2016-10-10T06:05:54.7439948" 364 | }, 365 | "resources": [], 366 | "dependsOn": [ 367 | "[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_mic16ns_name'))]", 368 | "[resourceId('Microsoft.EventHub/namespaces/eventhubs', parameters('eventhubs_mic16alerts_name'))]" 369 | ] 370 | }, 371 | { 372 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourcegroups/mic16group/providers/Microsoft.EventHub/namespaces/mic16ns/eventhubs/mic16alerts/consumergroups/sbe'.", 373 | "type": "Microsoft.EventHub/namespaces/eventhubs/consumergroups", 374 | "name": "[parameters('consumergroups_sbe_name')]", 375 | "apiVersion": "2015-08-01", 376 | "location": "West US", 377 | "properties": { 378 | "createdAt": "2016-10-10T07:13:09.8701443", 379 | "updatedAt": "2016-10-10T07:13:09.8701443" 380 | }, 381 | "resources": [], 382 | "dependsOn": [ 383 | "[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_mic16ns_name'))]", 384 | "[resourceId('Microsoft.EventHub/namespaces/eventhubs', parameters('eventhubs_mic16alerts_name'))]" 385 | ] 386 | }, 387 | { 388 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Sql/servers/mic16sql/databases/mic16db'.", 389 | "type": "Microsoft.Sql/servers/databases", 390 | "kind": "v12.0,user", 391 | "name": "[parameters('databases_mic16db_name')]", 392 | "apiVersion": "2014-04-01-preview", 393 | "location": "West US", 394 | "properties": { 395 | "databaseId": "af44ca7a-d2eb-46fd-8839-91759b83fcae", 396 | "edition": "Basic", 397 | "status": "Online", 398 | "serviceLevelObjective": "Basic", 399 | "collation": "SQL_Latin1_General_CP1_CI_AS", 400 | "maxSizeBytes": "2147483648", 401 | "creationDate": "2016-10-10T04:40:19.63Z", 402 | "currentServiceObjectiveId": "dd6d99bb-f193-4ec1-86f2-43d3bccbc49c", 403 | "requestedServiceObjectiveId": "dd6d99bb-f193-4ec1-86f2-43d3bccbc49c", 404 | "requestedServiceObjectiveName": "Basic", 405 | "defaultSecondaryLocation": "East US", 406 | "earliestRestoreDate": "2016-10-10T04:50:59.287Z", 407 | "elasticPoolName": null, 408 | "containmentState": 2 409 | }, 410 | "resources": [], 411 | "dependsOn": [ 412 | "[resourceId('Microsoft.Sql/servers', parameters('servers_mic16sql_name'))]" 413 | ] 414 | }, 415 | { 416 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Sql/servers/mic16sql/databases/master'.", 417 | "type": "Microsoft.Sql/servers/databases", 418 | "kind": "v12.0,system", 419 | "name": "[parameters('databases_master_name')]", 420 | "apiVersion": "2014-04-01-preview", 421 | "location": "West US", 422 | "properties": { 423 | "databaseId": "12dbcf20-fe75-4ce5-b556-d50ee69d6faf", 424 | "edition": "System", 425 | "status": "Online", 426 | "serviceLevelObjective": "System0", 427 | "collation": "SQL_Latin1_General_CP1_CI_AS", 428 | "maxSizeBytes": "32212254720", 429 | "creationDate": "2016-10-10T04:39:54.907Z", 430 | "currentServiceObjectiveId": "29dd7459-4a7c-4e56-be22-f0adda49440d", 431 | "requestedServiceObjectiveId": "29dd7459-4a7c-4e56-be22-f0adda49440d", 432 | "requestedServiceObjectiveName": "System0", 433 | "defaultSecondaryLocation": "East US", 434 | "earliestRestoreDate": null, 435 | "elasticPoolName": null, 436 | "containmentState": 2 437 | }, 438 | "resources": [], 439 | "dependsOn": [ 440 | "[resourceId('Microsoft.Sql/servers', parameters('servers_mic16sql_name'))]" 441 | ] 442 | }, 443 | { 444 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Sql/servers/mic16sql/firewallRules/AllowAllWindowsAzureIps'.", 445 | "type": "Microsoft.Sql/servers/firewallRules", 446 | "kind": "v12.0", 447 | "name": "[parameters('firewallRules_AllowAllWindowsAzureIps_name')]", 448 | "apiVersion": "2014-04-01-preview", 449 | "location": "West US", 450 | "properties": { 451 | "startIpAddress": "0.0.0.0", 452 | "endIpAddress": "0.0.0.0" 453 | }, 454 | "resources": [], 455 | "dependsOn": [ 456 | "[resourceId('Microsoft.Sql/servers', parameters('servers_mic16sql_name'))]" 457 | ] 458 | }, 459 | { 460 | "comments": "Generalized from resource: '/subscriptions/ed3428a6-ba3e-444c-a02b-67522abcae04/resourceGroups/mic16group/providers/Microsoft.Sql/servers/mic16sql/firewallRules/Everyone'.", 461 | "type": "Microsoft.Sql/servers/firewallRules", 462 | "kind": "v12.0", 463 | "name": "[parameters('firewallRules_Everyone_name')]", 464 | "apiVersion": "2014-04-01-preview", 465 | "location": "West US", 466 | "properties": { 467 | "startIpAddress": "0.0.0.0", 468 | "endIpAddress": "255.255.255.255" 469 | }, 470 | "resources": [], 471 | "dependsOn": [ 472 | "[resourceId('Microsoft.Sql/servers', parameters('servers_mic16sql_name'))]" 473 | ] 474 | } 475 | ] 476 | } -------------------------------------------------------------------------------- /HOLs/FunctionApp/TempAlert/function.json: -------------------------------------------------------------------------------- 1 | { 2 | "bindings": [ 3 | { 4 | "type": "eventHubTrigger", 5 | "name": "myEventHubMessage", 6 | "direction": "in", 7 | "path": "alerts", 8 | "connection": "ns" 9 | } 10 | ], 11 | "disabled": false 12 | } -------------------------------------------------------------------------------- /HOLs/FunctionApp/TempAlert/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "frameworks": { 3 | "net46": { 4 | "dependencies": { 5 | "Microsoft.AspNet.WebApi.Client": "5.2.3", 6 | "Microsoft.AspNet.WebApi.Core": "5.2.3", 7 | "Microsoft.Azure.Amqp": "1.1.5", 8 | "Microsoft.Azure.Devices": "1.0.9", 9 | "Newtonsoft.Json": "8.0.3" 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /HOLs/FunctionApp/TempAlert/run.csx: -------------------------------------------------------------------------------- 1 | using System; 2 | using Newtonsoft.Json; 3 | using Microsoft.Azure.Devices; 4 | using System.Text; 5 | 6 | // The EventHubMessage class will be used to deserialize 7 | // the incoming event hub message into a .net object 8 | // we can easily access the properties on 9 | class EventHubMessage { 10 | public string deviceid { get; set;} 11 | public DateTime timestamp {get; set;} 12 | public float temperature {get; set;} 13 | } 14 | 15 | // The AlertMessage class will be used to create the 16 | // alert message that will be sent to the device. 17 | // It will be deserialized into json and sent 18 | // to the device as a cloud-to-device message via the 19 | // Azure IoT Hub 20 | class AlertMessage { 21 | public string type {get; set;} 22 | public string message {get; set;} 23 | } 24 | 25 | // In the portal, open up the IoT Hub, then "Shared Access Policies" and copy the primary connection string 26 | // for the "service" access policy and paste it in below 27 | static string connectionString = ""; 28 | 29 | // This is the Azure IoT Hub client. 30 | // We'll use it to send an alert message to the device 31 | static ServiceClient serviceClient; 32 | 33 | public static async void Run(string myEventHubMessage, TraceWriter log) 34 | { 35 | try 36 | { 37 | //Log the incoming message to the console. 38 | //You can see these log messages in the Azure Portal on the "Develop" page for your function 39 | log.Info($"C# Event Hub trigger function processed a message: {myEventHubMessage}"); 40 | 41 | //Get the incoming JSON message from the event jub and deserialize it into 42 | //an instance of the EventHubMessage class we defined above. 43 | EventHubMessage eventHubMessage = JsonConvert.DeserializeObject(myEventHubMessage); 44 | 45 | //More log messages, just helps you debug this function in the portal 46 | log.Info($"deviceid: {eventHubMessage.deviceid}"); 47 | log.Info($"timestamp: {eventHubMessage.timestamp}"); 48 | log.Info($"temperature: {eventHubMessage.temperature}"); 49 | 50 | //Connect to the Azure IoT Hub using the connection string you provided above. 51 | serviceClient = ServiceClient.CreateFromConnectionString(connectionString); 52 | 53 | //Generate the cloud-to-device message that will be sent down to the 54 | //Intel NUC via the Azure IoT Hub. The Node-RED flow we develop on the NUC 55 | //will receive this message, sound the buzzer and display the "message" text on the LCD 56 | AlertMessage alertMessage = new AlertMessage() { 57 | type = "temp", 58 | message=$"Temp Alert: {eventHubMessage.temperature}" 59 | }; 60 | 61 | //Deserialize the alertMessage into JSON 62 | string alertMessageJson = JsonConvert.SerializeObject(alertMessage); 63 | //Get the message bytes 64 | var alertMessageBytes = Encoding.ASCII.GetBytes(alertMessageJson); 65 | //Create an IoT Hub Microsoft.Azure.Devices with our data in it 66 | var cloudToDeviceMessage = new Message(alertMessageBytes); 67 | 68 | //Finally, Use the IoT Hub service client to send the cloud-to-device message asynchronously 69 | await serviceClient.SendAsync(eventHubMessage.deviceid, cloudToDeviceMessage); 70 | } 71 | catch (System.Exception ex) 72 | { 73 | //Log any errors that occurred. 74 | string errmsg = $"An {ex.GetType().Name} exception occurred. {ex.Message}"; 75 | log.Info(errmsg); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /HOLs/FunctionApp/host.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /HOLs/Node-RED Flows/Flow 1.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "d0c7d782.a2b7f8", 4 | "type": "mqtt-broker", 5 | "z": "", 6 | "broker": "localhost", 7 | "port": "1883", 8 | "clientid": "", 9 | "usetls": false, 10 | "verifyservercert": true, 11 | "compatmode": true, 12 | "keepalive": "60", 13 | "cleansession": true, 14 | "willTopic": "", 15 | "willQos": "0", 16 | "willRetain": null, 17 | "willPayload": "", 18 | "birthTopic": "", 19 | "birthQos": "0", 20 | "birthRetain": null, 21 | "birthPayload": "" 22 | }, 23 | { 24 | "id": "72745c67.5ea434", 25 | "type": "function", 26 | "z": "f9e23d29.a970f", 27 | "name": "changeColor", 28 | "func": "\nif (msg.payload >= 0 && msg.payload <= 78){\n //red\n msg.lcdColor = {r: 255, g: 0, b: 0};\n}\nelse if (msg.payload > 78 && msg.payload <= 156){\n //orange\n msg.lcdColor = {r: 255, g: 128, b: 0};\n}\nelse if (msg.payload > 156 && msg.payload <= 234){\n //yellow\n msg.lcdColor = {r: 255, g: 255, b: 0};\n}\nelse if (msg.payload > 234 && msg.payload <= 312){\n //red-green\n msg.lcdColor = {r: 128, g: 255, b: 0};\n}\nelse if (msg.payload > 312 && msg.payload <= 390){\n //green\n msg.lcdColor = {r: 0, g: 255, b: 0};\n}\nelse if (msg.payload > 390 && msg.payload <= 468){\n //blue-green\n msg.lcdColor = {r: 0, g: 255, b: 128};\n}\nelse if (msg.payload > 468 && msg.payload <= 546){\n //green-blue\n msg.lcdColor = {r: 0, g: 255, b: 255};\n}\nelse if (msg.payload > 546 && msg.payload <= 624){\n //light-blue\n msg.lcdColor = {r: 0, g: 128, b: 255};\n}\nelse if (msg.payload > 624 && msg.payload <= 702){\n //blue\n msg.lcdColor = {r: 0, g: 0, b: 255};\n}\nelse if (msg.payload > 702 && msg.payload <= 780){\n //purple\n msg.lcdColor = {r: 127, g: 0, b: 255};\n}\nelse if (msg.payload > 780 && msg.payload <= 858){\n //pink-purple\n msg.lcdColor = {r: 255, g: 0, b: 255};\n}\nelse if (msg.payload > 858 && msg.payload <= 936){\n //pink\n msg.lcdColor = {r: 255, g: 0, b: 127};\n}\nelse if (msg.payload > 936 && msg.payload <= 1023){\n //gray\n msg.lcdColor = {r: 128, g: 128, b: 128};\n}\n\n//don't display rotary value on lcd\nmsg.lcdCursor = {row: 1, column: 0};\nmsg.payload = '';\n\nreturn msg;", 29 | "outputs": 1, 30 | "noerr": 0, 31 | "x": 285.09234619140625, 32 | "y": 170.09091186523438, 33 | "wires": [ 34 | [ 35 | "f2047f7.382f58" 36 | ] 37 | ] 38 | }, 39 | { 40 | "id": "ac9b0c14.85875", 41 | "type": "exec", 42 | "z": "f9e23d29.a970f", 43 | "command": "ifconfig eth0 | grep \"inet addr\" | awk -F: '{print$2}' | awk '{printf \"%s\", $1}'", 44 | "addpay": false, 45 | "append": "", 46 | "useSpawn": "", 47 | "name": "getIP", 48 | "x": 282.09234619140625, 49 | "y": 113.59091186523438, 50 | "wires": [ 51 | [ 52 | "f2047f7.382f58" 53 | ], 54 | [], 55 | [] 56 | ] 57 | }, 58 | { 59 | "id": "ba67aefc.4aec6", 60 | "type": "inject", 61 | "z": "f9e23d29.a970f", 62 | "name": "updateIP", 63 | "topic": "ip", 64 | "payload": "", 65 | "payloadType": "num", 66 | "repeat": "60", 67 | "crontab": "", 68 | "once": true, 69 | "x": 117.09234619140625, 70 | "y": 114.09091186523438, 71 | "wires": [ 72 | [ 73 | "ac9b0c14.85875" 74 | ] 75 | ] 76 | }, 77 | { 78 | "id": "268139d0.3b6626", 79 | "type": "chart tag", 80 | "z": "f9e23d29.a970f", 81 | "title": "Rotary", 82 | "chartType": "line", 83 | "dataSource": "Line", 84 | "units": "Raw", 85 | "min": "0", 86 | "max": "1023", 87 | "targetLow": "", 88 | "targetHigh": "", 89 | "priority": "", 90 | "sourcePriority": "1", 91 | "ttl": "3", 92 | "points": 50, 93 | "x": 284.09234619140625, 94 | "y": 219.09091186523438, 95 | "wires": [ 96 | [ 97 | "96d4b3e6.64672" 98 | ] 99 | ] 100 | }, 101 | { 102 | "id": "53fde350.8833ac", 103 | "type": "chart tag", 104 | "z": "f9e23d29.a970f", 105 | "title": "Rotary", 106 | "chartType": "gauge", 107 | "dataSource": "Gauge", 108 | "units": "", 109 | "min": "0", 110 | "max": "1023", 111 | "targetLow": "", 112 | "targetHigh": "", 113 | "priority": "", 114 | "sourcePriority": "2", 115 | "ttl": "3", 116 | "points": 50, 117 | "x": 285.09234619140625, 118 | "y": 264.0909118652344, 119 | "wires": [ 120 | [ 121 | "96d4b3e6.64672" 122 | ] 123 | ] 124 | }, 125 | { 126 | "id": "69e85a89.f34e14", 127 | "type": "upm-grove-rotary", 128 | "z": "f9e23d29.a970f", 129 | "name": "", 130 | "platform": "512", 131 | "unit": "ABSRAW", 132 | "pin": "0", 133 | "interval": 1000, 134 | "x": 111.09234619140625, 135 | "y": 201.09091186523438, 136 | "wires": [ 137 | [ 138 | "72745c67.5ea434", 139 | "268139d0.3b6626", 140 | "53fde350.8833ac", 141 | "30fd1d52.f08e62" 142 | ] 143 | ] 144 | }, 145 | { 146 | "id": "f2047f7.382f58", 147 | "type": "upm-grove-rgb-lcd", 148 | "z": "f9e23d29.a970f", 149 | "name": "", 150 | "platform": "512", 151 | "r": 0, 152 | "g": 0, 153 | "b": 255, 154 | "row": 0, 155 | "column": 0, 156 | "x": 483.09234619140625, 157 | "y": 100.09091186523438, 158 | "wires": [] 159 | }, 160 | { 161 | "id": "96d4b3e6.64672", 162 | "type": "mqtt out", 163 | "z": "f9e23d29.a970f", 164 | "name": "Charts", 165 | "topic": "/sensors", 166 | "qos": "", 167 | "retain": "", 168 | "broker": "d0c7d782.a2b7f8", 169 | "x": 451.09234619140625, 170 | "y": 239.09091186523438, 171 | "wires": [] 172 | }, 173 | { 174 | "id": "30fd1d52.f08e62", 175 | "type": "debug", 176 | "z": "f9e23d29.a970f", 177 | "name": "", 178 | "active": false, 179 | "console": "false", 180 | "complete": "false", 181 | "x": 266.9517059326172, 182 | "y": 378.8053894042969, 183 | "wires": [] 184 | } 185 | ] -------------------------------------------------------------------------------- /HOLs/Node-RED Flows/Flow 2.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "3041255f.f81bfa", 4 | "type": "upm-grove-led", 5 | "z": "1ce19b44.f73915", 6 | "name": "Blinky", 7 | "platform": "512", 8 | "mode": "blink", 9 | "pin": "13", 10 | "interval": 1000, 11 | "x": 218, 12 | "y": 200, 13 | "wires": [] 14 | } 15 | ] -------------------------------------------------------------------------------- /HOLs/Node-RED Flows/Flow 3 - 01 - Temperature on LCD.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "9d4d97c7.d63528", 4 | "type": "upm-grove-temperature", 5 | "z": "e6060ba3.1c8608", 6 | "name": "", 7 | "platform": "512", 8 | "unit": "C", 9 | "pin": "1", 10 | "interval": "10000", 11 | "x": 130, 12 | "y": 160, 13 | "wires": [ 14 | [ 15 | "34298f7e.e4fac" 16 | ] 17 | ] 18 | }, 19 | { 20 | "id": "34298f7e.e4fac", 21 | "type": "function", 22 | "z": "e6060ba3.1c8608", 23 | "name": "Data Conversion", 24 | "func": "msg.payload = msg.payload * 3.3 / 5\nreturn msg;", 25 | "outputs": 1, 26 | "noerr": 0, 27 | "x": 350, 28 | "y": 160, 29 | "wires": [ 30 | [ 31 | "2def18a9.bbcdb8", 32 | "27aa15f6.51b8ca" 33 | ] 34 | ] 35 | }, 36 | { 37 | "id": "2def18a9.bbcdb8", 38 | "type": "function", 39 | "z": "e6060ba3.1c8608", 40 | "name": "Create Payload", 41 | "func": "var gateway = \"IntelIoTGateway\";\nreturn {\n payload: {\n deviceID: gateway,\n timestamp: new Date().toISOString(),\n temperature: msg.payload\n }\n};", 42 | "outputs": 1, 43 | "noerr": 0, 44 | "x": 160, 45 | "y": 240, 46 | "wires": [ 47 | [ 48 | "ccd4d8d.37ce228" 49 | ] 50 | ] 51 | }, 52 | { 53 | "id": "ccd4d8d.37ce228", 54 | "type": "json", 55 | "z": "e6060ba3.1c8608", 56 | "name": "", 57 | "x": 310, 58 | "y": 240, 59 | "wires": [ 60 | [ 61 | "617d0aed.1e1324" 62 | ] 63 | ] 64 | }, 65 | { 66 | "id": "617d0aed.1e1324", 67 | "type": "debug", 68 | "z": "e6060ba3.1c8608", 69 | "name": "", 70 | "active": true, 71 | "console": "false", 72 | "complete": "false", 73 | "x": 510, 74 | "y": 240, 75 | "wires": [] 76 | }, 77 | { 78 | "id": "27aa15f6.51b8ca", 79 | "type": "upm-grove-rgb-lcd", 80 | "z": "e6060ba3.1c8608", 81 | "name": "Show the Temperature", 82 | "platform": "512", 83 | "r": 0, 84 | "g": "255", 85 | "b": "0", 86 | "row": "1", 87 | "column": 0, 88 | "x": 390, 89 | "y": 80, 90 | "wires": [] 91 | } 92 | ] -------------------------------------------------------------------------------- /HOLs/Node-RED Flows/Flow 3 - 02 - Add Azure IoT Hub Node.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "9d4d97c7.d63528", 4 | "type": "upm-grove-temperature", 5 | "z": "e6060ba3.1c8608", 6 | "name": "", 7 | "platform": "512", 8 | "unit": "C", 9 | "pin": "1", 10 | "interval": "10000", 11 | "x": 130, 12 | "y": 160, 13 | "wires": [ 14 | [ 15 | "34298f7e.e4fac" 16 | ] 17 | ] 18 | }, 19 | { 20 | "id": "34298f7e.e4fac", 21 | "type": "function", 22 | "z": "e6060ba3.1c8608", 23 | "name": "Data Conversion", 24 | "func": "msg.payload = msg.payload * 3.3 / 5\nreturn msg;", 25 | "outputs": 1, 26 | "noerr": 0, 27 | "x": 350, 28 | "y": 160, 29 | "wires": [ 30 | [ 31 | "2def18a9.bbcdb8", 32 | "27aa15f6.51b8ca" 33 | ] 34 | ] 35 | }, 36 | { 37 | "id": "2def18a9.bbcdb8", 38 | "type": "function", 39 | "z": "e6060ba3.1c8608", 40 | "name": "Create Payload", 41 | "func": "var gateway = \"PASTE YOUR IOT HUB DEVICE NAME HERE\";\nreturn {\n payload: {\n deviceID: gateway,\n timestamp: new Date().toISOString(),\n temperature: msg.payload\n }\n};", 42 | "outputs": 1, 43 | "noerr": 0, 44 | "x": 160, 45 | "y": 240, 46 | "wires": [ 47 | [ 48 | "ccd4d8d.37ce228" 49 | ] 50 | ] 51 | }, 52 | { 53 | "id": "ccd4d8d.37ce228", 54 | "type": "json", 55 | "z": "e6060ba3.1c8608", 56 | "name": "", 57 | "x": 310, 58 | "y": 240, 59 | "wires": [ 60 | [ 61 | "617d0aed.1e1324", 62 | "89896fc4.e221f" 63 | ] 64 | ] 65 | }, 66 | { 67 | "id": "617d0aed.1e1324", 68 | "type": "debug", 69 | "z": "e6060ba3.1c8608", 70 | "name": "", 71 | "active": true, 72 | "console": "false", 73 | "complete": "false", 74 | "x": 510, 75 | "y": 240, 76 | "wires": [] 77 | }, 78 | { 79 | "id": "27aa15f6.51b8ca", 80 | "type": "upm-grove-rgb-lcd", 81 | "z": "e6060ba3.1c8608", 82 | "name": "Show the Temperature", 83 | "platform": "512", 84 | "r": 0, 85 | "g": "255", 86 | "b": "0", 87 | "row": "1", 88 | "column": 0, 89 | "x": 390, 90 | "y": 80, 91 | "wires": [] 92 | }, 93 | { 94 | "id": "89896fc4.e221f", 95 | "type": "azureiothub", 96 | "z": "e6060ba3.1c8608", 97 | "name": "Azure IoT Hub", 98 | "protocol": "amqp", 99 | "x": 320, 100 | "y": 340, 101 | "wires": [ 102 | [] 103 | ] 104 | } 105 | ] -------------------------------------------------------------------------------- /HOLs/Node-RED Flows/Flow 3 - 03 - Alert and Buzzer Nodes Only.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "620468b8.5bbd38", 4 | "type": "function", 5 | "z": "e6060ba3.1c8608", 6 | "name": "To String", 7 | "func": "msg.payload = String.fromCharCode.apply(null, new Uint16Array(msg.payload));\nreturn msg;", 8 | "outputs": 1, 9 | "noerr": 0, 10 | "x": 160, 11 | "y": 400, 12 | "wires": [ 13 | [ 14 | "46d0d84d.3489a8" 15 | ] 16 | ] 17 | }, 18 | { 19 | "id": "46d0d84d.3489a8", 20 | "type": "json", 21 | "z": "e6060ba3.1c8608", 22 | "name": "", 23 | "x": 310, 24 | "y": 400, 25 | "wires": [ 26 | [ 27 | "7a526de7.f1dd14", 28 | "88b54d32.90f8", 29 | "8d65a1b4.e01e2" 30 | ] 31 | ] 32 | }, 33 | { 34 | "id": "7a526de7.f1dd14", 35 | "type": "debug", 36 | "z": "e6060ba3.1c8608", 37 | "name": "", 38 | "active": true, 39 | "console": "false", 40 | "complete": "payload", 41 | "x": 490, 42 | "y": 400, 43 | "wires": [] 44 | }, 45 | { 46 | "id": "8d65a1b4.e01e2", 47 | "type": "function", 48 | "z": "e6060ba3.1c8608", 49 | "name": "Get the Message", 50 | "func": "msg.payload = msg.payload.message\nreturn msg;", 51 | "outputs": 1, 52 | "noerr": 0, 53 | "x": 495, 54 | "y": 513, 55 | "wires": [ 56 | [ 57 | "d268431f.fab68" 58 | ] 59 | ] 60 | }, 61 | { 62 | "id": "88b54d32.90f8", 63 | "type": "switch", 64 | "z": "e6060ba3.1c8608", 65 | "name": "If Temp Alert", 66 | "property": "payload.type", 67 | "propertyType": "msg", 68 | "rules": [ 69 | { 70 | "t": "eq", 71 | "v": "temp", 72 | "vt": "str" 73 | } 74 | ], 75 | "checkall": "false", 76 | "outputs": 1, 77 | "x": 137, 78 | "y": 500, 79 | "wires": [ 80 | [ 81 | "77804d3c.37d0c4" 82 | ] 83 | ] 84 | }, 85 | { 86 | "id": "77804d3c.37d0c4", 87 | "type": "function", 88 | "z": "e6060ba3.1c8608", 89 | "name": "Turn on Buzzer", 90 | "func": "msg.payload = 1;\nreturn msg;", 91 | "outputs": 1, 92 | "noerr": 0, 93 | "x": 147, 94 | "y": 560, 95 | "wires": [ 96 | [ 97 | "f9aa061a.e1f8a8" 98 | ] 99 | ] 100 | }, 101 | { 102 | "id": "f9aa061a.e1f8a8", 103 | "type": "UPM-Grove-Buzzer", 104 | "z": "e6060ba3.1c8608", 105 | "name": "", 106 | "platform": "512", 107 | "volume": "0.125", 108 | "pin": "3", 109 | "x": 145, 110 | "y": 618, 111 | "wires": [] 112 | }, 113 | { 114 | "id": "d268431f.fab68", 115 | "type": "upm-grove-rgb-lcd", 116 | "z": "e6060ba3.1c8608", 117 | "name": "Show the Message", 118 | "platform": "512", 119 | "r": 255, 120 | "g": 0, 121 | "b": 0, 122 | "row": "1", 123 | "column": 0, 124 | "x": 497, 125 | "y": 620, 126 | "wires": [] 127 | } 128 | ] -------------------------------------------------------------------------------- /HOLs/Node-RED Flows/Flow 3 - 04 - Complete.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "9d4d97c7.d63528", 4 | "type": "upm-grove-temperature", 5 | "z": "e6060ba3.1c8608", 6 | "name": "", 7 | "platform": "512", 8 | "unit": "C", 9 | "pin": "1", 10 | "interval": "10000", 11 | "x": 126, 12 | "y": 119, 13 | "wires": [ 14 | [ 15 | "34298f7e.e4fac" 16 | ] 17 | ] 18 | }, 19 | { 20 | "id": "34298f7e.e4fac", 21 | "type": "function", 22 | "z": "e6060ba3.1c8608", 23 | "name": "Data Conversion", 24 | "func": "msg.payload = msg.payload * 3.3 / 5\nreturn msg;", 25 | "outputs": 1, 26 | "noerr": 0, 27 | "x": 346, 28 | "y": 119, 29 | "wires": [ 30 | [ 31 | "2def18a9.bbcdb8", 32 | "27aa15f6.51b8ca" 33 | ] 34 | ] 35 | }, 36 | { 37 | "id": "2def18a9.bbcdb8", 38 | "type": "function", 39 | "z": "e6060ba3.1c8608", 40 | "name": "Create Payload", 41 | "func": "var gateway = \"PASTE YOUR IOT HUB DEVICE NAME HERE\";\nreturn {\n payload: {\n deviceID: gateway,\n timestamp: new Date().toISOString(),\n temperature: msg.payload\n }\n};", 42 | "outputs": 1, 43 | "noerr": 0, 44 | "x": 156, 45 | "y": 199, 46 | "wires": [ 47 | [ 48 | "ccd4d8d.37ce228" 49 | ] 50 | ] 51 | }, 52 | { 53 | "id": "ccd4d8d.37ce228", 54 | "type": "json", 55 | "z": "e6060ba3.1c8608", 56 | "name": "", 57 | "x": 306, 58 | "y": 199, 59 | "wires": [ 60 | [ 61 | "617d0aed.1e1324", 62 | "89896fc4.e221f" 63 | ] 64 | ] 65 | }, 66 | { 67 | "id": "617d0aed.1e1324", 68 | "type": "debug", 69 | "z": "e6060ba3.1c8608", 70 | "name": "", 71 | "active": true, 72 | "console": "false", 73 | "complete": "false", 74 | "x": 506, 75 | "y": 199, 76 | "wires": [] 77 | }, 78 | { 79 | "id": "27aa15f6.51b8ca", 80 | "type": "upm-grove-rgb-lcd", 81 | "z": "e6060ba3.1c8608", 82 | "name": "Show the Temperature", 83 | "platform": "512", 84 | "r": 0, 85 | "g": "255", 86 | "b": "0", 87 | "row": "1", 88 | "column": 0, 89 | "x": 386, 90 | "y": 39, 91 | "wires": [] 92 | }, 93 | { 94 | "id": "89896fc4.e221f", 95 | "type": "azureiothub", 96 | "z": "e6060ba3.1c8608", 97 | "name": "Azure IoT Hub", 98 | "protocol": "amqp", 99 | "x": 316, 100 | "y": 299, 101 | "wires": [ 102 | [ 103 | "620468b8.5bbd38" 104 | ] 105 | ] 106 | }, 107 | { 108 | "id": "620468b8.5bbd38", 109 | "type": "function", 110 | "z": "e6060ba3.1c8608", 111 | "name": "To String", 112 | "func": "msg.payload = String.fromCharCode.apply(null, new Uint16Array(msg.payload));\nreturn msg;", 113 | "outputs": 1, 114 | "noerr": 0, 115 | "x": 160, 116 | "y": 400, 117 | "wires": [ 118 | [ 119 | "46d0d84d.3489a8" 120 | ] 121 | ] 122 | }, 123 | { 124 | "id": "46d0d84d.3489a8", 125 | "type": "json", 126 | "z": "e6060ba3.1c8608", 127 | "name": "", 128 | "x": 310, 129 | "y": 400, 130 | "wires": [ 131 | [ 132 | "7a526de7.f1dd14", 133 | "88b54d32.90f8", 134 | "8d65a1b4.e01e2" 135 | ] 136 | ] 137 | }, 138 | { 139 | "id": "7a526de7.f1dd14", 140 | "type": "debug", 141 | "z": "e6060ba3.1c8608", 142 | "name": "", 143 | "active": true, 144 | "console": "false", 145 | "complete": "payload", 146 | "x": 490, 147 | "y": 400, 148 | "wires": [] 149 | }, 150 | { 151 | "id": "8d65a1b4.e01e2", 152 | "type": "function", 153 | "z": "e6060ba3.1c8608", 154 | "name": "Get the Message", 155 | "func": "msg.payload = msg.payload.message\nreturn msg;", 156 | "outputs": 1, 157 | "noerr": 0, 158 | "x": 495, 159 | "y": 513, 160 | "wires": [ 161 | [ 162 | "d268431f.fab68" 163 | ] 164 | ] 165 | }, 166 | { 167 | "id": "88b54d32.90f8", 168 | "type": "switch", 169 | "z": "e6060ba3.1c8608", 170 | "name": "If Temp Alert", 171 | "property": "payload.type", 172 | "propertyType": "msg", 173 | "rules": [ 174 | { 175 | "t": "eq", 176 | "v": "temp", 177 | "vt": "str" 178 | } 179 | ], 180 | "checkall": "false", 181 | "outputs": 1, 182 | "x": 137, 183 | "y": 500, 184 | "wires": [ 185 | [ 186 | "77804d3c.37d0c4" 187 | ] 188 | ] 189 | }, 190 | { 191 | "id": "77804d3c.37d0c4", 192 | "type": "function", 193 | "z": "e6060ba3.1c8608", 194 | "name": "Turn on Buzzer", 195 | "func": "msg.payload = 1;\nreturn msg;", 196 | "outputs": 1, 197 | "noerr": 0, 198 | "x": 147, 199 | "y": 560, 200 | "wires": [ 201 | [ 202 | "f9aa061a.e1f8a8" 203 | ] 204 | ] 205 | }, 206 | { 207 | "id": "f9aa061a.e1f8a8", 208 | "type": "UPM-Grove-Buzzer", 209 | "z": "e6060ba3.1c8608", 210 | "name": "", 211 | "platform": "512", 212 | "volume": "0.125", 213 | "pin": "3", 214 | "x": 145, 215 | "y": 618, 216 | "wires": [] 217 | }, 218 | { 219 | "id": "d268431f.fab68", 220 | "type": "upm-grove-rgb-lcd", 221 | "z": "e6060ba3.1c8608", 222 | "name": "Show the Message", 223 | "platform": "512", 224 | "r": 255, 225 | "g": 0, 226 | "b": 0, 227 | "row": "1", 228 | "column": 0, 229 | "x": 497, 230 | "y": 620, 231 | "wires": [] 232 | } 233 | ] -------------------------------------------------------------------------------- /HOLs/PowerBI/PowerBI CLI Commands.md: -------------------------------------------------------------------------------- 1 | ** Installing the PowerBI-cli ** 2 | 3 | The PowerBI-Cli is a node.js application. You can find the source code for it here: 4 | 5 | https://github.com/Microsoft/PowerBI-Cli 6 | 7 | To install it, you need to have node.js installed, then you can use npm to install it: 8 | 9 | ```bash 10 | npm install -g powerbi-cli 11 | ``` 12 | 13 | **Create a config in the working folder**. 14 | The config file is optional, but makes issuing multiple PowerBI commands from a folder much easier as it stores the common collection name, access key and even workspace id in a file for reuse accross multiple statements. Common paramters include: 15 | 16 | ```bash 17 | -c, --collection 18 | -k, --accessKey 19 | -w, --workspace 20 | -r, --report 21 | ``` 22 | 23 | When you create the config file, the options are saved in a 24 | 25 | `.powerbirc` 26 | 27 | file in the folder where the command was run. At the time of this writing, that file is not encrypted so be careful who you expose it to. You can also effectively copy that to other folders to reuse. 28 | 29 | ```bash 30 | powerbi config -c -k 31 | ``` 32 | 33 | You will need to first find your Power BI Workspace Collection name, and Access Key. 34 | 35 | ![PowerBI Workspace Collection Name](images/00000-PowerBiWorkspaceCollectionName.png) 36 | 37 | ![PowerBI Workspace Collection Access Key](images/00020-PowerBiWorkspaceCollectionAccessKey.png) 38 | 39 | **Get the workspaces in a workspace collection** 40 | 41 | ```bash 42 | # if you have already saved your collection name and 43 | # access key in the config file as above. you can simply type: 44 | powerbi get-workspaces 45 | 46 | # Otherwise, you will need to include the collection name 47 | # and access key with the command 48 | powerbi get-workspaces -c -k 49 | ``` 50 | once, you have retrieved the workspace id, you can add it to your config file if you like: 51 | 52 | ```bash 53 | powerbi config -w 54 | ``` 55 | 56 | ** Importing a .pbix report ** 57 | 58 | First, you need to create a .pbix file using Power BI Desktop. For PowerBI embedded you need to use the "Direct Query" option for your data if you want the report to be updated dynamicall. Otherwise, you will need to re-upload the .pbix with fresh data each time you want to update it. 59 | 60 | Here's a link to a video that explains it more (although I wish it was in more detail): 61 | 62 | [Integrating Power BI into Your Own Applications – Featuring Real World Demos](https://azure.microsoft.com/en-us/documentation/videos/build-2016-integrating-power-bi-into-your-own-applications-featuring-real-world-demos/) 63 | 64 | In addition to the collection, access key, and workspace ID you will need two additional parameters, and a third optional one. 65 | 66 | ```bash 67 | powerbi import [options] 68 | 69 | -n, --displayName The dataset display name 70 | -f, --file The PBIX file to upload 71 | -o, --overwrite [overwrite] Whether to overwrite a dataset with the same name. Default is false 72 | ``` 73 | 74 | ```bash 75 | # if you have already saved your collection name, access key, 76 | # and workspace id in the config file as above. you can simply type: 77 | powerbi import -n -f -o 78 | 79 | # Otherwise, you will need to include the collection name 80 | # and access key, and workspace id with the command 81 | powerbi import -c -k -w -n -f -o 82 | ``` 83 | 84 | 85 | ** Get the reports in your workspace ** 86 | 87 | The reports are the report definitions you have imported from .pbix files. 88 | 89 | ```bash 90 | # if you have already saved your collection name, access key, 91 | # and workspace id in the config file as above. you can simply type: 92 | powerbi get-reports 93 | 94 | # Otherwise, you will need to include the collection name 95 | # and access key, and workspace id with the command 96 | powerbi get-reports -c -k -w 97 | ``` 98 | 99 | And yes, you can actually save the report to the config file as well if you want. 100 | 101 | ** Get the datasets in your workspace ** 102 | 103 | When you upload a .pbix a report, and a datset is created. To work with the datasets, like to update their connection information, you will need to know their IDs 104 | 105 | ```bash 106 | # if you have already saved your collection name, access key, 107 | # and workspace id in the config file as above. you can simply type: 108 | powerbi get-datasets 109 | 110 | # Otherwise, you will need to include the collection name 111 | # and access key, and workspace id with the command 112 | powerbi get-datasets -c -k -w 113 | ``` 114 | 115 | 116 | **Update the Connection Information for a dataset deployed in Power BI** 117 | 118 | Using this command properly took some research on my part. The format for the connection string was not well documented. I ended up finding it by looking up the documentation for the REST api call the cli was likely using: 119 | 120 | [Post SetAllConnections REST API Documentation](https://msdn.microsoft.com/en-us/library/azure/mt711505.aspx) 121 | 122 | `powerbi update-connection --dataset "7c98eca7-1541-4eee-8b6d-a94ca5f63427" --username sqladmin --password "Pa`$`$w0rd" --connectionString "data source=msinsql.database.windows.net;initial catalog=msindb;persist security info=True;encrypt=True;trustservercertificate=False"` 123 | 124 | 125 | **Update the Connection Information for a dataset deployed in Power BI** 126 | 127 | `powerbi update-connection --dataset "7c98eca7-1541-4eee-8b6d-a94ca5f63427" --username sqladmin --password "Pa`$`$w0rd" --connectionString "data source=msinsql.database.windows.net;initial catalog=msindb;persist security info=True;encrypt=True;trustservercertificate=False"` 128 | 129 | 130 | -------------------------------------------------------------------------------- /HOLs/PowerBI/TemperatureChart.pbix: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/PowerBI/TemperatureChart.pbix -------------------------------------------------------------------------------- /HOLs/PowerBI/images/00010-PowerBiWorkspaceCollectionName.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/PowerBI/images/00010-PowerBiWorkspaceCollectionName.png -------------------------------------------------------------------------------- /HOLs/PowerBI/images/00020-PowerBiWorkspaceCollectionAccessKey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/PowerBI/images/00020-PowerBiWorkspaceCollectionAccessKey.png -------------------------------------------------------------------------------- /HOLs/PowerBI/sample.powerbirc: -------------------------------------------------------------------------------- 1 | { 2 | "collection": "msincollection", 3 | "accessKey": "Ssh0wXU61rnqhx+z8YLFZVPDTCooxgRK/d7KwEpb3KaMGGtHLT0ta5nVhktlWsYBrjvsmRygbZNyuU5II1gHmA==", 4 | "workspace": "649f253f-a3cd-459b-84ce-5e63eb70e9e1" 5 | } -------------------------------------------------------------------------------- /HOLs/PowerBI/update connection command.txt: -------------------------------------------------------------------------------- 1 | powerbi update-connection --dataset "7c98eca7-1541-4eee-8b6d-a94ca5f63427" --username sqladmin --password "Pa`$`$w0rd" --connectionString "data source=msinsql.database.windows.net;initial catalog=msindb;persist security info=True;encrypt=True;trustservercertificate=False" -------------------------------------------------------------------------------- /HOLs/SQL Database Scripts/Create SQL Database Objects.sql: -------------------------------------------------------------------------------- 1 | -- Drop the dbo.Measurement table if it exists 2 | if exists(select object_id from sys.objects where type='U' and name = 'Measurement') 3 | drop table dbo.measurement; 4 | go 5 | -- Create the dbo.Measurement TABLE 6 | -- this will store all the measurements received from iot hub 7 | create table dbo.Measurement 8 | ( 9 | MeasurementID int IDENTITY(1,1) not null 10 | constraint PK_Measurement_MeasurementID 11 | primary key CLUSTERED, 12 | deviceID nvarchar(50) not null 13 | constraint DF_Measurement_deviceID 14 | default '', 15 | [timestamp] datetime null, 16 | temperature float(53) 17 | ); 18 | go 19 | -- Query the table to ensure it EXISTS 20 | -- the table was just created so there shouldn't 21 | -- be any rows in it 22 | select * from dbo.Measurement; 23 | go 24 | -- Drop the dbo.RecentMeasurements view if it exists 25 | if exists(select object_id from sys.objects where type='V' and name = 'RecentMeasurements') 26 | drop view dbo.RecentMeasurements; 27 | go 28 | -- Create the dbo.RecentMeasurements view 29 | -- this return all recent (last 20) readings 30 | create view dbo.RecentMeasurements as 31 | select top 20 32 | deviceid, 33 | [timestamp], 34 | temperature 35 | from dbo.Measurement 36 | order by [timestamp] desc; 37 | go 38 | -- Query the view to make sure it works 39 | select * from dbo.RecentMeasurements; 40 | go 41 | -- Drop the dbo.Devices view if it exists 42 | if exists(select object_id from sys.objects where type='V' and name = 'Devices') 43 | drop view dbo.Devices; 44 | go 45 | -- Create the dbo.Devices view 46 | -- this return just the last measurement for each device 47 | create view dbo.Devices as 48 | with devices as 49 | ( 50 | select *, 51 | ROW_NUMBER() OVER 52 | ( 53 | partition by deviceid 54 | order by [timestamp] desc 55 | ) as recency 56 | from dbo.Measurement 57 | ) 58 | select 59 | deviceID, 60 | [timestamp], 61 | temperature 62 | from devices 63 | where Recency = 1 64 | go 65 | -- Query the view to make sure it works 66 | select * from dbo.Devices; 67 | go 68 | -------------------------------------------------------------------------------- /HOLs/SQL Database Scripts/Query Measurement Data.sql: -------------------------------------------------------------------------------- 1 | -- Query the dbo.Measurement table 2 | -- This table contains ALL measurements received 3 | -- via the IoT Hub and Stream Analytics JOb 4 | select * from dbo.Measurement; 5 | 6 | -- Query the dbo.RecentMeasurements view 7 | -- This view returns just the top 20 most 8 | -- recent records in the dbo.Measurement table 9 | select * from dbo.RecentMeasurements; 10 | 11 | -- Query the dbo.Devices view. 12 | -- This view shows a row for each device id 13 | -- found in the table along with their latest 14 | -- temprature reading and timestamp 15 | select * from dbo.Devices; -------------------------------------------------------------------------------- /HOLs/SQL Database Scripts/Truncate Measurement Table.sql: -------------------------------------------------------------------------------- 1 | --truncate table dbo.Measurement; 2 | -------------------------------------------------------------------------------- /HOLs/Stream Analytics/Stream Analytics Query.sql: -------------------------------------------------------------------------------- 1 | -- SELECT ALL messages 2 | -- FROM the iot hub and put them 3 | -- INTO the sql database 4 | SELECT 5 | deviceID, 6 | [timestamp] as [timestamp], 7 | temperature 8 | INTO 9 | sqldb 10 | FROM 11 | iothub 12 | 13 | -- SELECT ONLY messages 14 | -- WHERE the temperature is > 40 15 | -- FROM the iot hub and put them 16 | -- INTO the alerts event hub 17 | SELECT 18 | deviceID, 19 | [timestamp] as [timestamp], 20 | temperature 21 | INTO 22 | alerts 23 | FROM 24 | iothub 25 | WHERE temperature > 40 -------------------------------------------------------------------------------- /HOLs/Troubleshooting/images/ConnectToIDPDK-XXXX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/Troubleshooting/images/ConnectToIDPDK-XXXX.png -------------------------------------------------------------------------------- /HOLs/Troubleshooting/images/GRUB097BootMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/Troubleshooting/images/GRUB097BootMenu.png -------------------------------------------------------------------------------- /HOLs/Troubleshooting/images/IDPDKWiFiConnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/Troubleshooting/images/IDPDKWiFiConnected.png -------------------------------------------------------------------------------- /HOLs/Troubleshooting/images/IpNetworkConflictProblem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/Troubleshooting/images/IpNetworkConflictProblem.png -------------------------------------------------------------------------------- /HOLs/Troubleshooting/images/IpNetworkConflictSolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/Troubleshooting/images/IpNetworkConflictSolution.png -------------------------------------------------------------------------------- /HOLs/Troubleshooting/images/NUCWithMonitorAndKeyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/Troubleshooting/images/NUCWithMonitorAndKeyboard.png -------------------------------------------------------------------------------- /HOLs/Troubleshooting/images/SetDefaultBootOptionToReimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/Troubleshooting/images/SetDefaultBootOptionToReimage.png -------------------------------------------------------------------------------- /HOLs/Troubleshooting/images/TroubleshootingImages.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/Troubleshooting/images/TroubleshootingImages.pptx -------------------------------------------------------------------------------- /HOLs/Troubleshooting/nuclogs/NUC Repo & Package Update Notes.txt: -------------------------------------------------------------------------------- 1 | //// ====================================================================== 2 | //// Adding IoT_Cloud Repository and packagegroup-cloud-azure manually 3 | //// After modifying the Dev Hub python code to have it log it's commands 4 | //// to /tmp/iot-dev-hub.log 5 | //// I was able to retrieve the following command 6 | //// 7 | //// Repo realted oprations are in 8 | //// in /var/www/www-repo-gui/python/manage_repo.py 9 | //// 10 | //// And the package related operations are in 11 | //// /var/www/www-repo-gui/python/manage_package.py 12 | //// ====================================================================== 13 | 14 | /// First at around manage_repo.py line 392 in the add_repo() function 15 | 16 | smart channel --add 'IoT_Cloud' type=rpm-md baseurl=http://iotdk.intel.com/repos/iot-cloud/wrlinux7/rcpl13 -y 17 | 18 | //// Then it looks like the following command is executed (appx line 401) 19 | 20 | smart update 'IoT_Cloud' 21 | 22 | //// Then around line 508 in the update_channels method 23 | 24 | smart update 25 | 26 | //// Then there is a call off to the manage_package.py/update_package_list() method to update the package database. I think is really just for the web gui and has no impact on actual functionality 27 | 28 | //// Then, when you go into add package, and install the packagegroup-cloud-azure pacakge: 29 | //// in manage_package.py around line 866 in the package_transaction() method 30 | 31 | smart install -y packagegroup-cloud-azure 32 | 33 | //// Then at line 876 a call to build_package_database() 34 | //// I BELIEVE (not positive) that the "package database" stuff is just for the Web UI to be able to display repos and packages. 35 | //// It looks like it runs some "smart" queries to get the channels and packages, and loads them into local files that the WEB UI can use. 36 | 37 | 38 | 39 | 40 | //// ====================================================================== 41 | //// Modified /var/www/www-repo-gui/python/tools/logging_helper/logging.conf 42 | //// ====================================================================== 43 | 44 | [loggers] 45 | keys=root,backend_general,cherrypy.access,cherrypy.error 46 | 47 | [handlers] 48 | keys=default_handler,console_handler,file_handler,cherrypy_console,cherrypy_file_handler 49 | 50 | [formatters] 51 | keys=backend_general,cherrypy 52 | 53 | [logger_root] 54 | ; Possible levels in order are DEBUG, INFO, WARNING, ERROR, CRITICAL 55 | ; This root logger will effect CherryPy's logging and all other logger without a proper defined name. 56 | level=DEBUG 57 | ; Set the output target 58 | ;handlers=default_handler 59 | handlers=default_handler,file_handler 60 | 61 | [logger_backend_general] 62 | ; Possible levels in order are DEBUG, INFO, WARNING, ERROR, CRITICAL 63 | level=DEBUG 64 | ; Set the output target 65 | ;handlers=default_handler 66 | handlers=default_handler,file_handler 67 | qualname=backend_general 68 | propagate=0 69 | 70 | [logger_cherrypy.access] 71 | ; Possible levels in order are DEBUG, INFO, WARNING, ERROR, CRITICAL 72 | ; Default is INFO 73 | level=DEBUG 74 | ; Set the output target 75 | handlers=cherrypy_console 76 | qualname=cherrypy.access 77 | propagate=0 78 | 79 | [logger_cherrypy.error] 80 | ; Possible levels in order are DEBUG, INFO, WARNING, ERROR, CRITICAL 81 | ; Default is INFO 82 | level=DEBUG 83 | ; Set the output target 84 | ;handlers=cherrypy_console 85 | handlers=cherrypy_console,cherrypy_file_handler 86 | qualname=cherrypy.error 87 | propagate=0 88 | 89 | [handler_default_handler] 90 | class=StreamHandler 91 | ; Do not need to change the level here. Control the level at logger level. 92 | level=DEBUG 93 | formatter=backend_general 94 | args=(sys.stderr,) 95 | 96 | [handler_console_handler] 97 | class=StreamHandler 98 | ; Do not need to change the level here. Control the level at logger level. 99 | level=DEBUG 100 | formatter=backend_general 101 | args=(sys.stdout,) 102 | 103 | [handler_file_handler] 104 | class=logging.handlers.RotatingFileHandler 105 | ; Do not need to change the level here. Control the level at logger level. 106 | level=DEBUG 107 | formatter=backend_general 108 | args=('/tmp/iot-dev-hub.log', 'maxBytes=100000','backupCount=10','encoding=utf8') 109 | 110 | [handler_cherrypy_console] 111 | class=logging.StreamHandler 112 | ; Do not need to change the level here. Control the level at logger level. 113 | level=DEBUG 114 | formatter=cherrypy 115 | args=(sys.stdout,) 116 | 117 | [handler_cherrypy_file_handler] 118 | class=logging.handlers.RotatingFileHandler 119 | ; Do not need to change the level here. Control the level at logger level. 120 | level=DEBUG 121 | formatter=cherrypy 122 | args=('/tmp/iot-dev-hub.log', 'maxBytes=100000','backupCount=10','encoding=utf8') 123 | 124 | [formatter_backend_general] 125 | format=%(asctime)s - %(levelname)s - %(filename)s:%(lineno)s - %(funcName)5s(): %(message)s 126 | datefmt= 127 | 128 | [formatter_cherrypy] 129 | format=%(asctime)s - %(levelname)s - CherryPy: %(message)s 130 | datefmt= 131 | 132 | 133 | -------------------------------------------------------------------------------- /HOLs/Troubleshooting/readme.md: -------------------------------------------------------------------------------- 1 | # Troubleshooting Steps and Fixes 2 | 3 | - [Fixing the WiFi / Ethernet IP Address conflict on the NUC - The Easy Way](#networkconflict) 4 | - [Re-imaging the NUC Locally](#reimaging) 5 | - [Re-Imaging a NUC Remotely](#remotereimage) 6 | - [Fixing Node-Red Flows](fixingflows) 7 | - [Manual IoT_Cloud Repository And packagegroup-cloud-azure installs with RPM](#manualinstalls) 8 | - [Manual Node-Red AzureIoTHub node installation using NPM instead of RPM](#manualnodered) 9 | - [Showing All Repositories](#showrepos) 10 | - [Re-adding Intel's Repo](#addintelrepo) 11 | - [powerbi-cli Issues](#powerbicli) 12 | - [IP Address not Displaying on the Grove LCD](#noiponlcd) 13 | 14 | 15 | --- 16 | 17 | 18 | 19 | ## Fixing the WiFi / Ethernet IP Address conflict on the NUC - The Easy Way: 20 | 21 | ### The problem 22 | 23 | If you have a NUC with an internal WiFi card installed, the image on the NUC likely has that WiFi adapter's IP Address statically set as: 24 | 25 | 26 | | IP Address | Subnet Mask | 27 | | ------------- | --------------- | 28 | | `192.168.1.1` | `255.255.255.0` | 29 | 30 | The above IP Address / Subnet Mask implies tht the WiFi network the NUC hosts is: 31 | 32 | `192.168.1.0/24` 33 | 34 | That isn't a problem unless the Venue that you are at is also using the `192.168.1.0/24` network (a very common network for consumer routers to default to). If the venue is using that network, and you connect the NUC's ethernet port to it, the NUC gets confused because it sees two separate `192.168.1.0/24` networks. One on it's WiFi adapter and another on it's Ethernet adapter. 35 | 36 | ![IP Network Conflict Problem](images/IpNetworkConflictProblem.png) 37 | 38 | The easiest way to fix the problem is to simply re-assign the Static IP Address on the NUC's WiFi adapter so that it is on a different network: 39 | 40 | ![IP Network Conflict Solution](images/IpNetworkConflictSolution.png) 41 | 42 | 43 | The easiest way to resolve the problem is: 44 | 45 | 1. Connect an HDMI Monitor, Keyboard and Mouse directly to the NUC, and power the NUC up: 46 | 47 | ![Monitor and Keyboard on NUC](images/NUCWithMonitorAndKeyboard.png) 48 | 49 | 1. Using the keyboard, login to the NUC as the user `root` with the password `root`: 50 | 51 | ```bash 52 | WR-IDP-5188 login: root 53 | Password: root 54 | ``` 55 | 56 | 4. From the command line, list the /etc/config/file: 57 | 58 | ```bash 59 | cat /etc/config/network 60 | ``` 61 | 62 | Find the `lan` interface's `ipaddr` (IP Address) in the output (`192.168.1.1` below): 63 | 64 | ```bash 65 | ... 66 | 67 | config interface 'lan' 68 | option ifname 'wlan0' 69 | option type 'bridge' 70 | option proto 'static' 71 | option ipaddr '192.168.1.1' 72 | option netmask '255.255.255.0' 73 | 74 | ... 75 | ``` 76 | 5. Decide on the new IP Address you wish to use. We recommend using `192.168.101.1` and keeping the subnet mask at `255.255.255.0`. This will put the NUC's WiFi adapter on the `192.168.101.0/24` network. You can use whatever you wish, we'll assume the `192.168.101.1` network address. 77 | 78 | 6. If you are only changing the WiFi adapter's IP Address, and not it's subnet mask, you can do it easily using the `sed` (stream editor) utility. Following is an example of changing the `192.168.1.1` ip address to `192.168.101.1`. 79 | 80 | > **Note**: We are using the Linux `sed` (Stream Editor) to make quick work of the editing, however if you have multiple changes to make, or prefer to use an editor, you can use the `vi` editor installed on the NUC or use `apt-get` to install another editor. We won't document those steps here though. 81 | 82 | ```bash 83 | sudo sed -i 's/192.168.1.1/192.168.101.1/g' /etc/config/network 84 | ``` 85 | 86 | 7. Verify the change by re-examining the /etc/config/network file: 87 | 88 | ```bash 89 | cat /etc/config/network 90 | ``` 91 | 92 | With the output now showing the `192.168.101.1` as the `ipaddr`: 93 | 94 | ```bash 95 | ... 96 | 97 | config interface 'lan' 98 | option ifname 'wlan0' 99 | option type 'bridge' 100 | option proto 'static' 101 | option ipaddr '192.168.101.1' 102 | option netmask '255.255.255.0' 103 | 104 | ... 105 | ``` 106 | 107 | 8. If everything looks good, reboot the NUC: 108 | 109 | ```bash 110 | sudo shutdown -r 0 111 | ``` 112 | 113 | 9. Wait until it reboots, and verify that you can now connect to it over ethernet as expected. 114 | 115 | --- 116 | 117 | 118 | 119 | ## Re-imaging the NUC 120 | 121 | The "**Intel IoT Gateway**" ships with a linux image already running on it. There should also be a restorable factory image that can be used if you feel that your "**NUC**" is behaving poorly. To do so, you'll need to have an HDMI Monitor and Keyboard attached to the NUC. Here's how to do it: 122 | 123 | Video: "**Re-Imaging the Intel IoT Gateway NUC**" 124 | 125 | 126 | 127 | --- 128 | 129 | 130 | 131 | ## Re-Imaging a NUC Remotely 132 | 133 | These steps explain how to re-image a NUC from a remote machine. This is handy in a lab environment where you need to reset a number of NUCs withouth having to connect a keyboard or screen to each one to reimage them locally. 134 | 135 | There are two methods described. They both do the same thing, but the Shell Script tries to simplify the process and help prevent future ssh errors due to the re-imaged NUC's ssh key changing. Finally, if you want to know more about it, read the "How Remote Re-Imaging Works" section. 136 | 137 | - [The Shell Script Method (Recommended)](#remotereimagescript) 138 | - [The Basic Method](#remotereimagebasic) 139 | - [How Remote Re-Imaging Works](#howremotereimagingworks) 140 | 141 | 142 | 143 | 144 | ### The Shell Script Method (Recommended) 145 | 146 | This method requires that you have a bash prompt. It should work on Linux or Mac, or if you are on Windows 10, you can install "[Bash on Ubuntu on Windows](https://msdn.microsoft.com/en-us/commandline/wsl/about)". The shell script also helps clean up old ssh keys for the remote NUC given it's IP Address to prevent errors about the ssh key not being valid when you attempt to ssh back in after it is reimage. It's just a much easier command to use when you have bunch of NUCs to reimage in a lab environment. 147 | 148 | 1. Open a bash prompt ***on your local computer*** (not on the NUC) and change into your home folder: 149 | 150 | ```bash 151 | cd ~ 152 | ``` 153 | 154 | 1. Download the `reimage.sh` script from GitHub using wget: 155 | 156 | ``` 157 | wget -O reimage.sh https://github.com/dxcamps/MicrosoftIntelIoTCamp/raw/master/HOLs/Troubleshooting/scripts/reimage.sh 158 | ``` 159 | 160 | 1. Enable execute permissions on the `reimage.sh` script 161 | 162 | ```bash 163 | chmod +x reimage.sh 164 | ``` 165 | 166 | 1. You can now use the `reimage.sh` script to easily reimage a NUC if you know it's IP Address. Replace `the.nucs.ip.address` below with the IP Address of the NUC you wish to reimage. When prompted, enter `root` for the password on the remote NUC: 167 | 168 | > **Note**: Once the script has been downloaded and given execute permissions, you can run this statement repeatedly for each remote NUC IP Address to re-image all the NUCs in a room. Then walk the room and turn the all back on to get them re-image. 169 | 170 | ```bash 171 | ./reimage.sh the.nucs.ip.address 172 | ``` 173 | 174 | For example, if my NUCs IP Address where `192.168.2.32` I would enter: 175 | 176 | ```bash 177 | ./reimage.sh 192.168.2.32 178 | ``` 179 | 180 | So what's different about the script as opposed to the "Basic" method described below? Well the script: 181 | 182 | - Attempts to clean up any old ssh keys for the NUC from your local `./ssh/known_hosts` file so you don't get errors when you ssh to the NUC after re-imaging because the key has changed. 183 | - ssh's into the NUC and get's it to avoid prompting you to save the new key to known_hosts 184 | - Makes it easier to reimage a bunch of machines by simplifying the command line for each one. 185 | 186 | Here's the contents of the script. This is just FYI so you can see what it is doing: 187 | 188 | ```bash 189 | #!/bin/bash 190 | 191 | #Verify the IP Address of the remote NUC was passed in as an argument to the script 192 | if [ $# -ne 1 ]; then 193 | echo $0: usage: reimage the.nucs.ip.address 194 | echo $0: for example: 195 | echo $0: reimage 192.168.2.32 196 | exit 1 197 | fi 198 | 199 | # Change into the current user's .ssh folder 200 | pushd ~/.ssh 201 | 202 | # Remove the old ssh key for the remote NUC host with the given ip address 203 | ssh-keygen -f 'known_hosts' -R $1 204 | 205 | # Change back to the previous working directory 206 | popd 207 | 208 | # ssh into the NUC given its IP Address. 209 | # -o "StrictHostKeyChecking no" -> Don't check for host keys in the known_hosts file 210 | # -o "UserKnownHostsFile=/dev/null" -> Points to a temporary null known_hosts file to keep the key from being stored 211 | # "echo 2 > /media/mmcblk0p1/EFI/boot/BOOTX64.default" is executed on the NUC, and writes the value "2" to the BOOTX64.default file. This means that option "2" (the third option, "Reset Factory Image option" on the boot menu) will be used by default. 212 | # "shutdown -P 0" runs on the NUC and powers it down immediately 213 | ssh -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" root@$1 "echo 2 > /media/mmcblk0p1/EFI/boot/BOOTX64.default && shutdown -P 0" 214 | ``` 215 | 216 | 217 | 218 | ### The Basic Method 219 | 220 | If you don't have a bash prompt (for example you want to run it from PowerShell instead), you can use the following command. It's just a little more tedious than using the shell script , but it does exactly the same thing: 221 | 222 | 1. From a command prompt ***on your local computer*** where you have access to an ssh client, run the following command where `the.nucs.ip.address` is the IP Address of the remote NUC you wish to reimage and when prompted, enter `root` for the password: 223 | 224 | > **Note**: Read the "How does it work" section below to learn what the command is doing. 225 | 226 | ```bash 227 | ssh root@the.nucs.ip.address "echo 2 > /media/mmcblk0p1/EFI/boot/BOOTX64.default && shutdown -P 0" 228 | ``` 229 | 230 | For example, if my NUCs IP Address were `192.186.2.32`, I would enter: 231 | 232 | ```bash 233 | ssh root@192.168.2.32 "echo 2 > /media/mmcblk0p1/EFI/boot/BOOTX64.default && shutdown -P 0" 234 | ``` 235 | 236 | Lastly, if for some reason the NUC does NOT power down, try running the command again, or if you can't re-connect via ssh, then simply force the power off by holding the power button on the NUC in until it turns off. 237 | 238 | 1. If this is the first time you have ssh'd to the host, you may receive a prompt similar to the following. If so, type **`yes`** and press `enter`. 239 | 240 | ```bash 241 | The authenticity of host '192.168.2.32 (192.168.2.32)' can't be established. 242 | ED25519 key fingerprint is ba:5c:59:3b:5d:45:6c:31:21:9c:71:fc:d2:80:b4:d0. 243 | Are you sure you want to continue connecting (yes/no)? 244 | ``` 245 | 246 | 1. The remote NUC should power down automatically. Once the NUC has powered down, press the Power Button on it to turn it back on. On the first boot it will automatically re-image itself. This will take 5-10 minutes to complete. However, when it is done, you should see it's IP Address displayed on the Grove LCD Shield assuming you have it, the Grove Shield and the Arduino 101 connected to the NUC. 247 | 248 | 1. Once the NUC has re-imaged you can try to ssh back into it. You may get an error that looks similar to the following: 249 | 250 | ```bash 251 | ~$ ssh root@192.168.2.32 252 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 253 | @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ 254 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 255 | IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 256 | Someone could be eavesdropping on you right now (man-in-the-middle attack)! 257 | It is also possible that a host key has just been changed. 258 | The fingerprint for the ED25519 key sent by the remote host is 259 | 95:60:e4:13:a2:70:d5:a5:4a:17:45:25:ba:ed:48:ea. 260 | Please contact your system administrator. 261 | Add correct host key in /home/BretStateham/.ssh/known_hosts to get rid of this message. 262 | Offending ED25519 key in /home/BretStateham/.ssh/known_hosts:1 263 | remove with: ssh-keygen -f "/home/BretStateham/.ssh/known_hosts" -R 192.168.2.32 264 | ED25519 host key for 192.168.2.32 has changed and you have requested strict checking. 265 | Host key verification failed. 266 | ``` 267 | 268 | If that happens, run the following command to remove the old ssh key for the host given it's ip address: 269 | 270 | ```bash 271 | cd ~ 272 | ssh-keygen -f './.ssh/known_hosts' -R the.nucs.ip.address 273 | ``` 274 | 275 | For example, with my NUCs IP Address of `192.169.2.32` I would enter: 276 | 277 | ```bash 278 | cd ~ 279 | ssh-keygen -f './.ssh/known_hosts' -R 192.168.2.32 280 | ``` 281 | 282 | Now, when I ssh in, I should be prompted to verify the connection and if I enter `yes` it will add they new key into the ./ssh/known_hosts file for me so I don't get prompted again in the future 283 | 284 | ```bash 285 | ~$ ssh root@192.168.2.32 286 | The authenticity of host '192.168.2.32 (192.168.2.32)' can't be established. 287 | ED25519 key fingerprint is 95:60:e4:13:a2:70:d5:a5:4a:17:45:25:ba:ed:48:ea. 288 | Are you sure you want to continue connecting (yes/no)? yes 289 | Warning: Permanently added '192.168.2.32' (ED25519) to the list of known hosts. 290 | Password: root 291 | root@WR-IDP-5188:~# 292 | ``` 293 | 294 | 295 | 296 | ### How Remote Re-Imaging Works 297 | 298 | You don't need to read this. It is just being documented here to help persist the knowledge gained when the remote re-image process we being developed. If you want to know more about how the NUC boots though, this is good info. 299 | 300 | The NUC uses GRUB 0.97 [link](https://www.gnu.org/software/grub/manual/legacy/grub.html) as it's bootloader. The configuration file for the GRUB bootloaer for the NUC is at: 301 | 302 | ```bash 303 | /media/mmcblk0p1/EFI/boot/bootx64.conf 304 | ``` 305 | 306 | If you were to look at the contents of that file, you'd see the following: 307 | 308 | ```bash 309 | default saved 310 | timeout 5 311 | color light-gray/black light-green/blue 312 | 313 | title Wind River Intelligent Device Platform 314 | rootfs /rootfs 315 | kernel /bzImage root=LVM=/dev/mapper/rootfs-runtime rw rootwait i915.disable_power_well=0 316 | initrd /idp-initramfs.img 317 | savedefault 318 | 319 | title Wind River Intelligent Device Platform (Boot Once) - HAC 320 | rootfs /rootfs 321 | kernel /bzImage-bootonce root=LVM=/dev/mapper/rootfs-runtime rw rootwait bootonce i915.disable_power_well=0 322 | initrd /idp-initramfs-bootonce.img 323 | savedefault 0 324 | 325 | title Wind River Intelligent Device Platform (Restore Factory Image) - HAC 326 | rootfs /rootfs_sfr 327 | kernel /SFR/SFR-bzImage root=SFR=/dev/mapper/rootfs-runtime rw rootwait i915.disable_power_well=0 328 | initrd /SFR/SFR-initramfs.img 329 | savedefault 0 330 | ``` 331 | 332 | The first two lines are: 333 | 334 | ```bash 335 | default saved 336 | timeout 5 337 | ``` 338 | 339 | That means that GRUB will wait 5 seconds (`timeout 5`) for the user to select an option before it looks for a previously saved default boot option number (`default saved`) from a .default file (`/media/mmcblk0p1/EFI/boot/BOOTX64.default` in our case) and then automatically boot to that option with that number. 340 | 341 | There are three boot options defined in the NUC's `bootx64.conf` file: 342 | 343 | ```bash 344 | ... 345 | title Wind River Intelligent Device Platform 346 | ... 347 | title Wind River Intelligent Device Platform (Boot Once) - HAC 348 | ... 349 | title Wind River Intelligent Device Platform (Restore Factory Image) - HAC 350 | ... 351 | ``` 352 | 353 | The options are numbered starting with 0: 354 | 355 | - 0 = `Wind River Intelligent Device Platform` 356 | - 1 = `Wind River Intelligent Device Platform (Boot Once) - HAC` 357 | - 2 = `Wind River Intelligent Device Platform (Restore Factory Image) - HAC` 358 | 359 | You can see the three boot options when the NUC boots if you have a monitor attached to the NUC. If you had a keyboard, you could then manually select the third option (Option 2), "Wind River Intelligent Device Platform (Restore Factory Image) - HAC" to re-image the NUC on reboot. 360 | 361 | ![Default GRUB Boot Menu](images/GRUB097BootMenu.png) 362 | 363 | 364 | The configuration of the first option, `Wind River Intelligent Device Platform`, ends with the command `savedefault`: 365 | 366 | ```bash 367 | ... 368 | title Wind River Intelligent Device Platform 369 | rootfs /rootfs 370 | kernel /bzImage root=LVM=/dev/mapper/rootfs-runtime rw rootwait i915.disable_power_well=0 371 | initrd /idp-initramfs.img 372 | savedefault 373 | ... 374 | ``` 375 | 376 | That means that if that option is selected at boot, it's number, 0, will be written to the `/media/mmcblk0p1/EFI/boot/BOOTX64.default` file for use by the `default saved` option on the next boot. 377 | 378 | The other two options both end with : 379 | 380 | ```bash 381 | savedefault 0 382 | ``` 383 | 384 | This means that even if you boot to one of those options, they will still save boot option 0 (the first one) to the `/media/mmcblk0p1/EFI/boot/BOOTX64.default` file as the deafult for the next boot. 385 | 386 | So, that means that we can override that default option then by simply replacing the contents of the `/media/mmcblk0p1/EFI/boot/BOOTX64.default` file with the number of the option we want to be used on the next boot. To have the NUC reimage, we want it to boot to option 2 on the next boot. 387 | 388 | The ssh command we use above (whether manually or from the reimage.sh shell script) is: 389 | 390 | ```bash 391 | ssh root@the.nucs.ip.address "echo 2 > /media/mmcblk0p1/EFI/boot/BOOTX64.default && shutdown -P 0" 392 | ``` 393 | 394 | It passes two different commands to the remote NUC. The first command is: 395 | 396 | ```bash 397 | echo 2 > /media/mmcblk0p1/EFI/boot/BOOTX64.default 398 | ``` 399 | 400 | 401 | That command replaces the contents of the `/media/mmcblk0p1/EFI/boot/BOOTX64.default` file on the NUC with the value `2` which means the third boot option, `Wind River Intelligent Device Platform (Restore Factory Image) - HAC`, will be used by default on the next boot. 402 | 403 | ![Setting Default Boot Option](images/SetDefaultBootOptionToReimage.png) 404 | 405 | A second command is then run to shutdown the NUC: 406 | 407 | ```bash 408 | shutdown -P 0 409 | ``` 410 | 411 | Now when you power the NUC back up: 412 | 413 | 1. The NUC will wait for the 5 second timeout 414 | 1. When the timeout expires, the value 2 will be read from `/media/mmcblk0p1/EFI/boot/BOOTX64.default` and the `Wind River Intelligent Device Platform (Restore Factory Image) - HAC` option will be selected by default 415 | 1. The NUC will be re-imaged (takes 5-10 minutes). 416 | 1. The value 0 will be saved to the `/media/mmcblk0p1/EFI/boot/BOOTX64.default` file and the NUC will reboot 417 | 1. The NUC will wait for the 5 second timeout 418 | 1. When the timeout expires, the value 0 will be read from freshly re-imaged `/media/mmcblk0p1/EFI/boot/BOOTX64.default` and the `Wind River Intelligent Device Platform` option will be selected 419 | 1. The NUC will boot normally to a newly refreshed image. You can now login with the `root` user name and the `root` password. 420 | 1. You may get an error from your ssh key about the ssh certificate or key on the remote NUC having changed. This is what the reimage.sh script tries to solve for you. If you do it manually, you will need to fix your ssh keys yourself. 421 | 422 | --- 423 | 424 | 425 | 426 | ## Fixing Node-Red Flows 427 | 428 | If you've messed up the "**Flow 1**", "**Blinky**" for "**Flow 3**" (Azure) flows you can import versions of the flows from the **"/Node-RED Flows**" files. 429 | 430 | --- 431 | 432 | 433 | 434 | ## Manual IoT_Cloud Repository And packagegroup-cloud-azure installs with RPM 435 | 436 | ssh into the NUC and run the following commands: 437 | 438 | ```text 439 | rpm --import http://iotdk.intel.com/misc/iot_pub.key 440 | rpm --import http://iotdk.intel.com/misc/iot_pub2.key 441 | npm install node-red-contrib-os -g 442 | smart channel --add 'IoT_Cloud' type=rpm-md baseurl=http://iotdk.intel.com/repos/iot-cloud/wrlinux7/rcpl13 -y 443 | smart update 'IoT_Cloud' 444 | smart update 445 | smart install -y packagegroup-cloud-azure 446 | systemctl restart node-red-experience 447 | ``` 448 | 449 | --- 450 | 451 | 452 | 453 | ## Manual Node-Red AzureIoTHub node installation using NPM instead of RPM 454 | 455 | ssh into the NUC and run the following commands: 456 | 457 | > **Note**: Make sure to include the `@0.0.1` version specifier on the `node-red-contrib-azureiothubnode` installation. That will make sure that you install the version this lab was documented against. 458 | 459 | ```text 460 | rpm --import http://iotdk.intel.com/misc/iot_pub.key 461 | npm install node-red-contrib-os -g 462 | npm install -g node-red-contrib-azureiothubnode@0.0.1 463 | systemctl restart node-red-experience 464 | ``` 465 | 466 | --- 467 | 468 | 469 | 470 | ## Show All Repositories 471 | 472 | In case you need to look at the repos that have been added to the IoT Gateway, execute the following: 473 | 474 | ```bash 475 | smart channel --show 476 | ``` 477 | 478 | --- 479 | 480 | 481 | 482 | ## Re-adding Intel's Repo 483 | 484 | In case you accidentally delete the Intel package repository, the information is the following: 485 | 486 | ```text 487 | Name: Intel_Repository 488 | Url: https://download.01.org/iotgateway/rcpl13/x86_64 489 | ``` 490 | 491 | --- 492 | 493 | 494 | 495 | ## powerbi-cli Issues 496 | 497 | The powerbi-cli command line tool has had some issues lately. 498 | 499 | ### Issues on Linux, OSX, and Bash on Ubuntu on Windows 500 | 501 | The cli has some installation issues it seems in linux environments. The powerbi-cli team is aware of them, but they does not appear to have been resolved yet. 502 | 503 | For example, when you run: 504 | 505 | `powerbi config` 506 | 507 | You may receive an error like: 508 | 509 | `powerbi-config(1) does not exist, try --help` 510 | 511 | The problem appears to be related to how the client finds it's submodules. As a workaround, you can attempt the steps documented on the powerbi-cli's github Issues page: [Microsoft/PowerBI-Cli#5 (comment)](https://github.com/Microsoft/PowerBI-Cli/issues/5#issuecomment-251419579) 512 | 513 | ### Issues Updating the Database Connection String 514 | 515 | The `powerbi update-connection` command was broken in some recent versions of the powerbi-cli. 516 | 517 | The command would return results like the following: 518 | 519 | ``` 520 | [ powerbi ] Found dataset! 521 | [ powerbi ] Id: 1667a811-f8bb-4792-a719-07adc5d244e2 522 | [ powerbi ] Name: TempChart 523 | [ powerbi ] Updating connection string... 524 | [ powerbi ] parameters[valueElement] must be of type object. 525 | [ powerbi ] Connection string successfully updated 526 | 527 | ... 528 | 529 | [ powerbi ] Successfully updated datasource credentials! 530 | [ powerbi ] Datasource ID: 9dc4fe4d-d620-4910-a069-6c20e0b8837a 531 | [ powerbi ] Gateway ID: 627fa205-99de-4f50-aaf8-484838be30f6 532 | ``` 533 | 534 | Even though it LOOKS like it updated there is one line in the output that reads: 535 | 536 | ```bash 537 | [ powerbi ] parameters[valueElement] must be of type object. 538 | ``` 539 | 540 | That is actually an error, and you will find that the connection string didn't actually update. To fix the problem, make sure you are running powerbi-cli version 1.0.8 or later. 541 | 542 | ***Even if you already have v1.0.8 installed you should RE-INSTALL to make sure you have the latest bits. The team make some fixes, but they were re-released on the same version number*** 543 | 544 | 1. To check the version of the powerbi-cli you can run the following command: 545 | 546 | ```bash 547 | powerbi --version 548 | ``` 549 | 550 | Make sure you get v1.0.8 or later as a result: 551 | 552 | ```bash 553 | 1.0.8 554 | ``` 555 | 556 | 1. To re-install to the latest version of the powerbi-cli: 557 | 558 | ```bash 559 | npm insatll -g powerbi-cli 560 | ``` 561 | 562 | --- 563 | 564 | 565 | 566 | ## IP Address not Displaying on the Grove LCD 567 | 568 | When you boot, the NUC with the Arduino 101, Grove Shield, Rotary Sesor, LCD and Ethernet attached you should see your NUC's IP Address display on the LCD. This is because the default Node-Red Flow on the NUC is reading the IP Address off of the `eth0` (Ethernet) interface, and displaying it on the LCD for you. However, if you are NOT seeing the IP Address display check the following: 569 | 570 | 1. First, ensure that the Arduino 101, Grove Shield, Rotary Sensor and LCD were assembled correctly as documented in the lab in int [Getting Started with Grove IoT Commercial Developer Kit](../readme.md#GettingStartedWithGrove) section. 571 | 572 | 1. Ensure that you set the voltage switch on the Grove Shield as documented in the lab: 573 | 574 | ![Base Sheild set to 5V](../images/01040-BaseShield5V.png) 575 | 576 | 1. Make sure that the Arduino 101 is connected to the NUC's USB port ***BEFORE*** you power the NUC on to boot it. 577 | 578 | > **Note**: Why? The NUC communicates with the Arduino 101 using a serial communication framework called "Firmata". When the NUC boots, it checks to see if it has an Arduino 101 installed and if it does, it flashes the Arduino 101 with the Firmata firmware. If you attache the Arduino 101 AFTER the NUC has booted, it may not have received the Firmata firmware. 579 | 580 | 1. One way to test that the Firmata is working, etc. is to twist the rotary sensor. You should see that the background color of the RGB LCD attached to the Grove Shield changes. This is implemented in the default Node-Red flow on the NUC and it wouldn't work if the NUC couldn't communicate with the Arduino 101. So if that works, at least you know the NUC / Node-Red / Arduino 101 / Grove Shield stack is working. 581 | 582 | 1. You should also be able to see the current values of the rotary sensor in the Intel Dev Hub on the NUC at `http://`. Again, this is just to help you confirm that the communication between your NUC and the Arduino 101 is working so you can continue to diagnose the issue of the IP Address not displaying. 583 | -------------------------------------------------------------------------------- /HOLs/Troubleshooting/scripts/reimage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #Verify the IP Address of the remote NUC was passed in as an argument to the script 4 | if [ $# -ne 1 ]; then 5 | echo $0: usage: reimage the.nucs.ip.address 6 | echo $0: for example: 7 | echo $0: reimage 192.168.2.32 8 | exit 1 9 | fi 10 | 11 | # Change into the current user's .ssh folder 12 | pushd ~/.ssh 13 | 14 | # Remove the old ssh key for the remote NUC host with the given ip address 15 | ssh-keygen -f 'known_hosts' -R $1 16 | 17 | # Change back to the previous working directory 18 | popd 19 | 20 | # ssh into the NUC given its IP Address. 21 | # -o "StrictHostKeyChecking no" -> Don't check for host keys in the known_hosts file 22 | # -o "UserKnownHostsFile=/dev/null" -> Points to a temporary null known_hosts file to keep the key from being stored 23 | # "echo 2 > /media/mmcblk0p1/EFI/boot/BOOTX64.default" is executed on the NUC, and writes the value "2" to the BOOTX64.default file. This means that option "2" (the third option, "Reset Factory Image option" on the boot menu) will be used by default. 24 | # "shutdown -P 0" runs on the NUC and powers it down immediately 25 | ssh -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" root@$1 "echo 2 > /media/mmcblk0p1/EFI/boot/BOOTX64.default && shutdown -P 0" -------------------------------------------------------------------------------- /HOLs/WebApp/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /bower_components 3 | /.vscode 4 | .powerbirc 5 | -------------------------------------------------------------------------------- /HOLs/WebApp/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "controller", 3 | "description": "", 4 | "main": "server.js", 5 | "license": "ISC", 6 | "moduleType": [], 7 | "homepage": "", 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "test", 13 | "tests" 14 | ], 15 | "dependencies": { 16 | "angular": "^1.5.2", 17 | "bootstrap": "^3.3.6" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /HOLs/WebApp/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "localport": "3000", 3 | "iotHubConnString": "", 4 | "sqlServer": "", 5 | "sqlDatabase" : "", 6 | "sqlLogin" : "", 7 | "sqlPassword" : "" 8 | } -------------------------------------------------------------------------------- /HOLs/WebApp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "controller", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "postinstall": "bower install" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "azure-event-hubs": "0.0.1", 15 | "azure-iot-common": "1.1.6", 16 | "azure-iot-device": "1.1.8", 17 | "azure-iothub": "1.1.8", 18 | "body-parser": "1.17.1", 19 | "express": "4.15.2", 20 | "nconf": "0.8.4", 21 | "tedious": "1.14.0", 22 | "tedious-connection-pool": "1.0.5" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /HOLs/WebApp/public/images/chartplaceholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/WebApp/public/images/chartplaceholder.png -------------------------------------------------------------------------------- /HOLs/WebApp/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Microsoft / Intel IoT Camp 6 | 7 | 8 | 9 | 10 | 11 | 28 | 29 | 30 | 31 | 32 | 51 | 52 |
53 |
54 |
55 |
56 |

Devices

57 |
58 | No devices retrieved 59 |
60 |
61 |

Showing {{ devices.length }} devices and their latest values

62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
 DeviceTimeTemperature
{{ m.deviceid }}{{ m.timestamp | date : 'M/d/yy h:mm:ss a' }}{{ m.temperature | number }}°C
80 |
81 |
82 |
83 |
84 |
85 |

Chart

86 | 87 | 88 | 89 |
90 | 91 |
92 |
93 |
94 |

Temperature History

95 |
96 | No temperature history found 97 |
98 |
99 |

Most recent {{ recentMeasurements.length }} readings

100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 |
DeviceTimeTemperature
{{ m.deviceid }}{{ m.timestamp | date : 'M/d/yy h:mm:ss a' }}{{ m.temperature | number }}°C
116 |
117 |
118 |
119 | 120 | 121 | 122 | 123 | 177 | 178 | 179 | -------------------------------------------------------------------------------- /HOLs/WebApp/server.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // ============== Use nconf to read config.json =============== 4 | 5 | // nconf require 6 | var nconf = require('nconf'); 7 | 8 | // Read in the settings specified in the config.json file 9 | nconf.argv().env().file('./config.json'); 10 | 11 | // ==================== Azure IoT HuB Prep ==================== 12 | 13 | // Azure Iot Hub related requires 14 | var ServiceClient = require('azure-iothub').Client; 15 | var Message = require('azure-iot-common').Message; 16 | 17 | // Azure iot hub configuraiton values 18 | // the iotHubConnectionString value should be the iot hubs 19 | // "service" SAS policy connection string, or 20 | // the connection string for any other policy that has "send" 21 | // permissions on the iot hub. 22 | var iotHubConnString = nconf.get('iotHubConnString'); 23 | 24 | // Setup the iot hub connection 25 | var iotHubClient = ServiceClient.fromConnectionString(iotHubConnString); 26 | 27 | // ==================== SQL Server Client Prep ==================== 28 | 29 | // tedious (aka TDS => "Tabular Data Stream") 30 | // SQL Server client related requires 31 | var ConnectionPool = require('tedious-connection-pool'); 32 | var Request = require('tedious').Request; 33 | var TYPES = require('tedious').TYPES; 34 | 35 | // SQL Server connection configuration values 36 | var sqlServer = nconf.get('sqlServer'); 37 | var sqlDatabase = nconf.get('sqlDatabase'); 38 | var sqlLogin = nconf.get('sqlLogin'); 39 | var sqlPassword = nconf.get('sqlPassword'); 40 | 41 | // Setup the tedious connection pool 42 | var sqlPoolConfig = { 43 | min: 2, 44 | max: 4, 45 | log: true 46 | }; 47 | 48 | // Set the tedious sql connection details 49 | var sqlConnectionConfig = { 50 | userName: sqlLogin + '@' + sqlServer, 51 | password: sqlPassword, 52 | server: sqlServer, 53 | // When you connect to Azure SQL Database, you need these next options. 54 | options: {encrypt: true, database: sqlDatabase, rowCollectionOnDone: true} 55 | }; 56 | 57 | // Create the tedious sql client connection pool. 58 | var sqlPool = new ConnectionPool(sqlPoolConfig, sqlConnectionConfig); 59 | 60 | // Configure the tedious connection pool to just log any pool level 61 | // errors to the console. 62 | sqlPool.on('error',function(err){ 63 | console.log("Pool Error!:\n" + err); 64 | return; 65 | }); 66 | 67 | 68 | function runQuery(res, query) { 69 | sqlPool.acquire(function(err,poolConnection){ 70 | if(err){ 71 | console.log("An error occurred acquiring a pool connection:\n " + err); 72 | res.json({ "error": err}); 73 | return; 74 | } 75 | 76 | var sqlRequest = new Request(query, 77 | function(err) { 78 | if (err) { 79 | console.log('An error occurred when executing the sql request:\n' + err); 80 | res.json({ "error": err}); 81 | } 82 | }); 83 | var result = ""; 84 | sqlRequest.on('doneInProc', function(rowCount, more, rows) { 85 | res.json(rows); 86 | console.log('doneInProc: ' + rowCount + ' rows returned'); 87 | console.log(rows.length); 88 | rows.forEach(function(row){ 89 | row.forEach(function(column) { 90 | if (column.value === null) { 91 | console.log('NULL'); 92 | } else { 93 | result+= column.value + " "; 94 | } 95 | }); 96 | console.log(result); 97 | result =""; 98 | }); 99 | poolConnection.release(); 100 | }); 101 | 102 | poolConnection.execSql(sqlRequest); 103 | }); 104 | } 105 | 106 | // =================== Express Web App Prep =================== 107 | 108 | // General express related requires... 109 | var express = require('express'); 110 | var bodyParser = require('body-parser'); 111 | 112 | // website setup 113 | var app = express(); 114 | var localport = nconf.get('localport'); 115 | var port = normalizePort(process.env.PORT || localport); 116 | app.set('port', port) 117 | app.use(express.static('public')); 118 | app.use(express.static('bower_components')); 119 | app.use(bodyParser.json()); 120 | 121 | // Used to retrieve just the last measurement for each device 122 | // in the dbo.Measurements table in the database. 123 | app.get('/api/devices', function(req, res) { 124 | console.log('Retrieving devices with their last measurement'); 125 | var query="select deviceid, [timestamp], temperature from dbo.Devices;"; 126 | runQuery(res, query); 127 | }); 128 | 129 | app.get('/api/recent', function(req, res) { 130 | console.log('Retrieving recent measurments from sql'); 131 | var query="select deviceid, [timestamp], temperature from dbo.RecentMeasurements;"; 132 | runQuery(res, query); 133 | }); 134 | 135 | app.post('/api/testBuzzer', function(req, res) { 136 | 137 | var deviceid = req.body.deviceid; 138 | 139 | console.log('Sending buzzer test alert to ' + deviceid); 140 | 141 | iotHubClient.open(function(err) { 142 | if (err) { 143 | console.error('Could not connect: ' + err.message); 144 | } else { 145 | var data = JSON.stringify({ "type": "temp","message": "Buzzer Test " }); 146 | var message = new Message (data); 147 | console.log('Sending message: ' + data); 148 | iotHubClient.send(deviceid, message, printResultFor('send')); 149 | console.log('Async message sent'); 150 | } 151 | }); 152 | 153 | // Helper function to print results in the console 154 | function printResultFor(op) { 155 | return function printResult(err, res) { 156 | if (err) { 157 | console.log(op + ' error: ' + err.toString()); 158 | } else { 159 | console.log(op + ' status: ' + res.constructor.name); 160 | } 161 | }; 162 | } 163 | 164 | 165 | res.end(); 166 | }); 167 | 168 | app.listen(port, function() { 169 | console.log('app running on http://localhost:' + port); 170 | }); 171 | 172 | function normalizePort(val) { 173 | var port = parseInt(val, 10); 174 | 175 | if (isNaN(port)) { 176 | // named pipe 177 | return val; 178 | } 179 | 180 | if (port >= 0) { 181 | // port number 182 | return port; 183 | } 184 | 185 | return false; 186 | } 187 | 188 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /HOLs/images/00000-CopyIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/00000-CopyIcon.png -------------------------------------------------------------------------------- /HOLs/images/00000-LabArchitecture-NoPowerBi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/00000-LabArchitecture-NoPowerBi.jpg -------------------------------------------------------------------------------- /HOLs/images/00000-LabArchitecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/00000-LabArchitecture.jpg -------------------------------------------------------------------------------- /HOLs/images/00000-TestBuzzerButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/00000-TestBuzzerButton.png -------------------------------------------------------------------------------- /HOLs/images/00010-IntelLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/00010-IntelLogo.png -------------------------------------------------------------------------------- /HOLs/images/00020-AzureLogo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/00020-AzureLogo.jpg -------------------------------------------------------------------------------- /HOLs/images/01010-GroveStarterKit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01010-GroveStarterKit.png -------------------------------------------------------------------------------- /HOLs/images/01020-Arduino101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01020-Arduino101.png -------------------------------------------------------------------------------- /HOLs/images/01030-AttachGroveBaseShield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01030-AttachGroveBaseShield.png -------------------------------------------------------------------------------- /HOLs/images/01040-BaseShield5V.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01040-BaseShield5V.png -------------------------------------------------------------------------------- /HOLs/images/01050-RotaryEncoderAndLCD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01050-RotaryEncoderAndLCD.png -------------------------------------------------------------------------------- /HOLs/images/01060-RotaryEncoderAndLCDAttached.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01060-RotaryEncoderAndLCDAttached.png -------------------------------------------------------------------------------- /HOLs/images/01070-AttachArduino101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01070-AttachArduino101.png -------------------------------------------------------------------------------- /HOLs/images/01080-IoTGatewayEthernetAndPower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01080-IoTGatewayEthernetAndPower.png -------------------------------------------------------------------------------- /HOLs/images/01090-IPAddressOnLCD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01090-IPAddressOnLCD.png -------------------------------------------------------------------------------- /HOLs/images/01100-PrivacyStatement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01100-PrivacyStatement.png -------------------------------------------------------------------------------- /HOLs/images/01110-Login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01110-Login.png -------------------------------------------------------------------------------- /HOLs/images/01120-Eula.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01120-Eula.png -------------------------------------------------------------------------------- /HOLs/images/01130-IoTGatewayDeveloperHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/01130-IoTGatewayDeveloperHub.png -------------------------------------------------------------------------------- /HOLs/images/02010-Sensors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/02010-Sensors.png -------------------------------------------------------------------------------- /HOLs/images/02020-CollapsedDeviceAndSensorData.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/02020-CollapsedDeviceAndSensorData.png -------------------------------------------------------------------------------- /HOLs/images/02030-Packages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/02030-Packages.png -------------------------------------------------------------------------------- /HOLs/images/02040-Administration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/02040-Administration.png -------------------------------------------------------------------------------- /HOLs/images/02050-Documentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/02050-Documentation.png -------------------------------------------------------------------------------- /HOLs/images/03010-PuttyDownload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/03010-PuttyDownload.png -------------------------------------------------------------------------------- /HOLs/images/03020-PuTTYConfiguration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/03020-PuTTYConfiguration.png -------------------------------------------------------------------------------- /HOLs/images/03030-PuTTYSecurityAlert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/03030-PuTTYSecurityAlert.png -------------------------------------------------------------------------------- /HOLs/images/03040-LoginAsRoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/03040-LoginAsRoot.png -------------------------------------------------------------------------------- /HOLs/images/04010-LaunchNodeRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04010-LaunchNodeRed.png -------------------------------------------------------------------------------- /HOLs/images/04020-NodeRedEnvironment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04020-NodeRedEnvironment.png -------------------------------------------------------------------------------- /HOLs/images/04030-NodeRedEnvironmentLayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04030-NodeRedEnvironmentLayout.png -------------------------------------------------------------------------------- /HOLs/images/04040-CreateFlow2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04040-CreateFlow2.png -------------------------------------------------------------------------------- /HOLs/images/04050-AddGroveLEDNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04050-AddGroveLEDNode.png -------------------------------------------------------------------------------- /HOLs/images/04060-BlinkyProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04060-BlinkyProperties.png -------------------------------------------------------------------------------- /HOLs/images/04070-DeployBlinky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04070-DeployBlinky.png -------------------------------------------------------------------------------- /HOLs/images/04080-Arduino101LED.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04080-Arduino101LED.png -------------------------------------------------------------------------------- /HOLs/images/04090-BlinkyNodeStatus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/04090-BlinkyNodeStatus.png -------------------------------------------------------------------------------- /HOLs/images/05010-AttachTemperatureSensor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05010-AttachTemperatureSensor.png -------------------------------------------------------------------------------- /HOLs/images/05020-CreateFlow3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05020-CreateFlow3.png -------------------------------------------------------------------------------- /HOLs/images/05030-AddGroveTemperatureSensor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05030-AddGroveTemperatureSensor.png -------------------------------------------------------------------------------- /HOLs/images/05040-AddFunctionNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05040-AddFunctionNode.png -------------------------------------------------------------------------------- /HOLs/images/05050-ConnectNodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05050-ConnectNodes.png -------------------------------------------------------------------------------- /HOLs/images/05060-Flow3Nodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05060-Flow3Nodes.png -------------------------------------------------------------------------------- /HOLs/images/05065-Flow3Deploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05065-Flow3Deploy.png -------------------------------------------------------------------------------- /HOLs/images/05070-DisableFlow1DebugMessages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05070-DisableFlow1DebugMessages.png -------------------------------------------------------------------------------- /HOLs/images/05080-DebugMessagesEnabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05080-DebugMessagesEnabled.png -------------------------------------------------------------------------------- /HOLs/images/05090-DebugMessagesDisabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05090-DebugMessagesDisabled.png -------------------------------------------------------------------------------- /HOLs/images/05100-DeleteDebugMessages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05100-DeleteDebugMessages.png -------------------------------------------------------------------------------- /HOLs/images/05110-Flow3DebugMessages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05110-Flow3DebugMessages.png -------------------------------------------------------------------------------- /HOLs/images/05120-DisplayTempOnLcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05120-DisplayTempOnLcd.png -------------------------------------------------------------------------------- /HOLs/images/05130-DeployFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05130-DeployFlow.png -------------------------------------------------------------------------------- /HOLs/images/05140-TempOnLcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05140-TempOnLcd.png -------------------------------------------------------------------------------- /HOLs/images/05143-SelectAllNodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05143-SelectAllNodes.png -------------------------------------------------------------------------------- /HOLs/images/05146-SelectedNodesOrangeBorder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05146-SelectedNodesOrangeBorder.png -------------------------------------------------------------------------------- /HOLs/images/05150-ImportFromClipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05150-ImportFromClipboard.png -------------------------------------------------------------------------------- /HOLs/images/05160-PasteFlowCode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/05160-PasteFlowCode.png -------------------------------------------------------------------------------- /HOLs/images/06010-DocumentingYourChoices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/06010-DocumentingYourChoices.png -------------------------------------------------------------------------------- /HOLs/images/06015-DefaultLigtColorTheme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/06015-DefaultLigtColorTheme.png -------------------------------------------------------------------------------- /HOLs/images/06020-ConvetionRegionAndGroupSection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/06020-ConvetionRegionAndGroupSection.png -------------------------------------------------------------------------------- /HOLs/images/06030-ConventionRegionAndGroupDocumented.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/06030-ConventionRegionAndGroupDocumented.png -------------------------------------------------------------------------------- /HOLs/images/07010-NewIoTHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07010-NewIoTHub.png -------------------------------------------------------------------------------- /HOLs/images/07020-NewIoTHubProperites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07020-NewIoTHubProperites.png -------------------------------------------------------------------------------- /HOLs/images/07030-IoTHubDeployingTile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07030-IoTHubDeployingTile.png -------------------------------------------------------------------------------- /HOLs/images/07040-IoTHubProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07040-IoTHubProperties.png -------------------------------------------------------------------------------- /HOLs/images/07050-SASPoliciesLink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07050-SASPoliciesLink.png -------------------------------------------------------------------------------- /HOLs/images/07060-IoTHubOwnerPolicy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07060-IoTHubOwnerPolicy.png -------------------------------------------------------------------------------- /HOLs/images/07070-DocumentIoTHubOwnerConnectionString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07070-DocumentIoTHubOwnerConnectionString.png -------------------------------------------------------------------------------- /HOLs/images/07080-ServiceSASPolicy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07080-ServiceSASPolicy.png -------------------------------------------------------------------------------- /HOLs/images/07090-DocumentServicePolicyConnectionString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07090-DocumentServicePolicyConnectionString.png -------------------------------------------------------------------------------- /HOLs/images/07095-OpenEventsEndpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07095-OpenEventsEndpoint.png -------------------------------------------------------------------------------- /HOLs/images/07100-StreamAnalyticsConsumerGroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/07100-StreamAnalyticsConsumerGroup.png -------------------------------------------------------------------------------- /HOLs/images/08010-CreateNewDeviceInPortal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/08010-CreateNewDeviceInPortal.png -------------------------------------------------------------------------------- /HOLs/images/08010-IoTHubExplorerHelp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/08010-IoTHubExplorerHelp.png -------------------------------------------------------------------------------- /HOLs/images/08020-IoTHubOwnerConnectionString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/08020-IoTHubOwnerConnectionString.png -------------------------------------------------------------------------------- /HOLs/images/08020-OpenNewDeviceIdentity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/08020-OpenNewDeviceIdentity.png -------------------------------------------------------------------------------- /HOLs/images/08025-CopyPimaryConnectionString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/08025-CopyPimaryConnectionString.png -------------------------------------------------------------------------------- /HOLs/images/08030-DocumentDeviceIdentity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/08030-DocumentDeviceIdentity.png -------------------------------------------------------------------------------- /HOLs/images/09010-AddRepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09010-AddRepo.png -------------------------------------------------------------------------------- /HOLs/images/09020-AddIoTCloudRepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09020-AddIoTCloudRepo.png -------------------------------------------------------------------------------- /HOLs/images/09030-UpdateRepositories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09030-UpdateRepositories.png -------------------------------------------------------------------------------- /HOLs/images/09040-CloseManageRepositoriesWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09040-CloseManageRepositoriesWindow.png -------------------------------------------------------------------------------- /HOLs/images/09050-AddPackagesButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09050-AddPackagesButton.png -------------------------------------------------------------------------------- /HOLs/images/09060-InstallPackageGroupCloudAzure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09060-InstallPackageGroupCloudAzure.png -------------------------------------------------------------------------------- /HOLs/images/09070-CloseAddNewPackagesWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09070-CloseAddNewPackagesWindow.png -------------------------------------------------------------------------------- /HOLs/images/09080-AzureIoTHubNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09080-AzureIoTHubNode.png -------------------------------------------------------------------------------- /HOLs/images/09090-AddAzureIoTHubNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09090-AddAzureIoTHubNode.png -------------------------------------------------------------------------------- /HOLs/images/09100-CopyDeviceConnectionString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09100-CopyDeviceConnectionString.png -------------------------------------------------------------------------------- /HOLs/images/09110-EditDeviceIdInCreatePayload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09110-EditDeviceIdInCreatePayload.png -------------------------------------------------------------------------------- /HOLs/images/09120-DeployChanges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09120-DeployChanges.png -------------------------------------------------------------------------------- /HOLs/images/09125-MessageCountInPortal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/09125-MessageCountInPortal.png -------------------------------------------------------------------------------- /HOLs/images/10010-NewSQLDatabase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10010-NewSQLDatabase.png -------------------------------------------------------------------------------- /HOLs/images/10020-NewSqlDbProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10020-NewSqlDbProperties.png -------------------------------------------------------------------------------- /HOLs/images/10030-NewSQLServerProperites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10030-NewSQLServerProperites.png -------------------------------------------------------------------------------- /HOLs/images/10040-SQLDBPricingTier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10040-SQLDBPricingTier.png -------------------------------------------------------------------------------- /HOLs/images/10045-BasicPricingTier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10045-BasicPricingTier.png -------------------------------------------------------------------------------- /HOLs/images/10050-CreateDatabaseAndServer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10050-CreateDatabaseAndServer.png -------------------------------------------------------------------------------- /HOLs/images/10060-ClickOnServerLink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10060-ClickOnServerLink.png -------------------------------------------------------------------------------- /HOLs/images/10070-ShowFirewallSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10070-ShowFirewallSettings.png -------------------------------------------------------------------------------- /HOLs/images/10080-EveryoneFirewallRule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10080-EveryoneFirewallRule.png -------------------------------------------------------------------------------- /HOLs/images/10085-DocumentSQL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10085-DocumentSQL.png -------------------------------------------------------------------------------- /HOLs/images/10090-HOLsFolderInCode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10090-HOLsFolderInCode.png -------------------------------------------------------------------------------- /HOLs/images/10100-InstallVsCodeMssql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10100-InstallVsCodeMssql.png -------------------------------------------------------------------------------- /HOLs/images/10110-EnableExtension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10110-EnableExtension.png -------------------------------------------------------------------------------- /HOLs/images/10120-ConfirmVSCodeRestart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10120-ConfirmVSCodeRestart.png -------------------------------------------------------------------------------- /HOLs/images/10130-OpenWorkspaceSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10130-OpenWorkspaceSettings.png -------------------------------------------------------------------------------- /HOLs/images/10140-SQLConnectionProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10140-SQLConnectionProperties.png -------------------------------------------------------------------------------- /HOLs/images/10145-CompletedSQLConnectionProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10145-CompletedSQLConnectionProperties.png -------------------------------------------------------------------------------- /HOLs/images/10147-SQLToolsInitialization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10147-SQLToolsInitialization.png -------------------------------------------------------------------------------- /HOLs/images/10148-FirewallPrompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10148-FirewallPrompt.png -------------------------------------------------------------------------------- /HOLs/images/10150-OpenCreateScript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10150-OpenCreateScript.png -------------------------------------------------------------------------------- /HOLs/images/10155-MSSQLConnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10155-MSSQLConnect.png -------------------------------------------------------------------------------- /HOLs/images/10160-SelectConnection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10160-SelectConnection.png -------------------------------------------------------------------------------- /HOLs/images/10170-ConnectionError.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10170-ConnectionError.png -------------------------------------------------------------------------------- /HOLs/images/10180-SuccessfulConnection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10180-SuccessfulConnection.png -------------------------------------------------------------------------------- /HOLs/images/10190-RunSQLScript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10190-RunSQLScript.png -------------------------------------------------------------------------------- /HOLs/images/10200-SQLMessages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10200-SQLMessages.png -------------------------------------------------------------------------------- /HOLs/images/10210-SQLResults.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10210-SQLResults.png -------------------------------------------------------------------------------- /HOLs/images/10220-NewEventHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10220-NewEventHub.png -------------------------------------------------------------------------------- /HOLs/images/10230-CreateNamespace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10230-CreateNamespace.png -------------------------------------------------------------------------------- /HOLs/images/10240-CreateEventHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10240-CreateEventHub.png -------------------------------------------------------------------------------- /HOLs/images/10250-NewEventHubProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10250-NewEventHubProperties.png -------------------------------------------------------------------------------- /HOLs/images/10260-EventHubCreated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10260-EventHubCreated.png -------------------------------------------------------------------------------- /HOLs/images/10262-SASPolicies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10262-SASPolicies.png -------------------------------------------------------------------------------- /HOLs/images/10263-RootManagedSharedAccessKey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10263-RootManagedSharedAccessKey.png -------------------------------------------------------------------------------- /HOLs/images/10265-DocumentEventHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10265-DocumentEventHub.png -------------------------------------------------------------------------------- /HOLs/images/10270-CreateStreamAnalyticsJob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10270-CreateStreamAnalyticsJob.png -------------------------------------------------------------------------------- /HOLs/images/10280-NewASAJobProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10280-NewASAJobProperties.png -------------------------------------------------------------------------------- /HOLs/images/10290-Inputs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10290-Inputs.png -------------------------------------------------------------------------------- /HOLs/images/10300-IoTHubInput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10300-IoTHubInput.png -------------------------------------------------------------------------------- /HOLs/images/10305-IoTHubSuccessfulTest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10305-IoTHubSuccessfulTest.png -------------------------------------------------------------------------------- /HOLs/images/10310-Outputs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10310-Outputs.png -------------------------------------------------------------------------------- /HOLs/images/10320-SQLDBOutputProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10320-SQLDBOutputProperties.png -------------------------------------------------------------------------------- /HOLs/images/10330-SuccessfulConnectionTest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10330-SuccessfulConnectionTest.png -------------------------------------------------------------------------------- /HOLs/images/10340-AlertsOuputProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10340-AlertsOuputProperties.png -------------------------------------------------------------------------------- /HOLs/images/10350-SuccessfulAlertsTest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10350-SuccessfulAlertsTest.png -------------------------------------------------------------------------------- /HOLs/images/10360-Queries.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10360-Queries.png -------------------------------------------------------------------------------- /HOLs/images/10370-CopyASAQuery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10370-CopyASAQuery.png -------------------------------------------------------------------------------- /HOLs/images/10380-CreateQuery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10380-CreateQuery.png -------------------------------------------------------------------------------- /HOLs/images/10385-DropErrors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10385-DropErrors.png -------------------------------------------------------------------------------- /HOLs/images/10387-Overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10387-Overview.png -------------------------------------------------------------------------------- /HOLs/images/10390-StartJob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10390-StartJob.png -------------------------------------------------------------------------------- /HOLs/images/10400-JobStarted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10400-JobStarted.png -------------------------------------------------------------------------------- /HOLs/images/10410-SQLData.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/10410-SQLData.png -------------------------------------------------------------------------------- /HOLs/images/11010-NewWebApp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11010-NewWebApp.png -------------------------------------------------------------------------------- /HOLs/images/11020-WebAppProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11020-WebAppProperties.png -------------------------------------------------------------------------------- /HOLs/images/11030-CreateNewPlan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11030-CreateNewPlan.png -------------------------------------------------------------------------------- /HOLs/images/11040-AppServicePlanProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11040-AppServicePlanProperties.png -------------------------------------------------------------------------------- /HOLs/images/11050-CreateWebApp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11050-CreateWebApp.png -------------------------------------------------------------------------------- /HOLs/images/11060-SetupGitRepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11060-SetupGitRepo.png -------------------------------------------------------------------------------- /HOLs/images/11070-DeploymentCredentials.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11070-DeploymentCredentials.png -------------------------------------------------------------------------------- /HOLs/images/11080-DeploymentSourceOk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11080-DeploymentSourceOk.png -------------------------------------------------------------------------------- /HOLs/images/11090-GitCloneUrl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11090-GitCloneUrl.png -------------------------------------------------------------------------------- /HOLs/images/11100-WebAppDocumentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11100-WebAppDocumentation.png -------------------------------------------------------------------------------- /HOLs/images/11110-ConfigJson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11110-ConfigJson.png -------------------------------------------------------------------------------- /HOLs/images/11120-UpdateWebAppConfigJson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11120-UpdateWebAppConfigJson.png -------------------------------------------------------------------------------- /HOLs/images/11125-NewDebugConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11125-NewDebugConfig.png -------------------------------------------------------------------------------- /HOLs/images/11130-CreateDebugConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11130-CreateDebugConfig.png -------------------------------------------------------------------------------- /HOLs/images/11140-NodeJsEnvironment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11140-NodeJsEnvironment.png -------------------------------------------------------------------------------- /HOLs/images/11150-StartWithServerjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11150-StartWithServerjs.png -------------------------------------------------------------------------------- /HOLs/images/11160-Debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11160-Debug.png -------------------------------------------------------------------------------- /HOLs/images/11165-Firewall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11165-Firewall.png -------------------------------------------------------------------------------- /HOLs/images/11170-ListeningOnPort3000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11170-ListeningOnPort3000.png -------------------------------------------------------------------------------- /HOLs/images/11180-WebAppRunningLocally.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11180-WebAppRunningLocally.png -------------------------------------------------------------------------------- /HOLs/images/11190-StopDebugging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11190-StopDebugging.png -------------------------------------------------------------------------------- /HOLs/images/11200-InitLocalGitRepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11200-InitLocalGitRepo.png -------------------------------------------------------------------------------- /HOLs/images/11210-InitialCommit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11210-InitialCommit.png -------------------------------------------------------------------------------- /HOLs/images/11215-StageChanges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11215-StageChanges.png -------------------------------------------------------------------------------- /HOLs/images/11220-Publish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11220-Publish.png -------------------------------------------------------------------------------- /HOLs/images/11223-Origin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11223-Origin.png -------------------------------------------------------------------------------- /HOLs/images/11230-ConfirmPublish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11230-ConfirmPublish.png -------------------------------------------------------------------------------- /HOLs/images/11240-DeploymentCredentials.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11240-DeploymentCredentials.png -------------------------------------------------------------------------------- /HOLs/images/11250-DeploymentInPortal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11250-DeploymentInPortal.png -------------------------------------------------------------------------------- /HOLs/images/11260-SiteRunningInAzure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/11260-SiteRunningInAzure.png -------------------------------------------------------------------------------- /HOLs/images/12010-BuzzerAttached.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12010-BuzzerAttached.png -------------------------------------------------------------------------------- /HOLs/images/12020-ImportFromClipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12020-ImportFromClipboard.png -------------------------------------------------------------------------------- /HOLs/images/12030-ImportNodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12030-ImportNodes.png -------------------------------------------------------------------------------- /HOLs/images/12040-ImportedNodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12040-ImportedNodes.png -------------------------------------------------------------------------------- /HOLs/images/12045-NodePurposes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12045-NodePurposes.png -------------------------------------------------------------------------------- /HOLs/images/12050-TestBuzzerOnWebsite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12050-TestBuzzerOnWebsite.png -------------------------------------------------------------------------------- /HOLs/images/12060-BuzzerTestMessageOnLcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12060-BuzzerTestMessageOnLcd.png -------------------------------------------------------------------------------- /HOLs/images/12065-NewFunctionApp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12065-NewFunctionApp.png -------------------------------------------------------------------------------- /HOLs/images/12070-NewFunctionApp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12070-NewFunctionApp.png -------------------------------------------------------------------------------- /HOLs/images/12075-NewCustomFunction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12075-NewCustomFunction.png -------------------------------------------------------------------------------- /HOLs/images/12080-NewCSharpEventHubTriggerFunction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12080-NewCSharpEventHubTriggerFunction.png -------------------------------------------------------------------------------- /HOLs/images/12090-NewFunctionProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12090-NewFunctionProperties.png -------------------------------------------------------------------------------- /HOLs/images/12100-CreateTheFunction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12100-CreateTheFunction.png -------------------------------------------------------------------------------- /HOLs/images/12100-EventHubConnection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12100-EventHubConnection.png -------------------------------------------------------------------------------- /HOLs/images/12110-FunctionIntegration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12110-FunctionIntegration.png -------------------------------------------------------------------------------- /HOLs/images/12120-DefaultCode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12120-DefaultCode.png -------------------------------------------------------------------------------- /HOLs/images/12126-CopyRunCsxToClipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12126-CopyRunCsxToClipboard.png -------------------------------------------------------------------------------- /HOLs/images/12128-PasteCodeInRunCsx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12128-PasteCodeInRunCsx.png -------------------------------------------------------------------------------- /HOLs/images/12129-ViewFiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12129-ViewFiles.png -------------------------------------------------------------------------------- /HOLs/images/12130-AddProjectJson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12130-AddProjectJson.png -------------------------------------------------------------------------------- /HOLs/images/12130-UploadFilesButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12130-UploadFilesButton.png -------------------------------------------------------------------------------- /HOLs/images/12132-CopyProjectJson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12132-CopyProjectJson.png -------------------------------------------------------------------------------- /HOLs/images/12134-PasteProjectJson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12134-PasteProjectJson.png -------------------------------------------------------------------------------- /HOLs/images/12140-UploadFiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12140-UploadFiles.png -------------------------------------------------------------------------------- /HOLs/images/12150-ReviewFunctionJson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12150-ReviewFunctionJson.png -------------------------------------------------------------------------------- /HOLs/images/12155-ServiceStringPlaceHolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12155-ServiceStringPlaceHolder.png -------------------------------------------------------------------------------- /HOLs/images/12160-PasteServiceConnectionString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12160-PasteServiceConnectionString.png -------------------------------------------------------------------------------- /HOLs/images/12160-ReviewProjectJson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12160-ReviewProjectJson.png -------------------------------------------------------------------------------- /HOLs/images/12170-ExpandLogs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12170-ExpandLogs.png -------------------------------------------------------------------------------- /HOLs/images/12170-RevewRunCsx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12170-RevewRunCsx.png -------------------------------------------------------------------------------- /HOLs/images/12180-CompilationSucceeded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12180-CompilationSucceeded.png -------------------------------------------------------------------------------- /HOLs/images/12190-PinchSensorWithWarmFingers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12190-PinchSensorWithWarmFingers.png -------------------------------------------------------------------------------- /HOLs/images/12200-FunctionLoggingMessage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12200-FunctionLoggingMessage.png -------------------------------------------------------------------------------- /HOLs/images/12210-TempAlertOnLcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12210-TempAlertOnLcd.png -------------------------------------------------------------------------------- /HOLs/images/12230-FunctionAppSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12230-FunctionAppSettings.png -------------------------------------------------------------------------------- /HOLs/images/12238-OpenAppSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12238-OpenAppSettings.png -------------------------------------------------------------------------------- /HOLs/images/12240-AlwaysOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/12240-AlwaysOn.png -------------------------------------------------------------------------------- /HOLs/images/13010-TemperatureChartReportInDesktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13010-TemperatureChartReportInDesktop.png -------------------------------------------------------------------------------- /HOLs/images/13020-NewPowerBiEmbeddedCollection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13020-NewPowerBiEmbeddedCollection.png -------------------------------------------------------------------------------- /HOLs/images/13030-PowerBiCollectionProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13030-PowerBiCollectionProperties.png -------------------------------------------------------------------------------- /HOLs/images/13040-CollectionAccessKeys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13040-CollectionAccessKeys.png -------------------------------------------------------------------------------- /HOLs/images/13050-AccessKey1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13050-AccessKey1.png -------------------------------------------------------------------------------- /HOLs/images/13060-DocumentCollectionNameAndKey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13060-DocumentCollectionNameAndKey.png -------------------------------------------------------------------------------- /HOLs/images/13070-WorkspaceIdDocumented.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13070-WorkspaceIdDocumented.png -------------------------------------------------------------------------------- /HOLs/images/13073-DocumentReportAndDataset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13073-DocumentReportAndDataset.png -------------------------------------------------------------------------------- /HOLs/images/13075-DocumentConnectionString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13075-DocumentConnectionString.png -------------------------------------------------------------------------------- /HOLs/images/13080-PowerBIConfigValues.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13080-PowerBIConfigValues.png -------------------------------------------------------------------------------- /HOLs/images/13085-PowerBIConfigCompleted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13085-PowerBIConfigCompleted.png -------------------------------------------------------------------------------- /HOLs/images/13090-CommentedOutDiv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13090-CommentedOutDiv.png -------------------------------------------------------------------------------- /HOLs/images/13095-CommentedOutImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13095-CommentedOutImg.png -------------------------------------------------------------------------------- /HOLs/images/13100-ImgCommentedOut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13100-ImgCommentedOut.png -------------------------------------------------------------------------------- /HOLs/images/13110-EmbedReportCallUncommented.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13110-EmbedReportCallUncommented.png -------------------------------------------------------------------------------- /HOLs/images/13120-CommitChanges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13120-CommitChanges.png -------------------------------------------------------------------------------- /HOLs/images/13130-SyncWithAzure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13130-SyncWithAzure.png -------------------------------------------------------------------------------- /HOLs/images/13140-VerifyTheDeploymentSucceeded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13140-VerifyTheDeploymentSucceeded.png -------------------------------------------------------------------------------- /HOLs/images/13150-EmbeddedReportVisibleInAzure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/13150-EmbeddedReportVisibleInAzure.png -------------------------------------------------------------------------------- /HOLs/images/14010-ResourceGroupInformation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/14010-ResourceGroupInformation.png -------------------------------------------------------------------------------- /HOLs/images/14020-DeleteResourceGroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/14020-DeleteResourceGroup.png -------------------------------------------------------------------------------- /HOLs/images/14030-UnpinTiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/HOLs/images/14030-UnpinTiles.png -------------------------------------------------------------------------------- /HOLs/myresources.txt: -------------------------------------------------------------------------------- 1 | Use this file to keep track of the resources, ids, connection strings, access tokens, etc. for the various resources you are create throughout this lab. 2 | 3 | ======================================== 4 | Naming Convention, Region & Group 5 | ======================================== 6 | 7 | Naming convention prefix: 8 | 9 | 10 | Region (data center): 11 | 12 | 13 | Resource Group Name: 14 | 15 | 16 | ======================================== 17 | Azure IoT Hub Resources 18 | ======================================== 19 | 20 | IoT Hub Name: 21 | 22 | 23 | IoT Hub "iothubowner" SAS Policy Primary Connection String: 24 | 25 | 26 | IoT Hub "service" SAS Policy Primary Connection String: 27 | 28 | 29 | IoT Hub Device Name: 30 | 31 | 32 | IoT Hub Device Connection String: 33 | 34 | 35 | ======================================== 36 | Azure SQL Database Resources 37 | ======================================== 38 | 39 | Azure SQL Database Name: 40 | 41 | 42 | Azure SQL Server Name: 43 | 44 | 45 | Azure SQL Server Fully Qualified Domain Name (FQDN): 46 | .database.windows.net 47 | 48 | Azure SQL Server Login (sqladmin is recommeded): 49 | 50 | 51 | Azure SQL Server Qualified SQL Login: 52 | @ 53 | 54 | Azure SQL Server Password (P@ssw0rd is recommended): 55 | 56 | 57 | ======================================== 58 | Azure Event Hub Resources 59 | ======================================== 60 | 61 | Azure Event Hub Namespace Name: 62 | 63 | 64 | Azure Event Hub Namespace Fully Qualified Domain Name (FQDN): 65 | .servicebus.windows.net 66 | 67 | Root Manage Shared Access Key SAS Policy Primary Connection String: 68 | 69 | 70 | Event Hub Name: 71 | 72 | 73 | ======================================== 74 | Azure Web App Resources 75 | ======================================== 76 | 77 | App Service Plan: 78 | 79 | 80 | Web App Name: 81 | 82 | 83 | Web App URL (You can copy this from the overview page of your Azure Web App): 84 | http://.azurewebsites.net 85 | 86 | Git Clone URL (You can copy this from the overview page of your Azure Web App): 87 | 88 | 89 | Deployment Credentials: 90 | User Name: 91 | Password: 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Microsoft / Intel "Internet of Things" (IoT) Camp 2 | --- 3 | 4 | Welcome to the Microsoft / Intel IoT Camp! 5 | 6 | In this camp you'll get an opportunity to work with the latest commercial grade IoT hardware from Intel and a wide array of "Internet of Things" related services in Microsoft Azure. 7 | 8 | Check out the [slides](Slides) 9 | 10 | or 11 | 12 | Get started with the [Hands on Labs](HOLs) -------------------------------------------------------------------------------- /Slides/Microsoft Intel IoT Camp Gateway Overview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/Slides/Microsoft Intel IoT Camp Gateway Overview.pdf -------------------------------------------------------------------------------- /Slides/Microsoft Intel IoT Camp Train the Trainer.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/Slides/Microsoft Intel IoT Camp Train the Trainer.pptx -------------------------------------------------------------------------------- /Slides/MicrosoftAzureIoTOverview.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/Slides/MicrosoftAzureIoTOverview.pptx -------------------------------------------------------------------------------- /Slides/MicrosoftIntelIoTCampLabArchitecture.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/Slides/MicrosoftIntelIoTCampLabArchitecture.pptx -------------------------------------------------------------------------------- /Slides/Walk In Deck.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxcamps/MicrosoftIntelIoTCamp/21897573ff1a309124cb111b9bfe2c90e12d6e98/Slides/Walk In Deck.pptx -------------------------------------------------------------------------------- /Slides/readme.md: -------------------------------------------------------------------------------- 1 | # Get the slides! 2 | 3 | - Walk In Deck 4 | - Microsoft Azure IoT Overview 5 | - Cameron Skinner and Doug Seven presented this deck at BUILD 2016. [Watch Session B815](https://channel9.msdn.com/Events/Build/2016/B815) 6 | - Intel IoT Gateway Overview 7 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Microsoft Intel IoT Camp 7 | 8 | 9 | 10 |
11 | 16 | {{ content }} 17 |
18 | 19 | --------------------------------------------------------------------------------