With the Windows 10 IoT Core application now reliably uploading images to Azure Blob Storage I wanted a simple test application to email the images to me as they arrived. So I hacked up an Azure Webjob using the SendGrid extension and a BlobTrigger

After a couple of failed attempts (due to NuGet package versioning mismatches) this was the smallest, reliable enough application I could come up with. Beware BlobTriggers are not really intended for solutions requiring high throughput and/or reliability.
/* Copyright ® 2019 March devMobile Software, All Rights Reserved MIT License ... */ namespace devMobile.Azure.Storage { using System.IO; using System.Configuration; using System.Threading.Tasks; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Host; using SendGrid.Helpers.Mail; public static class ImageEmailer { [FunctionName("ImageEmailer")] public async static Task Run( [BlobTrigger("seeedrpibasehat190321/{name}")] Stream inputBlob, string name, [SendGrid(ApiKey = "")] IAsyncCollector<SendGridMessage> messageCollector, TraceWriter log) { log.Info($"C# Blob trigger function Processed blob Name:{name} Size: {inputBlob.Length} Bytes"); SendGridMessage message = new SendGridMessage(); message.AddTo(new EmailAddress(ConfigurationManager.AppSettings["EmailAddressTo"])); message.From = new EmailAddress(ConfigurationManager.AppSettings["EmailAddressFrom"]); message.SetSubject("RPI Web camera Image attached"); message.AddContent("text/plain", $"{name} {inputBlob.Length} bytes" ); await message.AddAttachmentAsync(name, inputBlob, "image/jpeg"); await messageCollector.AddAsync(message); } } }

This application highlighted a number of issues with my Windows 10 IoT Core client. They were
- Configurable minimum period between images as PIR sensor would trigger multiple times as someone moved across my office.
- Configurable Azure Blob Storage container for latest image as my BlobTrigger fired twice (for latest and timestamped images).
- Configurable Azure Blob Storage container for image history as my BlobTrigger fired twice (for latest and timestamped images).
- Include a unique device identifier (possibly MAC address) with image as I had two machines with the same device name on different networks.
- Additional Blob metadata would be useful.
- Additional logging would be useful for diagnosing problems.
I’ll look fix these issues in my next couple of posts
Pingback: Windows 10 IoT Core triggered image upload to Azure Blob storage revisited | devMobile's blog
Pingback: Windows 10 IoT Core Time-Lapse Camera Azure Storage | devMobile's blog