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